[技巧] VC 各种情况下的窗口句柄的获取

转载 2012年03月27日 10:56:56

CWnd是MFC中的一个类名,HWND是Windows中窗体句柄的类型。HWND是数据类型,所有Win32编程,不管什么语言都要用到它,CWnd不过是MFC的一个类,仅仅是MFC能用

 

AfxGetMainWnd
AfxGetMainWnd获取自身窗口句柄
HWND hWnd = AfxGetMainWnd()->m_hWnd;


GetTopWindow
函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。
函数原型:HWND GetTopWindow(HWND hWnd);
参数:
  hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。
返回值:
    如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。

GetForegroundWindow
函数功能:该函数返回当前系统的前台窗口的窗口句柄。
函数原型:HWND GetForegroundWindow(VOID)  
返回值:函数返回前台窗回的句柄。

GetActiveWindow

函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。
函数原型:HWND GetActiveWindow(VOID)
返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。


GetSafeHwnd
函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。
通过下面的例子来看其理由:
  CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
  HWND hwnd = pwnd->m_hwnd; //得到它的HWND
  这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:
  CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器
  HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND
  就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL


IsWindowVisible
函数功能:该函数获得给定窗口的可视状态。
函数原型:BOOL IsWindowVisible(HWND hWnd);
参数;
  hWnd:被测试窗口的句柄。
返回值:
    如果指定的窗口及其父窗口具有WS_VISIBLE风格,返回值为非零;如果指定的窗口及其父窗口不具有WS_VISIBLE风格,返回值为零。由于返回值表明了窗口是否具有Ws_VISIBLE风格,因此,即使该窗口被其他窗口遮盖,函数返回值也为非零。
备注:
    窗口的可视状态由WS_VISIBLE位指示。当设置了WS_VISIBLE位,窗口就可显示,而且只要窗口具有WS_VISIBLE风格,任何画在窗口的信息都将被显示。


IsWindow:
函数功能:该函数确定给定的窗口句柄是否标示一个已存在的窗口。 
函数原型:BOOL IsWindow(HWND hWnd);
参数:
    hWnd:被测试窗口的句柄。
返回值:
    如果窗口句柄标识了一个已存在的窗口,返回值为TURE;如果窗口句柄未标识一个已存在窗口,返回值为FALSE。


FindWindow:
HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName );
参数:
lpClassName
  指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
lpWindowName
  指向一个以null结尾的、用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
返回值:
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
  如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。


SetWindowText:
至于窗口标题的改变,我们可以通过SetWindowText来实现
注:如果窗口本身属性是不显示标题的,这个函数的调用不会影响窗口属性。
//Set title for application’s main frame window .
AfxGetMainWnd ( ) -> SetWindowText (_T("Application title") )
//Set title for View’s MDI child frame window .
GetParentFrame ( ) -> SetWindowText ("_T ("MDI Child Frame new title") )
//Set title for dialog’s push button control.
GetDigitem (IDC_BUTTON) -> SetWindowText (_T ("Button new title ") )

[技巧] VC 各种情况下的窗口句柄的获取

AfxGetMainWnd  AfxGetMainWnd获取自身窗口句柄  HWND hWnd = AfxGetMainWnd()->m_hWnd;      GetTopWindow  ...
  • myiszjf
  • myiszjf
  • 2013年08月12日 15:30
  • 311

VC 各种情况下的窗口句柄的获取

AfxGetMainWnd   AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:...
  • skyandcode
  • skyandcode
  • 2013年01月26日 15:45
  • 7194

VC 各种情况下的窗口句柄的获取

AfxGetMainWnd   AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; G...
  • qiuqchen
  • qiuqchen
  • 2014年06月06日 15:06
  • 424

VC 各种情况下的窗口句柄的获取

 AfxGetMainWnd   AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函...
  • jiangqin115
  • jiangqin115
  • 2015年07月18日 12:24
  • 530

VC 各种情况下的窗口句柄的获取

AfxGetMainWnd   AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindo...
  • phenixyf
  • phenixyf
  • 2016年01月07日 14:18
  • 679

VC 各种情况下的窗口句柄的获取

AfxGetMainWnd   AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindo...
  • colapin
  • colapin
  • 2015年09月22日 18:03
  • 260

VC由进程ID获取窗口句柄的各种方

//通过进程ID获取进程句柄  HANDLE GetProcessHandleByPid(DWORD dwPid) {   return OpenProcess(PROCESS_ALL_ACCE...
  • jiangqin115
  • jiangqin115
  • 2014年08月27日 15:02
  • 3117

VC 获取任务栏窗口的句柄

本文将介绍一个未公开的Win32 API函数:GetTaskmanWindow,利用它对Windows的任务栏进行操作。这个函数返回拥有任务栏按钮的窗口句柄。在微软的MSDN文档中,对任务栏是这样描述...
  • jiangqin115
  • jiangqin115
  • 2015年07月18日 16:46
  • 3354

VC 获取控制台窗口的句柄(hWnd)

在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统...
  • jiangqin115
  • jiangqin115
  • 2015年07月18日 13:41
  • 1740

VC Windows API应用之GetDesktopWindow ——获得桌面所有窗口句柄的方法

Windows APIWindows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源…之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程...
  • testcs_dn
  • testcs_dn
  • 2015年04月19日 14:49
  • 15682
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[技巧] VC 各种情况下的窗口句柄的获取
举报原因:
原因补充:

(最多只允许输入30个字)