轉 Python使用win32api系統鈎子


   有這樣一個需求:客戶的測試程序掃描一個產品的條形碼,但是它沒有和系統驗證的功能(就是從系統里面檢查是否可以在此測試位進行測試。比如說有10個測試位,這是第4個,那么就必須前面的3個測試位全部pass后,第4個測試位才能測試,這就是所說的驗證。當然還有其他的情況,比如每個產品同一測試位只能測2次,再測第3次系統就應該提示要去維修了)。
   我們碰到的問題是客戶給的程序沒有驗證這一塊,讓客戶改程序也不是很好辦。唉,誰讓現在的客戶那么牛。
   於是我們看看能不能自己搞定。思路是:我們添加一個程序先接收產品的條碼,和系統驗證之后如果能繼續測試,就把條碼再寫到客戶程序的條碼文本框里,如果流程錯誤,提示錯誤,讓操作員修正。
   難點是我們怎么找到客戶程序的條碼文本框。於是從網上搜索(我們用的是Python,需要先安裝pywin32模塊)win32api的用法,還好找到了一點,下面給個例子說明一下(在python shell里):
一, 首先import win32gui, win32con
二, 使用win32gui.FindWindow找到目標程序:
win = win32gui.FindWindow(None, 'User Login')
三, 使用win32gui.FindWindowEx找到目標文本框:
tid = win32gui.FindWindowEx(win, None, 'Edit', None)
四, 使用win32gui.SendMessage發送文本到目標文本框:
win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, 'hello')

當然了,可以繼續找到下一個文本框:
username = win32gui.FindWindowEx(win, tid, 'Edit', None)

只是還沒找到給字符串加回車的功能,在記事本里可以實現,不知道為什么在這里不行。如果各位大俠有知道的希望不吝賜教。
目前先研究到這里。以防忘記所以記在這里,以備以后使用。
更新:已經找到發送回車的方法:
win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, ‘hello')
win32gui.PostMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32gui.PostMessage(tid, win32con.WM_KEYUP, win32con.VK_RETURN, 0)


免責聲明!

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



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