找回密码
 加入
搜索
查看: 14307|回复: 25

请高手看下后台鼠标移动点击

 火.. [复制链接]
发表于 2009-10-31 15:58:53 | 显示全部楼层 |阅读模式
本帖最后由 windw2 于 2009-11-1 07:19 编辑

为了实现鼠标在后台能够移动并点击,并不影响当前自己键盘和鼠标的问题,我在论坛上看了很久,始终理不清头绪,如下程序,请高手帮忙。

#include <PostMessage_UDF.au3>
Run("mspaint.exe")      启动画图板程序
$hwnd=wingethandle("classname=mspaintapp")   获得画图板窗口的句柄
_MouseClick($CtrlHandle, "left", 30,30)                  在后台画图板窗口坐标30,30处左键点击
sleep(2000)
_MouseClick($CtrlHandle, "left", 50,30)                  在后台画图板窗口坐标50,30处左键点击
sleep(2000)
_MouseClick($CtrlHandle, "left", 60,30)                   在后台画图板窗口坐标60,30处左键点击
sleep(2000)
_MouseClick($CtrlHandle, "left", 300,300)               在后台画图板窗口坐标300,300处左键点击
sleep(2000)
_MouseClick($CtrlHandle, "left", 500,300)               在后台画图板窗口坐标500,300处左键点击
sleep(2000)
_MouseClick($CtrlHandle, "left", 600,300)               在后台画图板窗口坐标600,300处左键点击
sleep(2000)

为什么在画图版上一点反应也没有,我用autoit最主要就是为了这个功能,再系统学autoit也觉得太麻烦了,请高手帮下忙,谢谢了!
发表于 2009-10-31 17:07:53 | 显示全部楼层
wingethandle("[CLASS:MSPaintApp]")
 楼主| 发表于 2009-10-31 17:54:38 | 显示全部楼层
谢谢楼上帮忙纠正错误,不过试了下还是不行,可能程序中还有错误,麻烦再看看,谢谢!
发表于 2009-10-31 19:11:19 | 显示全部楼层
抱歉 我是台灣的,兩地口語 不是相同

您是想玩背景滑鼠? 在小畫家嗎?

倘若是我可以引我完整範例給你...
 楼主| 发表于 2009-10-31 19:14:53 | 显示全部楼层
楼上的台湾朋友,能给我范例吗?不甚感谢!可发我邮箱:zrxswfbm@hotmail.com
发表于 2009-10-31 19:44:04 | 显示全部楼层
5# windw2

喔...馬上去寫,30分鐘內交件,內容為
於小畫家中...直線、橫點的畫線(是採集點擊式完成,拖曳式理論上,有可能請自行學習)
 楼主| 发表于 2009-10-31 19:54:45 | 显示全部楼层
麻烦了,不过关键是能实现鼠标的后台移动,点击,而不影响前台的键盘和鼠标的操作,小画家只是为了实验这个功能。
发表于 2009-10-31 20:51:15 | 显示全部楼层
拍謝 跟外掛論壇的人聊開了,一下子忘記...這是抽論壇內的文章,改寫出來的...請您這樣做
一、開啟小畫家
二、執行以下的程式碼
三、點後台執行...
※ 倘若有不OK的地方,關鍵僅有一行
$WinHandle=ControlGetHandle("[CLASS:MSPaintApp;INSTANCE:1]","","Afx:1000000:81")

#include <PostMessage_UDF.au3>
#include <GUIConstants.au3>

opt("guiOneventMode",1)        ;事件模式
$outWindow=GUICreate("Background key test",300,300,50,50)        ;創建一個演示窗口
GUISetOnEvent($gui_event_close,"Close_Click",$OutWindow)        ;窗口關閉事件

$BtnNotepad=GUICtrlCreateButton("新建一個記事本",50,50,150,25)        ;
GUICtrlSetOnEvent($BtnNotepad,"CreateNotepad")        ;創建一個記事本

$BtnInsert=GUICtrlCreateButton("後台鍵盤輸入",50,100,180,25)
GUICtrlSetOnEvent($BtnInsert,"InsertKeyValue")        ;在上面創建的記事本中輸入字符
GUISetState(@sw_show)

;創建記事本的函數
Func CreateNotepad()
        Run("Notepad.exe")
EndFunc

;向創建的記事本中插入字符的函數
Func InsertKeyValue()
        ;下面這個取得句柄的方法是關鍵,如果自己不知道Class的名字,可以借助 Autoit Window Info
        ;詳細的信息在第二個選項卡control中
$WinHandle=ControlGetHandle("[CLASS:MSPaintApp;INSTANCE:1]","","Afx:1000000:81")

        If $WinHandle<1 Then
                MsgBox(0,"Error","句柄錯誤")
                GUIDelete()
                Exit
        EndIf
        ;後台開始發送按鍵信息,如果你想觀察得更仔細點,可以把循環值設置大一些,SLEEP的值也設置大一些
        ;這樣可以更清楚的體會後台發送的效果,當本程序在發送時,你可以在別的窗口處理別的事務,絲毫不影響
        For $i=1 to 100
                                _MouseClick (String($WinHandle),"left",$i*10,$i*5)
                                _MouseClick (String($WinHandle),"left",$i*5,$i*10)
;~                 _SendText(String($WinHandle),"9")
                Sleep (10)
        Next
EndFunc

;關閉GUI的函數
Func Close_Click()
        Exit
EndFunc

While 1
        Sleep (500)
WEnd
发表于 2009-10-31 21:33:00 | 显示全部楼层
嗯 要把消息发送给 绘图控件 而不是发给窗口
 楼主| 发表于 2009-10-31 21:34:51 | 显示全部楼层
谢谢了,我这就研究调试。
发表于 2009-10-31 21:48:50 | 显示全部楼层
谢谢了,我这就研究调试。

加油..我相信小畫家部份,你有這次範例,可以輕易成功的!
至於sxd的這句「嗯 要把消息发送给 绘图控件 而不是发给窗口」

也或許是我這陣子困境的主因,Autoit3 在沒有完整控件支援下,相容度、實用度,有一定可以降至最低...這也產生
在XP任何標準程式下,玩轉鍵盤、滑鼠,都完美演出...
在遊戲模式下,簡直是殘花敗柳...
 楼主| 发表于 2009-10-31 22:15:36 | 显示全部楼层
$WinHandle=ControlGetHandle("[CLASS:MSPaintApp;INSTANCE:1]","","Afx:1000000:81")
这句的确很难理解,其实我不需要有一个启动界面,我自己可以做个快捷键启动后台鼠标运行,比如pgup启动,pgdn暂停,这功能我可以实现。
只是我不知道$WinHandle怎样定义如果我只是这样:
$WinHandle=wingethandle("[CLASS:MSPaintApp]")
For $i=1 to 100
                                _MouseClick (String($WinHandle),"left",$i*10,$i*5)
                                _MouseClick (String($WinHandle),"left",$i*5,$i*10)
                      Sleep (10)
        Next

但还是没成功,望指教!
 楼主| 发表于 2009-10-31 22:51:50 | 显示全部楼层
前面不好意思,
$WinHandle=ControlGetHandle("[CLASS:MSPaintApp;INSTANCE:1]","","Afx:1000000:81")
For $i=1 to 100
                                _MouseClick (String($WinHandle),"left",$i*10,$i*5)
                                _MouseClick (String($WinHandle),"left",$i*5,$i*10)
                      Sleep (10)
        Next
已经能实现我所要的功能,谢谢各位了!
发表于 2009-10-31 23:09:59 | 显示全部楼层
加油QQ 去結帖吧, 恭喜您畢業了... 準備陷入其他的地獄
发表于 2009-11-1 15:14:00 | 显示全部楼层
这个我也想学.感觉挺有用的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-25 19:01 , Processed in 0.078638 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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