Kommunikation zwischen zwei Programmen
-
Hallo,
ich habe neulich ein kleines Konsolen-Spiel in C geschrieben.
Nun habe ich mir überlegt, dass es doch möglich sein muss ein zweites Programm zu schreiben, welches für mich die Spieleingaben im Konsolenspiel übernimmt. Leider weiß ich nur nicht wie man so etwas verwirklichen kann und hoffe, dass mir von euch jemand behilflich sein kann.MfG
Creeky
-
Prinzipiell siehe: Interprocess Communications http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp
-
Meine Frage war vielleicht auch nicht eindeutig gestellt.
Die zwei Programme sollen nicht direkt miteinander kommunizieren, sondern das zweite Programm soll quasi dem ersten den Benutzer "vorpsielen".
Das erste Programm soll nicht verändert werden, sondern das zweite macht für mich einfach die Eingaben fürs erste Programm.Also soll das zweite Programm etwas in den Eingabestrom des ersten schreiben. Wie ist dies möglich?
P.S.: Hoffe, dass ich es jetzt eindeutiger beschrieben hab.
-
Zu überlegen wäre auch noch "SendInput": http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/sendinput.asp
Wenn es nur Zeichen sind die Simuliert werden sollen, so kannst Du auch einfach den I/O-Stream umeliten und sendest dem Programm dann die passenden Zeichen (siehe CreateProcess und in der STARTUPINFO dann STARTF_USESTDHANDLES)
-
Vielen Dank für die schnelle Antwort.
Leider habe ich deinen Vorschlag nicht ganz verstanden.
Wäre es möglich mir dies kurz an einem prägnanten Beispiel zu erklären (am besten mit Code)?MfG
Creeky
-
Siehe: Universal Console Redirector: http://www.codeproject.com/threads/consolepipe.asp
Und anstelle der Ausgabe umleiten und ReadFile verwenden, musst Du die Eingabe umleiten und WriteFile (auf den Pipe) verwenden...
-
Ich habe jetzt folgendes geschrieben (in der Hoffnung, dass es einigermasen stimmt):
#include <windows.h> #include <stdio.h> int main( VOID ) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = stdout; si.hStdOutput = stdin; // Start the child process. if( !CreateProcess("c:\\magic.exe",0,0,0,0,CREATE_NEW_CONSOLE,0,"C:\\",&si,&pi) ) { printf( "CreateProcess failed (%d).\n", GetLastError() ); return 0; } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); return 0; }
Nun versteh ich aber nicht ganz, wie ich diese Ströme umleiten kann, sodass mein Inputstrom des neuen Prozesses gleich dem Outputstrom des ursprünglichen Programms ist. Könnte mir da bitte noch jemand behilflich sein.
MfG
Creeky
-
Hast Du das Beispiel auf codeproject eigentlich mal angeschaut? Ist Dir dabei aufgefallen, dass da eine Pipe verwendet wird? In Deinem Beispiel finde ich das nicht! Ich habe nie behauptet, dass es ein Fünfzeiler wird!