| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3073 人关注过本帖
标题:关于获取句柄的问题,一直求不到正解!
只看楼主 加入收藏
zmidl
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2009-4-3
结帖率:90.32%
收藏
已结贴  问题点数:10 回复次数:13 
关于获取句柄的问题,一直求不到正解!
由于我获取句柄是 IntPtr 句柄1=Findwindows(string 类名,string 标题名);这样确实获取了窗体句柄
但是 当我再一次打开同一个程序的第二个窗口 我还是这样获取句柄的话 那么一个句柄两个窗体共了。
其结果就是那个窗口最前,那个窗口获得句柄。
我希望把两个相同程序的两个窗口的句柄区别开来,方便我操作。我该如何实现。
是不是可以通过其他方法来获得句柄,或者说通过进程id可不可以呢??
这个问题目前为止一直没有找到满意的答案。若能提供帮助万分感激!!!!
搜索更多相关主题的帖子: 句柄 
2009-08-05 14:37
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
API 函数中有一个可以获得所有打开的窗体方法,看看说明就行啊吗,

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-08-05 14:56
zmidl
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2009-4-3
收藏
得分:0 
以下是引用baikil在2009-8-5 14:56的发言:API 函数中有一个可以获得所有打开的窗体方法,看看说明就行啊吗,
具体如何实现呢?
2009-08-06 09:41
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:10 
呵呵,真懒啊1

findWindowsName.rar (32.54 KB)

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-08-06 11:41
zmidl
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2009-4-3
收藏
得分:0 
以下是引用baikil在2009-8-6 11:41的发言:呵呵,真懒啊1
不是我懒啊 我才接触API 很多函数都是第一次了解,你给了我实例,我就等于学到一个知识点啊!
2009-08-06 15:11
zmidl
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2009-4-3
收藏
得分:0 
baikil兄弟,非常感谢你的代码,我目前正在消化你的代码。不过还是没有解决我的问题。
我如何分开获取相同程序窗体的句柄??

比如  遍历所有窗口句柄得到如下信息
      11111      1.txt - 记事本
      22222      1.txt - 记事本
我如何分开取句柄? 数字句柄如何 变成我要的 IntPtr类型呢??
我的目的就是 postmessage(11111,0x024,。。。。)
然后同样的程序第二个窗口 postmessage(22222,。。。。。)
2009-08-07 14:22
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
呵呵,我不是给你要的句柄啊,只不过我是转换为数字形式显示...
数字转换对应的句柄:----> IntPtr p=new IntPtr(int value);

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-08-07 15:32
zmidl
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2009-4-3
收藏
得分:0 
    这个问题我急需解决阿,高手来回答下吧!!
2009-08-10 13:28
yangglemu
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:521
注 册:2006-9-15
收藏
得分:0 
几个必须的函数:
FindWindowEx
GetClassName
GetWindowRect
EnumWindows
GetWindowText
GetClassName
下面说说方法,有两种:

第一:
用EnumWindows遍历窗口,用GetWindowText或者GetClassName判断是否符合自己要求的窗口,如果是则将其IntPtr保存(如List<IntPtr>)
一个程序的两个运行实例窗口,其WindowText可能一样,但ClassName是不一样的,据此可以作为加进List的依据,当遍历完后,List中就是所有符合要求的句柄

第二:
先运行N次程序,留一个窗体不要最小化,其它全部最小化,然后打开搜寻程序遍历窗口,当WindowText符合要求时,获取其Rect并判断大小(只要超过任务栏图标的Rect就可以了,比如400×200,因为有的程序其任务栏图标的WindowText也和界面一样,要注意区别开来),只要大于任务栏图标Rect的,就可以断定其为我们要找的窗体了,保存其句柄,然后将此找到的窗体最小化,再将另一个窗体恢复,重复遍历,开了几个窗体,至少按几次搜寻按钮即可(或者一个窗体对应一个搜寻程序,我的游戏外挂就是一个游戏对应一个外挂,互不干扰)

试着挣个威望!
2009-08-10 21:13
zmidl
Rank: 1
等 级:新手上路
帖 子:115
专家分:0
注 册:2009-4-3
收藏
得分:0 
楼上的朋友 同样的程序多个窗口 ClassName类名怎么就一样了??两个按钮 类名都是BUTTON啊????
还有我打开的多个相同窗体一模一样,就是数字句柄不一样,但是数字句柄每次都是变动的我才头疼!!!
我就是为了实现 两个相同的游戏窗口可以互相切换 方便我postmessage 自动挂机的目的阿!!!!
2009-08-11 09:13
快速回复:关于获取句柄的问题,一直求不到正解!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016645 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved