Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0271: Eine GUID generieren lassen

 von 

Beschreibung 

Klassen werden durch eine GUID gekennzeichnet. Das macht sie eindeutig und unverwechselbar, da eine solche Nummer laut Microsoft, kein zweites mal generiert werden kann. Nunja, letztendlich ist es auch nur eine endliche Zahl. Die Wahrscheinlichkeit einer Wiederholgung ist jedoch äußerst gering, rekrutiert sich diese Kombination doch aus Datum, Zeit, rechnerspezifischen Daten, Ländereinstellungen und einigen anderen Merkwürdigkeiten.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

RtlMoveMemory (CopyMemory), RpcStringFreeA (RpcStringFree), UuidCreate, UuidToStringA (UuidToString), lstrlenA (lstrlen)

Download:

Download des Beispielprojektes [2,29 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Textfeld "Text1"
' Steuerelement: Schaltfläche "Command1"

Option Explicit

Private Declare Function UuidCreate Lib "rpcrt4" (lpGUID _
        As GUID) As Long
        
Private Declare Function UuidToString Lib "rpcrt4" Alias _
        "UuidToStringA" (lpGUID As GUID, lpGUIDString As _
        Long) As Long

Private Declare Function lstrlen Lib "kernel32" Alias _
        "lstrlenA" (ByVal lpString As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias _
        "RtlMoveMemory" (lpDest As Any, lpSource As Any, _
        ByVal cBytes As Long)

Private Declare Function RpcStringFree Lib "rpcrt4" Alias _
        "RpcStringFreeA" (lpGUIDString As Long) As Long

Const RPC_S_OK = &H0
Const RPC_S_UUID_LOCAL_ONLY = &H720
Const RPC_S_UUID_NO_ADDRESS = &H6CB

Private Type GUID
  Data1 As Long
  Data2 As Integer
  Data3 As Integer
  Data4(7) As Byte
End Type

Private Sub Command1_Click()
  Text1.Text = CreateGUID()
End Sub

Private Function CreateGUID() As String
  Dim G As GUID, GuidByt&, l&, GuidStr$, Buffer() As Byte

    If UuidCreate(G) <> RPC_S_UUID_NO_ADDRESS Then
      If UuidToString(G, GuidByt) = RPC_S_OK Then
  
        l = lstrlen(GuidByt)
        ReDim Buffer(l - 1) As Byte

        Call CopyMemory(Buffer(0), ByVal GuidByt, l)
        Call RpcStringFree(GuidByt)
        GuidStr = StrConv(Buffer, vbUnicode)
        CreateGUID = UCase$(GuidStr)
      End If
    End If
End Function
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von alen am 16.03.2005 um 16:21

Hallo,

ich wollte fragen wie ich die API Nummer herausfinden kann, hier speziell die API-Nr für die Länderkennung. (würde gerne ein script schreiben welches beim aufruf eines Programms die Ländereinstellung von Deutsch in English ändert. Da ich dies ca. 20 x /Tag mache wäre es vorteilhaft so ein script zu haben.

Danke im voraus

gruß Alen

Kommentar von Mike am 29.04.2003 um 00:17

Mit VB6 auf WIN2000 (SP3) und NT4.0 (SP6) - funktionierte bei mir einwandfrei in der IDE sowie als EXE.

Kommentar von Mirko am 03.12.2001 um 18:31

Ich habe das ganze in eine DLL gepackt, die auch wunderbar auf meinem System funktioniert (WIN 2000). Dann habe ích diese Applikation auf einem NT 4.0 System installiert und mir das ganze system zerschossen. Jedesmal wenn ich mich angemeldet habe wurde der Explorer wieder geschlossen und verursachte einen Fehler. (Dr. Watson). Da half nur noch eine Systemreperatur.

Kommentar von Mike am 15.05.2001 um 16:54

Wo kann ich die GUID Nr. anzeigen lassen? die ich zur Remoteinstallation brauche??? Laut Microsoft am Gehäuse oder im BIOS ich finde diese nr aber nicht.... Help please.