Einzelnen Beitrag anzeigen

sneumann
(Gast)

n/a Beiträge
 
#17

AW: USB-Ports deaktivieren&aktivieren in Delphi 7

  Alt 4. Okt 2011, 16:11
Zitat:
Du benutzt da scheinbar eine andere Header-Übersetzung der SetupAPI
eine andere Header-Übersetzung? hm was kann ich dagegen tun? habe ich die falsche setupapi installiert? welche ist die Richtige? Wie bekomme ich sauber die falsche deinstalliert oder ist das nicht schlimm wenn die weiterhin drauf bleibt?!

Also hier nochmal mein Code mit Fehlermeldungen:
Code:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, setupapi;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


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;
procedure TForm1.Button4Click(Sender: TObject);
begin
Disable_USB();
ShowMessage('deaktiviert');
end;

end.

Code:
FEHLERMELDUNGEN:

[Fehler] main.pas(32): Undefinierter Bezeichner: 'HDEVINFO'
[Fehler] main.pas(33): Undefinierter Bezeichner: 'TSPDevInfoData'
[Fehler] main.pas(34): Undefinierter Bezeichner: 'TSPDrvInfoDataA'
[Fehler] main.pas(35): Undefinierter Bezeichner: 'TSPPropChangeParams'
[Fehler] main.pas(38): Undefinierter Bezeichner: 'TSPDevInfoListDetailDataA'
[Fehler] main.pas(46): Operator oder Semikolon fehlt
[Fehler] main.pas(47): Undefinierter Bezeichner: 'SetupDiGetClassDevs'
[Fehler] main.pas(47): Undefinierter Bezeichner: 'DIGCF_ALLCLASSES'
[Fehler] main.pas(48): Operator ist auf diesen Operandentyp nicht anwendbar
[Fehler] main.pas(57): Undefinierter Bezeichner: 'SetupDiEnumDeviceInfo'
[Fehler] main.pas(59): Undefinierter Bezeichner: 'SetupDiGetDeviceRegistryProperty'
[Fehler] main.pas(59): Undefinierter Bezeichner: 'SPDRP_DEVICEDESC'
[Warnung] main.pas(60): Unsicherer Code '@ operator'
[Warnung] main.pas(60): Unsicherer Code '@ operator'
[Fehler] main.pas(66): Operator oder Semikolon fehlt
[Fehler] main.pas(67): Operator oder Semikolon fehlt
[Fehler] main.pas(67): Operator oder Semikolon fehlt
[Fehler] main.pas(67): Undefinierter Bezeichner: '_SP_CLASSINSTALL_HEADER'
[Fehler] main.pas(68): Operator oder Semikolon fehlt
[Fehler] main.pas(68): Operator oder Semikolon fehlt
[Fehler] main.pas(68): Undefinierter Bezeichner: 'DIF_Propertychange'
[Fehler] main.pas(70): Operator oder Semikolon fehlt
[Fehler] main.pas(70): Undefinierter Bezeichner: 'DICS_Disable'
[Fehler] main.pas(71): Operator oder Semikolon fehlt
[Fehler] main.pas(72): Operator oder Semikolon fehlt
[Fehler] main.pas(73): Undefinierter Bezeichner: 'SetupDiSetClassInstallParams'
[Warnung] main.pas(73): Unsicherer Code '@ operator'
[Fehler] main.pas(73): 'THEN' erwartet, aber Bezeichner 'Classinstallheader' gefunden
[Fehler] main.pas(75): Undefinierter Bezeichner: 'SetupDICallClassInstaller'
[Warnung] main.pas(75): Unsicherer Code '@ operator'
[Fehler] main.pas(82): Undefinierter Bezeichner: 'SetupDiDestroyDeviceInfoList'
[Fataler Fehler] usbtest.dpr(5): Verwendete Unit 'main.pas' kann nicht compiliert werden

Dieses Mal mit Fehlermeldung, was fehlt bei mir noch? Damit ich 4 Buttons habe, einen zum Auflisten der USB Ports, einen zum Suchen nach neuen Geräten, einen zum Aktivieren, einen zum Deaktivieren.


Es scheint mir bei den Fehlermeldungen als ob ich eine Komponente nicht richtig installiert habe!? welche ist das?

Geändert von sneumann ( 4. Okt 2011 um 16:17 Uhr)
  Mit Zitat antworten Zitat