Autor Beitrag
tempuss
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

xp, vista
Delphi 7 Personal
BeitragVerfasst: Fr 04.04.08 22:21 
Hallo Leute!

Habe im Inet einen Beitrag gefunden, CD-Autoplay aktivieren/deaktivieren.
Leider funktioniert das überhaupt nicht!

Da ich den CD-Wechsel überwachen will, muss Autoplay in Windows aktiviert sein.
Lege ich nun eine Autostart-CD ein, zeigt mein Prog wohl alles richtig an,
aber diese blöde Windows-Taschenlampe funzelt hin und her und die CD startet unbehelligt
ihr Programm, kümmert sich nix um meine CD-Autoplay-Deaktivierung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
uses
  Registry;

procedure CDSetAutoPlay(SioNo: Boolean);
var
  Reg: TRegistry;
begin
  try
    Reg := TRegistry.Create;
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.KeyExists('Software\Classes\AudioCD\') then
      if Reg.OpenKey('Software\Classes\AudioCD\Shell\', False) then
        if SioNo then Reg.WriteString('', 'play')
        else 
          Reg.WriteString('', '');
  finally
    Reg.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject); //Activate  AutoPlay
begin 
  CDSetAutoPlay(True);
end;

procedure TForm1.Button2Click(Sender: TObject); //Deactivate Autoplay
begin
  CDSetAutoPlay(False);
end;

Den Aufruf <CDSetAutoPlay(False)> habe ich gleich oben in TMain.FormCreate eingetragen.
Der Windows-Autostart funktioniert bei jeder Autostart-CD, egal ob Audio oder sonst was.

Wäre total happy, wenn sich dat abstellen ließe!!!

Gruß Uli
tempuss Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

xp, vista
Delphi 7 Personal
BeitragVerfasst: Sa 05.04.08 23:29 
Welche Stille....
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: So 06.04.08 02:02 
Vielleicht solltest du mal nachlesen wie man Autostart für CDs ausschaltet. ;)

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: So 06.04.08 09:08 
Du deaktivierst den Autostart auch nur für AudioCDs -> Musik
ausblenden Delphi-Quelltext
1:
('Software\Classes\AudioCD\')					


Der Link von freak sollte dir weiter helfen.
tempuss Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

xp, vista
Delphi 7 Personal
BeitragVerfasst: Mo 07.04.08 18:51 
Hallo Delphi-Freunde!

Den Vorwurf muss ich zurück geben(freak4fun):
vielleicht solltest Du meinen Text mal genau lesen.
Die Autostart-Funktion von Windows muss an sein,
sonst reagiert TMain.WMDeviceChange nicht- steht so geschrieben.

Hab eine Lösung gefunden, die das Problem(wenigstens Teilweise) löst:
ausblenden Delphi-Quelltext
1:
2:
3:
KEYBD_EVENT(VK_SHIFT,0,0,0); // <-- SHIFT-Taste drücken
  //CD einlesen...
KEYBD_EVENT(VK_SHIFT,0,KEYEVENTF_KEYUP,0); // <-- SHIFT-Taste loslassen

Bei Daten-CDs klappt das nicxht aber bei Audio-, Video-CDs...

Das Simulieren der Shift-Taste scheint nur teilw. zu wirken.
Wenn ich nach einlegen der CD die Shift-Taste selbst gedrückt halte,
dann klappt es einwandfrei. Mein Prog erkennt die CD,
ohne das Windows sie startet- egal, welches Medium.

Werde nach anderer Möglichkeit suchen müssen, Shift zu simulieren.

Gruß Uli
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mo 07.04.08 19:43 
Du könntest auch manuell im Interval überprüfen, ob eine CD eingelegt ist, dann könntest du Autoplay deaktivieren. Vielleicht wäre das etwas sauberer als das mit der Shift-Taste.
tempuss Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

xp, vista
Delphi 7 Personal
BeitragVerfasst: Mo 07.04.08 20:35 
Hallo Chryzler!

Jo, wäre wohl eine Alternative.
Da ich bei TP7 vieles 'zu Fuß' gemacht habe, würde mir das auch gefallen.

Will das Prog aber weitergeben und dann müsste ich per code
auf den jeweiligen PCs Autoplay deaktivieren- um Himmels Willen...

Habe auch anderen Code für Key-Simulation gefunden,
ist aber wesentlich umständlicher und nicht so einfach zu verstehen(für mich).

Danke Dir!!!

G. Uli
tempuss Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

xp, vista
Delphi 7 Personal
BeitragVerfasst: Di 08.04.08 23:36 
Titel: Shift simulieren- Jetzt klappt's
Und nochmal ich...

Die Dauer des simulierten Shift-Drückens war einfach zu kurz.
Wenn ich die Zeile 3 zunächst weglasse, bleibt Autokey vorübergehend aus.
Auch nicht die Spur von der Autoplay-Taschenlampe oder
des "Welche Aktion soll durchgeführt werden?" - Dialoges erscheint.
Während dieser Zeit kann ich manuell, voll und ganz auf das Laufwerk zugreifen.

ausblenden Delphi-Quelltext
1:
2:
3:
KEYBD_EVENT(VK_SHIFT,0,0,0); // <-- SHIFT-Taste drücken
  //CD einlesen...
KEYBD_EVENT(VK_SHIFT,0,KEYEVENTF_KEYUP,0); // <-- SHIFT-Taste loslassen

Nach dem ersten Probelauf und beenden meines Progs(ohne Zeile 3 )
reagierte Firefox bei URL-Änderung mit ständig 'neu öffnendem Fenster',
obwohl ich sonst mit 'neu öffnendem Tab' eingestellt habe.

Zeile 3 muss also vor(!) dem Beenden des Progs unbegingt ausgeführt werden.
Ansonsten bin ich mit dem Ergebnis sehr zufrieden.
uffff
G. Uli
tempuss Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

xp, vista
Delphi 7 Personal
BeitragVerfasst: Mo 28.04.08 23:14 
Thema beantwortet