【问题标题】:Replace call to AfxGetInstanceHandle() by Windows API function(s)替换 Windows API 函数对 AfxGetResourceHandle() 的调用)
【发布时间】:2013-08-09 20:38:27
【问题描述】:
SHELLEXECUTEINFO info;

// Initializing struct
info.cbSize       = sizeof(info); 
info.fMask        = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
info.hwnd         = NULL;
info.lpVerb       = _T("open");
info.lpParameters = sParameters_p; 
info.lpDirectory  = _T("");
info.nShow        = SW_SHOW; 
info.hInstApp     = NULL;
info.lpFile       = sFileName_p;
// Problem here :
info.hInstApp     = AfxGetInstanceHandle(); 

ShellExecuteEx(&info);

Windows API 中是否有一个函数可以用来获取进程的 HINSTANCE 以便我可以避免使用 AfxGetInstanceHandle();

GetModuleHandle(NULL); 有效吗?它返回一个 HMODULE 而不是一个 HINSTANCE。

【问题讨论】:

  • 为了有答案,我推广了评论。

标签: c++ c windows process mfc


【解决方案1】:

是的,GetModuleHandle(NULL) 有效。传递NULL 会导致它向调用进程(即您的EXE 文件)返回一个句柄。

至于HMODULE与HINSTANCE的问题,HMODULE和HINSTANCEused to be different way back in 16-bit Windows,但它们现在是同一个东西,可以互换使用。


但请注意,您没有正确使用此字段。您必须使用 NULL 对其进行初始化。

然后在进程启动并且ShellExecuteEx() 返回后,该字段将包含已启动进程的旧版Windows 3.x 启动错误代码。旧的 HINSTANCE 值,但前提是进程无法启动。请注意,hProcess 字段将设置为您启动的进程的进程句柄。当您完成使用该句柄时,您必须在该句柄上调用 CloseHandle()。否则将导致永久句柄泄漏。

请确保这是您打算做的。如果您实际上对获取句柄不感兴趣,请省略 SEE_MASK_NOCLOSEPROCESS 选项。

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多