Ich lese den String jetzt nicht über die dazugehörige EXEDatei aus sondern aus der Registry. Es ist zwar mehr Code aber es geht schneller:
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" ( _
ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _
"RegQueryValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal _
lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias _
"RegSetValueExA" (ByVal HKEY As Long, ByVal lpValueName As String, ByVal _
Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As _
Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal HKEY As Long) As _
Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" ( _
ByVal HKEY As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Enum HKEY
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_LOCAL_MACHINE = &H80000002
HKEY_USERS = &H80000002
HKEY_CURRENT_CONFIG = &H80000002
End Enum
Public Type FileIconString
IconsPath As String
IconIndex As Long
End Type
Private Const REG_SZ = 1
Private Const REG_EXPAND_SZ = 2
Private Const REG_BINARY = 3
Public Function fStringSpeichern(H_KEY As HKEY, sPath As String, sValue As _
String, iData As String)
Dim vRet As Variant
RegCreateKey H_KEY, sPath, vRet
RegSetValueEx vRet, sValue, 0, REG_SZ, ByVal iData, Len(iData)
RegCloseKey vRet
End Function
Public Function fWertLesen(H_KEY As HKEY, sPath As String, sValue As String)
Dim vRet As Variant
RegOpenKey H_KEY, sPath, vRet
fWertLesen = fRegAbfrageWert(vRet, sValue)
RegCloseKey vRet
End Function
Private Function fRegAbfrageWert(ByVal H_KEY As Long, ByVal sValueName As _
String) As String
Dim sBuffer As String
Dim lRes As Long
Dim lTypeValue As Long
Dim lBufferSizeData As Long
Dim iData As Integer
lRes = RegQueryValueEx(H_KEY, sValueName, 0, _
lTypeValue, ByVal 0, lBufferSizeData)
If lRes = 0 Then
If lTypeValue = REG_SZ Or 2 Then
sBuffer = String(lBufferSizeData, Chr$(0))
lRes = RegQueryValueEx(H_KEY, sValueName, 0, _
0, ByVal sBuffer, lBufferSizeData)
If lRes = 0 Then
fRegAbfrageWert = Left$(sBuffer, _
InStr(1, sBuffer, Chr$(0)) - 1)
End If
ElseIf lTypeValue = REG_BINARY Then
lRes = RegQueryValueEx(H_KEY, sValueName, 0, _
0, iData, lBufferSizeData)
If lRes = 0 Then
fRegAbfrageWert = iData
End If
End If
End If
End Function Das waren jetzt die funktionen zum lesen aus der Registry!
Jetzt kommt der eigentliche Code er gibt einen String zurück der die Datei mit dem Icon beinhaltet und den Indexwert des Icons!
Dim Zwichenergebnis as string
Zwichenergebnis=fWertLesen(HKEY_CLASSES_ROOT, ".txt", "")
Zwichenergebnis = fWertLesen(HKEY_CLASSES_ROOT, Zwichenergebnis & _
"\DefaultIcon", "") Es geht wesentlich schneller aber irgendwie habe ich noch probleme beim Extrahieren der Icons,Das dauert mir auch zu lange. Hat da jemand eine bessere oder schnellere Lösung? |