概要
它将会有助于处理与控制台应用程序关联的窗口。
Win32 API 没有直接的方法用于获取与控制台应用程序关联的窗口句柄。
但是,您可以获取通过调用 FindWindow() 的窗口句柄。
此函数可检索基于的类名或窗口的窗口句柄。
调用 GetConsoleTitle() 来确定当前的控制台标题。 然后将当前控制台标题传递给FindWindow()。
调用 GetConsoleTitle() 来确定当前的控制台标题。 然后将当前控制台标题传递给FindWindow()。
更多信息
因为多个窗口可能具有相同的标题,您应该更改唯一标题的当前控制台窗口标题。
这将有助于防止返回此错误的窗口句柄。
使用 SetConsoleTitle() 来更改当前的控制台窗口标题。
下面是此过程:
结果 HWND 不一定要适用于所有窗口句柄操作。
- 调用 GetConsoleTitle() 来保存当前的控制台窗口标题。
- 调用 SetConsoleTitle() 来将控制台标题更改为一个唯一的标题。
- 调用 Sleep(40),以确保已更新窗口标题。
- 调用 FindWindow(NULL, uniquetitle),以获取 HWND,此调用将返回 HWND, 如果操作失败,将返回 NULL。
- 从步骤 1 中,若要恢复原始窗口标题检索调用 SetConsoleTitle() 的值。
结果 HWND 不一定要适用于所有窗口句柄操作。
示例代码
下面的函数中检索当前控制台应用程序窗口句柄 (HWND)。 如果此函数成功,则返回值是控制台窗口的句柄。 如果此函数失败,则返回值为 NULL。 省略一些错误检查,为简洁起见。
HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 // Buffer size for console window titles. HWND hwndFound; // This is what is returned to the caller. char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated // WindowTitle. char pszOldWindowTitle[MY_BUFSIZE]; // Contains original // WindowTitle. // Fetch current window title. GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); // Format a "unique" NewWindowTitle. wsprintf(pszNewWindowTitle,"%d/%d", GetTickCount(), GetCurrentProcessId()); // Change current window title. SetConsoleTitle(pszNewWindowTitle); // Ensure window title has been updated. Sleep(40); // Look for NewWindowTitle. hwndFound=FindWindow(NULL, pszNewWindowTitle); // Restore original window title. SetConsoleTitle(pszOldWindowTitle); return(hwndFound); }
属性
文章编号: 124103 - 最后修改: 2012年10月7日 - 修订: 3.0
关键字: | kbhowto kbwndw kbmt KB124103 KbMtzh |