在控制臺程序中,要得到當(dāng)前程序的句柄,最好的方法是調(diào)用GetConsoleWindow 。
然而,在代碼中卻無法直接調(diào)用GetConsoleWindow,因為GetConsoleWindow 是 Kernel32.dll 中部分未公布的API。
在用eXeScope導(dǎo)出 Kernel32.dll 中控制臺相關(guān)的API之后,可以發(fā)現(xiàn)有一個名為GetConsoleWindow的API。查找參考了部分資料后,提供如下代碼,能夠動態(tài)載入這個API并獲 得窗口句柄。
首先需要全局聲明:
typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
PROCGETCONSOLEWINDOW GetConsoleWindow;
然后再Main()函數(shù)開頭中輸入以下內(nèi)容:
HMODULE hKernel32 = GetModuleHandle("kernel32");
GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
完成了動態(tài)載入API函數(shù)GetConsoleWindow的任務(wù)。需要使用時可如下:
HWND cmd = GetConsoleWindow();