2014-04-17 32 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

你需要另一个原因 –