1. 程式人生 > >程序控制代碼HANDLE獲得程序主視窗的控制代碼HWND

程序控制代碼HANDLE獲得程序主視窗的控制代碼HWND

一個程序可以擁有很多主視窗,也可以不擁有主視窗,所以這樣的函式是不存在的,所幸的是,相反的函式是有的。所以我們可以呼叫EnumWindows來判斷所有的視窗是否屬於這個程序。 

typedef struct tagWNDINFO 

​{ 

​DWORD dwProcessId; 

​HWND hWnd; 

​} WNDINFO, *LPWNDINFO; 

BOOL CALLBACK YourEnumProc(HWND hWnd,LPARAM lParam) 

DWORD dwProcessId; 

GetWindowThreadProcessId(hWnd, &dwProcessId); 

LPWNDINFO pInfo = (LPWNDINFO)lParam; 

if(dwProcessId == pInfo-> dwProcessId) 

pInfo-> hWnd = hWnd; return FALSE; 

return TRUE; 

HWND GetProcessMainWnd(DWORD dwProcessId) 

WNDINFO wi; 

wi.dwProcessId = dwProcessId; 

wi.hWnd = NULL; 

EnumWindows(YourEnumProc,(LPARAM)&wi); 

return wi.hWnd; 

如果這個程序沒有視窗,函式返回NULL 

只能列舉,別無它法 因為一個程序中,其實是沒有“主視窗”這個概念的,任何由它建立的視窗都有可能是主視窗,也都可能不是主視窗

相關推薦

程序控制HANDLE獲得程序視窗控制HWND

一個程序可以擁有很多主視窗,也可以不擁有主視窗,所以這樣的函式是不存在的,所幸的是,相反的函式是有的。所以我們可以呼叫EnumWindows來判斷所有的視窗是否屬於這個程序。  typedef struct tagWNDINFO  ​{  ​DWORD dwProc

根據程序id獲取視窗控制

struct ProcessWindowData { HWND hWnd; unsigned long lProcessId; }; BOOL CALLBACK EnumWindowCallback(HWND hWnd, LPARAM lParam) { ProcessWindowData&

C# 根據程序獲取程式視窗控制(包括最小化和隱藏程式)

namespace Applications.UI {     class CurrentProcess     {             private static Hashtable processWnd = null;             public del

獲得MessageBox的視窗控制和其所屬的視窗

  .386  .model flat,stdcall  option casemap:none include  windows.incinclude  kernel32.incinclude  user32.incincludelib kernel32.libinclud

如何通過視窗控制獲得一個程式視窗的大小

首先通過FindWindow函式取得視窗控制代碼,當然也可以用GetForegroundWindow()函式取得自己的程式的控制代碼。RECT rctA; //定義一個RECT結構體,儲存視窗的長寬高HWND lhwnd=::FindWindow(NULL,L"微信");  

spy++只能讀取視窗控制而無法讀取到子控制元件控制的原因

看完DIRECTUI簡介就明白了: DirectUI意為直接在父視窗上繪圖(Paint on parent dc directly)。即子視窗不以視窗控制代碼的形式建立(windowless),只是邏

Qt獲取控制元件的大小,以及視窗大小為什麼一樣大小

MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { QPushButton *button = new QPushButton(tr("abc")); HelloWorld *m

C++根據程序獲取視窗控制

原帖網址:http://www.cnblogs.com/ylhome/archive/0001/01/01/1529681.html // processenum.cpp : Defines the entry point for the console applica

用C#呼叫Windows API和其它程序通訊及C# 獲得另外一程式 控制控制該程式 控制其透明 窗體大小

作者:邊城浪子◎2005-01-16 關鍵字:  C#,API,FindWindow,FindWindowEx,SendMessage,程序,登錄檔 設計初衷:公司為了便於網路管理,使用了IEEE 802.1X的網路訪問控制,這樣每次開機需要輸入兩次登入密碼,於是我就研究了

在DLL中獲取程序視窗控制

有的時候難免需要在DLL中獲取主程序的視窗控制代碼,比如在DLL注入的時候等等。那麼如何在DLL中獲取主程序的視窗控制代碼呢?可以通過EnumWindows來實現。先通過GetCurrentProcessId獲取程序的PID,然後在EnumWindows中呼叫GetWind

根據程序ID 獲取視窗控制

 using namespace System;using namespace System::Diagnostics;using namespace System::ComponentModel; Process *m_pCurProcess = Process::GetProcessById(

AutoIt3 使用程序名獲取視窗控制

背景 需要用AutoIt3控制QQ音樂播放器,首先要獲取QQ音樂的視窗控制代碼 問題 WinGetHandle方法不能滿足要求 QQ音樂的Title會根據當前播放的歌曲動態改變

mfc 根據視窗控制(HWND)殺死程序

先列舉桌面所有的視窗的標題或者類名。根據類名或者標題得知該視窗的控制代碼(HWND)。然後再殺死程序。看程式碼: BOOL bTerminateProcess = FALSE; HWND hwndE

[Delphi]如何通過程序控制判斷該程序是否已退出?

GetExitCodeProcess    看似可以,但是仔細看MSDN,有這麼一句話:“Warning  If a process happens to return STILL_ACTIVE (259) as an error code, applications th

根據視窗控制來獲取程序ID

[DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID

轉載----編寫高質量:改善Java程序的151個建議(第1章:JAVA開發中通用的方法和準則___建議1~5)

ase 重載方法 name 原理 .get tin stat eas 容易 閱讀目錄 建議1:不要在常量和變量中出現易混淆的字母 建議2:莫讓常量蛻變成變量    建議3:三元操作符的類型務必一致   建議4:避免帶有變長參數的方法重載 建議5:別讓null值和空值威

轉載---編寫高質量:改善Java程序的151個建議(第2章:基本類型___建議26~30)

cli math mem 時間 三次 計算 一個 name pub 閱讀目錄 建議26:提防包裝類型的null值 建議27:謹慎包裝類型的大小比較 建議28:優先使用整型池 建議29:優先選擇基本類型 建議30:不要隨便設置隨機種子 回到頂部 建議26:提防包裝類

轉載---編寫高質量:改善Java程序的151個建議(第3章:類、對象及方法___建議47~51)

閱讀 aer 集中 記事本 哈希算法 讀者 堆內存 ref 類型判斷 閱讀目錄 建議47:在equals中使用getClass進行類型判斷 建議48:覆寫equals方法必須覆寫hashCode方法 建議49:推薦覆寫toString方法 建議50:使用package

轉載---編寫高質量:改善Java程序的151個建議(第3章:類、對象及方法___建議41~46)

equals 業務 父親 face 使用 訪問 his () 而是 閱讀目錄 建議41:讓多重繼承成為現實 建議42:讓工具類不可實例化 建議43:避免對象的淺拷貝 建議44:推薦使用序列化對象的拷貝 建議45:覆寫equals方法時不要識別不出自己 建議46:equ

轉載--編寫高質量:改善Java程序的151個建議(第5章:數組和集合___建議65~69)

ceo next foreach遍歷 通過 當前 prev 支持 變量 信息 閱讀目錄 建議65:避開基本類型數組轉換列表陷阱 建議66:asList方法產生的List的對象不可更改 建議67:不同的列表選擇不同的遍歷算法 建議68:頻繁插入和刪除時使用LinkLis