Einzelnen Beitrag anzeigen

Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

WM_COPYDATA per Thread verschicken?

  Alt 15. Jul 2006, 13:50
Hallo,

wenn ich während des verarbeitens einer WM_COPYDATA-Message schon wieder eine an die selbe Anwendung wegschicke, dann scheint das nicht zu funktionieren. Ich habe mir deswegen einen Thread gebaut:

Delphi-Quellcode:
procedure TLogMessageThread.Execute;
begin
  inherited;

  if Interval >= 0 then
    Sleep(Interval);

  Return := SendMessage(TargetHandle,WM_COPYDATA,Senderhandle,Integer(@CopyDataStruct));
end;
und rufe den auf:

Delphi-Quellcode:
//prepare return information
          CopyData.dwData := Integer(ltRegisterAnswer);
          CopyData.cbData := sizeof(TLogInfo);
          CopyData.lpData := GetMemory(CopyData.cbData);
          PLogInfo(CopyData.lpData).YourHandle := LIReceived.YourHandle;
          PLogInfo(CopyData.lpData).LogIdentifier := LL.Index;

          //send it with the thread, so we can return
          with TLogMessageThread.Create(true) do
            begin
              FreeOnTerminate := True; // fire and forget!
              TargetHandle := LIReceived.YourHandle;
              Senderhandle := WHandle;
              Interval := 5; //just to make sure we have returned
              CopyDataStruct := CopyData;
              // we SHOULD resume the thread, shouldn't we?
              Resume;

              Log('registering initiated');
            end;
es kommt aber beim gegenüber (Application.OnMessage) nix an:

Delphi-Quellcode:
procedure TForm2.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var CpDt: PCopyDataStruct;
begin
  if Msg.message = MessageQuestion then
    .......
 else if Msg.message = WM_COPYDATA then
    begin
      CpDt := TWMCopyData(Pointer(@Msg)^).CopyDataStruct;
      case TLogType(CpDt.dwData) of
        ltRegisterAnswer:
          begin
            LogIndex := TLogInfo(CpDt.lpData^).LogIdentifier;
            MLog.Lines.Add('we got a log index: ' + IntToStr(LogIndex));
          end;
      end;
    end;
end;
Sprich, die log-message wird nicht geschrieben.

Mach ich was grundlegendes falsch? hätte das Sendmessage auch direkt klappen sollen?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat