Wie kann ich eine Windows Nachricht (postmessage()) von einem anderen Windows Programm, kein Windev Programm empfangen?
Unter Xbase++ hatte ich da eine callback function (aus ot4xb).
Nachricht von einem anderen Windows Programm empfangen?
-
- Site Admin
- Beiträge: 529
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Nachricht von einem anderen Windows Programm empfangen?
Huh, du stellst Fragen
Also, Postmessage schickt irgendwann etwas. Du bedienst die MessageQueue. Also musst diese Message Queue abfragen gehen...
Waitmessage . GetMessage oder Peekmessage (Achtung TranslateMessage folgt da meistens) sind die Reaktionen darauf (MSDN, also API).
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Nach Suche in den Windev-Foren stellt sich heraus, dass Windev selber diese Funktionen nicht "kennt", also mit API angesprochen werden müssen. Nicht einfach...
Also, Postmessage schickt irgendwann etwas. Du bedienst die MessageQueue. Also musst diese Message Queue abfragen gehen...
Waitmessage . GetMessage oder Peekmessage (Achtung TranslateMessage folgt da meistens) sind die Reaktionen darauf (MSDN, also API).
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Nach Suche in den Windev-Foren stellt sich heraus, dass Windev selber diese Funktionen nicht "kennt", also mit API angesprochen werden müssen. Nicht einfach...
-
- Senior Member
- Beiträge: 312
- Registriert: 24. September 2015, 10:05
- Wohnort: Biberbach, Austria
- Kontaktdaten:
Re: Nachricht von einem anderen Windows Programm empfangen?
Also das Abfragen schein doch einfach zu sein (wie bisher fast alles unter WD):
MyTrace() wird praktisch als "callback" Funktion aufgerufen. Mit
erhält man alle Meldungen.
Jetzt geht es aber weiter, Ich muss meinem WD Fenster als "ClassName" eine GUID vergeben, unter Xbase:
Das könnte jetzt etwas schwierig werden...
Code: Alles auswählen
Event("mytrace","*.*",WM_COPYDATA) // WM_USER WM_COPYDATA
Code: Alles auswählen
Event("mytrace","*.*",0) // WM_USER WM_COPYDATA
Jetzt geht es aber weiter, Ich muss meinem WD Fenster als "ClassName" eine GUID vergeben, unter Xbase:
Code: Alles auswählen
local oCls := WNDCLASS():New() // WNDCLASS gwst structure object
local hReceiverClass // Class Handle of the receiver window
oCls:lpfnWndProc := _callback_ReceiverWndProc() // xppcbk ReceiverWndProc.cbk -> .obj
oCls:hInstance := AppInstance() // Instance handle of the EXE
oCls:lpszClassName := WND_CLASSNAME_WATCHDOG // autogenerated with UUIDGen.exe
hReceiverClass := LoWord(DllExecuteCall( _tfpRegisterClass_ , oCls:_lock_() ))
oCls:_unlock_() // release structure memory and copy content to a character buffer
oCls:lpszClassName := NIL // free dynamic heap memory for the DYNSZ member
hWndReceiver := DllExecuteCall( _tfpCreateWindowEx_ ,;
0 ,; // No exStyle
hReceiverClass,;// Window Class handle
0,; // No Title 0
0xC40000,; // dwStyle WS_OVERLAPED
0,0,0,0,; // x,y,cx,cy
0,; // hWndParent
0,; // hMenu
AppInstance(),;
0) // empty LPParam
-
- Senior Member
- Beiträge: 312
- Registriert: 24. September 2015, 10:05
- Wohnort: Biberbach, Austria
- Kontaktdaten:
Re: Nachricht von einem anderen Windows Programm empfangen?
Im Prinzip fehlt mir die Struktur
unter Windev.
Code: Alles auswählen
typedef struct tagWNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;