Tag: winapi

Entries for tag "winapi", ordered from most recent. Entry count: 17.

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

Pages: > 1 2 3

# Odpalić program i poczekać

20:35
Thu
07
Aug 2008

Jak uruchomić z poziomu swojego programu inny program i zaczekać na jego zakończenie? Funkcji do uruchamiania programów jest wiele. Najprostsza, ale posiadająca małe możliwości jest funkcja system z biblioteki standardowej C, która pozwala uruchomić dowolne polecenie systemowe. Prosta jest też funkcja WinExec, ale ona jest przestarzała i niezalecana.

Pośród tych potężnych zostają dwie, z których każda ma swoje wady i zalety. ShellExecute i ShellExecuteEx pozwala "uruchomić" dowolny plik lub wykonać na nim inną akcję powłoki (np. "open", "edit", "print"). W przypadku plików EXE to będzie uruchomienie, a dla różnych dokumentów, ich otwarcie w domyślnej aplikacji skojarzonej z rozszerzeniem. Z kolei funkcja CreateProcess pozwala uruchomić plik wykonywalny podając przy tym m.in. własne zmienne środowiskowe czy też uchwyty przechwytujące konsolowe wejście-wyjście. Zwraca natomiast uchwyt do utworzonego procesu.

Ostatnio wyczytałem, że funkcja ShellExecuteEx też potrafi zwrócić uchwyt do utworzonego procesu. Wystarczy w strukturze SHELLEXECUTEINFO ustawić pole fMask na flagę SEE_MASK_NOCLOSEPROCESS. Wówczas pole hProcess zostanie wypełnione uchwytem. Potem wystarczy już tylko poczekać na zakończenie programu takim wywołaniem:

WaitForSingleObject(shell_execute_info.hProcess, INFINITE);

Comments | #winapi Share

Pages: > 1 2 3

STAT NO AD
[Stat] [STAT NO AD] [Download] [Dropbox] [pub] [Mirror]
Copyright © 2004-2017