EmitEvent in anderen Prozess
Übersicht
BlitzMax, BlitzMax NG
Beginners-Corner
blitzatiusBetreff: EmitEvent in anderen Prozess |
Antworten mit Zitat |
|
|---|---|---|
|
Hi Leute,
Wie kann man den Befehl EmitEvent in einen anderen Prozess "schicken"? Ich habe die BlitzMax exe-datei und mit dieser führe ich einen neuen Prozess per CreateProcess aus. Jetzt möchte ich, dass dieser neue Prozess Events an meine erste Exe-Datei schicken soll. Wie kann man das realisieren? Muss doch irgendwie über die WinApi gehen, oder? Code: [AUSKLAPPEN] |-------| |-------| | | CreateProcess(Exe2) | | | Exe1 | --------------------------> | Exe2 | | | | | |-------| |-------| ^ v / \ v ^ ??? EmitEvent() ??? v ^=========================================< |
||
|
|
BlitzcoderNewsposter |
Antworten mit Zitat |
|---|---|---|
| Nicht so, dass es platformübergreifend richtig gehen würde. Am sinnigsten wäre es, wenn du dir ein simples TCP System schreibst, dass dies übernimmt. | ||
|
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
||
blitzatius |
Antworten mit Zitat |
|
|---|---|---|
|
Platformübergreifend ist mir so ziemlich Wurst. Und TCP möchte ich nicht verwenden, weil ich Events verwenden möchte Bei TCP muss man immer schauen, ob eine Nachricht kommt und bei Events kann man einfach "WaitEvent" benutzen. |
||
|
|
BlitzcoderNewsposter |
Antworten mit Zitat |
|---|---|---|
| Ich meine es so, dass du ein System hast, was immer prüft, ob etwas angekommen ist. Und dann macht das System im anderen Prozess wieder ein Event draus. | ||
|
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
||
blitzatius |
Antworten mit Zitat |
|
|---|---|---|
|
Blitzcoder hat Folgendes geschrieben: Ich meine es so, dass du ein System hast, was immer prüft, ob etwas angekommen ist.
Genau das möchte ich gerne verhindern. Trotzdem Danke für die Antwort. Nochmal: Weiss jemand, wie man per WinAPI einen Event an einen Prozess schickt? |
||
|
|
BlitzcoderNewsposter |
Antworten mit Zitat |
|---|---|---|
|
Wenn es nur auf Windows gehen muss, guck hier:
http://msdn2.microsoft.com/en-...32590.aspx Vor allem die Funktionen GetMessage Und PostMessage. |
||
|
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
||
blitzatius |
Antworten mit Zitat |
|
|---|---|---|
|
So, hab mal den PostMessage angeschaut und das ist dabei rausgekommen: (funktioniert aber leider noch nicht)
Exe1: Code: [AUSKLAPPEN] Global win:TGadget = CreateWindow("eventtest",100,100,200,150)
While True WaitEvent() Print CurrentEvent.id+" "+CurrentEvent.ToString() Select EventID() Case EVENT_WINDOWCLOSE End EndSelect Wend Exe2: Code: [AUSKLAPPEN] Local hwnd:Int = FindWindow( Null ,"eventtest" )
PostMessageA(hwnd,5555,Null,Null) Extern "Win32" Function FindWindow (x:Byte Ptr, y:Byte Ptr) = "FindWindowA@8" Function PostMessageA( hwnd, msg, wparam:Byte Ptr, lparam:Byte Ptr ) End Extern Wenn ich die erste Exe kompiliere und starte, und im hintergrund die zweite exe gestartet wird, dann müsste doch der event normalerweise im ge"printet" werden? |
||
Dreamora |
Antworten mit Zitat |
|
|---|---|---|
|
local eventtest:byte ptr = ("eventtest").toCString()
Local hwnd:Int = FindWindow( Null ,"eventtest" ) memfree(eventtest) ein String ist kein Byte Ptr Wenn dann müsstest du da $z oder $w haben schau dir ma die Dokumentation von BM an. |
||
| Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. | ||
blitzatius |
Antworten mit Zitat |
|
|---|---|---|
|
Hmm, "hwnd" wurde auch so: "FindWindow( Null ,"eventtest" )" gefunden.
Das Problem liegt warscheinlich am Empfangen. Weiss einer Rat? Hier nochmal den neusten Code: Exe1: Code: [AUSKLAPPEN] Global win:TGadget = CreateWindow("eventtest",100,100,200,150)
While True WaitEvent() Print CurrentEvent.id+" "+CurrentEvent.ToString() Select EventID() Case EVENT_WINDOWCLOSE End Case 5555 Notify("5555. Message erhalten") EndSelect Wend Exe2: Code: [AUSKLAPPEN] Local eventtest:Byte ptr = ("eventtest").toCString()
Local hwnd:Int = FindWindow( Null ,eventtest ) MemFree(eventtest) Print hwnd Print PostMessageA(hwnd,5555,Null,Null) Extern "Win32" Function FindWindow (x:Byte Ptr, y:Byte Ptr) = "FindWindowA@8" Function PostMessageA( hwnd, msg, wparam:Byte Ptr, lparam:Byte Ptr ) End Extern |
||
|
|
Geeecko |
Antworten mit Zitat |
|---|---|---|
|
Vllt. das Extern ganz am Anfang schreiben? ^^
Weiß nich obs dann geht... |
||
| .... | ||
|
|
rema |
Antworten mit Zitat |
|---|---|---|
|
Mit TCP ist es nicht viel anders als mit deiner Methode über PostMessage. Vorallem ist dir eines sicher: es ist dann Plattformübergreifent verwendbar...
Und warten musst du auch nicht, bzw ist es absolut unkompliziert dies in TCP zu gestallten... |
||
Übersicht
BlitzMax, BlitzMax NG
Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group
