TC官方合作论坛

 找回密码
 立即注册
查看: 3909|回复: 9

[已解决] 关于SendMessageTimeout应用于解决窗口没响应的具体实施求解

[复制链接]
发表于 2015-11-25 09:22:11 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我用的是TC4.0,最近经常遇到窗口卡死没响应的状况,听人说可以用SendMessageTimeout 这个USER32.DLL里的API解决,于是尝试DLLCALL,但是返回值总是空
附上我的DLLCALL代码

返回值=dllcall("user32.dll","int","SendMessageTimeout","int",197350,"int",61472,"int",0,"int",0,"int",1,"int",1000,"int",次数局)
其中19370是我要操作的窗口句柄,61472是我要发送的消息:最大化窗口,不过我的目的是发送一个空消息,因为不知道怎么发空消息,所以用最大化.
附上API说明:

说明
向窗口发送一条消息。如窗口位于不同的线程中,则利用这个函数可以指定一个超时值,以便在另一个进程挂起的时候防止调用进程也永远挂起
返回值
Long,成功时返回TRUE,失败时返回FALSE。会设置GetLastError
参数表
参数类型及说明
hwndLong,要接收消息的一个窗口的句柄
msgLong,消息的标识符
wParamLong,由消息决定
lParamLong,由消息决定
fuFlagsLong,下述常数的一个或多个
SMTO_ABORTIFHUNG如目标进程挂起,则函数立即返回
SMTO_BLOCK除非函数返回,否则调用线程不能处理消息
SMTO_NORMAL允许调用线程处理消息,同时保持函数继续执行
uTimeoutLong,超时值,采用毫秒为单位
lpdwResultLong,用于装载函数结果的一个变量

回复

使用道具 举报

发表于 2015-11-26 05:53:32 | 显示全部楼层
试试这样
  1. var WM_NULL = 0
  2. dllcall("user32.dll","int","SendMessageTimeoutW","int",窗口句柄,"int",WM_NULL,"int",0,"int",0,"int",3,"int",1000,"int",0)
复制代码
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-11-25 09:33:16 | 显示全部楼层
在线等,没有人么?
回复 支持 反对

使用道具 举报

发表于 2015-11-25 11:25:52 | 显示全部楼层
窗口句柄不是固定的,
回复 支持 反对

使用道具 举报

发表于 2015-11-25 11:44:47 | 显示全部楼层
会置GetLastError那就调一下GetLastError看看是啥不就知道了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-26 10:35:15 | 显示全部楼层
超自然 发表于 2015-11-25 11:44
会置GetLastError那就调一下GetLastError看看是啥不就知道了

菜鸟不会的说.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-26 10:39:57 | 显示全部楼层

返回值为空
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-26 11:59:11 | 显示全部楼层

原来我少了那个W啊,谢谢了大神
回复 支持 反对

使用道具 举报

发表于 2016-1-20 11:30:11 | 显示全部楼层
我也是返回空值,原来SendMessageTimeout后面少了个W,谢谢大神!!!!!
回复 支持 反对

使用道具 举报

发表于 2016-1-20 11:30:14 | 显示全部楼层
我也是返回空值,原来SendMessageTimeout后面少了个W,谢谢大神!!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-29 12:45 , Processed in 0.038699 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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