【发布时间】:2011-07-15 06:40:03
【问题描述】:
我有一个紧凑的 .Net 2.0 应用程序(面向 Windows Mobile 2003 及更高版本),它有一个最小化表单的按钮。我使用 P/Invoke 来最小化表单/应用程序
//[DllImport("coredll.dll")]
ShowWindow(this.Handle /* Handle for the Form */, SW_MINIMIZED /*6*/)
我有另一个用 C++ 编写的简单程序 Splash.exe,它启动了 compact.net 应用程序。 Splash 程序的目的是检查 .Net 应用程序是否正在运行,如果正在运行,则恢复 .Net 表单,如果没有,则启动 .Net 应用程序。
我使用以下过程检查 .Net 应用程序是否正在运行:
HWND GetProcessIfAlive(TCHAR szExeName[MAX_PATH]) /* Exe name of the .Net App */
{
HANDLE hSnapShot = NULL;
PROCESSENTRY32 pEntry = {0};
// Get the snapshot of the system
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
pEntry.dwSize = sizeof(pEntry);
//Get first process
Process32First(hSnapShot, &pEntry);
//Iterate thru all processes
while(TRUE)
{
TCHAR *strTempExe = pEntry.szExeFile;
if(_tcscmp(strTempExe, szExeName) == 0)
{
DWORD ProcesID = pEntry.th32ProcessID;
return (HWND)OpenProcess (PROCESS_ALL_ACCESS, FALSE, ProcesID);
//return (HWND)ProcesID;
}
if(!Process32Next (hSnapShot, &pEntry)/* == FALSE*/)
{
return NULL;
}
}
return NULL;
}
从这个过程返回后,我尝试使用恢复表单
HWND hExistingHandle = GetProcessIfAlive(TEXT("CompactDotNetApp.exe"));
if(hExistingHandle != NULL)
{
if(ShowWindow(hExistingHandle, SW_RESTORE) == FALSE)
{
DWORD err = GetLastError();
}
}
我收到错误 1400 ERROR_INVALID_WINDOW_HANDLE
如何修复代码以获取正在运行的 Compact .Net 应用程序的正确窗口句柄?
提前致谢。
【问题讨论】:
标签: c# visual-c++ windows-mobile