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

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          相冊(cè)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          使用win32 native api 來(lái)向窗口發(fā)送鍵盤(pán)消息,主要是為了做his程序的自動(dòng)登陸腳本  來(lái)方面測(cè)試程序
          把程序傳上來(lái)留個(gè)筆記
          set_foreground_window 根據(jù)標(biāo)題來(lái)設(shè)定目標(biāo)窗口
          key_press 一次發(fā)送一個(gè)按鍵信息 包括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('系統(tǒng)登錄')
          78 
          79     for i in '8888p':
          80         key_press(i)
          81     key_press('Return')
          82 


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

          FeedBack:
          # re: 發(fā)送鍵盤(pán)消息[未登錄](méi) 2008-09-04 10:22 apple
          喵嗚~~
          這些代碼看看很熟悉,可是依然讀不懂每句語(yǔ)句的意思
            回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 息烽县| 和硕县| 柞水县| 呼玛县| 香河县| 泽普县| 石柱| 淮阳县| 丰镇市| 会同县| 石河子市| 三明市| 清镇市| 天祝| 泗洪县| 桐柏县| 阳江市| 安龙县| 罗甸县| 灌阳县| 隆安县| 都江堰市| 黎平县| 乐业县| 临清市| 西贡区| 加查县| 江门市| 新民市| 富蕴县| 湖南省| 扎兰屯市| 平武县| 遂昌县| 姚安县| 阜新| 石狮市| 南召县| 福贡县| 玛多县| 永春县|