博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取控制台的窗口句柄
阅读量:4167 次
发布时间:2019-05-26

本文共 1710 字,大约阅读时间需要 5 分钟。

它很有用操作与控制台窗口应用程序。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);   }

转载地址:http://rgoxi.baihongyu.com/

你可能感兴趣的文章
创建守护进程以及为什么fork两次
查看>>
open/close函数的使用
查看>>
C语言中lseek()函数和fseek()函数的使用详解
查看>>
linux 中 open和fopen的区别
查看>>
LINUX共享内存使用常见陷阱与分析
查看>>
Linux编程gcc编译器禁止所有警告和显示所有警告
查看>>
共享内存理解:shmget()函数、shmat()、IPC_CREAT | IPC_EXCL
查看>>
ctime函数--把日期和时间转换为字符串(打印时间时常用-LINUX系统)
查看>>
查看linux内核命令 ls /etc/rc.d -l
查看>>
Linux下的函数执行时间的统计方法(测试某个函数的执行时间)
查看>>
Linux时间函数之gettimeofday()、settimeofday()函数之使用方法(以及判断函数执行时间差)
查看>>
Linux命令之hwclock - 查询和设置硬件时钟
查看>>
linux查看设备网卡MAC和IP地址以及设置MAC ip的注意事项
查看>>
linux下删除文件或文件夹的命令
查看>>
双重指针自己使用心得
查看>>
如何解决消息队列传递数据出现stack smashing detected的问题
查看>>
Linux里设置环境变量的方法(export PATH)
查看>>
c语言中strlen所输出的字符长度到底要不要再加1 (指'\0')?
查看>>
C语言双指针的常见用法
查看>>
UBUntu解决fatal error: sqlite3.h: No such file or directory,//原因是系统没有安装函数库
查看>>