Hi nochmal,
gibt es irgendwelche bekannten Einschränkungen, wenn ich WM_COPYDATA direkt
an die Applikation schicke und diese Messages dann in OnMessage behandelt werden?
Ich habe mich ziemlich genau an die verfügbaren Beispiele gehalten, die WM_COPYDATA
kommt einfach nicht an.
Delphi-Quellcode:
//Hier der Sender:
SendMessage(TargetAppHandle, WM_COPYDATA, AWnd, Integer(@CopyDataStruct));
//Der Empfänger:
Application.OnMessage := DevCheckHandler.AppMessage; (vorher natürlich initialisiert)
procedure TDevCheckHandler.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
Handled := False;
case Msg.message of
WM_COPYDATA:
begin
FDeviceInfo.Event := PDeviceInfo(PCopyDataStruct(Msg.lParam).lpData).Event;
if Msg.wParam = CVolume then
FDeviceInfo.Vol := PDeviceInfo(PCopyDataStruct(Msg.lParam).lpData).Vol;
if Msg.wParam = CCamera then
FDeviceInfo.Guid := PDeviceInfo(PCopyDataStruct(Msg.lParam).lpData).GUID;
if Assigned(FOnDevChange) then
FOnDevChange;
Handled := True;
end;
WM_PASSHANDLE: //der kommt immer an!
begin
FDevCheckHandle := Msg.wParam;
Handled := True;
end;
end;
end;
//mit
PostMessage(TargetAppHandle, WM_PASSHANDLE, AWnd, 0);
//und
procedure TDevCheckHandler.PassAppHandle;
begin
PostMessage(FDevCheckHandle, WM_PASSHANDLE, FAppHandle, 0);
end;
//kann ich zwischen beiden die Handles hin und her übergeben
// -> Die Kommunikation steht in Grunde
nochmal: WM_COPYData wird definitiv losgeschickt (bin mit dem Debugger) durch, beim Empfänger tut sich GARNICHTS. Ich bin mit meinem Latein am Ende.
Grüße
Sebastian