在控制台程序中,要得到当前程序的句柄,最好的方法是调用GetConsoleWindow 。
然而,在代码中却无法直接调用GetConsoleWindow,因为GetConsoleWindow 是 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();