获取控制台窗口的句柄
2012-06-06 08:09
323 查看
窗口,都有其唯一的句柄(hWnd)。得到了窗口句柄,能够做很多事情。控制台程序,若能在窗口效果上下文章,那么这个第三方工具将会很成功。
网上给出的常用方法:
HWND hw=FindWindow("ConsoleWindowClass",NULL);
这不失为一个好方法,但是单从Class方面入手保险度不高。
API函数FindWindow有两个参数,类名与窗口标题。当不提供窗口标题的时候,返回的句柄为同类窗口中Z序最高的窗口句柄。虽然说执行只是一瞬间,但是保险起见,还是提供下标题窗口,更保险。
char strTitle[255];
GetConsoleTitle(strTitle, 255);
HWND hw=FindWindow("ConsoleWindowClass",strTitle);
当然,如果要精益求精,还有更保险的办法,用 Kernel32.dll 中部分未公布的API。在用 eXeScope 导出 Kernel32.dll 中控制台相关的API之后,发现有一个名为GetConsoleWindow的API。查找参考了部分资料后,提供如下代码,能够动态载入这个API并获得窗口句柄。
首先需要全局声明:
typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;
然后再Main()函数开头中输入以下内容:
HMODULE hKernel32 = GetModuleHandle("kernel32");
GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
完成了动态载入API函数GetConsoleWindow的任务。需要使用时可如下:
HWND cmd=GetConsoleWindow();
个人认为,使用API函数GetConsoleWindow是最安全,也是最好的方法。在更大的控制台编程中,可能随时需要用到AttachConsole来改变程序的宿主控制台,这个时候再用前两种方法就不够好了。尽管载入的代码很长,但是通用性更高。
网上给出的常用方法:
HWND hw=FindWindow("ConsoleWindowClass",NULL);
这不失为一个好方法,但是单从Class方面入手保险度不高。
API函数FindWindow有两个参数,类名与窗口标题。当不提供窗口标题的时候,返回的句柄为同类窗口中Z序最高的窗口句柄。虽然说执行只是一瞬间,但是保险起见,还是提供下标题窗口,更保险。
char strTitle[255];
GetConsoleTitle(strTitle, 255);
HWND hw=FindWindow("ConsoleWindowClass",strTitle);
当然,如果要精益求精,还有更保险的办法,用 Kernel32.dll 中部分未公布的API。在用 eXeScope 导出 Kernel32.dll 中控制台相关的API之后,发现有一个名为GetConsoleWindow的API。查找参考了部分资料后,提供如下代码,能够动态载入这个API并获得窗口句柄。
首先需要全局声明:
typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;
然后再Main()函数开头中输入以下内容:
HMODULE hKernel32 = GetModuleHandle("kernel32");
GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
完成了动态载入API函数GetConsoleWindow的任务。需要使用时可如下:
HWND cmd=GetConsoleWindow();
个人认为,使用API函数GetConsoleWindow是最安全,也是最好的方法。在更大的控制台编程中,可能随时需要用到AttachConsole来改变程序的宿主控制台,这个时候再用前两种方法就不够好了。尽管载入的代码很长,但是通用性更高。
相关文章推荐
- 控制台窗口句柄获取方法
- 获取控制台窗口句柄GetConsoleWindow
- 获取控制台的窗口句柄
- 获取控制台窗口的句柄(hWnd)
- 获取控制台窗口的句柄
- 如何获取控制台窗口句柄 (HWND)
- 如何获取控制台窗口句柄 (HWND)
- VC 获取控制台窗口的句柄(hWnd)
- VC 获取控制台窗口的句柄(hWnd)
- 获取控制台窗口的句柄
- 获取控制台窗口句柄GetConsoleWindow
- windows获取控制台窗口的句柄
- 获取控制台窗口的句柄(HWND)和程序中输出回车键
- 如何获取控制台窗口句柄 (HWND)
- VC 获取控制台窗口的句柄(hWnd)
- Windows 7 C# OCX 无法获取“****”控件的窗口句柄,不支持无窗口的ActiveX控件的解决办法
- C# 获取窗口句柄并且关闭应用程序
- win32 获取窗口句柄的方法
- MFC中获取各个窗口(对话框)之间的指针、对象、句柄
- VB.NET 通过窗口句柄,获取webbrowser控件HTML内容