设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 紫苏
打印 上一主题 下一主题

[原创发布] [XP/VX] 精确获取窗口句柄(解决部分 API 脚本潜在问题)

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
11
 楼主| 发表于 2009-9-1 12:38:04 | 只看该作者
你这样获得窗口,任何干涉都会出现意外的…而且你的while既然写成顺序搜索了…那还不如将while写成if(激活的窗口)的ID是指定的进程ID?如果不是return MessageBox(0,"can't find the window","",MB_OK)算了,否则 ...
碧绿de奶茶 发表于 2009-9-1 12:19

会有干涉是真的,GetWindow 可能导致死循环,最好的办法是用 EnumWindows,但这个函数涉及到回调函数,所以得另外写个 DLL,比较麻烦,所以干脆直接用 GetWindow 了……大家要是不嫌又在工程里放一个 DLL 麻烦我倒是可以写一个
至于从开头开始搜索,给 GetWindow 的第二个参数传递的 0 没看到么?
GetForeground 只是随便获取一个顶级窗口,由于第二个参数是 0, GetWindow 会获取到在 Z 次序中同为顶级窗口的最上层窗口,然后从这个窗口开始枚举 =v=
至于线程比较进程,Orz,服了,还不至于犯这种错误,随便测试一下也会发现问题啊……我还以为你的观点是“判断进程比较保险” =v=
至于我修改过什么的,自己看看编辑帖子的时间吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦·贤者

梦石
0
星屑
50
在线时间
1141 小时
注册时间
2007-12-15
帖子
4100
12
发表于 2009-9-1 12:51:41 | 只看该作者
本帖最后由 tommay 于 2009-9-1 12:53 编辑

刚刚搜索了下,我也觉得紫苏大就是传说中的“六脉神剑”,紫苏大就承认了吧,不行PM告知在下也行啊
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-7-7
帖子
246
13
发表于 2009-9-1 13:27:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

14
发表于 2009-9-4 22:24:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
15
发表于 2009-9-4 22:54:16 | 只看该作者
那截图脚本 ms还存在bug的? 窗口一般在任务栏一下的情况? = = ms
RMXP&RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

16
发表于 2009-9-5 08:21:49 | 只看该作者
本帖最后由 精灵使者 于 2009-9-5 08:28 编辑

恩恩,尤其是我在窗口的模式下拖动窗口的时候会出BUG(因为窗口会自动添加一些东西,所以不能正确的找到窗口而截到了桌面)
如果你在测试的时候按下F2,然后截图存档就会出现上面的错误= =(拖动以后会截到桌面)
所以我主要想解决的是在拖动窗口以后的脚本工作问题。
以前因为这个错误我被迫自动全屏了= =
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2007-8-30
帖子
101
17
发表于 2009-9-5 12:31:42 | 只看该作者
非常不错的脚本,谢谢了!~~
终于能改api了
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

18
发表于 2009-9-7 01:52:11 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
19
 楼主| 发表于 2009-9-8 02:53:54 | 只看该作者
@ tommay:我是从他那里继承了很多东西,但我不是他……他已经逝去多年矣

@ 碧绿:无论第二个参数是否是 NULL,GetWindowThreadProcessId 本身都会返回线程 ID~传一个 NULL 仅仅是为了不获取进程 ID 而已(本来是应该传递一个 long 型变量的地址)

@ 沉影:呃,其实貌似是不是常量都没关系,不能确定标题的时候,FindWindow 的方法在第一次获取句柄时就会失败……况且呢, Ruby 常量形同虚设,常量的值随时可以动态修改……

点评

常量设置以后直接freeze就可以了  发表于 2012-1-12 16:34
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

20
发表于 2009-9-9 12:54:24 | 只看该作者
To 紫苏,以前那个脚本截取到桌面的原因就是,没有获得当前窗口所在的坐标造成的,于是SHOT脚本就按照刚开始游戏的初始化坐标去截图,肯定是桌面了= =
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-22 17:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表