找回密码
 加入
搜索
查看: 2774|回复: 6

[AU3基础] 为什么WinClose($Hwnd)不能关掉窗口?[已解决]

[复制链接]
发表于 2016-12-14 20:33:55 | 显示全部楼层 |阅读模式
本帖最后由 cashiba 于 2017-3-18 09:29 编辑
Run("calc.exe","", @SW_SHOWMAXIMIZED)
local $Hwnd = WinGetHandle("计算器")
sleep(3000)
WinActive($Hwnd)
sleep(1000)
WinClose($Hwnd)
以上代码运行过程中,有几个小问题:
1、帮助文件中,@SW_MINIMIZE = 最小化窗口。而示例中,使用的是@SW_SHOWMINIMIZED。两者兼容吧?
2、@SW_MINIMIZE = 最小化窗口,在本例中好像没有起作用,并没有最小化到任务栏。
3、WinClose($Hwnd),这一句不能关掉窗口,why?
4、WinKill($Hwnd),也不能关闭窗口。
都说句柄精确....

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-12-14 20:38:43 | 显示全部楼层
Run之后没有等待/判断,$hWnd 肯定无效,后面就不用说了
 楼主| 发表于 2016-12-14 20:57:33 | 显示全部楼层
Run之后没有等待/判断,$hWnd 肯定无效,后面就不用说了
afan 发表于 2016-12-14 20:38

还是A大经验丰富.....

run后必延时,这下记住了.......
是在测试下面的代码中,得不到结果,才单独开关窗口看看哪里有问题的
#include <WinAPI.au3>
#include <SendMessage.au3>
Run("calc.exe","", @SW_MAXIMIZE)
sleep(1000)
local $Hwnd = WinGetHandle("计算器")
Sleep(1000)
Local $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
Sleep(1000)
;-------点击清除键C
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 81), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 81), 0x0202, 0)

;-------点击5
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 135), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 135), 0x0202, 0)

;-------点击+
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 93), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 93), 0x0202, 0)

;-------点击5
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 135), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 135), 0x0202, 0)

;-------等于
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 121), 0x0201, 0)
_SendMessage(_WinAPI_GetDlgItem($Hwnd, 121), 0x0202, 0)

;操作是点击:5+5=

ProcessClose($iPID)
sleep(1000)
WinActive($Hwnd)
sleep(1000)
MsgBox(262208,"看到了没有","结果是10吧!",3,$Hwnd)
WinClose($Hwnd)
以上代码来源于:http://www.autoitx.com/forum.php ... F3%CC%A8&page=1
后台点击总是没反应。跟操作系统有关系吗?win7的系统.....
A大空了帮看看....
 楼主| 发表于 2016-12-14 21:07:08 | 显示全部楼层
另外这个
Run("calc.exe","", @SW_MINIMIZE)或Run("calc.exe","", @SW_SHOWMINIMIZED)
感觉不起作用。

Run("notepad.exe","", @SW_MINIMIZE)
却正常.
晕了...............
发表于 2016-12-16 13:41:51 | 显示全部楼层
结束进程的方式关闭比较好一点,窗口关闭可能有些程序只是最小化而没有关闭啊。以下是进程关闭程序
Example()

Func Example()
    ; 最大化窗口运行记事本程序.
    Local $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)

    ; 延迟 10 秒, 等待记事本窗口出现.
    WinWait("[CLASS:Notepad]", "", 10)

    ; 等候 2 秒.
    Sleep(2000)

    ; 使用 Run() 返回的进程 PID 关闭记事本程序.
    ProcessClose($iPID)
EndFunc   ;==>Example
发表于 2016-12-16 13:48:42 | 显示全部楼层
本帖最后由 229989799 于 2016-12-16 13:50 编辑

最小化窗口 _WinAPI_ShowWindow,请自己看帮助
 楼主| 发表于 2016-12-16 18:05:46 | 显示全部楼层
最小化窗口 _WinAPI_ShowWindow,请自己看帮助
229989799 发表于 2016-12-16 13:48

Run("calc.exe","", @SW_MINIMIZE)或Run("calc.exe","", @SW_SHOWMINIMIZED)
这个为啥看不到最小化效果?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-24 10:16 , Processed in 0.080300 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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