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 Zitieren
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 Zitieren
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 Zitieren
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 Zitieren
Goos Geschrieben 27. Juni 2003 Geschrieben 27. Juni 2003 Also ich haettes mal mit nem CreateProcess probiert Goos Zitieren
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: Zitieren
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 Zitieren
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. Zitieren
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); Zitieren
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 Zitieren
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 Zitieren
Babybaer Geschrieben 27. Juni 2003 Autor Geschrieben 27. Juni 2003 Das war spitze alles tut Danke Zitieren
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 Zitieren
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...) Zitieren
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;) Zitieren
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 Zitieren
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 Zitieren
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 Zitieren
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 Zitieren
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 Zitieren
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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.