CD-Rom-Laufwerke produktnamen auslesen ?
-
Mich würde auch interessieren, ob es eine möglichkeit gibt, das ganze unter Windwos 98 zu machen ????
-
Ein sehr interessanter Thread !
Auch ich würde das benötigen, allerdings habe ich auch bisher erfolglos unter Windows ME eine Lösung gesucht.@MysticEmpires
Hochachtung ! Ich hoffe du schaffst das !
-
Unter win 98 sind alle Laufwerke Festplatten und CDRom unter HLM/enum/SCSI
Jedes Laufwerk hat einen eigenen Schlüssel
bei mir z.B. für CDROM "LG______CD-ROM_CRD-8482B1"
in dem gibt es einen weiteren Schlüßen mit weiteren informationenIch werde morgen mal schauen ob dazu noch weiteres herausfinde
-
Mal ganz was anderes ganz in API und ganz ohne Registry:
#include <windows.h> #include <winioctl.h> #include <setupapi.h> BOOL EnumCDROM(HWND hWndParent) { PSP_DEVICE_INTERFACE_DETAIL_DATA pspdidd; SP_DEVICE_INTERFACE_DATA spdid; SP_DEVINFO_DATA spdd; HDEVINFO hDevInfo; DWORD dwIndex, dwSize, dwType; TCHAR szMessage[1024], szProperty[256]; ZeroMemory((PVOID)&spdid, sizeof(spdid)); spdid.cbSize = sizeof(spdid); if(INVALID_HANDLE_VALUE == (hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_CDROM, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT))) { wsprintf(szMessage, TEXT("SetupDiGetClassDevs failed, Error %u"), GetLastError()); MessageBox(hWndParent, szMessage, NULL, MB_OK); return(FALSE); } for(dwIndex = 0; (SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &GUID_DEVINTERFACE_CDROM, dwIndex, &spdid)); ++dwIndex) { dwSize = 0; SetupDiGetDeviceInterfaceDetail(hDevInfo, &spdid, NULL, 0, &dwSize, NULL); if(dwSize) { if(NULL == (pspdidd = (PSP_DEVICE_INTERFACE_DETAIL_DATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize))) continue; pspdidd->cbSize = sizeof(*pspdidd); ZeroMemory((PVOID)&spdd, sizeof(spdd)); spdd.cbSize = sizeof(spdd); if(SetupDiGetDeviceInterfaceDetail(hDevInfo, &spdid, pspdidd, dwSize, &dwSize, &spdd)) { if(SetupDiGetDeviceRegistryProperty(hDevInfo, &spdd, SPDRP_FRIENDLYNAME, &dwType, (PBYTE)szProperty, sizeof(szProperty), NULL)) { if(dwType == REG_SZ) { wsprintf(szMessage, TEXT("FriendlyName: %s"), szProperty); MessageBox(hWndParent, szMessage, NULL, MB_OK | MB_ICONINFORMATION); } } } HeapFree(GetProcessHeap(), 0, (PVOID)pspdidd); } } SetupDiDestroyDeviceInfoList(hDevInfo); return(TRUE); }
Ab Windows 98/2000, nicht unter 95/NT4
-
Hey danke, das funktioniert ganz toll !!!!!
-
So was habe ich auch schon gesucht.
Es wäre geil, wenn auch der Laufwerksbuchstabe angezeigt würde !
-
Ich habe den Code von -KING- auf WIN98SE mit VC6.0 ausführen wollen, und bekomme
folgende Compiler - Fehlermeldung:error C2065: 'GUID_DEVINTERFACE_CDROM' : undeclared identifier
Ich suchte vergeblich in der MSDN nach 'GUID_DEVINTERFACE_CDROM'
-
Du solltest Dein PSDK updaten. Vorab sollte aber das hier helfen:
#include <initguid.h> DEFINE_GUID(GUID_DEVINTERFACE_CDROM, 0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
-
Hi Leute !
Habe den Code so wie angegeben versucht.
Ich bekomme jetzt folgenden Fehlererror C2664: 'SetupDiGetClassDevsA' : Konvertierung des Parameters 1 von 'const struct _GUID *' in 'struct _GUID *' nicht moeglich
-
Und nochmals: Ich sollt Euer PSDK updaten. In den alten originalen Header fehlt eben das CONST im Prototypen. Also bitte mal <setupapi.h> öffnen, nach eben dem Prototypen suchen und diesen dann in die richtige Form bringen. Wenn Du fertig bist, muß das im Header so aussehen:
WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsA( IN CONST GUID *ClassGuid, OPTIONAL IN PCSTR Enumerator, OPTIONAL IN HWND hwndParent, OPTIONAL IN DWORD Flags ); WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsW( IN CONST GUID *ClassGuid, OPTIONAL IN PCWSTR Enumerator, OPTIONAL IN HWND hwndParent, OPTIONAL IN DWORD Flags ); #ifdef UNICODE #define SetupDiGetClassDevs SetupDiGetClassDevsW #else #define SetupDiGetClassDevs SetupDiGetClassDevsA #endif