Babybaer Geschrieben 26. Juni 2003 Geschrieben 26. Juni 2003 Hallo Leutz, möchte gern aus meinem Programm prüfen, ob ein anderes Programm läuft. (z.b.MS-DOS Fenster "cmd"). Danke
Guybrush Threepwood Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Hi, je nach Betriebssystem könntest du mit CreateToolhelp32Snapshot alle laufenden Processe rausbekommen und dann überprüfen ob der gesuchte dabei ist. Vielleicht hilft dir dieser Thread weiter. Gruß Guybrush
Babybaer Geschrieben 27. Juni 2003 Autor Geschrieben 27. Juni 2003 danke vielleicht hast ja auch noch eine andere idee. ich möchte z.b. partitionieren und danach formatieren. das Problem ist wenn ich diese Aktionen ausführe wartet er nicht ab bis der Task beendet wurde. Habe das jetzt mir ShellExecute und mit WinExec probiert. Könnte eine Returnwert gebrauchen der mir sagt das das Programm beendet wurde. Idee vielleicht??? THX
Guybrush Threepwood Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Original geschrieben von Babybaer Idee vielleicht??? Klar:D Wenn du ShellExecuteEx() benutzt, bekommst du ein Handle auf den erstellten Process. Danach kannst du z.B. mit einer while Schleife solange warten wie GetExitCodeProcess() STILL_ACTIVE zurückliefert. Gruß Guybrush
Goos Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Also ich haettes mal mit nem CreateProcess probiert Goos
Babybaer Geschrieben 27. Juni 2003 Autor Geschrieben 27. Juni 2003 son mist ShellExecute frist doch mein "Format c:" nicht. LPCSTR lpszFile = "format.com c: /fs:ntfs /v:WINDOWS /Y"; WinExec(lpszFile,SW_SHOW); so tuts ja aber da habe ich das selbe Problem. Keine Handle!!! -------------------- und so tuts nicht! HINSTANCE test; test = ShellExecute(0, "open", "format.com", "c: /fs:ntfs /v:WINDOWS /Y", NULL, SW_SHOWNORMAL); :confused:
Goos Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Hasts auch schon mit nem CreateProcess probiert?...wuerd mich schon sehr wundern, wenn das dann nicht geht Goos
Guybrush Threepwood Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 ShellExecuteEx(), nicht ShellExecute() Dann klappt das auch mit dem Parameter, weil du mußt da eine Struktur mit den einzelnen Daten füllen.
Babybaer Geschrieben 27. Juni 2003 Autor Geschrieben 27. Juni 2003 scheinbar bin ich etwas doof aber hast mir vielleicht mal eine Beispiel. bei mir tus nicht so tooolllll. das bitte nicht anschauen :-) LPDWORD lpExitCode; HINSTANCE handle; handle = ShellExecute(0,"open","test.cmd",NULL,NULL,SW_SHOWNORMAL); do{ if(GetExitCodeProcess(handle,lpExitCode)==true) break; }while(1);
Goos Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Mach mal so: DWORD dwLastErrorReturnCode; STARTUPINFO si; memset(&si,0, sizeof(si)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; PROCESS_INFORMATION pi; memset(π,0, sizeof(pi)); BOOL bSuccess = CreateProcess(NULL, (LPTSTR)"formatoderwasauchimmer", NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &si,π); if (bSuccess) { WaitForSingleObject(pi.hProcess, INFINITE); GetExitCodeProcess(pi.hProcess, &dwLastErrorReturnCode); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } else dwLastErrorReturnCode = GetLastError();[/PHP] Viel Spass noch Goos
Guybrush Threepwood Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Neeneenee, und da schreib ich 2 mal ShellExecuteEx() Bsp.: SHELLEXECUTEINFO si; memset (&si,0,sizeof(SHELLEXECUTEINFO)); si.cbSize = sizeof(SHELLEXECUTEINFO); si.fMask = SEE_MASK_NOCLOSEPROCESS; si.lpFile = (const char*)"format.com"; si.lpParameters = "c: /fs:ntfs /v:WINDOWS /Y"; si.nShow = SW_SHOW; ShellExecuteEx(&si); do { GetExitCodeProcess(si.hProcess,&dwExitCode); } while(dwExitCode == STILL_ACTIVE); [/PHP] Gruß Guybrush
Goos Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Eine Frage haette ich noch....benutzt du das jetzt wirklich um Partitionen zu formatieren und so? Goos
Shlo Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Bitte, bitte benutze niemals memset() wenn es eine Windows Anwendung ist, dafür gibts nähmlich eine API Funktion - ZeroMemory(); Dasselbe gilt für strlen, strcpy usw (lstrlen, lstrcpy...)
Guybrush Threepwood Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Wenn du mir jetzt noch eine Vernünftige Erklärung gibst warum nicht, dann werd ich das vielleicht auch machen;)
Goos Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Original geschrieben von Shlo Bitte, bitte benutze niemals memset() wenn es eine Windows Anwendung ist, dafür gibts nähmlich eine API Funktion - ZeroMemory() Das halt ich fuer Schwachfug Wenn man mal nachschaut, dann gibts in der winbase.h ein #define ZeroMemory RtlZeroMemory #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length)) folglich ruft ZeroMemory memset auf, was soll also an memset schlechter sein? Goos
Shlo Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Erstens weil das ganze C-Runtime (RTL) zu deiner *.exe eingebunden wird das bläht die *.exe nur auf, zweitens wegen der Geschwindigkeit :mod: drittens weil dafür entsprechende API Calls gibt usw, usf... Genug ? Achja, wenn ihr des Englischen mächtig seid, dann http://www.catch22.org.uk/tuts/minexe.asp
Goos Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Original geschrieben von Shlo Erstens weil das ganze C-Runtime (RTL) zu deiner *.exe eingebunden wird das bläht die *.exe nur auf Wird zu deiner *.exe mit ZeroMemory genauso dazugelinkt, is also kein Argument. Original geschrieben von Shlo zweitens wegen der Geschwindigkeit :mod: Wie kommst auf die Idee, dass deine Version dann schneller waere? ....Erklaerung bitte Original geschrieben von Shlo drittens weil dafür entsprechende API Calls gibt Wo soll da das Argument sein?!?! (Ich sag ja auch nicht: Leute wascht nur noch mit Weisser Riese Megaperls.....und begruende das dann mit: Na weil es Weisser Riese Megaperls gibt! ) Original geschrieben von Shlo usw, usf... Genug ? Aehmm noe...noch hast kein wirkliches Argument gebracht, also nicht genug Goos
nic_power Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Original geschrieben von Shlo Erstens weil das ganze C-Runtime (RTL) zu deiner *.exe eingebunden wird das bläht die *.exe nur auf, zweitens wegen der Geschwindigkeit :mod: drittens weil dafür entsprechende API Calls gibt usw, usf... Genug ? Achja, wenn ihr des Englischen mächtig seid, dann http://www.catch22.org.uk/tuts/minexe.asp Die Code-Größe ist eigentlich kein Argument mehr, zum einen sind die aktuellen Maschinen mit ausreichend Speicher ausgestattet und zum anderen gibt es das Konzept der "shared Libraries". Das Killerargument wird übrigens auf der von Dir genannten Seite gleich mit aufgeführt: Die nicht vorhandene/eingeschränkte Portabilität bei Verwendung des Windows-APIs. Ich würde soweit wie möglich auf die Standard C-Library Funktionen zurückgreifen. Nic
Shlo Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Original geschrieben von nic_power Die Code-Größe ist eigentlich kein Argument mehr... für mich ist es schon ein Argument, aber wenn du meinst... :marine
Babybaer Geschrieben 30. Juni 2003 Autor Geschrieben 30. Juni 2003 Original geschrieben von Goos Eine Frage haette ich noch....benutzt du das jetzt wirklich um Partitionen zu formatieren und so? Goos Ja warum nicht. Brauche nur eine Partition und die Programme sind auf meinen Rohling schon dabei.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden