USB - Autostart dynamisch unterbinden
Hallo,
zwar habe ich schon Code gefunden, [1]wie man den CD-Autostart dynamisch unterdrückt. Ich gehe davon aus, dass das auch für andere Geräte klappen sollte. Ich habe aber ein differenzierteres Problem: Ich möchte gern die komplette Steuerung für eine bestimmtes USB-Gerät übernehmen. Hier habe ich USBStor.pas gefunden und nutze diese, um herauszufinden, ob dieses Gerät (gerade) angeschlossen wurde. Das klappt soweit auch ganz gut. Allerdings stört mich noch, dass Windows wie bei anderen USB-Platten, - Sticks etc. auch ein Explorer-Fenster einblendet. Das möchte ich verhindern. Allerdings eben nur für das bestimmte Gerät. 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 diesen Code eigentlich hin. FormCreate ist mir klar; aber der Rest? :gruebel: 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:Deaktivieren der Autorun-Funktionalität in Windows. 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 Suche anschmeißen und durchkämpfen. 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 12:53 Uhr. |
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