afan
发表于 2010-7-9 20:09:41
本帖最后由 afan 于 2010-7-9 20:13 编辑
回复 45# yarsye
在1.au3第3行后面加个sleep(200)或者 WinActive($title)
jinyue115
发表于 2010-7-9 21:13:14
回复 46# afan
afan
发表于 2010-7-9 21:21:18
回复 47# jinyue115
将1.au3 里面的send()前面加一行msgbox() ,确定下是否为 send 错误
lchl0588
发表于 2010-7-9 21:32:39
回复 48# afan
呵呵,刚刚打完球回来,看到你对此感兴趣,偶又改了下代码!!!$a="d:\aaaa"
If FileExists($a) Then
ShellExecute($a)
EndIf
WinWaitActive("aaa","",2)
If WinExists("aaa") Then
Send("{enter}")
MsgBox(48,"","文件存在",5)
Else
MsgBox(48,"","文件不存在",5)
EndIf
jinyue115
发表于 2010-7-9 21:34:14
回复 48# afan
貌似执行完这个ShellExecute($title)后 转到1。au3
然后就没做任何操作
没msgbox弹出来$title = $CmdLine
While 1
If WinExists($title, 'Windows ') Then
MsgBox(0,"1","2")
Sleep(200)
WinActive($title)
;Sleep(200)
Send('{enter}')
Exit MsgBox(48, '这是监视程序弹出的', $title & ' 不存在 ')
ElseIf WinExists('ok文件夹存在') Then
Exit
EndIf
Sleep(1)
WEnd
afan
发表于 2010-7-9 21:35:18
回复 49# lchl0588
打球辛苦了,不过比打架轻松点~~
LZ的问题关键是干掉错误提示框……
jinyue115
发表于 2010-7-9 21:37:02
回复 49# lchl0588
不好意思 你的只是会弹出来 “文件不存在”
MsgBox(48,"","文件不存在",5)
jinyue115
发表于 2010-7-9 21:39:13
回复 49# lchl0588
一 如果D盘有aaaa存在 会说存在 否则说不存在
二 永远不会运行shellexecute 就不会有后面的。。。。。
afan
发表于 2010-7-9 21:42:55
回复 50# jinyue115
这就见鬼了,我这测试了无数次,那个错误提示框都是只哼一声就被干掉了……
你的测试确实是没捕获到错误窗口。
把他俩都编译成exe再测试,别忘了测试脚本里的ShellExecute(1.au3) 也改成 1.exe
lchl0588
发表于 2010-7-9 21:46:41
本帖最后由 lchl0588 于 2010-7-9 21:56 编辑
啊啊,弹出这些只是为了方便查看,如果完全没有对话框的话,那就这样吧!!!!!!!!!$a="d:\aaaa" ;正确路径是d:\aaa
If FileExists($a) Then
ShellExecute($a)
EndIf
WinWaitActive("aaa","",2)
If WinExists("aaa") Then
Send("{enter}")
Else
Exit; run("Notepad.exe") ;这俩都可以,只是为了测试方便而已
EndIf-------------------------------------------------------------------------分界线
哈哈,大学的人真多!!话回正题:
回复 54# afan
你的代码,偶测试了下,错误对话框得确有,只不过一秒时间就过去了!最后弹出存在哇或不存在的情况!
瞬间的图,终于截了,你看下吧!
jinyue115
发表于 2010-7-9 23:49:18
回复 51# afan
感谢
jinyue115
发表于 2010-7-9 23:49:39
回复 55# lchl0588
Thanks a lot!
afan
发表于 2010-7-9 23:54:49
回复 55# lchl0588
呵呵,这不是拦截,当然会出现,只是现在的目的是将出来的窗口瞬间干掉而已~
你连这种瞬间弹出的窗口都能截住,还拍个照,你可以改行去打劫了~
lanfengc
发表于 2010-7-10 02:08:26
HotKeySet("{ESC}","quit")
;这个是定义全局的目录变量, 可以自己改成你自己的目录
Global $Path="d:\aa"
;打开DLL文件
$dll = DllOpen("user32.dll")
;设置DLL回调函数
$Timer = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
;启动定时器
$TimerDLL = DllCall($dll, "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 100, "ptr", DllCallbackGetPtr($Timer))
;你要写的代码只能写在这据注释之下,要不然定时器不会运行。
ShellExecute($Path)
While 1
Sleep(100)
WEnd
Func quit();退出,关闭定时器, 释放回调函数指针,关闭DLL
DllCall($dll, "int", "KillTimer", "hwnd", 0, "uint", $TimerDLL)
DllCallbackFree($Timer)
DllClose($dll)
Exit
EndFunc
Func Timer($hWnd, $uiMsg, $idEvent, $dwTime);检测窗体。
If WinExists($Path) Then ControlClick($Path,"","Button1","left",1)
EndFunc
我的代码可完美实现你要的效果。
lynfr8
发表于 2010-7-10 02:10:54
我的代码可完美实现你要的效果。
lanfengc 发表于 2010-7-10 02:08 http://www.autoitx.com/images/common/back.gif
呵呵,夜猫子,还在帮别人解决问题,难得...