在控制臺程序中,要得到當前程序的句柄,最好的方法是調用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();