cashiba 发表于 2016-12-14 20:33:55

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

本帖最后由 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),也不能关闭窗口。
都说句柄精确....

afan 发表于 2016-12-14 20:38:43

Run之后没有等待/判断,$hWnd 肯定无效,后面就不用说了

cashiba 发表于 2016-12-14 20:57:33

Run之后没有等待/判断,$hWnd 肯定无效,后面就不用说了
afan 发表于 2016-12-14 20:38 http://www.autoitx.com/images/common/back.gif
还是A大经验丰富.....
{:face (88):}
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?mod=viewthread&tid=20836&extra=&highlight=%BA%F3%CC%A8&page=1
后台点击总是没反应。跟操作系统有关系吗?win7的系统.....
A大空了帮看看....

cashiba 发表于 2016-12-14 21:07:08

另外这个
Run("calc.exe","", @SW_MINIMIZE)或Run("calc.exe","", @SW_SHOWMINIMIZED)
感觉不起作用。

Run("notepad.exe","", @SW_MINIMIZE)
却正常.
晕了...............

229989799 发表于 2016-12-16 13:41:51

结束进程的方式关闭比较好一点,窗口关闭可能有些程序只是最小化而没有关闭啊。以下是进程关闭程序Example()

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

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

    ; 等候 2 秒.
    Sleep(2000)

    ; 使用 Run() 返回的进程 PID 关闭记事本程序.
    ProcessClose($iPID)
EndFunc   ;==>Example

229989799 发表于 2016-12-16 13:48:42

本帖最后由 229989799 于 2016-12-16 13:50 编辑

最小化窗口 _WinAPI_ShowWindow,请自己看帮助

cashiba 发表于 2016-12-16 18:05:46

最小化窗口 _WinAPI_ShowWindow,请自己看帮助
229989799 发表于 2016-12-16 13:48 http://www.autoitx.com/images/common/back.gif
Run("calc.exe","", @SW_MINIMIZE)或Run("calc.exe","", @SW_SHOWMINIMIZED)
这个为啥看不到最小化效果?
页: [1]
查看完整版本: 为什么WinClose($Hwnd)不能关掉窗口?[已解决]