Page 1 of 1
					
				Create GUID via WinAPI
				Posted: Sat Jul 09, 2005 1:49 pm
				by javabean
				Code updated for 5.20+
Code: Select all
; Uses aXends 'COMLIB' userlib!
;
; If  'COMLIB' is not available use the following
; Uni2Ansi-Procedure ((c) aXend):
;
 Procedure.s Uni2Ansi(*Unicode)
   size.l = WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, #Null, #Null, #Null, #Null)
   ansi.s=Space(size)
   WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, @ansi, size, #Null, #Null)
   ProcedureReturn ansi
 EndProcedure
Procedure.s GUIDcreate()
  g.GUID
  If CoCreateGuid_(@g) = #S_OK
    unicodeGUID$ = Space(78)
    GUIDLen = StringFromGUID2_(g, @unicodeGUID$, Len(unicodeGUID$))
    
    CompilerIf #PB_Compiler_Unicode
      ansiGUID$ = unicodeGUID$
    CompilerElse
      ansiGUID$ = Left(Uni2Ansi(@unicodeGUID$), GUIDLen-1)
    CompilerEndIf
  EndIf
ProcedureReturn ansiGUID$
EndProcedure
Debug GUIDcreate()
 
			 
			
					
				
				Posted: Sat Jul 09, 2005 3:00 pm
				by DoubleDutch
				Whats this for?
			 
			
					
				
				Posted: Sun Jul 10, 2005 11:28 am
				by javabean
				GUID stands for Globally Unique Identifier. It's the Microsoft version of an UUID (Universally Unique Identifier). The GUID is a 128bit number given in the following format:
Code: Select all
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
e.g. {E217B7A4-66C9-4E00-A962-78A20C1B484F}
Because of the 128 bits and the way the number is generated it is not very likely to find the same number twice on earth (therefore 'Globally Unique').
Windows uses GUIDs mostly in the context of COM objects as class- or interface identifier (e.g CLSID). But GUIDs can also be used as primary keys in databases, etc.
Just a few links:
http://www.webopedia.com/TERM/G/GUID.html
http://en.wikipedia.org/wiki/UUID 
			 
			
					
				
				Posted: Sun Jul 10, 2005 11:45 am
				by DoubleDutch
				Thanks, that clears it up 
-Anthony
 
			 
			
					
				Re: Create GUID via WinAPI
				Posted: Sun Jan 26, 2020 10:59 pm
				by timwil1963
				Much thanks for this
			 
			
					
				Re: Create GUID via WinAPI
				Posted: Mon Jan 27, 2020 1:33 am
				by BarryG
				Cross-platform and only two lines of code:
Code: Select all
For n=1 To 32 : t$+Hex(Random($F)) : Next
Debug Left(t$,8)+"-"+Mid(t$,9,4)+"-"+Mid(t$,13,4)+"-"+Mid(t$,17,4)+"-"+Mid(t$,21)
As a cross-platform procedure:
Code: Select all
Procedure.s CreateGUID()
  For n=1 To 32 : t$+Hex(Random($F)) : Next
  ProcedureReturn Left(t$,8)+"-"+Mid(t$,9,4)+"-"+Mid(t$,13,4)+"-"+Mid(t$,17,4)+"-"+Mid(t$,21)
EndProcedure
Debug CreateGUID() ; 2AD0672A-55EA-CF01-1B0C-3613AB9274D7
 
			 
			
					
				Re: Create GUID via WinAPI
				Posted: Mon Jan 27, 2020 2:49 pm
				by mk-soft
				Random is not Safe...
Link for All OS: 
viewtopic.php?f=12&t=74015 
			 
			
					
				Re: Create GUID via WinAPI
				Posted: Mon Jan 27, 2020 3:14 pm
				by Kiffi
				Code: Select all
EnableExplicit
Procedure.s GetGUID()
  
  Protected *Buffer
  Protected GUID.s
  
  InitNetwork()
  
  *Buffer = ReceiveHTTPMemory("https://www.uuidgenerator.net/api/guid")
  
  If *Buffer
    GUID = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8 | #PB_ByteLength)
    FreeMemory(*Buffer)
  Else
    Debug "Failed"
  EndIf
  
  ProcedureReturn GUID
  
EndProcedure
Debug GetGUID()
 

 
			 
			
					
				Re: Create GUID via WinAPI
				Posted: Mon Jan 27, 2020 3:15 pm
				by Mijikai
				^^
Another (safe) one (x64 only!):
Code: Select all
Procedure.s CreateGUID()
  Protected ps.i
  Protected gs.s
  If OpenCryptRandom()
    For ps = 0 To 35
      gs + Hex(CryptRandom($F))
    Next
    ps = @gs
    !mov rax,[p.v_ps]
    !mov word[rax + 0x10],0x2D
    !mov word[rax + 0x1A],0x2D
    !mov word[rax + 0x24],0x2D
    !mov word[rax + 0x2E],0x2D
    CloseCryptRandom()
  EndIf
  ProcedureReturn gs 
EndProcedure