按鍵精靈 句柄 獲得句柄 控制windows窗口 后台


新建一個文本文檔,打開,Windows就會給這個文本文檔的窗口臨時分配唯一的一串數字來標識這個窗體,以區別於其他窗口,這串數字就叫句柄。

 
因為句柄是臨時隨機分配的,所以每次雖然是打開同一個文件,但是分配到的一串數字卻是不一樣的。
 
所以我們要通過窗體的標題欄來確定每次不同的句柄。
 
例如,我打開一個“新建 文本文檔 (5).txt”,打開, 文本文檔的標題欄是“新建 文本文檔 (5).txt - 記事本”,那么,我就通過“新建 文本文檔 (5).txt - 記事本”(注意:不是文件名)來查找這個文本文檔的句柄。
 
Hwnd = Plugin.Window.Find(0, "新建 文本文檔 (5).txt - 記事本")
Delay 2000
 
然后通過句柄對這個文檔進行最大化操作
 
Plugin.Window.Min  Hwnd
Delay 2000
 
要對這個文本文檔進行寫入,就要另外單擊文本區域,文本區域是這個窗體的一部分,有自己的句柄,我們稱之為“子句柄”。我們可以通過剛才找到的窗口句柄,類(抓抓里面獲取),來查找窗體里面的某一獨立部分的子句柄。然后對子句柄所標識的窗體部分寫入文本。
 
HwndEx = Plugin.Window.FindEx( Hwnd, 0, "Edit", 0)
Delay  2000
Call Plugin.Window.SendString( HwndEx, "hello,word,I am the king")  
Delay 2000
 
“全部命令”--“插件命令”--“windows 窗口插件” 可找到以上函數
 
 
 
 
后台:什么意思?
 
比如一個游戲,窗口最大化后,我們可以玩;但是我們把它最小化后,雖然我們看不見了,它還是沒有停止,它還在幕后(前台后面)繼續運行,這個就叫后台。
 
又例如,我們挪動鼠標雙擊我的電腦,這個過程可視;如果通過后台執行這個操作,我們雖然看不到鼠標挪動的過程,但是也可以達到雙擊我的電腦的效果。
 
Hwnd = Plugin.Window.MousePoint()  獲得當前鼠標所在窗體的句柄的命令
Call Plugin.Bkgnd.LeftClick(Hwnd, 36, 98)  在后台單擊選中“我的電腦”,前提是執行時候鼠標要挪到桌面上。貌似按鍵精靈對鼠標后台雙擊單擊做得不好,有時不靈。
 
 
 
Hwnd = Plugin.Window.MousePoint()
XY = Plugin.Bkgnd.FindColor(Hwnd, 0, 0, 1024, 768, "0201E1")   '區域找色
ZB = InStr(XY, "|")
X = Clng(Left(XY, ZB - 1))
 Y = Clng(Right(XY, Len(XY) - ZB))
MsgBox "x"&X &"y"& Y                     '彈出窗口,指定顏色如果找到,顯示他的點的坐標
 
注意:插入語句默認是X = Clng(Left(XY, ZB - 1)): Y = Clng(Right(XY, Len(XY) - ZB))這樣的
要把冒號改掉,分2行。
 
獲得句柄的幾個函數。注意,如果不打開窗口,是無法獲得句柄的。標題名也不能寫錯,寫錯也無法獲取。但是會有返回值。
Hwnd = Plugin.Window.GetKeyFocusWnd()    獲得當前激活的窗口句柄,激活的窗口鼠標不一定在上面
Hwnd = Plugin.Window.MousePoint()       獲得鼠標當前停留的窗口的句柄,當前窗口狀態未必激活(被點選)
Hwnd = Plugin.Window.Find(0, "無標題 - 記事本")  獲取窗口標題欄為“無標題 - 記事本”的窗口的句柄
 
一般優先使用Plugin.Window.Find,如果窗口標題不固定,再考慮使用其他兩個函數
 
Hwnd = Plugin.Window.Find(0, "新建 文本文檔 (7).txt - 記事本")
sRect = Plugin.Window.GetClientRect(Hwnd)   '獲取窗口的4個坐標
myArray=Split(srect,"|")       '分離出四個坐標 因為Split就是數組函數,所myArray雖然沒有定義,也被默認定義成了動態數組變量
 
MessageBox myArray(0) & "," & myArray(1)  '顯示出變量起始點的坐標
a = CLng(myArray(0))                      '將變量里的值從字符變為數字類型,然后才能用moveTo函數
b = CLng(myArray(1))
MoveTo a, b
 
 
獲取窗口坐標的目的:窗口的位置不固定,但是窗口內的內容相對於窗口的位置是固定的,“絕對坐標”+“相對坐標”,結合ifColor函數,進行判斷
 
KeyDown 就要記得 keyUp
 
截取一部分,才有共性。比如找圖,找游戲人物,不建議截取增個人,因為人的穿着裝備是會變化的;可以截取臉部或者其他一部分。
 
抓抓工具,可以設定起始坐標,來獲得相對坐標。
 
用戶自定義變量http://zy.anjian.com/index.php?action-viewnews-itemid-220
用戶自定義變量,也就是說用戶可以輸入參數(在腳本屬性--其他),然后傳給程序執行,提高程序靈活性。
 
UserVar TheKeyYouPress "你要按下的鍵"   '注意最后的中文是固定格式,一定要有,不是注釋
UserVar TheTimeYouWant "你要按幾次"
 
For TheTimeYouWant
KeyPress TheKeyYouPress, 1
Next
 
OCX界面(很雞肋的一個功能,效果也不好,建議直接用“用戶自定義變量”)
利用VB對C:\Program Files\按鍵精靈9\source\自定義界面例子(VB 6.0)\VB-BIG-001\QMacroUI.vbp修改制作界面,然后做成OCX文件。
然后再按鍵精靈右側 腳本屬性--其他--設置界面 里面,把OCX文件包含進來。
主要原理:例如,VB設計界面的時候,文本框的名稱設置成 TheKeyYouPress 要和按鍵精靈腳本的自定義變量UserVar TheKeyYouPress "你要按下的鍵",兩個要一樣。
http://www.aipai.com/c9/ODY9JSknImgnaiYp.html 例子里面大致那樣,實際用按鍵精靈9用起來還有一定問題。
例子里面改了很多地方,其實主要功能就是保存上次你輸入的參數,一個將保存好的參數導出。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM