Exec
Zaczniemy od przykładu:
#include <windows.h> int main(void) { WinExec("NOTEPAD.exe",SW_SHOWNORMAL); return 0; }
Omówienie:
Prototyp zastosowanej w tym programie funkcji WinExec() znajduje się w pliku nagłówkowym windows.h i wygląda następująco:
UINT WINAPI WinExec(LPCSTR, UINT);
UINT – unsigned int, jest to kod zwracany przez funkcję, niosący informację dotyczącą sposobu zakończenia pracy aplikacji potomnej.
WINAPI – funkcja pochodząca z interfejsu Win API 16.
LPCSTR – wskażnik wskazujący lokalicację i nazwę aplikacji potomnej (uruchamianej wewnątrz naszego programu).
UINT – parametr funkcji (tzw. stałagrupy SW... – od „Show Window". Najczęściej stosowane parametry:
SW_HIDE - okno aplikacji jest niewidoczne
SW_MINIMIZE - okno aplikacji jest zminimalizowane
SW_SHOWNORMAL - standardowe okno aplikacji
Przykład:
#include <windows.h> int main(void) { int wybor; LPCSTR p1 ="Czy chcesz uruchomić Notatnik?"; LPCSTR p2 ="Pojawił się problem."; wybor = MessageBox(0,p1,p2,MB_YESNO | MB_ICONQUESTION); if(wybor==IDYES) WinExec("NOTEPADE.EXE",SW_SHOWNORMAL); else MessageBox(0,"Nie?... to nie - twoja sprawa, Koniec",MB_OK); return 0; }
Omówienie:
Występująca w programie zmienna wybór przechowuje wynik. Jeżeli funkcja MessageBox() zwróci identyfikator klawisza TAK-IDYES, zostanie wywołany notatnik. W przeciwnym razie pojawi się okienko kończące.
- Spróbujcie tak przekształcić powyższy program, aby zamiast Notatnika uruchamiany był inny program (pamiętajcie wtedy o właściwej ścieżce dostępu).
7 komentarzy
tak jak napisalem ze podam kawalek kodu dla wywolania CreateProcess:
TStartupInfo SI;
TProcessInformation PI;
memset(&SI,0,sizeof(SI));
memset(&PI,0,sizeof(PI));
SI.dwFlags=STARTF_USESHOWWINDOW;
SI.wShowWindow=SW_SHOWDEFAULT;
SI.cb=sizeof(TStartupInfo);
if(CreateProcess(NULL,progName.c_str(),NULL,NULL,true,NORMAL_PRIORITY_CLASS,NULL,NULL,&SI,&PI)) {
WaitForSingleObject(PI.hProcess,10000);
WaitForSingleObject(PI.hThread,10000);
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
}
ten kawalek kodu otwiera pprogrampodany przez progName i czeka az tez sie zakonczy... jesli nie chcemy czekac to wywolujemy tylko samo CreateProcess... wiecej na ten temat mozna przeczytac w WinAPI
to jest jakis sposób na uruchamianie programów przez nasz program... ale jest dobry szczególnie dla aplikacji 16bit.. w SDK MS Windows napisali że dla aplikacji 32bit najlepiej urzyć funkjci CreateProcess... jak tylko wróce do domu z pracy to wyśle kawałek kodu ...
Hmm...dobre , dobre , tylko troszkę mało...przydało by sie troszkę więcej na ten temat, moim zdaniem temat nie został wyczerpany....
fork()/vfork() i system()