EmitEvent in anderen Prozess
Übersicht

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


Powered by phpBB © 2001 - 2006, phpBB Group