Bu Blogda Ara

4 Nisan 2010 Pazar

Winapi: WinExec

Merhaba bu yazımda WinExec fonksiyonunu inceliyeceğiz.

Teknik detaylara geçmeden önce özetle bu fonksiyonun görevinden bahsedeyim. Bu fonksiyon ile yeni bir uygulamayı başlatabiliyoruz. Başlattığımız uygulama fonksiyonu çağıran uygulama ile aynı yetkilere sahip oluyor.

Fonksiyonun yapısı:

UINT WINAPI WinExec(
__in LPCSTR lpCmdLine,
__in UINT uCmdShow
);


2 adet parametre alıyor. Bunlardan birincisi çalıştıracağımız uygulamanın sabit disk üzerindeki tam adresini ifade ediyor.

typedef __nullterminated CONST CHAR *LPCSTR, *PCSTR;

İkinci parametre ise açacağımızın uygulamanın başlama durumunu belirtmektedir. Örnek olarak simge durumunda, tam ekran ya da görünmez olarak başlatabiliriz.


#define SW_HIDE 0 // gizli
#define SW_SHOWNORMAL 1 // normal
#define SW_NORMAL 1
#define SW_SHOWMINIMIZED 2 // simge durumunda
#define SW_SHOWMAXIMIZED 3 // tam ekran
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4 // normal gösterim ile aynı, tek farkı aktif olmaması
#define SW_SHOW 5 // gösterir (pencere gizli bile olsa)
#define SW_MINIMIZE 6 // simge durumuna getirir
#define SW_SHOWMINNOACTIVE 7 // simge durumuyla aynı, tek farkı aktif değil
#define SW_SHOWNA 8 // gösterir, aktif değil
#define SW_RESTORE 9 // simge durumundan kurtarır
#define SW_SHOWDEFAULT 10 // uygulamanın orijinal açılış değeri (CreateProcess'te kullanılan...)
#define SW_FORCEMINIMIZE 11 // simge durumuna zorlar (uygulama yanıt vermese bile)
#define SW_MAX 11 // tam ekrana zorlar (uygulama yanıt vermese bile)


Bu fonksiyonu kullanabilmek için C/C++ uygulamanıza WinBase.h (Windows.h içerisinde mevcut) başlık dosyasını eklemeniz gereklidir. WinApi kernel32.dll içerisindedir.

Windows 2000 Professional ve üzeri bir işletim sisteminde çalıştırılabilir.

Olası hata kodları ve açıklamaları:

0 Sistem kaynakları ya da hafızası yetersiz.

ERROR_BAD_FORMAT .exe dosyası geçersiz.

ERROR_FILE_NOT_FOUND Belirtilen dosya bulunamadı.

ERROR_PATH_NOT_FOUND Belirtilen yol bulunmadı.


Hemen basit bir uygulama yapalım.

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


int main(int argc, char **argv)
{
long hata = WinExec("notepad.exe",SW_NORMAL);

switch(hata)
{
case 0: printf("Sistem kaynakları ya da hafızası yetersiz.\n"); break;
case ERROR_BAD_FORMAT: printf(".exe dosyası geçersiz.\n"); break;
case ERROR_FILE_NOT_FOUND: printf("Belirtilen dosya bulunamadı.\n"); break;
case ERROR_PATH_NOT_FOUND: printf("Belirtilen yol bulunmadı.\n"); break;
default: printf("Uygulama başarıyla çalıştırıldı.\n");
}

system("pause");
return 0;
}


Not: Bu uygulama Microsoft Visual Studio 2008 Express Edition üzerinden test edilmiştir.

Hiç yorum yok: