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:
Yorum Gönder