Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   USB-Ports deaktivieren&aktivieren in Delphi 7 (https://www.delphipraxis.net/163417-usb-ports-deaktivieren-aktivieren-delphi-7-a.html)

sneumann 30. Sep 2011 09:58

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Zitat:

Zitat von Luckie (Beitrag 1127645)
Wie viele Parameter hat die Prozedur? Und welche Datentypen haben sie?
Delphi-Quellcode:
procedure Disable_USB;
Und nach der SetupAPI.pas/dcu kann man googlen.

Also alles keine unlösbaren Probleme.

setupati.pas hab ich jetzt gefunden danke..
hauptsächlich geht es mir eigentlich nur da rum, dass ich mit dem code das usb deaktivieren und wieder aktivieren kann. Ich bin mir jetzt nicht sicher. Ich mache gerade wahrscheinlich einen ganz simplen fehler beim aufrufen etc.
Hier ist mein Code: ich habe einfach nur ein neues Formular aufgemacht mit Button1(Geräte anzeigen), button1(aktivieren), button2( deaktivieren), und dann den oben stehenden code in die main eingefügt.

Meine Meldungen :
Erzeugen
[Fehler] main.pas(32): Undefinierter Bezeichner: 'Disable_USB'
[Warnung] main.pas(43): Unsicherer Typ 'HDEVINFO'
[Warnung] main.pas(58): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(58): Konstante 0 wurde zu NIL konvertiert
[Warnung] main.pas(59): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(68): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(70): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(71): Unsicherer Code '@ operator'
[Warnung] main.pas(71): Unsicherer Code '@ operator'
[Fehler] main.pas(71): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
[Fehler] main.pas(78): Undefinierter Bezeichner: '_SP_CLASSINSTALL_HEADER'
[Warnung] main.pas(84): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(84): Unsicherer Code '@ operator'
[Warnung] main.pas(86): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(93): Unsicherer Typ 'hdev: Pointer'
[Fataler Fehler] testusb.dpr(5): Verwendete Unit 'main.pas' kann nicht compiliert werden

Luckie 30. Sep 2011 10:06

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Was hast du gemacht? Warum zeigst du uns nicht einfach den Code?

sneumann 30. Sep 2011 10:49

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Zitat:

Zitat von Luckie (Beitrag 1127662)
Was hast du gemacht? Warum zeigst du uns nicht einfach den Code?

Delphi-Quellcode:
unit main;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button3Click(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.Button3Click(Sender: TObject);
begin
Disable_USB();
ShowMessage('deaktiviert');
end;

end.
[Warnung] main.pas(31): Unsicherer Typ 'HDEVINFO'
[Warnung] main.pas(46): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(46): Konstante 0 wurde zu NIL konvertiert
[Warnung] main.pas(46): Konstante 0 wurde zu NIL konvertiert
[Warnung] main.pas(47): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(56): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(58): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(59): Unsicherer Code '@ operator'
[Fehler] main.pas(59): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
[Warnung] main.pas(59): Unsicherer Code '@ operator'
[Fehler] main.pas(59): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
[Fehler] main.pas(66): Undefinierter Bezeichner: '_SP_CLASSINSTALL_HEADER'
[Warnung] main.pas(72): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(72): Unsicherer Code '@ operator'
[Warnung] main.pas(74): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(81): Unsicherer Typ 'hdev: Pointer'
[Fataler Fehler] testusb.dpr(5): Verwendete Unit 'main.pas' kann nicht compiliert werden


*jeder fängt mal klein an* :thumb:

DeddyH 30. Sep 2011 10:54

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Benutz doch bitte Delphi-Tags, dann wird der Code auch lesbar. So macht das ja keinen Sinn.

sneumann 4. Okt 2011 14:19

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Zitat:

Zitat von Luckie (Beitrag 1127645)
Wie viele Parameter hat die Prozedur? Und welche Datentypen haben sie?
Delphi-Quellcode:
procedure Disable_USB;
Und nach der SetupAPI.pas/dcu kann man googlen.

Also alles keine unlösbaren Probleme.


Setup Api hab ich jetzt auch drauf, so jetzt habe ich mal ein neues Project erstellt und wollte das mal ausprobieren kann mir jemand sagen was ich falsch mache? Wahrscheinlich ne ganz simple Geschichte: Es soll folgendermaßen aussehen 1 Formular mit 4 Buttons, einer zum USB Geräte suchen , einer zum deaktivieren von USB und einer zum Aktivieren von USB, und ein Button zum Auflisten der verschiedenen USB-Ports.. !?

Ich habe jetzt in dem Code das auflisten, deaktivieren und aktivieren versucht zu implementieren, mache aber noch irgendeinen Fehler:

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);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(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.Button1Click(Sender: TObject);
begin

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Disable_USB();
ShowMessage('deaktiviert');
end;

end.

procedure TForm1.Button4Click(Sender: TObject);
begin

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

guinnes 4. Okt 2011 15:05

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Du benutzt da scheinbar eine andere Header-Übersetzung der SetupAPI

sneumann 4. Okt 2011 15:11

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
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?

DeddyH 4. Okt 2011 15:13

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Und wo wird da SetupAPI eingebunden?

sneumann 4. Okt 2011 15:16

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Zitat:

Zitat von DeddyH (Beitrag 1128380)
Und wo wird da SetupAPI eingebunden?

achso ja jetzt habe ich noch uses setupapi hinzugefügt trotzdem folgende fehlermeldungen
Code:
[Warnung] main.pas(32): Unsicherer Typ 'HDEVINFO'
[Warnung] main.pas(47): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(47): Konstante 0 wurde zu NIL konvertiert
[Warnung] main.pas(47): Konstante 0 wurde zu NIL konvertiert
[Warnung] main.pas(48): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(57): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(59): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(60): Unsicherer Code '@ operator'
[Fehler] main.pas(60): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
[Warnung] main.pas(60): Unsicherer Code '@ operator'
[Fehler] main.pas(60): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
[Fehler] main.pas(67): Undefinierter Bezeichner: '_SP_CLASSINSTALL_HEADER'
[Warnung] main.pas(73): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(73): Unsicherer Code '@ operator'
[Warnung] main.pas(75): Unsicherer Typ 'hdev: Pointer'
[Warnung] main.pas(82): Unsicherer Typ 'hdev: Pointer'
[Fataler Fehler] usbtest.dpr(5): Verwendete Unit 'main.pas' kann nicht compiliert werden

DeddyH 4. Okt 2011 15:21

AW: USB-Ports deaktivieren&aktivieren in Delphi 7
 
Na gut, dann passt die setupapi.pas wohl tatsächlich nicht zum Beispielcode. Du könntest den Kaktus ja einmal bitten, Dir seine verwendete Version zu schicken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz