隨筆 - 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 閱讀(812) 評論(1)  編輯  收藏

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

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


          網站導航:
           
          主站蜘蛛池模板: 马龙县| 新和县| 兴义市| 太仆寺旗| 瓦房店市| 旺苍县| 天门市| 锦州市| 锦屏县| 台中县| 多伦县| 临清市| 保山市| 南投县| 东宁县| 武宁县| 淮北市| 惠来县| 忻城县| 清远市| 泸州市| 稻城县| 卢氏县| 南靖县| 抚松县| 南皮县| 望谟县| 长葛市| 广宗县| 雅安市| 蒙城县| 库尔勒市| 襄城县| 哈密市| 克东县| 乡城县| 亚东县| 伊金霍洛旗| 乌鲁木齐市| 无锡市| 芜湖县|