哪个API是判断一个判断窗口句柄是否存在有效的

你的位置:
[api每日一练]api练习(12)判断一个窗口是否是活动窗口 IsWindowEnabled 函数
13:56:10 |
来源: 按键精灵资源站
[code]//api练习(12)判断一个窗口是否是活动窗口 IsWindowEnabled 函数
//这次就说下 判断一个窗口是否是活动窗口 IsWindowEnabled 函数
//API介绍:
//IsWindowEnabled
//该函数用于判断指定的窗口是否允许接受键盘或鼠标输入 用于判断一个窗口是否是活动窗口
//Long,非零表示成功,零表示失败
//参数 类型及说明
//hwnd Long,待检测窗口的句柄
//声明及用法
Declare Function IsWindowEnabled Lib &user32& Alias &IsWindowEnabled& (ByVal hwnd As Long) As Long
Hwnd = Plugin.Window.MousePoint()
EnableWindow Hwnd, 0
If IsWindowEnabled(Hwnd) = 0 Then
& & & & MsgBox &该窗口当前禁止所有鼠标及键盘输入&
EnableWindow Hwnd, 1
If IsWindowEnabled(Hwnd) & 0 Then
& & & & MsgBox &该窗口当前处于活动状态&
//随便说下相关的EnableWindow函数
//API介绍:
//IsWindowEnabled
//在指定的窗口里允许或禁止所有鼠标及键盘输入(在vb里使用:在vb窗体和控件中使用Enabled属性)
//Long,非零表示成功,零表示失败。会设置GetLastError
//参数 类型及说明
//hwnd Long,窗口句柄
//fEnable Long,非零允许窗口,零禁止
//声明及用法
Declare Function EnableWindow Lib &user32& Alias &EnableWindow& (ByVal hwnd As Long, ByVal fEnable As Long) As Long
//用法参考IsWindowEnabled函数[/code]13:32 提问
C# winfrom项目,怎么样实现通过WINAPI 关闭对象的句柄窗口后,还能再次获取该句柄窗口
在C# Winfrom项目中,from窗体中,有一个Panel控件。
目前已经实现将对象的窗口通过winAPI获取到句柄窗口放到了Panel控件中。
请问怎么样实现关闭from窗体后,下次再进入from窗体后,还通过winAPI获取到句柄窗口放到了Panel控件中。
关闭from窗体的事情需要怎么样写,才能实现通过winAPI获取到句柄窗口放到了Panel控件中。
附上代码(通过winAPI获取到句柄窗口放到了Panel控件中):
private void Form2_Load(object sender, EventArgs e)
ptrskypeWnd = API.FindWindow("CBoxMainFrame", null);
API.SetWindowPos(ptrskypeWnd, new IntPtr(-2), 0, 0, Global.Globals.Object_WIDTH, Global.Globals.Object_HEIGHT, 0x0002);
System.Threading.Thread.Sleep(500);
MyInvoke mi = new MyInvoke(SetPanel);
BeginInvoke(mi, new object[] { ptrskypeWnd });
/// &summary&
/// 将嵌入Panel控件
/// &/summary&
public void SetPanel(IntPtr ptrskypeWnd)
//label1.Text += str + System.Environment.NewL
API.SetParent(ptrskypeWnd, this.panel1.Handle);
API.ShowWindow(ptrskypeWnd, WindowsApi.API.SW_MAXIMIZE);
按赞数排序
再Closing()事件中通过SetParent()把ptrskypeWnd还原到桌面窗口上(类名#32769),避免该窗口被连带关闭。
下次Load()事件中就能原样操作了。
IntPtr ptrDocmentWnd = API.FindWindow("#32769", null);
API.SetParent(ptrWnd, ptrDocmentWnd);
ptrDocmentWnd一直为零,找不到桌面窗口句柄。是不是那有误呀,帮忙看看?
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐根据类名和标题直接找到子窗口的句柄的API_百度知道
根据类名和标题直接找到子窗口的句柄的API
我想知道一下 有没有这样的 API根据类名和标题直接找到子窗口的句柄的API因为我要找的一个子窗口 在父窗口里,但是遍历了所有的子窗口信息一一对比却找不到这个窗口句柄,所以无奈求助有没有这样的函数,根据名称或者类名直接得到子句柄函数的API?
我有更好的答案
新年快乐,写外挂呢?我想,这是你要的解决方案,有空交流交流,在下QQ:2465690 请笑纳 (^_^)//得到自己进程内的子窗体 HWND GetMyHwnd(){
HWND hwnd = FindWindow(类名,窗体标题);
DWORD pid = 0;
GetWindowThreadProcessId(hwnd,&pid);
DWORD thisid = GetCurrentProcessId();
if(thisid!=pid)
hwnd = GetWindow(hwnd,GW_HWNDNEXT);
GetWindowThreadProcessId(hwnd,&pid);
char mytext[MAX_PATH];
GetWindowText(hwnd,mytext,MAX_PATH);
if(strcmp(mytext,窗体标题)!=0)
}while(thisid!=pid);
}}如果是其他进程内寻找子窗体 则使用: HWND GetMyHwnd(DWORD thisid){
HWND hwnd = FindWindow(类名,窗体标题);
DWORD pid = 0;
GetWindowThreadProcessId(hwnd,&pid);
if(thisid!=pid)
hwnd = GetWindow(hwnd,GW_HWNDNEXT);
GetWindowThreadProcessId(hwnd,&pid);
char mytext[MAX_PATH];
GetWindowText(hwnd,mytext,MAX_PATH);
if(strcmp(mytext,窗体标题)!=0)
}while(thisid!=pid);
还想问下一下
就是有些 内存偏移 是用基址+偏移
有些是模块加偏移
为什么会出现这2种呢?这里的模块 是相当于 一级内存吗?
为您推荐:
其他类似问题
您可能关注的内容
句柄的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何判断一个HWND是否为一个应用程序的句柄?谁来帮我?
[问题点数:50分,结帖人bmw2of4]
如何判断一个HWND是否为一个应用程序的句柄?谁来帮我?
[问题点数:50分,结帖人bmw2of4]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年10月 其他开发语言大版内专家分月排行榜第二2004年10月 其他开发语言大版内专家分月排行榜第二2003年7月 其他开发语言大版内专家分月排行榜第二
2011年9月 其他开发语言大版内专家分月排行榜第三2011年5月 其他开发语言大版内专家分月排行榜第三2004年7月 其他开发语言大版内专家分月排行榜第三2002年6月 其他开发语言大版内专家分月排行榜第三
2011年10月 其他开发语言大版内专家分月排行榜第二2004年10月 其他开发语言大版内专家分月排行榜第二2003年7月 其他开发语言大版内专家分月排行榜第二
2011年9月 其他开发语言大版内专家分月排行榜第三2011年5月 其他开发语言大版内专家分月排行榜第三2004年7月 其他开发语言大版内专家分月排行榜第三2002年6月 其他开发语言大版内专家分月排行榜第三
2011年10月 其他开发语言大版内专家分月排行榜第二2004年10月 其他开发语言大版内专家分月排行榜第二2003年7月 其他开发语言大版内专家分月排行榜第二
2011年9月 其他开发语言大版内专家分月排行榜第三2011年5月 其他开发语言大版内专家分月排行榜第三2004年7月 其他开发语言大版内专家分月排行榜第三2002年6月 其他开发语言大版内专家分月排行榜第三
匿名用户不能发表回复!|通过api获取句柄控制其他窗体(转) - Jason_liu - 博客园
很多时候,编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口。比如,操作飞信定时发送短信等。我之前开发过飞信耗子,用的是对飞信协议进行抓包,然后分析协议,进而模拟协议的执行,开发出了客户端,与移动服务器进行通信,但是这有一些缺点。如果移动的服务器对接口进行变更,我所编写的客户端也要进行相应的升级。如果服务器的协议进行了更改,甚至个人编写的这种第三方客户端需要重写。而我个人也没有这个时间和精力,或者说没有足够的利益支撑我继续去重构飞信耗子。因此,这款还算优秀的软件,现在就束之高阁了,我自己也觉得遗憾。上周,某项目验收,需要修改界面,但是零时找不到源码了。我在两三个小时内要解决这个问题,时间紧迫。我突然想起室友以前做过模拟鼠标键盘去发送飞信消息的小程序。于是我赶紧电话咨询了一下。然后掌握了这个技巧,按时解决了问题。我觉得这个技巧还是很有用的,现总结如下:首先,引入如下三个API接口:
[DllImport("user32.dll")]
public&static&extern&IntPtr FindWindow(string&lpClassName, string&lpWindowName);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private&static&extern&int&SendMessage(IntPtr hWnd, int&Msg, IntPtr wParam, stringlParam);
[DllImport("User32.dll ")]
public&static&extern&IntPtr FindWindowEx(IntPtr parent, IntPtr childe, string&strclass, string&FrmText);
第一个与第三个是用于查找窗口句柄的,凡运行于Windows上的窗口,都具有句柄。窗口上的文本框,按钮之类的,也有其句柄(可看作子窗口句柄)。这些句柄的类型可以通过
Spy++进行查询。比如C语言编写的程序中,文本框的句柄类型一般为&EDIT&,C#写的程序则不是,可以具体去查。第二个接口则是用于向窗口发送各种消息,比如向文本框发送
字符串,或者向按钮发送按下与弹起的消息等。详细解释如下:
IntPtr hwnd = FindWindow(null, "无标题 - 记事本");
这是用于查找操作系统中打开的窗口中标题名为无标题 - 记事本的窗口。第一个参数是此窗口的类型。这两个参数知道一
个即可,另一个可以填null。但是如果是用窗口类型查找,则可能只能得到其中的一个窗口。因此通过标题进行查找是非常方便的。
IntPtr htextbox = FindWindowEx(hwnd, IntPtr.Zero, "EDIT", null);
这个函数用于获得窗口中子窗口的句柄,子窗口指的其实就是窗口中的各种控件。第一个参数是父窗口的句柄,第二个参数指示获得的是同一类型中的第几个子窗口。填
IntPtr.Zero则表示获得第一个子窗口。第三个参数表示你需要找的子窗口的类型,第四个参数一般为null。如果一个窗口中有两个文本框,那么可以用如下操作获得第二个文本框
IntPtr htextbox = FindWindowEx(hwnd, IntPtr.Zero, "EDIT", null);
IntPtr htextbox2 = FindWindowEx(hwnd, htextbox, "EDIT", null);
这里只是先将第二个参数填为IntPtr.Zero,获取第一个EDIT类型的文本框,然后第二次调用时,再将第二参数填为第一个文本框的句柄,那么执行返回的就是下一个文本框的句柄
了。因此htextbox2得到的就是第二文本框的句柄。在可以自由获得各种窗口及其上控件的句柄后,我们就可以向其发送各种消息进行鼠标和键盘的模拟了。比如:
SendMessage(htextbox, WM_SETTEXT, IntPtr.Zero, name);
这句是为文本框填写相应的字符串name。
IntPtr hbutton = FindWindowEx(hwnd, IntPtr.Zero, "BUTTON", null);
SendMessage(hbutton, WM_LBUTTONDOWN, IntPtr.Zero, null);
SendMessage(hbutton, WM_LBUTTONUP, IntPtr.Zero, null);
这三句是获得了窗口的一个button,然后发送按下,弹起消息给它,模拟了点击鼠标的动作。SendMessage函数的第一个参数是窗口句柄,或者窗口中控件的句柄,第二个参数是消息的类型Flag,这些值是在API的一些头文件中定义好的。你要是在C#中用,就自己去定义他们,比如
constint WM_SETTEXT =0x000C;constint WM_LBUTTONDOWN =0x0201;constint WM_LBUTTONUP =0x0202;constint WM_CLOSE =0x0010;
还有其他的类型Flag,可以参考上一篇Blog查询,也可以去查MSDN。第三个参数和第四个参数都是消息的具体内容。一般我们用的是最后一个参数。第三个参数填为IntPtr.Zero。
当然如果是鼠标的动作,那么最后一个参数就是null。
SendMessage(htextbox, WM_SETTEXT, IntPtr.Zero, name);
SendMessage(hbutton, WM_LBUTTONDOWN, IntPtr.Zero, null);
OK,介绍完毕,收工。

我要回帖

更多关于 易语言 句柄是否有效 的文章

 

随机推荐