隨筆 - 67  文章 - 79  trackbacks - 0
          <2008年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          使用win32 native api 來向窗口發送鍵盤消息,主要是為了做his程序的自動登陸腳本  來方面測試程序
          把程序傳上來留個筆記
          set_foreground_window 根據標題來設定目標窗口
          key_press 一次發送一個按鍵信息 包括key_down 和key_up
           1 #coding=gbk
           2 import win32gui,win32con,win32api,win32process
           3 import string,os
           4 
           5 
           6 __keys={ }
           7 for key in dir(win32con):
           8     if key.startswith('VK_'):
           9         __keys[key[3:].capitalize()]=getattr(win32con,key)
          10         
          11 def sleep(ms):
          12     win32api.Sleep(ms)
          13     
          14 def run(exe_file):
          15 
          16     win32api.ShellExecute(0,"",exe_file,'','',0)    
          17     
          18 def set_foreground_window(win):
          19     try:
          20         win32gui.SetForegroundWindow(win)
          21         win32api.Sleep(50)
          22     except TypeError:
          23         hwnd=win32gui.FindWindow(0,win)
          24         win32gui.SetForegroundWindow(hwnd)
          25         win32api.Sleep(50)
          26         print hwnd
          27         
          28 def dump_keys():
          29     ks=[k for k in __keys.keys()]
          30     ks.sort()
          31     print "\n".join( "%s=0x%x"%(k,__keys[k]) for k in ks )
          32 
          33 def keyboard_event(key,flag=0):
          34     value=None
          35     if isinstance (key,int):
          36         value=key
          37     else:
          38         if len(key)==1:
          39             value=win32api.VkKeyScan (key)
          40         else:
          41             key=key.capitalize()
          42             if key in __keys:
          43                 value=__keys[key]               
          44 
          45     if value != None:
          46         win32api.keybd_event(value,0,flag,0)
          47     else:
          48         raise TypeError()
          49     
          50 def key_down(key):
          51     keyboard_event(key)
          52     
          53 def key_up(key):
          54     keyboard_event(key,flag=win32con.KEYEVENTF_KEYUP)
          55     
          56     
          57 
          58 def key_press(key):  
          59     if  len(key)==1:
          60         v=win32api.VkKeyScan (key)
          61         
          62         c=v&0xff00
          63 
          64         if c==1:
          65             key_down('Shift')
          66                 
          67         key_down(v)
          68         key_up(v)
          69 
          70         if c==1:
          71             key_up('Shift')            
          72     else:
          73         key_down(key)
          74         key_up(key)
          75         
          76 if __name__=='__main__':
          77     set_foreground_window('系統登錄')
          78 
          79     for i in '8888p':
          80         key_press(i)
          81     key_press('Return')
          82 


          八月份發生了太多事情,技術上,工作上,生活上都有。本來可以寫很多,想想還是算了, 太私人的東西不好意思放上來曬
          posted on 2008-09-03 14:14 zarra 閱讀(811) 評論(1)  編輯  收藏

          FeedBack:
          # re: 發送鍵盤消息[未登錄] 2008-09-04 10:22 apple
          喵嗚~~
          這些代碼看看很熟悉,可是依然讀不懂每句語句的意思
            回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 广州市| 隆昌县| 昌平区| 崇阳县| 明溪县| 三河市| 横山县| 浪卡子县| 宿州市| 大荔县| 中牟县| 甘洛县| 亚东县| 彭阳县| 永年县| 本溪| 扶余县| 当涂县| 射阳县| 徐汇区| 方山县| 葫芦岛市| 华安县| 侯马市| 灵台县| 尉犁县| 三台县| 漳平市| 盐池县| 马尔康县| 宁强县| 宜春市| 台东县| 陆川县| 本溪市| 岑溪市| 博湖县| 寻乌县| 合作市| 黄浦区| 龙岩市|