Nachricht von einem anderen Windows Programm empfangen?

Wichtiges und Neues
Antworten
satmax
Senior Member
Beiträge: 312
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Nachricht von einem anderen Windows Programm empfangen?

Beitrag von satmax »

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).

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: Nachricht von einem anderen Windows Programm empfangen?

Beitrag von Herbert »

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...

satmax
Senior Member
Beiträge: 312
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: Nachricht von einem anderen Windows Programm empfangen?

Beitrag von satmax »

Also das Abfragen schein doch einfach zu sein (wie bisher fast alles unter WD):

Code: Alles auswählen

Event("mytrace","*.*",WM_COPYDATA) // WM_USER WM_COPYDATA
MyTrace() wird praktisch als "callback" Funktion aufgerufen. Mit

Code: Alles auswählen

Event("mytrace","*.*",0) // WM_USER WM_COPYDATA
erhält man alle Meldungen.
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
Das könnte jetzt etwas schwierig werden...

satmax
Senior Member
Beiträge: 312
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: Nachricht von einem anderen Windows Programm empfangen?

Beitrag von satmax »

Im Prinzip fehlt mir die Struktur

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;
unter Windev.

Antworten