python win32api 使用小技巧

2021-09-08 16:00:03 字數 2147 閱讀 7538

前些日子,由於需要,用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以上才支援,它能使使窗體擁有透明效 果...