![]() |
USB-Ports deaktivieren&aktivieren in Delphi 7
Hallo,
folgende Problemstellung: Wir testen und kalibrieren mit einem Mess(Lese)/Geber(Schreibe)-Gerät Leiterplatten hinsichtlich Ihrer Temperatur, ph-Wert, Druck etc. . Die Temperaturen und ph Werte werden sozusagen auf den Leiterplatten eingestellt,abgeglichen also kalibriert. Nun haben wir ein in Delphi 7 geschriebenes Programm implementiert, welches diesen Abgleich, das Kalibrieren der Platten ermöglicht und zur Ausführung dieses Tests/Abgleichs der Temperatur & vom Ph-Wert etc dient. Ich soll für unsere Softwareabteilung dieses Programm, welches zum Test der Platten dient, optimieren. Da der Testabgleich mit Kalibrierung momentan noch etwas zu lange dauert und man sich viel Zeit sparen könnte beim Testen der einzelnen Platten wäre es gut, wenn einige Prozesse automatisch ablaufen würden und nicht jeweils eine Eingabe des Benutzers benötigt wird: Am Anfang muss man die Leiterplatte einmal kurz vom USB-Steckplatz (Verbindung über ein externes Gerät zur Platte[USB- ext. Gerät - Platte]) abziehen und der Benutzer muss mit "OK" bestätigen wenn er USB wieder eingesteckt hat. Diesen Ablauf könnte man zum Beispiel automatiesieren, indem man die USB-Ports kurzzeitig deaktiviert und wieder aktiviert. Eine andere Möglichkeit wäre soweit mir bekannt ist, in dem man einfach nochmal neu nach neuen Geräten sucht!? Liege ich da Richtig? Wie kann ich das deaktivieren und aktivieren bzw. oder das erneute "Suchen nach Geräten" nun in Delphi 7 implementieren, sodass der Benutzer nicht erst ausstecken, einstecken und auf Ok klicken muss? Muss man dabei in irgendeiner Weise die API Funktionen nutzen? Wäre nett, wenn mir jemand ein paar Tipps oder ähnliches geben könnte, dankeschön!! Links zu gleichen Fragestellung: ![]() ![]() ![]() ![]() ![]() |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
Um die USB-Ports zu de- und wieder zu aktivieren, brauchst du wahrscheinlich einen Treiber. Damit fällt Delphi schon mal als Entwicklungsumgebung weg. Um die Suche nach neuen Geräten anzustoßen, würde ich mir mal die Setup API angucken, eventuell findet sich da was brauchbares. aber reicht es nicht auf das wiederanstecken zu reagieren? Dazu sollten sich einige Beiträge hier im Forum finden lassen. |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Es ist nichts dagegen einzuwenden, wenn man gleichzeitig in mehreren Foren um Hilfe bitte, aber dann verlinke wem falls die Beiträge auch, damit man nicht alles zwei mal beantwortet.
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Im Entwickler-Forum ist der Beitrag schon geschlossen.
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Shellhardwareerkennung:
1. Deaktivieren 2. Aktivieren svchost.exe -k netsvcs (ShellHWDetection) |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
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; |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
mal ne "re" Antwort waere net schlecht..geht/geht nicht 8-)
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
Aber ich denke der Code könnte genau das sein was ich brauche. Dankeschön ich teste es mal |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
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: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 ..... oder liegt das gerade nur an der setupati.dcu?!? danke für die Tipps!! |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Wie viele Parameter hat die Prozedur? Und welche Datentypen haben sie?
Delphi-Quellcode:
Und nach der SetupAPI.pas/dcu kann man googlen.
procedure Disable_USB;
Also alles keine unlösbaren Probleme. |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
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 |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Was hast du gemacht? Warum zeigst du uns nicht einfach den Code?
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
Delphi-Quellcode:
[Warnung] main.pas(31): Unsicherer Typ 'HDEVINFO'
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(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: |
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.
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
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; |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Du benutzt da scheinbar eine andere Header-Übersetzung der SetupAPI
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
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? |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Und wo wird da SetupAPI eingebunden?
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
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 |
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.
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
okay hab ihm geschrieben,mal sehen, hat denn eventuell jemand noch einen anderen Code parrat mit dem ich 4 buttons machen kann, 1 zum aktivieren , 1 zum deaktivieren, 1 zum geräte suchen, 1 zum auflisten der usb ports ?? mache ich vielleicht auch einen falschen Aufruf? |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
des weiteren hast Du etwas falsch verstanden!!!..ich schrieb
Delphi-Quellcode:
das ... sollte heissen...nach !!! dem Programm-Kopf(header)
...
Uses SetupAPI; also nach
Delphi-Quellcode:
Auch war es nur ein Beispiel!!! um die Art und Weise zu erklaeren...deshalb auch die Kommentare
Program test1;
uses System, Forms........; var Form1: TForm1; implementation {$R *.dfm} Uses SetupAPI;
Delphi-Quellcode:
// state disable setzen
... // Devices listen ein bisschen musst Du schon noch nachdenken..sorry!!!! P.S.: ich habe ebenfalls D7 und es funktioniert Prima Die Geraetebezeichnung "Universal Host Controller" entsprach auch damals meinem Problem..muesstest Du kontrollieren, ob es unter Windows 7 auch so heisst!! |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Moin Kaki,
*räusper* JCL <> JVCL ;) Meine Vermutung ist, dass die Unit im Laufe der Zeit überarbeitet wurde und mit Deinem Code nicht mehr ohne Weiteres kompatibel ist. Deshalb mein Vorschlag, dass Du ihm Deine Version schicken sollst (oder hier anhängen, Attachments in PMs gehen ja nicht mehr). |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
wollte ich tun..ABER "Dein Seitenaufruf konnte aufgrund eines fehlenden Securitytokens nicht verarbeitet werden. " hier die Version (nur Namen) die geht "JVCL333CompleteJCL1101-Build2725" evtl. mal googeln;-) |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Ich habe ne
![]() |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
Um nochmal mein Problem zu verdeutlichen: Ich möchte die Serielle Schnittstelle ansprechen den COM5. habe da ein Messgerät über SERIAL-to-USB angeschlossen dem ich Befehle übergeben möchte: Anweisungen aus dem Handbuch des Geräts über Delphi an das Gerät senden über COM5: Beispielbefehle aus dem Handbuch des Geräts: CONFigure:TEMPerature:TCOuple<parameter> Temperatur configurieren DISPlay:BACKlight? Abfragen ob Hintergrundbeleuchtung an ist rückgabe 1 oder 0 solche befehle möchte ich über Delphi realisieren und an die Schnittstelle senden und auslesen
Code:
link zu gleichem problem anderer Code
http://www.delphi-forum.de/viewtopic.php?t=107280&highlight=serielle+schnittstelle
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
Delphi-Quellcode:
und hier den 1. Unterschrich entfernt :
if (SetupDiGetDeviceRegistryProperty(hdev,devinfo,SPDRP_DEVICEDESC,
DataType,@Buffer[0],sizeof(Buffer),BufferSize)) then
Delphi-Quellcode:
ClassInstallParams.Classinstallheader.cbSize:= sizeof(SP_CLASSINSTALL_HEADER);
p.s.: Grade nochmal ein Build gemacht, jetzt hagelt es bei mir auch Fehler ( alle im Bereich WINNT ) |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
jetzt hab ich nur noch folgende fehlermeldung popupfenster "Im Projekt usbtest.exe ist eine Excepton der Klasse EAccess Violation aufgetreten. Meldung: Zugriffverletzung bei Adresse 00000000. Lesen von Adresse 00000000'. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen" bei folgendem Code
Code:
dann klcike ich ok und garnix passiert
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. |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Dann setz mal einen Haltepunkt, steppe zeilenweise durch und teile uns mit, in welcher Zeile der Fehler auftritt.
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Ins Formcreate gehört noch ein LoadSetupAPI und ins FormDestroy ein UnloadSetUpAPI. Sorry, hatt ich noch vergessen :oops:
Du bist aber recht mutig, einfach irgendwelche Treiber abzuschalten. Wäre es nicht besser, erst mal sich alles nur anzeigen zu lassen ? |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
Was lese ich gerade? Du willst nur COM5 Daten schreiben und lesen?..Da brauchst Du kein USB zu disablen. Du sprichst den Port doch ueber serielle Schnittstelle an nicht ueber USB. |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Liste der Anhänge anzeigen (Anzahl: 1)
@sneumann:
Das Programm USBVIEW ist von Microsoft. Ein unvollständiger "Nachbau" mit SourceCode ist im Anhang. |
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
OK, dann wuerde ich Dir empfehlen..nimm das Tool von Hathor ;-)
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Leider ja.
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Zitat:
|
AW: USB-Ports deaktivieren&aktivieren in Delphi 7
Versteht die Hardware keinen RESET-Befehl?
Für die Hardware wäre es das Gleiche wie USB-Stecker rein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz