vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Pipe beschicken 
Autor: Mr. Fox
Datum: 27.04.05 21:12

Jetzt hab ich immerhin soviel herausgefunden, dass wenn man den VB Code wieder nach C/C++ umschreibt funzt es:
#include <windows.h>
#include <iostream>
 
#ifdef _CONSOLE
int main(int /*argc*/, char * /*argv[]*/ /*, char *env[]*/)
#else
int APIENTRY WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, _
  LPSTR /*lpCmdLine*/, int /*nCmdShow*/)
#endif
{
	HANDLE				hReadPipe1;		// STDOUT
	HANDLE				hWritePipe1;	// STDOUT
	HANDLE				hReadPipe2;		// STDERR
	HANDLE				hWritePipe2;	// STDERR
	HANDLE				hReadPipe3;		// STDIN
	HANDLE				hWritePipe3;	// STDIN
	DWORD				bytewritten;
	char				cmdline[256];
	char				StuffToWrite[256];
	STARTUPINFO			start;
	PROCESS_INFORMATION	proc; 
	SECURITY_ATTRIBUTES	sa;
 
	sa.nLength = sizeof(sa);
	sa.bInheritHandle = TRUE;
	sa.lpSecurityDescriptor = NULL;
 
	// A pipe of redirection of STDOUT
	if(!CreatePipe(&hReadPipe1, &hWritePipe1, &sa, NULL))
	{
		std::cerr << "CreatePipe failed!\n";
	}
	// A pipe of redirection of STDERR
	if(!CreatePipe(&hReadPipe2, &hWritePipe2, &sa, NULL))
	{
		std::cerr << "CreatePipe failed!\n";
	}
	// A pipe of redirection of STDIN
	if(!CreatePipe(&hReadPipe3, &hWritePipe3, &sa, NULL))
	{
		std::cerr << "CreatePipe failed!\n";
	}
 
	memset(&start, 0, sizeof(start));
	memset(&proc, 0, sizeof(proc));
	start.cb = sizeof(start);
	start.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
	start.hStdOutput = hWritePipe1;
	start.hStdError = hWritePipe2;
	start.hStdInput = hReadPipe3;
	start.wShowWindow = SW_NORMAL; // SW_HIDE
	strcpy(cmdline, "cmd");
	if(!CreateProcess(NULL, cmdline, &sa, &sa, TRUE, NORMAL_PRIORITY_CLASS, NULL, _
  NULL, &start, &proc))
	{
		std::cerr << "CreateProcess failed!\n";
	}
	CloseHandle(hWritePipe1);
	CloseHandle(hWritePipe2);
	CloseHandle(hReadPipe3);
 
    strcpy(StuffToWrite, "start notepad\n");
    if(!WriteFile(hWritePipe3, &StuffToWrite, (DWORD) strlen(StuffToWrite), _
      &bytewritten, NULL))
	{
		std::cerr << "WriteFile failed!\n";
	}
 
	strcpy(StuffToWrite, "exit\n");
    if(!WriteFile(hWritePipe3, &StuffToWrite, (DWORD) strlen(StuffToWrite), _
      &bytewritten, NULL))
	{
		std::cerr << "WriteFile failed!\n";
	}
 
	/*while(WaitForSingleObject(proc.hProcess, 10) == WAIT_TIMEOUT)
	{};*/
	CloseHandle(hReadPipe1);
	CloseHandle(hReadPipe2);
	CloseHandle(hWritePipe3);
}
Vielleicht ist ja mit den API Deklarationen noch etwas faul. Ansonsten fällt mir jetzt spontan auch nix mehr ein. Eine Lösung gibt es aber dann auf jeden Fall, diesen Code in eine C/C++ - DLL auslagern und dann von VB aus aufrufen. Immerhin schonmal eine Lösung, wenn auch eher quick & dirty .
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Pipe beschicken2.494BasTler08.04.05 13:54
Re: Pipe beschicken1.040BasTler11.04.05 13:19
Re: Pipe beschicken903BugMeNot24.04.05 13:57
Re: Pipe beschicken914BugMeNot24.04.05 15:54
Re: Pipe beschicken917brave@heart25.04.05 01:15
Re: Pipe beschicken900BasTler25.04.05 15:16
Re: Pipe beschicken974BasTler25.04.05 08:57
Re: Pipe beschicken927BugMeNot25.04.05 09:17
Re: Pipe beschicken1.081Mr. Fox25.04.05 17:42
Re: Pipe beschicken851BasTler26.04.05 08:54
Re: Pipe beschicken828Mr. Fox26.04.05 09:05
Re: Pipe beschicken894BasTler26.04.05 14:36
Re: Pipe beschicken895BasTler26.04.05 14:37
Re: Pipe beschicken993Mr. Fox26.04.05 15:11
Re: Pipe beschicken798BasTler26.04.05 15:48
Re: Pipe beschicken819Mr. Fox26.04.05 18:20
Re: Pipe beschicken894BasTler27.04.05 10:32
Re: Pipe beschicken845Mr. Fox27.04.05 21:12
Re: Pipe beschicken803BasTler28.04.05 08:50
Re: Pipe beschicken863BasTler28.04.05 15:15
Re: Pipe beschicken796Mr. Fox28.04.05 17:44
Re: Pipe beschicken801BasTler29.04.05 14:48
Re: Pipe beschicken1.348BasTler29.04.05 14:51
Lösung1.058BasTler24.05.05 16:43
Re: Lösung850Mr. Fox26.05.05 10:13
Re: Lösung851BasTler27.05.05 12:47
Re: Pipe beschicken830Blacky08.05.05 23:49
Re: Pipe beschicken799BasTler09.05.05 14:51

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel