Seite zurück / previous page
links
Seite vor / next page
rechts
 
Kapitel zurück / previous Chapter
zurück
Kapitel vor / next Chapter
vor
 
Seitenanfang/TopOfPage
oben
Seitenende/EndOfPage
unten
DD380600.HTM
DD-Software.UDFGUID
Add this page to your favorites
Save this document

UDFGUID


UDFGUID.WBT   Version 1.03  20031104

The following WinBatch script provides user defined functions
to create and manipulate a Global Unique Identifier (GUID) (UUID) (CLSID).

Example for reading CLSIDs from Windows Registry is included.


If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com


;==========================================================================================================================================
; udflib.GUID.WBT  v.1.03  20031104                                                                                  Detlev Dalitz.20020625
;==========================================================================================================================================
; WinBatch User Defined Functions to create
; Globally Unique Identifier (GUID) (UUID) (CLSID)
;
; - as Binary Buffer,      e.g  Handle to a 16-byte-sized binary buffer.
;
; - as formatted String,   e.g. {95AFCBA7-8822-11D6-9280-0000B4704984}
;
; - as Array[16] of Byte,  e.g. 160,203,175,149,34,136,214,17,146,128,0,0,180,112,73,132
; - as Array[4]  of Long,  e.g. -1783641181,299272226,32914,-2075561804
;                          Maybe useful for database storage purposes.
;
; If someone needs unique identifiers for whatever purposes however,
; Microsoft supports some routines to create and handle unique numbers.
; Developers typically assign a Universal Unique Identifier
; (UUID, interchangeable with the term GUID, or Globally Unique Identifier)
; for example to each OLE interface.
;
; Use this function when you need an absolutely unique number
; that you will use as a persistent identifier in a distributed environment,
; for example unique naming of mountable drives.
;
; To a very high degree of certainty, this function returns a unique value –
; no other invocation, on the same or any other system (networked or not),
; should return the same value.
;
; A UUID is a string that contains a set of hexadecimal digits.
; The textual representation of a UUID is a string consisting of 8 hexadecimal digits
; followed by a hyphen,
; followed by three hyphen-separated groups of 4 hexadecimal digits,
; followed by a hyphen,
; followed by 12 hexadecimal digits.
;
; Example: {F9043C85-F6F2-101A-A3C9-08002B2F49FB}
;
; The 128-bit-number range is so large that reaching the end of this area seems
; to be impossible in the next few years ...
; ... follow the lyrics of Kraig Brockschmidt in his book "Inside OLE", Microsoft Press.
;
; Detlev Dalitz.20020625.20020911.20030108.20030119.20031104.
;==========================================================================================================================================


;==========================================================================================================================================
; udfGUIDCreateBB ()                                                                                                  ; 2002:09:11:18:51:52
; udfGUIDCreateStr ()                                                                                                 ; 2002:09:11:18:51:52
; udfGUIDCreateList ()                                                                                                ; 2002:09:11:18:51:52
; udfGUIDCreateByteArray ()                                                                                           ; 2002:09:11:18:51:52
; udfGUIDCreateLongArray ()                                                                                           ; 2002:09:11:18:51:52
; udfGUIDFromString (sGUID)                                                                                           ; 2002:09:11:18:51:52
; udfGUIDFromByteArray (GUIDByteArray)                                                                                ; 2002:09:11:18:51:52
; udfGUIDFromLongArray (GUIDLongArray)                                                                                ; 2002:09:11:18:51:52
;------------------------------------------------------------------------------------------------------------------------------------------
; udfProgIDFromCLSID (hBBCLSID)                                                                                       ; 2002:09:11:18:51:52
; udfIsOle1Class (hBBCLSID)                                                                                           ; 2002:09:11:18:51:52
; udfGetClassFromFile (sFilename)                                                                                     ; 2002:09:11:18:51:52
; udfClassServerFromCLSIDStr (sCLSID)                                                                                 ; 2002:09:11:18:51:52
; udfIsActiveXFromCLSIDStr (sCLSID)                                                                                   ; 2002:09:11:18:51:52
; udfVersionFromCLSIDStr (sCLSID)                                                                                     ; 2002:09:11:18:51:52
; udfProgIDFromCLSIDStr (sCLSID)                                                                                      ; 2002:09:11:18:51:52
; udfIndProgIDFromCLSIDStr (sCLSID)                                                                                   ; 2002:09:11:18:51:52
;------------------------------------------------------------------------------------------------------------------------------------------
; udfShortenPath (sPath, iWidth, iMode)                                                                               ; 2002:09:11:18:51:52
; udfBinarySortTextFile (sFilenameIn, sFilenameOut, iDirection, iKeyColumn, iKeySize)                                 ; 2002:09:11:18:51:52
; udfBrowseText (sFilename)                                                                                           ; 2002:09:11:18:51:52
;==========================================================================================================================================


;==========================================================================================================================================
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGUIDCreateBB ()
hBBGUID = BinaryAlloc(16)
BinaryEodSet(hBBGUID,16)
hDLL = StrCat(DirWindows(1),"OLE32.DLL")
DllCall(hDLL,long:"CoCreateGuid",lpbinary:hBBGUID)
Return (hBBGUID)
;..........................................................................................................................................
; Returns a handle to a binary buffer which contains the 128-bit-GUID in a 16-byte allocated buffer.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGUIDCreateStr ()
sGUID = ""
hDLL = DllLoad(StrCat(DirWindows(1),"OLE32.DLL"))
hBBGUID = BinaryAlloc(16)
; Internal unicode format requires double sized buffer (2*39 byte) including terminating null characters.
iSizeUni = 78
hBBGUIDUni = BinaryAlloc(iSizeUni)
DllCall(hDLL,long:"CoCreateGuid",lpbinary:hBBGUID)
iLenGUID = DllCall(hDLL,long:"StringFromGUID2",lpbinary:hBBGUID,lpbinary:hBBGUIDUni,long:iSizeUni)
If iLenGUID
   ; Convert from Unicode to Ansi.
   BinaryEodSet(hBBGUIDUni,iSizeUni)
   BinaryConvert(hBBGUIDUni,3,0,0,0)
   sGUID = BinaryPeekStr(hBBGUIDUni,0,iLenGUID)
EndIf
BinaryFree(hBBGUID)
BinaryFree(hBBGUIDUni)
DllFree(hDLL)
Return (sGUID)
;..........................................................................................................................................
; Returns a created GUID in a human readable formatted string of hexadecimal numbers enclosed in curly brackets.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGUIDCreateList (iCount, sRemoveChars)
sList = ""
For i=1 To iCount
   sList = ItemInsert(udfGUIDCreateStr(),-1,sList,@TAB)
Next
sRemoveChars = StrClean(sRemoveChars,"{-}","",@TRUE,2)
sList = StrClean(sList,sRemoveChars,"",@TRUE,1)
Return (sList)
;..........................................................................................................................................
; This Function "udfCreateGUID" returns as many as iCount global unique GUID identifiers.
;
; iCount = n  ............. Create a list of GUIDs.
; sRemoveChars = ""     ... Standard GUID format with special characters inserted for better human readability..
; sRemoveChars = "{-}"  ... Set of Characters to remove from GUID string.
;
; Detlev Dalitz.20030119
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGUIDCreateByteArray ()
hBBGUID = udfGUIDCreateBB ()
GUIDByteArray = ArrDimension(16)
For i=0 To 15
   GUIDByteArray[i] = BinaryPeek(hBBGUID,i)
Next
BinaryFree(hBBGUID)
Return (GUIDByteArray)
;..........................................................................................................................................
; Returns a created GUID in an array where each element carries one byte of the 16-byte GUID.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGUIDCreateLongArray ()
hBBGUID = udfGUIDCreateBB ()
GUIDLongArray = ArrDimension(4)
For i=0 To 3
   GUIDLongArray[i] = BinaryPeek4(hBBGUID,i*4)
Next
BinaryFree(hBBGUID)
Return (GUIDLongArray)
;..........................................................................................................................................
; Returns a created GUID in an array where each element carries 4 byte of the 16-byte GUID as a long number.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGUIDFromString (sGUID)
iGUIDMax = 39 ; Including trailing zero byte.
sGUID = StrSub(sGUID,1,iGUIDMax) ; For sure.
hBBGUIDUni = BinaryAlloc(2*iGUIDMax)
BinaryPokeStr(hBBGUIDUni,0,sGUID)
BinaryConvert(hBBGUIDUni,0,3,0,0) ; From Ansi to Unicode.
hBBGUID = BinaryAlloc(16)
BinaryEodSet(hBBGUID,16)
hDLL = StrCat(DirWindows(1),"OLE32.DLL")
iResult = DllCall(hDLL,long:"CLSIDFromString",lpbinary:hBBGUIDUni,lpbinary:hBBGUID)
; Caution, no error checking.
BinaryFree(hBBGUIDUni)
Return (hBBGUID)
;..........................................................................................................................................
; Returns a handle to a binary buffer which contains a GUID after evaluating a given input GUID string.
; This udf is the inverse function to udfGUIDCreateStr ().
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGUIDFromByteArray (GUIDByteArray)
hBBGUID = BinaryAlloc(16)
For i=0 To 15
   BinaryPoke(hBBGUID,i,GUIDByteArray[i])
Next
Return (hBBGUID)
;..........................................................................................................................................
; Returns a handle to a binary buffer which contains a GUID after evaluating a given input GUIDByteArray.
; This udf is the inverse function to udfGUIDCreateByteArray ().
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGUIDFromLongArray (GUIDLongArray)
hBBGUID = BinaryAlloc(16)
For i=0 To 3
   BinaryPoke4(hBBGUID,i*4,GUIDLongArray[i])
Next
Return (hBBGUID)
;..........................................................................................................................................
; Returns a handle to a binary buffer which contains a GUID after evaluating a given input GUIDLongArray.
; This udf is the inverse function to udfGUIDCreateLongArray ().
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfProgIDFromCLSID (hBBCLSID)

hDLLOle32 = StrCat(DirWindows(1),"OLE32.DLL")
hDLLKernel32 = StrCat(DirWindows(1),"KERNEL32.DLL")

sProgID = ""

hBBAddress = BinaryAlloc(4)
iResult = DllCall(hDLLOle32,long:"ProgIDFromCLSID",lpbinary:hBBCLSID,lpbinary:hBBAddress)

If (iResult==0)
   pBBAddress = BinaryPeek4(hBBAddress,0)
   chcount = DllCall(hDLLKernel32,long:"lstrlenW",long:pBBAddress) ; lstrlenW counts chars without termination null.

   bbsize = (chcount + 1) * 2 ; Unicode doublebyte chars including terminating null character.
   hBBProgID = BinaryAlloc(bbsize)
   BinaryEodSet(hBBProgID,bbsize)

   iResult = DllCall(hDLLKernel32,long:"lstrcpyW",lpbinary:hBBProgId,long:pBBAddress)
   iResult = DllCall(hDLLOle32,long:"CoTaskMemFree",long:pBBAddress)

   BinaryConvert(hBBProgID,3,0,0,0) ; From Unicode to Ansi.
   sProgID = BinaryPeekStr(hBBProgID,0,BinaryEodGet(hBBProgID))

   BinaryFree(hBBProgID)
EndIf

BinaryFree(hBBAddress)

Return (sProgID)
;..........................................................................................................................................
; Returns the corresponding ProgID for a given CLSID held in a binary buffer.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfIsOle1Class (hBBCLSID)
hDLLOle32 = StrCat(DirWindows(1),"OLE32.DLL")
iResult = DllCall(hDLLOle32,long:"CoIsOle1Class",lpbinary:hBBCLSID)
Return (iResult)
;..........................................................................................................................................
; Determines if a given CLSID represents an OLE 1 object.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfGetClassFromFile (sFilename)
If !FileExist(sFilename) Then Return (0)

iMAX_PATH = 260
hBBFile = BinaryAlloc(2*iMAX_PATH) ; Unicode requires double space.
BinaryPokeStr(hBBFile,0,sFilename)
BinaryConvert(hBBFile,0,3,0,0)     ; From Ansi to Unicode.
BinaryEodSet(hBBFile,2*iMAX_PATH)

hBBGUID = BinaryAlloc(16)
BinaryEodSet(hBBGUID,16)

hDLLOle32 = StrCat(DirWindows(1),"OLE32.DLL")
iResult = DllCall(hDLLOle32,long:"GetClassFile",lpbinary:hBBFile,lpbinary:hBBGUID)
; Caution, no error checking.
Return (hBBGUID)
;..........................................................................................................................................
; Returns a CLSID (GUID) after evalutating a given Filename.
; e.g. hBBCLSID = udfGetClassFromFile ("d:\temp\report.pdf")
; e.g. hBBCLSID = udfGetClassFromFile (StrCat(DirWindows(0),"fmxyz.wri"))
; e.g. hBBCLSID = udfGetClassFromFile (StrCat(DirWindows(0),"readme.htm"))
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfClassServerFromCLSIDStr (sCLSID)
hKey = RegOpenKeyEx(@REGCLASSES,StrCat("CLSID","\",sCLSID),1,"","") ; Read access.
ClassServer1 = "InProcServer32"
ClassServer2 = "LocalServer32"
ClassServer3 = "InProcServer"
ClassServer4 = "LocalServer"
sClassServer = ""
For i=1 To 4
   If RegExistKey(hKey,ClassServer%i%)
      sClassServer = RegQueryStr(hKey,ClassServer%i%)
      If (sClassServer > "") Then Break
   EndIf
Next
RegCloseKey(hKey)
Return (sClassServer)
;..........................................................................................................................................
; LocalServer[32]:
; Indicates that the ActiveX component is an .exe file and runs in a separate process from the ActiveX client.
; The optional 32 specifies a server intended for use on 32-bit Windows systems.
;
; InProcServer[32]
; Indicates that the ActiveX component is a DLL and runs in the same process space as the ActiveX client.
; The optional 32 specifies a server intended for use on 32-bit Windows systems.
;
; The filepath you register should give the full path and name.
; Applications should not rely on the MS-DOS PATH variable to find the object.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfIsActiveXFromCLSIDStr (sCLSID)
iIsActiveX = @FALSE
sSubKey = StrCat("CLSID","\",sCLSID)
If RegExistKey(@REGCLASSES,sSubKey)
   hKey = RegOpenKeyEx(@REGCLASSES,sSubKey,1,"","") ; Read access.
   iIsActiveX = RegExistKey(hKey,"Programmable")
EndIf
Return (iIsActiveX)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfVersionFromCLSIDStr (sCLSID)
sVersion = ""
sSubKey = StrCat("CLSID","\",sCLSID)
If RegExistKey(@REGCLASSES,sSubKey)
   hKey = RegOpenKeyEx(@REGCLASSES,sSubKey,1,"","") ; Read access.
   If RegExistKey(hKey,"Version") Then sVersion = RegQueryStr(hKey,"Version")
   RegCloseKey(hKey)
EndIf
Return (sVersion)
;..........................................................................................................................................
; Returns the corresponding Version string for a given string representation of a CLSID.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfProgIDFromCLSIDStr (sCLSID)
sProgID = ""
sSubKey = StrCat("CLSID","\",sCLSID)
If RegExistKey(@REGCLASSES,sSubKey)
   hKey = RegOpenKeyEx(@REGCLASSES,sSubKey,1,"","") ; Read access.
   If RegExistKey(hKey,"ProgID") Then sProgID = RegQueryStr(hKey,"ProgID")
   RegCloseKey(hKey)
EndIf
Return (sProgID)
;..........................................................................................................................................
; Returns the corresponding ProgID for a given string representation of a CLSID.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfIndProgIDFromCLSIDStr (sCLSID)
sIndProgID = ""
sSubKey = StrCat("CLSID","\",sCLSID)
If RegExistKey(@REGCLASSES,sSubKey)
   hKey = RegOpenKeyEx(@REGCLASSES,sSubKey,1,"","") ; read access.
   If RegExistKey(hKey,"VersionIndependentProgID") Then sIndProgID = RegQueryStr(hKey,"VersionIndependentProgID")
   RegCloseKey(hKey)
EndIf
Return (sIndProgID)
;..........................................................................................................................................
; Returns the corresponding Version Independent ProgID for a given string representation of a CLSID.
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfShortenPath (sPath, iWidth, iMode)
iStrLen = StrLen(sPath)
If (iStrLen <= iWidth) Then Return sPath
p1 = StrScan(sPath,"\",4,@FWDSCAN)
m1 = p1
w = iWidth - p1 - 3
p2 = iStrLen
m2 = p2
c = 0
While 1
   p2 = StrScan(sPath,"\",p2-1,@BACKSCAN)
   If ((iStrLen-p2) >= w) Then Break
   c = c + 1
   m2 = p2
EndWhile
If (c > 0)
   p2 = m2
   sTilde = ""
Else
   p1 = p1 - 1 - iStrLen + p2 + w - 1
   sTilde = "~"
EndIf
If (p1 < 3)
   p1 = 0
   w = 3
Else
   w = iWidth - p1 - iStrLen + p2 - 1 - 1
EndIf
If !!iMode
   If (w > 3)
      c = w - 3
      w = 3
      While 1
         p1 = p1 + 1
         c = c - 1
         If (c < 1) Then Break
         p2 = p2 - 1
         c = c - 1
         If (c < 1) Then Break
      EndWhile
   EndIf
EndIf
Return StrCat(StrSub(sPath,1,p1),sTilde,StrFill(".",w),StrSub(sPath,p2,-1))
;..........................................................................................................................................
; iMode = 0
; Returns a shortened pathname inserted with repeated points (no ellipsis).
; Example: ("c:\program files\navigator\programs\bookmark.htm", 45) ==> "c:\program files\......\programs\bookmark.htm"
;
; iMode = 1
; Returns a shortened pathname inserted with three points (ellipsis).
; Example: ("c:\program files\navigator\programs\bookmark.htm", 45) ==> "c:\program files\na...r\programs\bookmark.htm"
;
; Detlev Dalitz.20020222.20020524.20020627.20020911
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfBinarySortTextFile (sFilenameIn, sFilenameOut, iDirection, iKeyColumn, iKeySize)

iFileSize = FileSize(sFilenameIn)
If !iFileSize Then Return (@FALSE)
If (iDirection <> @ASCENDING) Then If (iDirection <> @DESCENDING) Then Return (@FALSE)
If (sFilenameOut == "") Then sFilenameOut = sFilenameIn ; Caution: Input file will be overwritten!

IntControl(65,4096*256,0,0,0) ; Enlarge fileread buffer for speedy access.

; Get maximum line size for sort record.
iLineSize = 0
iLineCount = 0
hFR = FileOpen(sFilenameIn,"READ")
While 1
   sLine = FileRead(hFR)
   If (sLine == "*EOF*") Then Break
   iLineSize = Max(iLineSize,StrLen(sLine))
   iLineCount = iLineCount+1
EndWhile
FileClose(hFR)

; Fill the binary buffer.
iLineSize = iLineSize+2 ; Include trailing @CRLF.
hBB = BinaryAlloc(iLineCount*iLineSize)
hFR = FileOpen(sFilenameIn,"READ")
iOffset = 0
While 1
   sLine = FileRead(hFR)
   If (sLine == "*EOF*") Then Break
   BinaryPokeStr(hBB,iOffset,sLine)
   iOffset = iOffset + iLineSize
   BinaryPokeStr(hBB,iOffset-2,@CRLF)
EndWhile
FileClose(hFR)

; Sort the binary buffer.
iKeyColumn = Max(1,iKeyColumn)
iKeyOffset = iKeyColumn-1
iKeySize   = Max(0,iKeySize)
If !iKeySize Then iKeySize = iLineSize-iKeyOffset
BinarySort(hBB,iLineSize,iKeyOffset,iKeySize,@STRING|iDirection)

; Delete the binary zeroes.
BinaryReplace(hBB,"","",@FALSE)

; Write the binary buffer to diskfile.
BinaryWrite(hBB,sFilenameOut)
BinaryFree(hBB)

Return (@TRUE)
;..........................................................................................................................................
; This function "udfBinarySortTextFile" sorts an input textfile
; in ascending or descending order by using WIL's Binary Functions.
; If output filename is omitted then input file will be overwritten without permission.
; parameter:
; sFilenameIn .............. The input textfile.
; sFilenameOut ............. The output textfile.
; iDirection=@ASCENDING .... Sort order alphabetic ascending.
; iDirection=@DESCENDING ... Sort order alphabetic descending.
; iKeyColumn ............... Start column of the sortkey, one based (first char=first column).
; iKeySize ................. Length of the sortkey.
;
; Detlev Dalitz.20010709.20020708
;..........................................................................................................................................
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------


;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfBrowseText (sFilename)
; Use WIL Browser to look into the text files.
If Run(StrCat(DirHome(),"browser.exe"),sFilename)
   sBrowser = WinGetactive()
   SendKeysTo(sBrowser,"^t")
   TimeDelay(1)
EndIf
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;==========================================================================================================================================



; --- test ---

IntControl(28,1,0,0,0) ; Selects system font used in list boxes. 1=Fixed pitch font.

sGUIDList = udfGUIDCreateList(10,"")
AskItemlist('Demo  udfGUIDCreateList (iCount, "" )',sGUIDList,@TAB,@UNSORTED,@SINGLE)   ; Including special delimiters.


sGUIDList = udfGUIDCreateList(10,"{}")
sGUIDList = StrLower(sGUIDList)
AskItemlist('Demo  udfGUIDCreateList (iCount, "{}" )',sGUIDList,@TAB,@UNSORTED,@SINGLE) ; No curly brackets, but hyphens.

sGUIDList = udfGUIDCreateList(10,"{-}")
sGUIDList = StrLower(sGUIDList)
AskItemlist('Demo  udfGUIDCreateList (iCount, "{}" )',sGUIDList,@TAB,@UNSORTED,@SINGLE) ; No brackets, no hyphens.

:CANCEL



; --- test ---

Exclusive(@ON)

iVerbose = (@YES==AskYesNo("CLSID Info","Display CLSID Info to screen?"))

BoxOpen("CLSID Info","")
If iVerbose Then BoxText("Collecting CLSIDs from Registry ...")
   Else BoxText("Running ... be patient ...")

hKey = RegOpenKeyEx(@REGCLASSES,"CLSID",1,"","") ; Read access. ; Key and SubKey should exist.
CLSIDList = RegQueryKeys(hKey)
RegCloseKey(hKey)
iCount = ItemCount(CLSIDList,@TAB)
iCountLen = Max(3,StrLen(iCount))

; Create report file.
sFilenameTemp = FileCreateTemp("TMP")
FileDelete(sFilenameTemp)
sFilePath = FilePath(sFilenameTemp)
sFilenameTemp1 = StrCat(sFilePath,"CLSID1.TXT")
sFilenameTemp2 = StrCat(sFilePath,"CLSID2.TXT")
hFW = FileOpen(sFilenameTemp1,"WRITE")


; Collect data from Registry.
For i=1 To iCount
   sCLSID = ItemExtract(i,CLSIDList,@TAB)

   hBBCLSID = udfGUIDFromString(sCLSID)
   sIsOle1  = ItemExtract(1+udfIsOle1Class(hBBCLSID),"    ,OLE1",",")
   ; sProgID = udfProgIDFromCLSID (hBBCLSID) ; We can retrieve the ProgId from Registry too, see below.
   BinaryFree(hBBCLSID)

   sIsActiveX = ItemExtract(1+udfIsActiveXFromCLSIDStr(sCLSID)," ,X",",")

   sProgID = udfProgIDFromCLSIDStr (sCLSID)

   If (sProgID > "")
      sIndProgId = udfIndProgIDFromCLSIDStr(sCLSID)
      sClassServer = udfClassServerFromCLSIDStr(sCLSID)
      sVersion = udfVersionFromCLSIDStr(sCLSID)
      If (sClassServer > "")
         sFName = ItemExtract(1,sClassServer,"/") ; Discard additionally parameters.
         sFName = FileLocate (sFName)
         iLastErrorMode = ErrorMode(@OFF) ; Trap file not found error message.
         LastError()
         sFVersion = FileVerInfo(sFName,"","FileVersion")
         If LastError() Then sFVersion = "N/A"
         LastError()
         sFTime = FileTimeGet(sFName)
         If LastError() Then sFTime = "N/A"
         LastError()
         sFSize = FileSizeEx(sFName)
         If LastError() Then sFSize = "N/A"
         ErrorMode(iLastErrorMode)
      EndIf
   Else
      sIndProgId = ""
      sClassServer = ""
      sVersion = ""
      sFVersion  = ""
      sFTime = ""
      sFSize = ""
      sFName = ""
   EndIf

   ; Build and Display Screen Message.
   sMsgText = ""
   sMsgText = StrCat(sMsgText,iCount,"/",StrFixLeft(i,"0",iCountLen),@CRLF)
   sMsgText = StrCat(sMsgText,"CLSID"    ,@TAB,sCLSID      ,@CRLF)
   sMsgText = StrCat(sMsgText,"ProgID"   ,@TAB,sProgID     ,@CRLF)
   sMsgText = StrCat(sMsgText,"IndID"    ,@TAB,sIndProgID  ,@CRLF)
   sMsgText = StrCat(sMsgText,"Version"  ,@TAB,sVersion    ,@CRLF)
   sMsgText = StrCat(sMsgText,"Server"   ,@TAB,sClassServer,@CRLF)
   sMsgText = StrCat(sMsgText,"IsOLE1"   ,@TAB,sIsOle1     ,@CRLF)
   sMsgText = StrCat(sMsgText,"IsActX"   ,@TAB,sIsActiveX  ,@CRLF)
   sMsgText = StrCat(sMsgText,"FVersion" ,@TAB,sFVersion   ,@CRLF)
   sMsgText = StrCat(sMsgText,"FTime"    ,@TAB,sFTime      ,@CRLF)
   sMsgText = StrCat(sMsgText,"FSize"    ,@TAB,sFSize      ,@CRLF)
   sMsgText = StrCat(sMsgText,"FName"    ,@TAB,sFName      ,@CRLF)
   If iVerbose Then BoxText(sMsgText)

   ; Write report.
   If (sProgID > "")
      sLogText = ""
      sLogText = StrCat(sLogText,StrFixLeft(i,"0",iCountLen)," ")
      sLogText = StrCat(sLogText,StrFix(sCLSID     ,"" ,38) ," ")
      sLogText = StrCat(sLogText,StrFix(sIsOle1    ,"" ,4)  ," ")
      sLogText = StrCat(sLogText,StrFix(sIsActiveX ,"" ,1)  ," ")
      sLogText = StrCat(sLogText,StrFix(sProgID    ,"" ,64) ," ")
      sLogText = StrCat(sLogText,StrFix(sIndProgID ,"" ,64) ," ")
      sLogText = StrCat(sLogText,StrFix(sVersion   ,"" ,16) ," ")
      sLogText = StrCat(sLogText,StrFix(udfShortenPath(sClassServer,48,1),"",48)," ")
      sLogText = StrCat(sLogText,StrFix(sFVersion  ,"" ,32) ," ")
      sLogText = StrCat(sLogText,StrFix(sFTime     ,"" ,20) ," ")
      sLogText = StrCat(sLogText,StrFixLeft(sFSize ,"" ,10) ," ")
      sLogText = StrCat(sLogText,StrFix(sFName     ,"" ,262)," ")
      FileWrite(hFW,sLogText)
   EndIf
Next

FileWrite(hFW,"")
FileClose(hFW)

; Sort report files.
If (FileSize(sFilenameTemp1) > 0)
   If iVerbose Then BoxText(StrCat("Sorting ",iCount," CLSIDs Pass 1 ..."))
   udfBinarySortTextFile(sFilenameTemp1,sFilenameTemp1,@ASCENDING,iCountLen+1,38)

   If iVerbose Then BoxText(StrCat("Sorting ",iCount," CLSIDs Pass 2 ..."))
   udfBinarySortTextFile(sFilenameTemp1,sFilenameTemp2,@ASCENDING,44,0)
EndIf

BoxText("Ready.")
BoxShut()

udfBrowseText(sFilenameTemp1)
udfBrowseText(sFilenameTemp2)

:CANCEL
Exclusive(@OFF)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*



 
Seite zurück / previous page
links
Seite vor / next page
rechts
 
Kapitel zurück / previous Chapter
zurück
Kapitel vor / next Chapter
vor
 
Seitenanfang/TopOfPage
oben
Seitenende/EndOfPage
unten
DD380600.HTM
DD-Software.UDFGUID
Add this page to your favorites
Save this document