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中