EmitEvent in anderen Prozess

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

blitzatius

Betreff: EmitEvent in anderen Prozess

BeitragDo, Mai 31, 2007 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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
    ^=========================================<

Blitzcoder

Newsposter

BeitragDo, Mai 31, 2007 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 31, 2007 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Platformübergreifend ist mir so ziemlich Wurst. Und TCP möchte ich nicht verwenden, weil ich Events verwenden möchte Rolling Eyes
Bei TCP muss man immer schauen, ob eine Nachricht kommt und bei Events kann man einfach "WaitEvent" benutzen.

Blitzcoder

Newsposter

BeitragDo, Mai 31, 2007 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 31, 2007 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Blitzcoder

Newsposter

BeitragDo, Mai 31, 2007 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 31, 2007 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 31, 2007 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jun 01, 2007 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jun 01, 2007 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Vllt. das Extern ganz am Anfang schreiben? ^^
Weiß nich obs dann geht...
....

rema

BeitragFr, Jun 01, 2007 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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...

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group