您的位置:首页 > 其它

如何得到句柄、窗口句柄

2012-08-22 18:07 281 查看
句柄 这一概念是MFC里的一个类,MFC有专门的函数来获取窗口句柄。

HWND hwnd;

hwnd=CreateWindow("my own windowshandle","jaycnvip",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);

这是用一个句柄变量来保存新创建的窗口句柄。

其它如:

通过窗口标题获取窗口句柄

CWnd *pWnd = FindWindow(_T("#32770"), _T("QQ用户登录"));

CWnd有个成员函数

HWND GetSafeHwnd( ) const;

在对话框类的成员函数里用

HWND hwnd = GetSafeHwnd();

得到的hwnd就是句柄了

各种得到窗口句柄的方法

1、直接得句柄

GetActiveWindow(); //得激活窗口句柄

GetForegroundWindows(); //的前台窗口句柄

AfxGetApp()->GetMainWnd()->GetSafeHwnd() //很常规的,涉及到很多方法

2、枚举型的

HWND GetWindow(

HWND hWnd,

UINT uCmd ); //要先有hWnd,然后指明uCmd 的关系

HWND FindWindowEx(

HWND hwndParent,

HWND hwndChildAfter,

LPCTSTR lpszClass,

LPCTSTR lpszWindow); //由类名和窗口标题得句柄,可能不只一个,所以不唯一确定

3、其他参数的句柄

进程ID:

MARK:由句柄得ID可以用GetWindowThreadProcessId()

而由ID的句柄只能枚举+比较了

历遍全部窗体,并取得他们对应的HWND进一步取得对应PID,符合已知PID的就是了,当然可能要判断一下窗体状态了,如果进程只有一个窗体那就不用了。

例:

如果要在列表框里显示所有的窗口

BOOL CALLBACK EnumWindowsProc(

HWND hwnd, // handle to parent window

LPARAM lParam // application-defined value

)

{

char lpWinTitle[256];

::GetWindowText(hwnd,lpWinTitle,256-1);

CString m_strTitle;

m_strTitle.Format("%s",lpWinTitle);

CListBox *p_l = (CListBox *)lParam;

if (!m_strTitle.IsEmpty())

{

p_l->AddString(lpWinTitle);

}

return TRUE;

}

调用EnumWindows(EnumWindowsProc, (LPARAM)GetDlgItem(IDC_LIST1));

这段程序MARK在挂的ASSIS的DLL中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: