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.


Anmelden zum Antworten