Verwendung von OpenProcess

DaFunk2k

Mitglied
Hallo zusammen,

habe schon in einigen Beiträge OpenProcess gesehen, aber irgendwie werd ich daraus nicht schlau und das Beispiel bei MSDN funktioniert bei mir auch nicht so ganz :(

Möchte eigentlich nur wissen, wie ich ein anderes Programm mit OpenProcess starten kann.
Wäre über einen kurzen Codeschnipsel sehr dankbar.

Schönen Gruß
Andreas
 
Also...ich habe jetzt noch weiter rumprobiert:

Die Funktion system ist aus folgenden Grund wohl nicht für mich geeignet
Invokes command interpreter to execute a command. Once terminated, the interpreter gives back control to the program returning an int value.
Das heisst wohl, dass mein Programm für die Zeit, wo das andere läuft unterbrochen wird, oder?


Die Funktion WinExec kennt embedded C++ scheinbar nicht. :suspekt:
Vielleicht habe ich auch nicht die richtigen Headerdateien included?


Zu der CreateProcess Funktion habe ich bislang kein einfaches Beispiel gefunden. Und die, die ich gefunden habe, haben leider nicht funktioniert...allerdings lag es nicht an der CreateProcess Funktion. Die scheint er sogar zu kennen :)
Habt ihr vielleicht ein ganz einfaches Beispiel für mich. Also nur der CreateProcess Aufruf mit dem allernötigsten drum herum :)

Vielen Dank schonmal
 
aber sicher doch :)

hab das Beispiel jetzt nochmal ausprobiert und alles unnütze rausgeschmissen (CString gibbet unter embedded ja leider net :( ). Scheinbar kennt er jetzt auch:
STARTUPINFO si;
PROCESS_INFORMATION pi;
Das kannte er nämlich eben auch schonmal nicht :confused:

Jetzt bleibt nur noch eine Fehlermeldung

if( !CreateProcess( NULL, // No module name (use command line).
TEXT(path), // 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.
)

error C2065: 'Lpath' : undeclared identifier
 
Also
C++:
char* path = new char[1000000];
...TEXT(path), ...
Das ist natürlich Quatsch. Path ist ein Zeiger auf char und basta. Nimm einfach mal den TEXT( ) Makroaufruf da weg, den brauchst du nur wenn du ein Stringliteral übergeben (und das Programm möglichst generisch bezüglich des Zeichensatzes halten) willst.

Gruß
 
Ich weiß jetzt zwar nicht genau wofür das TEXT Makro da war, aber ohne funktioniert der Teil schon einmal :)

Allerdings hätte ich da noch eine Fehlermeldung anzubieten :rolleyes:

cannot convert parameter 2 from 'char *' to 'const unsigned short *'

tritt bei der Übergabe des Parameters &pi auf
 
Parameter 2 ist aber nicht 'pi', sondern immer noch Dein 'path', und er beschwert sich, daß CreateProcess als 2. Parameter einen Zeiger auf 'unsigned short' haben will, Du ihm aber einen Zeiger auf 'char' übergibst. Definiere path mal als
Code:
TCHAR* path = new TCHAR[1000000];
 
Der Compiler bezog sich auf den zweiten Parameter - ich weiß nicht wie du darauf kommst das das irgendwas mit dem lpProcessInformation Parameter zu tun haben könnte.

Du hast anscheinend Unicode bzw. MCBS in deinem Projekt angeschaltet. Die CreateProcess Funktion erwartet einen LPTSTR als Parameter. Das ist ein generischer Stringtyp der je nachdem ob Unicode oder MCBS angeschaltet ist, als Zeiger auf char, wchar_t oder ein integer Typ definiert wird.

Deklariere einfach den path als LPTSTR, so wie es im MSDN steht:
C:
LPTSTR path = _tcsdup(TEXT("\"C:\\Program Files\\MyApp\" -L -S"));
Nicht vergessen den String dann später mit free freizugeben.

PS: Du kannst es auch so machen wie jokey2 geschrieben hat. Die Deklaration kommt auf's gleiche raus. Allerdings kannst du nicht mehr mit der strcpy Funktion arbeiten - du mußt dann die generische Funktion _tcscpy benutzen.

Gruß
 
Zurück