呼叫 getconsoletitle() 來儲存當前的控制台視窗標題。
呼叫 setconsoletitle() 來將控制台標題更改為乙個唯一的標題。
呼叫 sleep(40),以確保已更新視窗標題。
呼叫 findwindow(null, uniquetitle),以獲取 hwnd,此呼叫將返回 hwnd, 如果操作失敗,將返回 null。
從步驟 1 中,若要恢復原始視窗標題檢索呼叫 setconsoletitle() 的值。
您應該測試結果的 hwnd。
例如,您可以測試是否返回的 hwnd 對應於當前程序在 hwnd 上呼叫 getwindowtext() 並將結果與 getconsoletitle() 進行比較,請參閱。
結果 hwnd 不一定要適用於所有視窗控制代碼操作。
下面的函式中檢索當前控制台應用程式視窗控制代碼 (hwnd)。
如果此函式成功,則返回值是控制台視窗的控制代碼。
如果此函式失敗,則返回值為 null。
省略一些錯誤檢查,為簡潔起見。
hwnd getconsolehwnd(void)視窗,都有其唯一的控制代碼(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來改變程式的宿主控制台,這個時候再用前兩種方法就不夠好了。儘管載入的**很長,但是通用性更高。
得到控制台視窗的控制代碼
呼叫 getconsoletitle 來儲存當前的控制台視窗標題。呼叫 setconsoletitle 來將控制台標題更改為乙個唯一的標題。呼叫 sleep 40 以確保已更新視窗標題。呼叫 findwindow null,uniquetitle 以獲取 hwnd,此呼叫將返回 hwnd,如果操作失...
獲取控制台視窗的控制代碼(hWnd)
謝謝合作 測試環境 vc 6.0 視窗,都有其唯一的控制代碼 hwnd 得到了視窗控制代碼,能夠做很多事情。控制台程式,若能在視窗效果上下文章,那麼這個第三方工具將會很成功。網上給出的常用方法 hwnd hw findwindow consolewindowclass null 這不失為乙個好方法,...
控制台 對視窗控制代碼的操作
視窗控制代碼的含義 在windows中,控制代碼是乙個系統內部資料結構的引用。例如當你操作乙個視窗,或說是乙個delphi窗體時,系統會給你乙個該視窗的控制代碼,系統會通知你 你正在操作142號視窗,就此你的應用程式就能要求系統對142號視窗進行操作 移動視窗 改變視窗大小 把視窗最小化等等。實際上...