找回密码
 加入
搜索
楼主: Qokelate

[AU3基础] 刚学DLLCALL(),从MS网站搬了三个系统服务相关的API,呵呵

[复制链接]
发表于 2012-3-14 20:15:11 | 显示全部楼层
呵呵,路过支持一下
发表于 2012-3-14 20:23:14 | 显示全部楼层
真是学习了。刚开始我发现其中的3处错误,分别是:

Local $hSrvState = DllCall($hADVAPI32, 'int', 'QueryServiceStatus', 'handle', $hSrv[0], 'str', 0)
; 第6行, 'str', 0,应该写成 'ptr', DllStructGetPtr($tServerStatus)

Return $hSrvState[0]
; 第10行,$hSrvState[0] 是QueryServiceStatus的返回值,而非服务的状态,状态信息包含在第2个参数中。

DllCall($hADVAPI32, 'int', 'ControlService', 'handle', $hSrv[0], 'dword', 1, 'str', 1)
; 第18行,'str', 0,应该写为 'ptr', DllStructGetPtr($tServerStatus)


细想之后,发现第3处错误,这样写也是可以的。用ControlService来停止服务,第3个参数应该设为SERVICE_STATUS结构的指针,在成功调用之后,这个结构中将包含一些服务的状态信息。如果不关心这些状态信息,且在调用ControlService函数之前,不必设置结构中某些字段的值,完全可以用'str', '' 来代替'ptr', DllStructGetPtr($tServerStatus)。

但是,第1、2处错误,这样写就完全错了。函数名为GetSrvState,功能是查询服务的状态,你正是需要第2个参数,所以应该将其设为一个有效的SERVICE_STATUS结构的指针。这样写之所以不会出错,是因为Au3内部在判断参数类型为str或wstr时,会自动分配一个有效的缓存区。Return $hSrvState[0],$hSrvState[0]是QueryServiceStatus函数的返回值,是个布尔值,只是说明函数是否调用成功的,如果成功,服务的状态信息则包含在第2个参数所指向的SERVICE_STATUS结构中。如果按照楼主兄的写法,那么这个函数功能应该是“判断是否能成功查询服务的状态”,而函数名也应该改为 IsServiceQueryStatusSuccessful。而“判断是否能成功查询服务的状态”,只需在OpenService函数中指定服务名称和SERVICE_QUERY_STATUS 访问权限掩码就可以了,如果OpenService返回一个有效的服务句柄,则说明服务的状态是能够成功查询的,之后对QueryServiceStatus函数的调用也是多余的。

评分

参与人数 2金钱 +60 收起 理由
afan + 50
Qokelate + 10 谢谢指出,我把那个函数删除了吧,以免误导 ...

查看全部评分

发表于 2012-3-14 20:34:05 | 显示全部楼层
看看在说。。
发表于 2012-3-14 22:11:43 | 显示全部楼层
还不会dllcall 学下下
 楼主| 发表于 2012-3-15 02:12:33 | 显示全部楼层
回复 19# pusofalse


    谢谢指出,这几个函数是看着帮助的DLLCALL写的,很多地方还是不明白,我把查询那个函数删除了,以免误导他人,呵呵,停止那个倒是知道那里是状态,不过不知道怎弄,就直接带过了,呵呵
发表于 2012-3-15 05:26:40 | 显示全部楼层
樓主,我太愛你了,我就喜歡這樣的.万分感谢
发表于 2012-3-15 06:43:23 | 显示全部楼层
回复看一看
发表于 2012-3-15 11:07:18 | 显示全部楼层
借鉴下楼主DLLCALL的方法!
发表于 2012-3-15 11:15:14 | 显示全部楼层
顶顶更健康!
发表于 2012-3-15 11:17:31 | 显示全部楼层
谢谢楼主共享
发表于 2012-3-15 13:41:44 | 显示全部楼层
不知道新版本兼容性怎么样
发表于 2012-3-15 16:48:04 | 显示全部楼层
看看啥内容?
发表于 2012-3-15 17:00:02 | 显示全部楼层
谢谢楼主分享
发表于 2012-3-15 17:23:08 | 显示全部楼层
看到别人源码中油,但是一点都不懂  学习一下
发表于 2012-3-15 19:08:19 | 显示全部楼层
收藏了,多谢。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 09:21 , Processed in 0.070012 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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