得到控制台視窗的控制代碼

2021-09-06 08:35:31 字數 1643 閱讀 9716

呼叫 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號視窗進行操作 移動視窗 改變視窗大小 把視窗最小化等等。實際上...