通过Windows API函数替换对AfxGetInstanceHandle()的调用

病毒721
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中是否有一个函数可以用来获取进程的提示,因此可以避免使用AfxGetInstanceHandle();。

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

克里斯

是的,GetModuleHandle(NULL)行得通。传递NULL会使它返回到调用进程的句柄(这是您的EXE文件)。

至于HMODULEHINSTANCE问题,HMODULEHINSTANCE 曾经在16位Windows不同的方式回来,但他们现在同样的事情,可以互换使用。


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

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

确保确保这是您要执行的操作。如果您实际上对获取句柄不感兴趣,请省略SEE_MASK_NOCLOSEPROCESS选项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章