FindWindow 用来根据类名和窗口名来得到窗口句柄的。但是这个函数不能查找子窗口,也不区分大小写。

如果要从一个窗口的子窗口中查找需要使用FindWindowEX。

如果要搜索的外部程序的窗口标题比较容易得到,问题是比较简单的。可如果窗口的标题不固定或者根本就没有标题,怎么得到窗口的类呢?这时我们可使用Microsoft Spy++,运行Spy++,按ALT+F3,在弹出的界面中拖动目标图标到程序上即可。

FindWindow用法

函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。

函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);

参数:

IpClassName

:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函
数产生的全局成员。该成员为16位,必须位于IpClassName的低 16位,高位必须为 0。

IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。

返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL。
C#中使用该函数首先导入命名空间:

using System.Runtime.InteropServices;  

然后写API引用部分的代码,放入 class 内部

[DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题。在搜索的时候不一定两者都知道,但至少要知道其中的一个。有的窗口的标题是比较 容易得到的,如"计算器",所以搜索时应使用标题进行搜索。但有的软件的标题不是固定的,如"记事本",如果打开的文件不同,窗口标题也不同,这时使用窗 口类搜索就比较方便。如果找到了满足条件的窗口,这个函数返回该窗口的句柄,否则返回0。例如:

    IntPtr hwnd = FindWindow(null, "计算器");
if (hwnd != IntPtr.Zero)
{
MessageBox.Show("找到计算器窗口");
}
else
{
MessageBox.Show("没有找到计算器窗口");
}
hwnd = FindWindow("Notepad", null);
if (hwnd != IntPtr.Zero)
{
MessageBox.Show("找到记事本窗口");
}
else
{
MessageBox.Show("没有找到记事本窗口");
}

从上面的讨论中可以看出,如果要搜索的外部程序的窗口标题比较容易得到,问题是比较简单的。可如果窗口的标题不固定或者根本就没有标题,怎么得到窗口的类 呢?这时我们可使用Microsoft Spy++,运行Spy++,按ALT+F3,在弹出的界面中拖动目标图标到程序上即可。

windows中使用Findwindow函数与FindWindowEx函数来实现自动控制、触发第三方软件事件的方法的更多相关文章

  1. python3使用ctypes在windows中访问C和C++动态链接库函数示例

    python3使用ctypes在windows中访问C和C++动态链接库函数示例 这是我们的第一个示例,我们尽量简单,不传参,不返回,不访问其他的动态链接库 一 测试环境介绍和准备 测试环境: 操作系 ...

  2. windows中操作文件和目录的函数

    1.文件操作函数       CreateFile();//创建或打开文件      ReadFile();//从文件读      WriteFile();//向文件写      SetFilePoi ...

  3. ALV TREE中双击触发PAI事件的方法

    用事件类实现双击事件,实例化后使用set handler注册到ALV对象.斜体部分为事件方法的具体实现. 代码如下 CLASS lcl_tree_event_receiver DEFINITION. ...

  4. windows中Read函数引发数据异常的问题

    [摘要] 在Window C/S开发中少不了客户端与服务端数据通信的情况,每当客户端从服务端获取数据时会将数据读到本地本件或缓存中,例如通过CInternetFile类的Read函数会将网卡缓存中的数 ...

  5. Windows中使用CopyFile函数复制文件,出现string转LPCTSTR问题(附代码)

    原因: 同一张图片,用imread读取,imwrite重新写入另外一个文件夹,然后再次读取发现前后异常,这是因为读取后转成Mat格式,然后写入转成图片格式,这个过程会对图片产生损失. 因此后来采用直接 ...

  6. VC++程序中加入自定义声音(PlaySound函数用法)

    VC++编程中,我们可以为自己的程序加入音乐,比如当我们按下一个按钮时或者启动程序时,播放一小段音乐. 该功能用到函数: BOOL PlaySound(LPCSTR pszSound, HMODULE ...

  7. 如何通过HOOK改变windows的API函数(找到函数的相对偏移)

    我们知道,系统函数都是以DLL封装起来的,应用程序应用到系统函数时,应首先把该DLL加载到当前的进程空间中,调用的系统函数的入口地址,可以通过GetProcAddress函数进行获取.当系统函数进行调 ...

  8. 一个在字符串中查找多个关键字的函数strstrs(三种不同算法实现及效率分析)

    平时项目中有时需要用到在字符串中搜索两个或更多的关键字的情景.例如:将字符串"ab|cd#ef|"按竖线或者井号做分隔 如果是大项目,一般会采用正则表达式做处理.但有时写个小程序, ...

  9. Android API中被忽略的几个函数接口

    1. MotionEvent的几个函数 下面的方法都支持多点触摸,即可以对单个触摸点调用下面的方法 1.1 getPressure() 这个api 可以获取到手指触摸屏幕时候的压力,但是需要硬件和驱动 ...

随机推荐

  1. 美团HD(8)-利用NSPredicate匹配搜索结果

    监听文本框改变: DJSelectCityViewController.m /** 当searchBar内的文字发生改变时调用此方法 */ - (void)searchBar:(UISearchBar ...

  2. nginx 模块简介

    nginx模块一般分为5类:核心模块.标准http模块.可选http模块.邮件服务模块.第三方模块. 其中核心模块和标准http模块在快速编译之后就包含在了nginx中. 主要看一下核心模块.标准ht ...

  3. VS中去除SrouceControl的信息

    如果在不连接TFS的情况下,编辑一个已经source control的solution,总是会有烦人的提示信息.如果你确定不再需要source control,可以这么干. Here is how t ...

  4. 内核交互--procfs

    文档介绍:http://lxr.linux.no/linux+v2.6.37/Documentation/filesystems/proc.txt以下内容抄录linux设备驱动开发详解-宋宝华在/pr ...

  5. VMware虚拟机 Ubuntu 实用技巧 (1) -- 安装VMware Tool

    1.用VM安装Ubuntu后屏幕太小? 2.Ubuntu中的文本与window中的文本不能互相复制黏贴? 如果你遇到以上问题,可以通过在VMware里安装“VMware Tool”插件解决!! 安装步 ...

  6. openfile

    linux修改open files数   概要 linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不 ...

  7. php 图片上传 文件上传 大小 限制

    nginx  413 Request Entity Too Large Php无法上传文件 查看php脚本运行用户,写个php脚本 <?php echo shell_exec("id ...

  8. IE的坏脾气——3像素Bug

    在一个典型的浮动中,如下面的图片所示:灰色矩形是外部容器,绿色容器在外部容器内向左浮动,未浮动的部分包围着浮动部分.但是IE6在解析这样的浮动时,会莫名的给靠紧浮动部分的未浮动部分添加3个像素的边距. ...

  9. 在eclipse中使用枚举简单类型enum

    在JAVA中终于可以使用枚举类型了,就像在C或C++使用的简单枚举. 首先就在eclipse中试试它吧. 没想到,却报了错误.我装了jdk1.5(5.0),也在eclipse中设置了,怎么会不认识en ...

  10. xxxxxxclub系统模块分类

    不是分析整个程序执行的过程. 分析程序在设计的时候模块怎样分类 针对的是应用程序,name 类的装载:1. Spring配置 基于接口调用hsf 3. 一个页面相应的java类 Spring的xml文 ...