动窗口的句柄。否则,返回值为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 ") )

其他:

1、直接得句柄
        GetActiveWindow();        //得激活窗口句柄

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

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

2、枚举型的

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

HWND FindWindowEx( HWND hwndParent,

HWND hwndChildAfter,

LPCTSTR lpszClass, L

PCTSTR zWindow);

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

3、其他参数的句柄

进程ID:

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

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

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

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

EnumWindows()与EnumWindowsProc()的工作过程是这样的:当EnumWindows获取到一个窗口句柄后就会调用EnumWindowsPro,在该函数里做想要的处理,

然后EnumWindows又获取到下一个窗口的句柄交给EnumWindowsPro,知道所有的窗口枚举完为止。
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));

VC 各种情况下的窗口句柄的获取的更多相关文章

  1. iOS 在不添加库的情况下 通过抽象类来获取自己想要的方法

    #define SYSTEM_VERSION_MORE_THAN_BFDATA(v) ([[[UIDevice currentDevice] systemVersion] compare:v opti ...

  2. (转)在.NET程序运行过程中,什么是堆,什么是栈?什么情况下会在堆(栈)上分配数据?它们有性能上的区别吗?“结构”对象可能分配在堆上吗?什么情况下会发生,有什么需要注意的吗?

    转自:http://www.cnblogs.com/xiaoyao2011/archive/2011/09/09/2172427.html 在.NET程序运行过程中,什么是堆,什么是栈? 堆也就是托管 ...

  3. 把cookie以json形式返回,用js来set cookie.(解决手机浏览器未知情况下获取不到cookie)

    .继上一篇随笔,链接点我,解决手机端cookie的问题. .上次用cookie+redis实现了session,并且手机浏览器可能回传cookies有问题,所以最后用js取出cookie跟在请求的ur ...

  4. windows下C语言编程获取磁盘(分区)使用情况

    windows下编程获取磁盘(分区)使用情况 windows下编程获取磁盘(分区)使用情况 GetLogicalDriveStrings函数 使用示例 获取需要的缓冲区长度示例 获取所有驱动器号示例 ...

  5. paip.spring 获取bean getBean 没有beanid的情况下

    paip.spring 获取bean  getBean 没有beanid的情况下 spring能自动扫描带有注解的bean文件.. 作者Attilax  艾龙,  EMAIL:1466519819@q ...

  6. 使用QFileInfo类获取文件信息(在NTFS文件系统上,出于性能考虑,文件的所有权和权限检查在默认情况下是被禁用的,通过qt_ntfs_permission_lookup开启和操作。absolutePath()必须查询文件系统。而path()函数,可以直接作用于文件名本身,所以,path() 函数的运行会更快)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/65444966QFileInfo类为我们提供了系统无 ...

  7. 使用QFileInfo类获取文件信息(文件的所有权和权限检查在默认情况下是被禁用的。要使能这个功能 extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;)

    QFileInfo类为我们提供了系统无关的文件信息,包括文件的名字和在文件系统中位置,文件的访问权限,是否是目录或符合链接,等等.并且,通过这个类,可以修改文件的大小和最后修改.读取时间.同时,QFi ...

  8. Codeigniter 数据库操作事务情况下获取不到last_insert_id()

    开发中,数据库Insert使用了事务,如果 $this->db->insert_id() 放在 $this->db->trans_complete(); 这句语句之后,$thi ...

  9. NGINX转发代理情况下,获取客户单真实IP

    编译时加上http_realip_module 模块 realip模块生效的前提是:直接连接nginx的ip是在set_real_ip_from中指定的. 原机配置: set_real_ip_from ...

随机推荐

  1. hdu 4968 Improving the GPA (水 暴力枚举)

    题目链接 题意:给平均成绩和科目数,求可能的最大学分和最小学分. 分析: 枚举一下,可以达到复杂度可以达到10^4,我下面的代码是10^5,可以把最后一个循环撤掉. 刚开始以为枚举档次的话是5^10, ...

  2. bzoj1296: [SCOI2009]粉刷匠

    dp. 用到俩次dp,用1和0代表俩种颜色,首先对于每块木板我们进行一次dp,g[i][j]代表前j个格子刷i次最多能涂到几个格子. 则 g[i][j]=max(g[i-1][k],max(cnt[j ...

  3. UWP:本地应用数据

    获取应用的设置和文件容器 使用 ApplicationData.LocalSettings 属性可以获取 ApplicationDataContainer 对象中的设置. 注意:每个设置的名称最长可为 ...

  4. 本来运行的好的Ajax.dll怎么突然不起作用了

    客户中有个好多年前老项目用了Ajax.dll,前几天突然不起作用了. 问了下原因,系统从Windows Server2003 升级为 Windows Server 2008了,IIS也从6升级成7了. ...

  5. apache开源项目 -- tomee

    Apache TomEE,发音是“Tommy”,是一个经Apache.JavaEE6.Web框架认证的适配器,其在Tomcat服务器中是最强大的.Apache TomEE是由香草项目(简化常见编程任务 ...

  6. PS流格式

    概念: 将具有共同时间基准的一个或多个PES组合(复合)而成的单一的数据流称为节目流(Program Stream). ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码 ...

  7. Android-使用getIdentifier()获取资源Id

    使用getIdentifier()获取资源Id int i= getResources().getIdentifier("icon", "drawable", ...

  8. hdu 3047 Zjnu Stadium(加权并查集)2009 Multi-University Training Contest 14

    题意: 有一个运动场,运动场的坐席是环形的,有1~300共300列座位,每列按有无限个座位计算T_T. 输入: 有多组输入样例,每组样例首行包含两个正整数n, m.分别表示共有n个人,m次操作. 接下 ...

  9. Drawer Layout

    http://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout <menu ...

  10. (原创)LAMP教程2-安装虚拟机软件VirtualBox

    大家好,今天我们讲的是第二章,安装虚拟机软件VirtualBox 我先讲一下我的电脑的环境,可以看下面的图片说明 大家也看到了我的机子是64位的win7系统(为什么讲这个,因为接下来我们要下载的是ce ...