我有一个 Windows CE 嵌入式 6.0 应用程序,它在后台打开另一个应用程序,我想把另一个应用程序放在前面。我首先使用第三方应用程序的 MainWindowHandle 尝试了 SetParent,但它没有用。然后我再次在同一个 MainWindowHandle 上尝试了 SetActiveWindow,但它没有用。这让我相信 MainWindowHandle 搞砸了,当我在控制台上打印它时,它总是 0。这让我想到了我的第一个问题:应用程序的开发人员是否有可能忘记提及 MainWindow 是什么?还是在.NET 中自动分配?
其次,既然这种方法失败了,我尝试 EnumWindows,然后获取每个窗口的 ID 并将其与我知道的所需程序的进程 ID 匹配。这给了我一个异常 0x80131515 说“EnumWindows”不受支持。我已经从 CoreDll 导入了 EnumWindows 就好了。第二个问题:这个错误的原因可能是什么?我究竟做错了什么?
对不起!这是一些代码(假设 VCProcess 已经启动):
[DllImport("coredll.dll")]
static extern int EnumWindows(CallbackDef callback, int lParam);
[DllImport("coredll.dll")]
static extern int GetWindowThreadProcessId(IntPtr hWnd, int pid);
static void Main()
{
callBackPtr = new CallBackPtr(Report);
EnumWindows(callBackPtr, 0);
}
public static bool Report(int hwnd, int lParam)
{
int pid = 0;
GetWindowThreadProcessId(hWnd, pid);
if (pid == VCProcessId)
{
SetForegroundWindow(hWnd);
}
MessageBox.show("Window handle is "+hwnd);
return true;
}