@soulies
Zitat von
soulies:
ich konnte noch nicht so ganz rausfinden um was für ein 'USB Gerät' es sich handelt ...
Es ist ein digitales Diktiergerät von Olympus. Ich bin aber weder mit dem Gerät noch mit der mitgelieferten Software zufrieden. Also muss/will ich selbst ran
Ich erweitere mal so ganz nebenbei das Ding um ein paar Features.
Die von Olympus haben das mit dem AutoPlay aber irgendwie hinbekommen. Denn wenn deren DeviceDetector(tm) geladen ist, dann kümmert der und eben nur der sich um das im übrigen als USBSTOR geführte Gerät/Laufwerk. Ist das Programm nicht geladen, bekommt man wieder das "heiß geliebte" Explorer-Fenster. Es muss also gehen.
Die Frage ist daher nicht ob, sonder "nur" wie?
Zitat von
soulies:
Vllt gibt's anderen Lösungen für das Problem.
Da fällt mir nur gpedit.msc und dann ... ein. Das nervt aber, wenn man das auf zig Rechnern machen muss und elegant ist es eben auch nicht.
Das hier funktioniert leider
nicht:
Delphi-Quellcode:
Type
PDevBroadcastHdr = ^TDevBroadcastHdr;
TDevBroadcastHdr = Packed Record
dbcd_size: DWORD;
dbcd_devicetype: DWORD;
dbcd_reserved: DWORD;
End;
TForm1 = Class(TForm)
CheckBox1 : TCheckBox;
Procedure FormCreate(Sender: TObject);
Procedure CheckBox1Click(Sender: TObject);
End;
Var
Form1 : TForm1;
WM_AutoPlay : Cardinal;
Erlauben : Boolean = False;
MsgWindow : hWnd;
Implementation
{$R *.dfm}
Function InstallMessageWindow: hWnd;
Var
S : String;
Ver : TOSVersionInfoA;
Begin
Ver.dwOSVersionInfoSize:=SizeOf(TOSVersionInfoA);
If GetVersionEx(Ver) And (Ver.dwMajorVersion >= 5) Then
S:='Message'
Else
S:='STATIC';
Result:=CreateWindowExA(0, PChar(S), nil, WS_POPUP, 0, 0, 0, 0, 0, 0, GetCurrentProcessID, nil);
End;
Procedure WindowProcedure(Var Msg: TMessage);
Begin
If Msg.Msg = WM_DeviceChange Then
Begin
Case Msg.WParam Of
$8000 : If PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype=$00000002 Then
Begin
Application.Restore;
ShowMe(Application.Handle); // auf Teufel komm raus nach vorn zwingen
End;
$8004 : If PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype=$00000002 Then
Begin
Application.Minimize;
End;
End;
End
Else If Msg.Msg=WM_AutoPlay Then
Begin
If Erlauben Then
Msg.Result := 0 //enable auto-play
Else
Msg.Result := 1; //disable
End;
// Else Inherited WndProc(Msg); // Wie hier weiter???
End;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Erlauben:=CheckBox1.Checked;
end;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
WM_AutoPlay:=RegisterWindowMessage('QueryCancelAutoPlay');
MsgWindow:=InstallMessageWindow;
If MsgWindow <> Invalid_Handle_Value Then
Begin
If SetWindowLongA(MsgWindow, GWL_WNDPROC, Integer(@WindowProcedure)) <> 0 Then
ShowMessage('OK');
End;
End;
End.
Was mache ich verkehrt? Bin streng nach zusammengesammeltem Beispielcode vorgegangen
Noch irgendwelche sonstigen Ideen?
Gruß und Dank, Alex