前些日子,由於需要,用python寫了個小外掛程式,通過win32api 訪問外部程式的視窗 並且做些小操作。
這小夥子不錯 心熱人善
動手之前要選對好工具。(既然是基於win32api 當然要用微軟的專用的spyxx.exe,上手相當簡單。比較專業 ,能查出當前桌面上所有的視窗控制代碼和型別。vc的那個綠色版的 spy++效果不強(au3info.exe也一樣),無法追蹤多級子視窗。 下面是簡易**:(實際上就是用鉤子原理 網路上也可以找到)
import win32ui,win32con,pyhook,pythoncom,win32gui ,wx
def hookhandle(event):
if event.keyid==9:#tab鍵值
try:
pwin=win32ui.findwindow('afxmdiframe70',none)#主視窗 afxmdiframe70就是你用#spyxx.exe查詢到的視窗類名
pwin1=win32ui.findwindowex(pwin,none,'mdiclient',none)
pwin2=win32ui.findwindowex(pwin1,none,'afxframeorview70',none)
pwin3=win32ui.findwindowex(pwin2,none,"afxolecontrol70",none)
pwin4=win32ui.findwindowex(pwin3,none,none,"patientcardcontrol frame")#可以根據視窗#的標題名稱查詢 標題名稱一般外接程式是不變的 而類名有時是變化的 比如機器重啟 關閉等
pwin5=win32ui.findwindowex(pwin4,none,"afxmdiframe70",none)
pwin6=win32ui.findwindowex(pwin5,none,"afxwnd70",none)
pwin7=win32ui.findwindowex(pwin6,none,"#32770",none)
textbox=pwin7.getdlgitem(222)#獲取控制項的id
textbox2=pwin7.getdlgitem(224)
buf='0x0'*1024
buf2='0x0'*1024
textbox.sendmessage(win32con.wm_settext,"")#先清空控制項內容
textbox2.sendmessage(win32con.wm_settext,"")
oldlen=textbox.sendmessage(win32con.wm_gettext,buf)
oldlen2=textbox2.sendmessage(win32con.wm_gettext,buf2)
textbox.sendmessage(win32con.wm_settext,buf[0:oldlen]+str(blh))#傳送訊息 注意不能##用%s 替換 所以一般需要全域性變數 來替換
textbox2.sendmessage(win32con.wm_settext,buf2[0:oldlen]+str(name))
except:
wx.logmessage('沒有發現可用的視窗!請確保程式已經執行')
hm = pyhook.hookmanager()#初始例項
hm.keydown=hookhandle
hm.hookkeyboard()
pythoncom.pumpmessages(5000)#據說是winctype的新功能 延遲吧 具體什麼也不清楚
hm.unhookkeyboard()#釋放鍵盤捕捉 好像效果不明顯
#for i in range (0,40):
#win32api.sleep(20)
#if win32ui.pumpwaitingmessages(0,-1):
win32api.postquitmessage(0)# 退出監控訊息 很關鍵 必須配合sys.setrecursionlimit(4000)使用效果##才明顯 不然的話 程式無法退出。
#raise exceptions.systemexit
def onclose(self, event):
sys.setrecursionlimit(4000)#相當關鍵
self.close(true)
self.destroy()
文件API生成神器SandCastle使用心得
關於sandcastle網上的參考資料相對較少,google出來很多資料都是全英文的,相對於我這種英語渣渣看起來還是很費勁的。言簡意賅,sandcastle主要功能是能夠將c 類生成類似msdn風格幫助文件的工具,支援本地化,並提供乙個基本的命令列編譯器介面和乙個visual studio外掛程式。...
使窗體擁有透明效果的API
使窗體擁有透明效果的api 一 背景 flashget的透明效果大家羨慕吧.傳統的windows應用程式想實現半透明效果,一般來說需要處理自己的視窗的wm paint訊息視窗,很麻煩.現在好了,setlayeredwindowattributes是windows的新api,win2000以上才支援,...
使窗體擁有透明效果的API
一 背景 flashget的透明效果大家羨慕吧.傳統的windows應用程式想實現半透明效果,一般來說需要處理自己的視窗的wm paint訊息視窗,很麻 煩.現在好了,setlayeredwindowattributes是windows的新api,win2000以上才支援,它能使使窗體擁有透明效 果...