獲取控制檯視窗的控制代碼(hWnd)
作者:Defanive
部落格:Console.Dec.Cn(Hi.Baidu.Com/Console_App)
——————— 【 謝謝合作 】 ———————
測試環境:VC++ 6.0
視窗,都有其唯一的控制代碼(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來改變程式的宿主控制檯,這個時候再用前兩種方法就不夠好了。儘管載入的程式碼很長,但是通用性更高。
相關推薦
獲取控制檯視窗的控制代碼(hWnd)
作者:Defanive 部落格:Console.Dec.Cn(Hi.Baidu.Com/Console_App) ——————— 【 謝謝合作 】 ——————— 測試環境:VC++ 6.0 視窗,都有其唯一的控制代碼(hWnd)。得到了視窗控制代碼,能夠做很多事情。控制
如何獲取控制檯視窗控制代碼 (HWND)
HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 // Buffer size for console window titles. HWND hwndFound; // This is what
得到Java程式的WIN32視窗控制代碼(轉)
我們知道C++的每個窗體都對應著一個控制代碼HWND,通過這個控制代碼我們可以對這個視窗以及它的資源進行各種操作,比如讓它前端顯示等。那麼作業系統給Java編寫的窗體(Frame或者JFrame的物件或者子類物件)有沒有分配這個唯一的HWND呢?如果存在的話我們怎麼來在J
C# 根據程序獲取程式主視窗控制代碼(包括最小化和隱藏程式)
namespace Applications.UI { class CurrentProcess { private static Hashtable processWnd = null; public del
MFC 獲取當前視窗控制代碼,或者父子視窗控制代碼
父子視窗 在子視窗中,需要用到父視窗的控制代碼: AfxGetMainWnd()->m_hWnd 注:在父視窗中,也可以這麼用來呼叫自己視窗的控制代碼 在子視窗中,需要用到自己視窗的控制代碼 ChildDlg *pChildDlg ; pChildDlg->m_h
獲取ArcMap視窗控制代碼,通過WinAPI獲取工作空間中點選要素的系統桌面座標
這裡用了個“桌面座標”,是希望區分一下ArcGis的“螢幕座標”(與之對應的還有一個“地理座標”)。 什麼是“螢幕座標”呢?使用ITool介面的OnMouseDown方法獲取的“x,y”值即是,其原點值在“工作空間”窗體左上角。 什麼是我所稱謂的“工作空間”呢?它是資料編輯區域,用Spy++檢視一下其窗體
如何查詢窗體,獲取窗體的控制代碼,Hwnd FindWindow函式
/*CWnd::FindWindowstatic CWnd* PASCAL FindWindow( LPCTSTR lpszClassName, LPCTSTRlpszWindowNa- me );返回值:標識了具有指定的類名或視窗名的視窗。如果沒有找到這樣的視窗,則返回N
根據程序id獲取主視窗控制代碼
struct ProcessWindowData { HWND hWnd; unsigned long lProcessId; }; BOOL CALLBACK EnumWindowCallback(HWND hWnd, LPARAM lParam) { ProcessWindowData&
從父視窗中獲取子視窗控制代碼以及其例項控制代碼
獲取父視窗控制代碼 HWND hWnddlg = AfxGetMainWnd()->m_hWnd; //主視窗控制代碼 或者 HWND hWnddlg = this->m_hWnd; //主視窗控制代碼 獲取子視窗控制代碼 如果子視窗是控制元件,並有控制元件
獲取桌面視窗控制代碼
GetDesktopWindow獲取的是頂層顯示桌面控制代碼,也就是說,如果應用程式視窗在桌面上,那麼它的視窗也算是所獲取的視窗的一部分,如果使用GetDC(NULL)作圖,則永遠是在最頂層。 那麼如何獲取包含桌面圖示的視窗控制代碼呢? 我們可以用Spy++來檢視。 可以
.NET物件與Windows控制代碼(二):控制代碼分類和.NET控制代碼洩露的例子
上一篇文章介紹了控制代碼的基本概念,也描述了C#中建立檔案控制代碼的過程。我們已經知道控制代碼代表Windows內部物件,檔案物件就是其中一種,但顯然系統中還有更多其它型別的物件。本文將簡單介紹Windows物件的分類。 控制代碼可以代表的Windows物件分為三類,核心物件(Kernel Object)、
案例——檔案控制代碼(pipe)增多tomcat模組定位方法
問題描述:tomcat檔案控制代碼數持續增長 定位方法: 定位檔案控制代碼洩漏前需要收集的必要資訊: tomcat初始啟動時的檔案控制代碼數、對tomcat的詳細lsof結果、以及tomcat的記憶體dump; 按時間段對tomcat的檔案控制代碼數進行統計(每小時、
究竟什麼是控制代碼(handle)
當初學windows程式設計的時候搞不清什麼是控制代碼,有人說其實就是個值,有人說它是個特殊的指標。什麼值?特殊在哪?沒人對我說明白。 今天剛看了《windows程式設計》第三章,由於知識所限,我不敢說看完了就能全面認識什麼是控制代碼,但是,至少明白了它的概念,它在widn
Matlab中的圖形控制代碼(轉載)
在matlab中,每一個物件都有一個數字來標識,叫做控制代碼.當每次建立一個物件時,matlab就為它建立一個唯一的控制代碼 控制代碼中包含有該物件的相關資訊引數,可以在後續程式中進行操作,改變其中的引數,以便達到不同的效果 例如:gcf 是返回當前被啟用的視窗的控制
GetWindow、GetTopWindow和GetNextWindow(視窗控制代碼獲取!!!)
GetWindow //uCmd 可選值: GW_HWNDFIRST = 0; {同級別第一個} GW_HWNDLAST = 1; {同級別最後一個} GW_HWNDNEXT = 2; {同級別下一個} GW_HWNDPREV = 3;
Selenium:多視窗切換(獲取視窗控制代碼handle)
我們在操作網頁的時候,點選有些頁面的連結,會重新開啟一個視窗,我們要在新頁面上操作,就得切換視窗 比如在百度首頁的登入框點選註冊,會重新開啟一個註冊的新頁面,要在新頁面註冊,就得先切進新頁面 那我們怎麼在這兩個視窗之間進行切換呢?每個瀏覽器視窗都有一個唯一的屬性控制代碼(handle)來表示,我們就可
WPF 視窗控制代碼獲取和設定
WPF 視窗控制代碼設定和獲取 1、控制代碼類 WHwnd.cs public class WHwnd { /// <summary> /// 主窗體控制代碼 /// </summar
按鍵精靈 -獲取視窗控制代碼
MessageBox "視窗右下角座標:" get_window_pos //得到當前最前面的視窗控制代碼-就是把需要的視窗啟用在最前面 Hwnd = Plugin.Window.Foreground() //得到滑鼠指向的視窗控制代碼Hwnd = Plugin.Window.Mo
C#獲取當前活動視窗控制代碼
c# 獲取當前活動視窗控制代碼,獲取視窗大小及位置 2018年04月26日 13:48:21 漂泊_人生 閱讀數:1889 需呼
VC 各種情況下的視窗控制代碼的獲取
AfxGetMainWnd AfxGetMainWnd獲取自身視窗控制代碼 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函式功能:該函式檢查與特定父視窗相聯的子視窗z序(Z序:垂直螢幕的方向,即疊放