![]() |
USB - Autostart dynamisch unterbinden
Hallo,
zwar habe ich schon Code gefunden, ![]() Ich möchte gern die komplette Steuerung für eine bestimmtes USB-Gerät übernehmen. ![]() Ich habe schon darüber nachgedacht, einfach eine Boolean-Variable statt einer TCheckBox zu nehmen. Diese setze ich dann auf False (=Autostart aus), wenn das Laufwerk angeschlossen ist und auf True, wenn nicht und werte das dann wie unter [1] aus. Das könnte zwar klappen, hätte dann aber den Nachteil, dass für die Geräte die nach dem Anstecken meines speziellen Teils angeschlossen werden, auch kein Fenster mehr käme. Das soll ja auch nicht sein. Besser wäre es also abzufragen, von wem die Anforderung für den Autostart kommt. Hier komme ich nicht weiter. Kann mir da bitte jemand einen Tipp geben? Gruß, Alex |
Re: USB - Autostart dynamisch unterbinden
Hallo
Schon mal dies probiert: Bei DBT_DEVICEARRIVAL : ein abschließendes Msg.Result := 0; einfügen. Gruß |
Re: USB - Autostart dynamisch unterbinden
Zitat:
Gruß, Alex |
Re: USB - Autostart dynamisch unterbinden
Kann mir wirklich keiner helfen?
Ich weiß, dass es irgendwie gehen muss. Ich selbst nutze eine Software, die genau das macht und ich möchte das deshalb in meinem Programm auch haben. Wo ich gerade dabei bin: Wie bzw. eher wo schreibe ich ![]() Gruß, Alex |
Re: USB - Autostart dynamisch unterbinden
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bin ehrlich gesagt mir immer noch nicht ganz sicher was verhindert werden soll: Ist das Fenster zur Auswahl der Aktion gemeint(Dateiordner öffnen, Wiedergabe, Durchsuchen etc.), oder geht tatsächlich ein Explorerfenster auf? Bei MSDN gibt es dazu folgenen Artikel: ![]() Vielleicht hilft das ja weiter. Gruß PS Oder suchst Du so etwas wie im Anhang? |
Re: USB - Autostart dynamisch unterbinden
Zitat:
Ich konnte die Datei leider nicht ausführen. Es kommt die Fehlermeldung rtl70.bpl wurde nicht gefunden und ich solle die Anwendung neu installieren... :( |
Re: USB - Autostart dynamisch unterbinden
Ups,
da war wohl ein harken an der falschen Stelle. Habe eine neue Version hochgeladen. Gruß |
Re: USB - Autostart dynamisch unterbinden
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
Danke für den Code. Scan findet leider nur das Laufwerk. In der Spalte Class steht "not found" und der Rest bleibt stest leer. Ich habe mal meine - fast fertige - Version beigefügt. Da es unterschiedliche Messages sind, brauch ich wohl auch 2 Proceduren. Auf jeden Fall klappt das Unterbinden des Explorer jetzt. Ich meine nicht (nur) die Auswertung der Datei autorun.inf, sondern (auch) das Öffnen eines Explorer-Fensters, wenn Windows keine bekannten Dateien findet. Ich habe nur noch ein Problem damit, dass Laufwerk rauszubekommen. Da das bei Dir offenbar funktioniert, wäre ich sehr an Deinem Code interessiert; zumindest an dem Abschnitt, mit dem Du den Buchstaben des neu angestöpselten Laufwerks ermittelst. Daran hapert es bei mir noch. Wie Du meinem Code entnehmen kann - falls Du ihn Dir ansiehst - schummle ich, indem ich ein zwingend erforderliches Verzeichnis suche. Ganz sauber ist das aber leider auch nicht. Gruß, Alex [EDIT] Ich habe gerade an einem anderen Rechner festgestellt, dass es nicht (mehr) klappt. :wall: Ich habe keine Ahnung, woran das liegt. Schlimm nur, dass ich grad an einem anderen Rechner sitze, hier schon was am Code geändert habe und daher nicht mehr nachvollziehen kann, woran es liegt. [/EDIT] |
Re: USB - Autostart dynamisch unterbinden
Hallo
Zitat:
die VID/PID-Kombi und falls vorhanden die ID an. Benutze es mal mit einem USB-Cardreader/Stick. Das mit dem Laufwerk ist relative Simpel, wenn man sich auf Wechseldatenträger beschränkt:
Delphi-Quellcode:
Wobei lvRemovable ein ListView ist.
procedure ShowRemovableDrives;
var I : Integer; D : String; L : TListItem; begin lvRemovable.Items.Clear; for I := Ord('D') to Ord('Z') do begin D := Char(I); if GetDriveType(pChar(D + ':\')) = DRIVE_REMOVABLE then begin L := lvRemovable.Items.Add; L.Caption := D + ':\'; end; end; end; Einzelheiten zum ermitteln der VID/PID und anderes findest du in der DP, Jahrgang 2004. Also einfach die ![]() Und zum Überprüfen ob auch ein Datenträger vorhanden ist, kann dies genommen werden:
Delphi-Quellcode:
FUNCTION DiskInDrive(Drive: CHAR): BOOLEAN;
{ Funktion, um zu prüfen, ob ein Datenträger eingelegt ist. Drive : Laufwerk (A..Z oder a..z) Ergebnis: TRUE, wenn Datenträger eingelegt ist FALSE, wenn kein Datenträger eingelegt ist oder ein ungültiges Laufwerk angegeben wurde } VAR ErrorMode: WORD; BEGIN Result := FALSE; Drive := Char(Byte(Drive) AND $DF); // groß IF (Drive < 'A') OR (Drive > 'Z') THEN Exit; ErrorMode := SetErrorMode(SEM_FailCriticalErrors); TRY IF DiskSize(Ord(Drive) - $40) = -1 THEN Result := FALSE ELSE Result := TRUE; FINALLY SetErrorMode(ErrorMode); END; END; Zitat:
Auch dazu gibt es genug Beispiele in der DP, zB:
Delphi-Quellcode:
Und schau dir dazu nochmals die USBStor.pas an(wegen des Handle usw.).procedure TWeisNichtWie.WndProc(var Msg : TMessage) begin case Msg.Msg of WM_DEVICECHANGE : begin WMDeviceChange(TWMDeviceChange(Msg)); Result := Msg.Result; end; WM_AUTOPLAY : Msg.Result := 1; else Msg.Result := DefWindowProc(Handle, Msg.Msg, Msg.wParam, Msg.lParam); end; end; So und falls noch Fragen sind, immer Fragen. Gruß |
Re: USB - Autostart dynamisch unterbinden
Zitat:
Oder hat das damit nichts zu tun? :gruebel: Zitat:
Zitat:
Zitat:
Zitat:
Gruß, Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 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