如何获取WinCE控制台窗口的hWnd?

Posted

技术标签:

【中文标题】如何获取WinCE控制台窗口的hWnd?【英文标题】:How to get hWnd of the console window of WinCE? 【发布时间】:2015-08-10 02:51:50 【问题描述】:

我正在尝试使用 WEC 7 (Windows Embedded Compact 7) 隐藏 WinCE 的控制台窗口。

在我的桌面窗口中,我已确认可以使用以下代码完成此操作:

HWND hWnd = FindWindow(L"ConsoleWindowClass",NULL);
ShowWindow(hWnd, SW_HIDE);

但是,如果我在 WinCE 上使用此代码,FindWindow 会返回一个空指针。

可能是WinCE的控制台窗口的类名与桌面窗口不同。

有什么办法可以得到控制台窗口的hWnd

【问题讨论】:

我还尝试了“GetConsoleWindow()”函数来获取控制台窗口的 hWnd,但没有成功。 WinCE 不支持“GetConsoleWindow()” 另外,我还发现'GetForegroundWindow()' 可以用来查找打开的控制台应用程序。但是,在某些情况下,返回的 HWND 可能不是控制台窗口的 HWND。 【参考方案1】:

使用 EnumWindows API 查找您的窗口 HWND,例如:

BOOL CALLBACK FindWindowByEnumProc(HWND hwnd, LPARAM lParam) 
    if ( IsConsole(hwnd) ) 
        // use hwnd.
        return FALSE;
    
    return TRUE;

::EnumWindows(FindWindowByEnumProc, NULL);

IsConsole 中添加你的逻辑来决定这是否是一个控制台。您可以使用GetWindowText 获取窗口文本或使用GetClassName 检查其类。也可以使用GetWindowThreadProcessIdGetModuleFileName查询进程exe文件路径。

【讨论】:

【参考方案2】:

您可以通过 Visual Studio 2008 Remote Tools 中的“Windows CE Remote Spy”找到您需要的所有信息。在我的例子中(Windows CE 6),控制台窗口有“ConDev_AppCls”类名。

【讨论】:

以上是关于如何获取WinCE控制台窗口的hWnd?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取窗口的 HWND

知道一个窗体的句柄,如何获取这个窗体

C++中如何获取当前窗口句柄?

在 Windows 环境中,如何获取鼠标点击的坐标(相对于窗口)

如何获取 tkinter 窗口的屏幕截图

MFC中怎样获取指定窗口的句柄