Neuer Prozess, wird nicht in neuem Fenster angezeigt...
-
Hi,
der sender soll einen neuen Prozess starten (den empfänger) und für diesen Prozess ein neues Fenster öffnen in dem dann die Ausgabe durch die Pipe geschieht. Zu funktionieren scheint es nur ein neues Fenster wird leider nicht geöffnet.sender.cpp
#include <windows.h> #include <iostream> #include <conio.h> using namespace std; int main(void){ // Anlegen aller Variablen etc. LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\huhu"); LPTSTR lpvMessage=TEXT("Es funktioniert!!!"); DWORD bytes; bool fConnected, create_process; STARTUPINFO si; PROCESS_INFORMATION pi; // --- Speicher loeschen STARTUPINFO --- ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); // Groesse si.dwFlags = STARTF_USESHOWWINDOW; // Fensteroptionen si.wShowWindow = SW_SHOW; // Neues Fenster soll gezeigt werden, wird aber nicht ?!?!?! // --- Speicher loeschen ProcessInfo --- ZeroMemory( &pi, sizeof(pi) ); // Pipe erzeugen HANDLE hPipe = CreateNamedPipe( lpszPipename, // pipe name PIPE_ACCESS_OUTBOUND, PIPE_WAIT, 1, // max. instances 5000, // output buffer size 5000, // input buffer size NMPWAIT_USE_DEFAULT_WAIT, // client time-out NULL); // default security attribute if (hPipe != INVALID_HANDLE_VALUE){ // Überprüfung ob bis hier alles geklapt hat! cout << "Prozess kann gestartet werden, weiter mit eingabe"; _getch(); // Process erzeugen create_process = CreateProcess( NULL, // No module name (use command line). TEXT("empfaenger.exe"), // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ); // Pointer to PROCESS_INFORMATION structure. } // Ist etwas mit der pipe verbunden? fConnected = ConnectNamedPipe(hPipe, NULL); // Wenn ja dan schreibe in die Pipe if(fConnected){ while(true){ WriteFile( hPipe, lpvMessage, 5000, &bytes, NULL ); } } // Alles beenden CloseHandle(hPipe); CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); return 0; }empfänger.cpp
#include <windows.h> #include <iostream> #include <conio.h> using namespace std; int main(void){ // Variablen anlegen etc. LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\huhu"); bool pipe_wait = false; DWORD bytes; char ausgabe_buffer[5000]; // Schleife um zu warten bis die Pipe bereit ist, // nötig da NMPWAIT_WAIT_FOREVER nicht immer funktioniert while(true){ pipe_wait = WaitNamedPipe( "\\\\.\\pipe\\huhu", NMPWAIT_WAIT_FOREVER ); // Wenn die Pipe bereit raus aus der Schleife if (pipe_wait != 0){ break; } // das ganze etwas verlangsamen auf 50ms Sleep(50); } // Überprüfung ob Pipe bereit ist cout << "Pipe gefunden" << endl; // File zur Pipe erzeugen HANDLE create_file = CreateFile( "\\\\.\\pipe\\huhu", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL ); while(true){ // In der schleife aus dem File/Pipe lesen... ReadFile( create_file, ausgabe_buffer, 5000, &bytes, NULL ); // und ausgeben cout << ausgabe_buffer; system("Pause"); } CloseHandle(create_file); return 0; }
-
Was ich noch vergessen habe, wie kann ich das ganze statt mit einem String, mit einer Struktur machen.
Was ich habe will ist, das sender, zahlen erzeugt. Empfänger liest sie und gibt sie aus.
-
Laines schrieb:
Was ich noch vergessen habe, wie kann ich das ganze statt mit einem String, mit einer Struktur machen.
Was ich habe will ist, das sender, zahlen erzeugt. Empfänger liest sie und gibt sie aus.
Kann mir keiner Helfen

Besonders obiges Problem macht mir zu schaffen.