“运行”;“创建新任务”;WINAPI

“运行”;“创建新任务”;WINAPI,winapi,Winapi,我需要从我的应用程序运行“创建新任务”程序,就像您可以从任务管理器运行一样 有一个CreateProcess()API 我建议您查看文档。它将允许您按名称加载应用程序,其余由Windows负责 我假设您指的是Run对话框?此代码将打开Windows运行对话框。警告:这将通过序号而不是名称访问Windows API。这通常是做一些未记录的事情的迹象,这些事情可能在未来的Windows版本中起作用,也可能不起作用 请注意-emergeLibGlobals::GetShell32DLL()是一个内部方

我需要从我的应用程序运行“创建新任务”程序,就像您可以从任务管理器运行一样

有一个
CreateProcess()
API


我建议您查看文档。它将允许您按名称加载应用程序,其余由Windows负责

我假设您指的是Run对话框?此代码将打开Windows运行对话框。警告:这将通过序号而不是名称访问Windows API。这通常是做一些未记录的事情的迹象,这些事情可能在未来的Windows版本中起作用,也可能不起作用

请注意-
emergeLibGlobals::GetShell32DLL()
是一个内部方法,它在shell32.dll上调用
LoadLibrary
,并返回其HMODULE。您可以直接调用
LoadLibrary
。此外,如果您的编译器支持C++11,则可以将
NULL
替换为
nullptr


声称有一个记录在案的方法来做同样的事情,但我没有尝试过,所以我不能保证它会起作用。

没有。不要这样做。如果您想复制该功能,只需调用ShellExecuteEx即可。@DavidHeffernan除了未记录之外,还有什么特别的原因吗?我很好奇,因为我直接从我维护的代码库中提取了这段代码。如果它是坏代码,我想知道,这样我就可以处理它。你需要另一个吗reason@DavidHeffernan我的代码库是一个shell替代品,所以我们已经在做一些没有文档的事情(MS对替换shell不友好)。所以,是的,我需要另一个原因。这确实是你的问题,与q无关
// 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;
}