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文件)。
至于HMODULE
与HINSTANCE
问题,HMODULE
并HINSTANCE
曾经在16位Windows不同的方式回来,但他们现在同样的事情,可以互换使用。
但是请注意,您没有正确使用此字段。您必须使用NULL对其进行初始化。
然后,在启动进程并返回ShellExecuteEx()之后,该字段将包含已启动进程的旧版Windows 3.x启动错误代码。较旧的HINSTANCE值,但仅在进程无法启动时。请注意,该hProcess
字段将设置为您启动的过程的过程句柄。使用完后,必须在该句柄上调用CloseHandle()。否则会导致手柄永久性泄漏。
确保确保这是您要执行的操作。如果您实际上对获取句柄不感兴趣,请省略SEE_MASK_NOCLOSEPROCESS选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句