获取控制台的窗口句柄

它很有用操作与控制台窗口应用程序。Win32 API 提供了用于获取没有直接的方法与控制台应用程序关联的窗口句柄。但是,您可以获取通过调用 FindWindow() 的窗口句柄。此函数可检索基于的类名或窗口的窗口句柄。

调用 GetConsoleTitle() 来确定当前的控制台标题。然后提供当前的控制台标题为 FindWindow()。

 

因为多个窗口可能具有相同的标题,您应该更改当前控制台窗口标题,唯一的标题。这将有助于防止返回不正确的窗口句柄。使用 SetConsoleTitle() 来更改当前的控制台窗口标题。下面是此过程:

  1. 调用 GetConsoleTitle(),若要保存当前的控制台窗口标题。
  2. 调用 SetConsoleTitle() 来将控制台标题更改为一个唯一的标题。
  3. 调用 Sleep(40),以确保已更新的窗口标题。
  4. 调用 FindWindow (NULL,uniquetitle),以获取该 HWND如果操作失败,此调用将返回 HWND,则为 NULL。
  5. 从第 1 步中检索到的值调用 SetConsoleTitle()还原原始的窗口标题。

您应该测试结果的 HWND。例如,您可以测试,看看是否返回 HWND 通过调用对应与当前进程在 HWND,并比较结果与 GetWindowText()GetConsoleTitle()。

不能保证得到的 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);
   }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值