Hallo,
unter XP habe ich es soo gemacht..obs unter Windows 7 auch so geht..weiss ich nicht genau.
Delphi-Quellcode:
...
uses setupapi;
procedure Disable_USB;
var hdev: HDEVINFO;
devinfo: TSPDevInfoData;
DriverInfoData: TSPDrvInfoDataA;
DriverInstallParams: TSPPropChangeParams;
ClassInstallParams:TSPPropChangeParams;
ClassInstallParamsSize: DWORD;
devInfoListDetail: TSPDevInfoListDetailDataA;
buffer:Array [0..1024] of char;
buffersize,dataType:DWORD;
status,problem:DWORD;
i,z:integer;
s:string;
OK:Longbool;
begin
devinfo.cbSize:= sizeof(devinfo);
hdev:= SetupDiGetClassDevs(0,0,0,DIGCF_ALLCLASSES);
if (hdev = NIL ) then
begin
Showmessage('Unable to enumerate device');
exit;
end;
i:=0;
//Devices listen
repeat
Buffer[0]:=#0;
if not (SetupDiEnumDeviceInfo(hdev,i,devinfo)) then break;
if (GetLastError() = ERROR_NO_MORE_ITEMS) then break;
if (SetupDiGetDeviceRegistryProperty(hdev,devinfo,SPDRP_DEVICEDESC,
@DataType,@Buffer[0],sizeof(Buffer),@BufferSize)) then
begin
s:=strpas(Buffer);
//suchen des speziellen Device
if pos('USB Universal Host Controller',s)>0 then
begin
devInfoListDetail.cbSize:= sizeof(devInfoListDetail);
ClassInstallParams.Classinstallheader.cbSize:= sizeof(_SP_CLASSINSTALL_HEADER);
ClassInstallParams.Classinstallheader.Installfunction:=DIF_Propertychange;
// state disable setzen
ClassInstallParams.statechange:=DICS_Disable;
ClassInstallParams.Scope:=DICS_FLAG_CONFIGSPECIFIC;
ClassInstallParams.HWProfile:=0;
if SetupDiSetClassInstallParams(HDEV,@DevInfo,@ClassInstallParams.Classinstallheader,sizeof(ClassInstallParams)) then
begin
SetupDICallClassInstaller(DIF_PropertyChange,HDEV,@devinfo);
end else z:=Getlasterror;
end;
Buffer[0]:=#0;
end;
i:=i+1;
until false;
SetupDiDestroyDeviceInfoList(hdev);
end;
brauche ich für das setupati.dcu noch komponenten für delphi? Wenn ja wo sind die zu kriegen?? Ich habe Delphi 7 Prof. mit tms,simon und tnt komponenten. Denn er sagt mir beim kompilieren: Datei nicht gefunden : setupati.dcu.
Die Prozedur ruf ich dann wie auf?
DISABLE_USB; ? oder muss ich erst noch Parameter zum übergeben angeben bei der Deklaration und beim Aufruf?
....
var usbstatus: boolean;
procedure TForm1.Button1Click(Sender: TObject);
begin
Disable_USB(true);
end;
...
procedure Disable_USB(var usbstatus: boolean);
var
hdev: HDEVINFO;
devinfo: TSPDevInfoData;
DriverInfoData: TSPDrvInfoDataA;
DriverInstallParams: TSPPropChangeParams;
ClassInstallParams:TSPPropChangeParams;
ClassInstallParamsSize: DWORD;
devInfoListDetail: TSPDevInfoListDetailDataA;
buffer:Array [0..1024] of char;
buffersize,dataType
WORD;
status,problem
WORD;
i,z:integer;
s:string;
OK:Longbool;
begin
devinfo.cbSize:= sizeof(devinfo);
hdev:= SetupDiGetClassDevs(0,0,0,DIGCF_ALLCLASSES);
if (hdev = NIL ) then
begin
.....
oder liegt das gerade nur an der setupati.dcu?!?
danke für die Tipps!!