如何得到句柄、窗口句柄
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就是句柄了
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中
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中
相关文章推荐
- [VC++]如何得到桌面窗口的句柄(桌面图标)
- dll中如何获得调用者的窗口?得到窗口句柄那么DC也就可以得到了!
- 如何从光标位置”得到窗口句柄? (转)
- 已知IE窗口的句柄,如何由此得到IHTMLdocument2接口?
- [VC++]如何得到桌面窗口的句柄(桌面图标)
- 如何从窗口句柄得到窗口的指针
- 如何从光标位置”得到窗口句柄?
- 如何得到桌面窗口的句柄(桌面图标)
- 如何得到所有可视化窗口的句柄?
- 如何从窗口句柄得到与窗口关联的文件路径/文件名
- 如何得到数据窗口列的显示值
- 得到窗口的句柄方法
- 如何获得窗口句柄(HWND )和改变窗口属性
- 如何得到空间相对于窗口的位置
- delphi中没有窗口句柄的控件如何处理windows消息
- 如何获得窗口句柄(HWND )和改变窗口属性
- WPF窗口如何获得一个句柄?
- 如何获取控制台窗口句柄 (HWND)
- 从窗口句柄得到菜单句柄(从HWND得到HMENU)
- 如何得到下拉数据窗口的显示值