Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit Nachricht aus DLL (https://www.delphipraxis.net/25474-problem-mit-nachricht-aus-dll.html)

Chris P 7. Jul 2004 11:44

Re: Problem mit Nachricht aus DLL
 
Ich schicke meine eigene Message namens WM_MOUSEHOOK an mein Prog.

In dem wParam dieser Message steht dann wiederum zB. WM_MOUSEMOVE.

Chris P 7. Jul 2004 11:51

Re: Problem mit Nachricht aus DLL
 
Aber wo könnte nun der Fehler liegen?

Christian Seehase 7. Jul 2004 11:52

Re: Problem mit Nachricht aus DLL
 
Moin Chris,

schreib' doch mal, zum Testen, einen festen Wert in lParam, wenn WM_MOUSEMOVE von der DLL gesendet werden soll.

Chris P 7. Jul 2004 11:57

Re: Problem mit Nachricht aus DLL
 
Ich hab jetzt mal als lParam die Konstante 20 geschickt und die wird ohne Fehler übergeben und angezeigt.

Aber wie funktioniert das jetzt mit den Mousekoords?

Muss lParam da nicht irgendwas mit PMOUSEHOOKSTRUCT sein oder?

neolithos 7. Jul 2004 12:02

Re: Problem mit Nachricht aus DLL
 
Ersten:

Schließe in der Hook das Filemapping-Object sauber.

Zweitens:

lParam bei einer MouseHook ist vom Typ PMouseHookStruct.
Delphi-Quellcode:
procedure TForm1.DllMessage(var Msg: TMessage);
begin
  case Msg.wParam of
       WM_MOUSEMOVE:
         with PMouseHookStruct(Msg.lParam)^ do
           begin  
             Label1.Caption := InttoStr(pt.x);
             Label2.Caption := InttoStr(pt.y);
           end;
  end;
end;

Christian Seehase 7. Jul 2004 12:06

Re: Problem mit Nachricht aus DLL
 
Moin Chris,

wenn lParam die Adresse einer Datenstruktur ist, musst Du diese natürlich auch als Adresse verwenden:

Delphi-Quellcode:
var
  MouseHook : PMOUSEHOOKSTRUCT;

begin
  MouseHook := PMOUSEHOOKSTRUCT(msg.lParam);
  case Msg.wParam of
     WM_MOUSEMOVE: begin  Label1.Caption := InttoStr(MouseHook^.pt.x);
                           Label2.Caption := InttoStr(MouseHook^.pt.y);
                   end;
end;

Chris P 7. Jul 2004 12:16

Re: Problem mit Nachricht aus DLL
 
Deine Lösung sieht gut aus, aber hat meinen PC zweimal abschmieren lassen sodass ich einen Neustart machen musste. Wodran liegt dass?

Christian Seehase 7. Jul 2004 12:23

Re: Problem mit Nachricht aus DLL
 
Moin Chris,

ich hab' mir das mal, auf die Schnelle, so gefakt:

Delphi-Quellcode:
procedure TForm1.DllMessage(var Msg: TMessage);

var
  MouseHook : PMOUSEHOOKSTRUCT;

begin
  MouseHook := PMOUSEHOOKSTRUCT(msg.lParam);
  case Msg.wParam of
     WM_MOUSEMOVE: begin  Label1.Caption := InttoStr(MouseHook^.pt.x);
                           Label2.Caption := InttoStr(MouseHook^.pt.y);
                   end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);

var
  msg      : TMessage;
  MouseHook : MOUSEHOOKSTRUCT;

begin
  MouseHook.pt.x := 100;
  MouseHook.pt.y := 200;
  msg.WParam := WM_MOUSEMOVE;
  msg.LParam := lParam(@MouseHook);
  DLLMessage(msg);
end;
Funktioniert allerbest.

Hast Du lParam in der DLL auch wieder korrigiert, so dass es die Adresse enthält?

Chris P 7. Jul 2004 12:34

Re: Problem mit Nachricht aus DLL
 
Ist das korrekt so?
Delphi-Quellcode:
 SendMessage(hApp, WM_MOUSEHOOK, wparam, lParam);
Der PC stürzt immer noch ab :cry:

neolithos 7. Jul 2004 12:58

Re: Problem mit Nachricht aus DLL
 
Nein das ganze geht so nicht!
Grund: Der Speicher auf, die die Adresse zeigt gibt es in deinem Process nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz