如何得到句柄、窗口句柄

句柄 这一概念是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中



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值