<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海上月明

    editer by sun
    posts - 162, comments - 51, trackbacks - 0, articles - 8
       :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

    [轉]python win32api 使用小技巧

    Posted on 2013-07-25 16:40 pts 閱讀(1525) 評論(0)  編輯  收藏 所屬分類: Python

    From:http://www.cnblogs.com/txw1958/archive/2012/02/16/2353491.html

    前些日子,由于需要,用python寫了個小插件,通過win32api 訪問外部程序的窗口 并且做些小操作。

    因為原來對win32api 不怎么熟悉 所以只好求救。群里有個QQ:32034767 唐驍勇tsy_007@163.com

    這小伙子不錯 心熱人善

    動手之前要選對好工具。(既然是基于WIN32api 當然要用微軟的專用的spyxx.exe,上手相當簡單。比較專業 ,能查出當前桌面上所有的窗口句柄和類型。VC的那個綠色版的 spy++效果不強(Au3Info.exe也一樣),無法追蹤多級子窗口。 下面是簡易代碼:(實際上就是用鉤子原理 網絡上也可以找到)

    import win32ui,win32con,pyHook,pythoncom,win32gui ,wx
            def hookhandle(event):
                
                if event.KeyID==9:#tab鍵值
                    try:
                        pwin=win32gui.FindWindow('AfxMDIFrame70',None)#主窗口 AfxMDIFrame70就是你用#spyxx.exe查找到的窗口類名
                        pwin1=win32gui.FindWindowEx(pwin,None,'MDIClient',None)
                        pwin2=win32gui.FindWindowEx(pwin1,None,'AfxFrameOrView70',None)
                        pwin3=win32gui.FindWindowEx(pwin2,None,"AfxOleControl70",None)
                        pwin4=win32gui.FindWindowEx(pwin3,None,None,"PatientCardControl Frame")#可以根據窗口#的標題名稱查找 標題名稱一般外接程序是不變的 而類名有時是變化的 比如機器重啟 關閉等 
                        pwin5=win32gui.FindWindowEx(pwin4,None,"AfxMDIFrame70",None)
                        pwin6=win32gui.FindWindowEx(pwin5,None,"AfxWnd70",None)
                        pwin7=win32gui.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()

    主站蜘蛛池模板: 亚洲免费观看在线视频| 亚洲国产精品狼友中文久久久| 亚洲深深色噜噜狠狠爱网站| 亚洲日韩在线中文字幕综合| 免费观看的毛片手机视频| 亚洲中文字幕无码中文字| 一二三四在线观看免费高清中文在线观看 | 亚洲色偷偷偷网站色偷一区| 久久aa毛片免费播放嗯啊| 亚洲成AV人片在线观看无码| 成全视频高清免费观看电视剧| 亚洲国产成人片在线观看| 特级精品毛片免费观看| 亚洲手机中文字幕| 一本无码人妻在中文字幕免费| 亚洲欧美熟妇综合久久久久 | 亚洲一级黄色视频| 免费毛片在线看不用播放器| 久久精品亚洲日本佐佐木明希| 日本视频免费高清一本18| 久久久久亚洲AV无码麻豆| 四虎永久在线观看免费网站网址| 亚洲精品国产国语| 亚洲国产成人五月综合网| a级毛片高清免费视频就| 亚洲精品中文字幕无乱码| 蜜桃视频在线观看免费网址入口 | 免费观看四虎精品成人| 久久久久亚洲精品男人的天堂| 国产免费网站看v片在线| 亚洲一卡二卡三卡| 免费观看午夜在线欧差毛片| 免费网站观看WWW在线观看| 亚洲成AV人片久久| 亚洲国产精品一区二区第一页免 | 国产精品亚洲精品日韩已方| 久久综合给合久久国产免费| 亚洲日本天堂在线| 美腿丝袜亚洲综合| 毛片a级毛片免费观看品善网| 成人午夜影视全部免费看|