2014-04-17 65 views

回答

1

有一個CreateProcess() API。

我建議你看看文檔,here。它將允許您通過名稱加載應用程序,其餘部分由Windows處理。

0

我假設你指的是運行對話框?這段代碼將打開Windows運行對話框。 警告:這會通過序號訪問Windows API,而不是通過名稱訪問。這通常是做未記錄的事情的標誌,可能在未來的Windows版本中可能會或可能不會。

// MS Run dialog 
typedef void (__stdcall* lpfnMSRun)(HWND, HICON, LPCSTR, LPCSTR, LPCSTR, int); 
static lpfnMSRun MSRun = NULL; 

bool DisplayRunDialog() 
{ 
    if ((MSRun == NULL) && (emergeLibGlobals::GetShell32DLL())) 
    { 
    MSRun = (lpfnMSRun)GetProcAddress(emergeLibGlobals::GetShell32DLL(), (LPCSTR) 61); 
    } 

    if (MSRun) 
    { 
    MSRun(NULL, NULL, NULL, NULL, NULL, 0); 
    return true; 
    } 

    return false; 
} 

只是一個關於這對夫妻的筆記 - emergeLibGlobals::GetShell32DLL()是,在shell32.dll中調用LoadLibrary並返回其HMODULE的內部方法。您可以直接致電LoadLibrary。另外,如果你的編譯器支持C++ 11,你可以用nullptr代替NULL

This CodeProject article聲稱有書面的方式做同樣的事情,但我還沒有嘗試過,所以我不能保證它會工作。

+0

不,不要這樣做。只要調用ShellExecuteEx如果你想複製該功能。 –

+1

@DavidHeffernan除了這個沒有記錄的事實之外,還有什麼特別的原因嗎?我很好奇,因爲我直接從我維護的代碼庫中提取這些代碼。如果代碼不好,我想知道我可以處理它。 – computerfreaker

+0

你需要另一個原因 –