WinAPI

ShellExecute

  • 2010-08-22 11:13
  • 9 komentarzy
  • 3959 odsłon
  • Oceń ten tekst jako pierwszy
// C/C++
HINSTANCE ShellExecute(
  HWND hwnd, 
  LPCTSTR lpOperation, 
  LPCTSTR lpFile, 
  LPCTSTR lpParameters,  
  LPCTSTR lpDirectory,  
  INT nShowCmd 
);

// Delphi
function ShellExecute(hwnd: HWnd; lpOperation, lpFile, lpParameters, lpDirectory: PChar; nShowCmd: Integer): HInstance;

Funkcja ShellExecute służy przede wszystkim do otwierania programów, dokumentów i stron internetowych.


Parametry
hwnd - uchwyt okna rodzica. Okno to będzie przechwytywać wszelkie okna komunikatów.

lpOperation - operacja do wykonania na pliku. Domyślną operacją jest open (otwieranie). Oto niektóre z możliwych wartości:
'open' - otwieranie (domyślne)
'print' - drukowanie
'explore' - eksploracja (tylko katalogi).
'install' - instalacja (pliki INF)

lpFile - nazwa pliku lub ścieżka internetowa do otwarcia. Parametr nie może przyjąć wartości NULL (nil).

lpParameters - parametry wiersza poleceń.

lpDirectory - katalog roboczy programu. Domyślny katalog to katalog aktualny.

nShowCmd - określa widoczność okna. Może być jedną z wartości:
SW_HIDEUkrywa okno i uaktywnia inne okno
SW_MAXIMIZEMaksymalizuje okno
SW_MINIMIZEMinimalizuje okno i uaktywnia następne w kolejności okno
SW_RESTOREUaktywnia i wyświetla okno. Jeśli okno jest zminimalizowane lub zmaksymalizowane, zostanie przywrócone do pierwotnego rozmiaru i pozycji.
SW_SHOWUaktywnia i wyświetla okno w bieżącym rozmiarze i pozycji
SW_SHOWDEFAULTNadaje oknu stan określony wartością pola wShowWindow struktury STARTUPINFO przekazanej w wywołaniu funkcji CreateProcess przez program, który uruchomił aplikację.
SW_SHOWMAXIMIZEDUaktywnia okno i wyświetla je w stanie zmaksymalizowanym
SW_SHOWMINIMIZEDUaktywnia okno i wyświetla je w stanie zminimalizowanym
SW_SHOWMINNOACTIVEWyświetla okno w stanie zminimalizowanym. Nie uaktywnia okna.
SW_SHOWNAWyświetla okno w bieżącym stanie. Nie uaktywnia okna.
SW_SHOWNOACTIVATEWyświetla okno w bieżącym rozmiarze i pozycji. Nie uaktywnia okna.
SW_SHOWNORMALUaktywnia i wyświetla okno. Jeśli okno jest zminimalizowane lub zmaksymalizowane, zostanie przywrócone do pierwotnego rozmiaru i pozycji.

Jeśli lpFile określa dokument, parametr nShowCmd zostanie po prostu przekazany do skojarzonej aplikacji, która zadecyduje jak go obsłużyć.

Wartości zwracane
Zwrócona wartość nie ma nic wspólnego z jakimkolwiek uchwytem. Jedyne, co można z nią zrobić, to sprawdzić, czy jest większa od liczby 32. Jeśli nie wystąpił błąd, funkcja zwraca wartość większą od 32. Jeśli błąd wystąpił, funkcja zwraca wartość nie większą od 32. Oto lista możliwych wartości:
0zabrakło pamięci i/lub zasobów systemowych
ERROR_FILE_NOT_FOUNDplik nie został znaleziony
ERROR_PATH_NOT_FOUNDścieżka nie została odnaleziona
ERROR_BAD_FORMATplik wykonywalny jest nieprawidłowy
SE_ERR_ACCESSDENIEDdostęp do pliku jest zabroniony
SE_ERR_ASSOCINCOMPLETEskojarzenie rozszerzenia jest niekompletne lub nieprawidłowe
SE_ERR_DDEBUSYzgłoszenie DDE nie mogło zostać przetworzone z powodu zajętości
SE_ERR_DDEFAILwystąpił błąd DDE
SE_ERR_DDETIMEOUTczas oczekiwania minął przed przetworzeniem zgłoszenia DDE
SE_ERR_DLLNOTFOUNDnie odnaleziono biblioteki DLL
SE_ERR_FNFnie odnaleziono pliku
SE_ERR_NOASSOCrozszerzenie nie zostało skojarzone z aplikacją
SE_ERR_OOMzabrakło pamięci
SE_ERR_PNFnie odnaleziono ścieżki
SE_ERR_SHAREnastąpiło naruszenie zasad współużytkowania


Przykład:
ShellExecute(Handle, 'open', 'program.exe', nil, 'C:\windows\', SW_NORMAL);


Uwagi
Windows 95/98/Me: Wersja Unicode funkcji (ShellExecuteW) jest wspierana przez Warstwę Unicode (Microsoft Layer for Unicode) - MSLU. Aby użyć funkcji w wersji Unicode, należy dokonać pewnych zmian w aplikacji wedle wskazówek nakreślonych w Microsoft Layer for Unicode on Windows 95/98/Me Systems (eng)


Zobacz też

9 komentarzy

gram4prog 2011-12-15 18:06

Przepraszam za laickie pytanie ale programowanie nie jest moją drugą naturą (szczególnie windozy)...
Jak umieścić ciąg z parametrami dla programu jeśli wymagane jest w nim użycie cudzysłowu " ?
Muszę zrobić:

program -parametr1 "wartość" -parametr2

Próbowałem sklejać ciąg z dwóch z wstawionymi +chr(34)+ ale niestety nie zadziałało...
Byłbym wdzięczny za jakąś podpowiedź...

Sharkmen 2011-03-12 08:26

Bardzo ladne , pomoglo mi w programie

Bufik 2008-08-14 02:53

cos w tym guscie bedzie

HINSTANCE shlexec_error;
shlexec_error = ShellExecute(0,"open","notepad","asd.txt","C:\sample_dir\",0);
if( (int)shlexec_error != ERROR_FILE_NOT_FOUND)
    MessageBox(0,"file not found",0,MB_OK);

Bono94 2008-07-06 17:45

Czytałem to 500000x i i tak nie wiem jak użyć np. "ERROR_FILE_NOT_FOUND"... Przydał by się jakiś przykład!

wargo 2008-05-10 15:51

Gratulacje, potrzebowałem takiej funkcji, co prawda nie w delphi lecz c++.

Aldonix 2006-04-07 18:35

bardzo dobry art

Adam Boduch 2006-04-07 11:42

IMO tekst  Jojersztajnera lepszy od mojego. Przywrocilem jego wersje.