5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pygameでコントローラの簡易的なキーロガを作成する。

Posted at

##はじめに
格ゲーをやる際に、アケコンの入力を記録したくなったので、簡易的なキーロガを作成した。ボタン or レバーが何フレーム入力されているかをプロンプト画面に表示している。あくまで、簡易的なので、複数のボタンの同時押しやレバーとボタンの同時入力には対応していない。(この辺の処理をpygameだけで行うとすると並列処理も行わないと行けないのかな?)また、通常のキーロガでは切り捨てられる入力フレームの小数点の情報が欲しかったので、あえて入力フレームの出力の値を丸めていない。

##ソースコード

keylogger.py
import pygame
from pygame.locals import *
import time
 
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480

joy_list =  [[0]*3]*3

pygame.joystick.init()
try:
    j = pygame.joystick.Joystick(0) # create a joystick instance
    j.init() # init instance
    print ('Joystickの名称: ' + j.get_name())
    print ('ボタン数 : ' + str(j.get_numbuttons()))
#キーが押されたフレーム時間を記録するリストを生成
    key_list =[0]*j.get_numbuttons()
except pygame.error:
    print ('Joystickが見つかりませんでした。')

def main():
    pygame.init()
    frametime = 0
    x,y =0,0
    while 1:
        
        for e in pygame.event.get(): # イベントチェック
           
            if e.type == QUIT: # 終了が押された?
                return
            if (e.type == KEYDOWN and
                e.key  == K_ESCAPE): # ESCが押された?
                return
            # Joystick関連のイベントチェック
         
            if e.type == pygame.locals.JOYAXISMOTION: 
                if(x,y!=j.get_hat(0)):
                    joy_list[x][y]  =   pygame.time.get_ticks() - joy_list[x][y]
                    print ('x and y : ' + str(x) +' , '+ str(y))
           #何フレームレバーが入力されているか表示する
                    print("frame : " + str(joy_list[x][y] /1000*60))
                    x,y = j.get_hat(0)

                joy_list[x][y]  =  pygame.time.get_ticks()
       
            elif e.type == pygame.locals.JOYHATMOTION: 
                print ('hat motion')
                
                if(x,y!=j.get_hat(0)):
                   joy_list[x][y]  =   pygame.time.get_ticks() - joy_list[x][y]
                   print ('x and y : ' + str(x) +' , '+ str(y))
          #何フレームレバーが入力されているか表示する
                   print("frame : " + str(joy_list[x][y] /1000*60))
                x,y = j.get_hat(0)

                joy_list[x][y]  =  pygame.time.get_ticks()
                print ('x and y : ' + str(x) +' , '+ str(y))
 
            elif e.type == pygame.locals.JOYBUTTONDOWN: 
                print (str(e.button)+'番目のボタンが押された')
                key_list[e.button] = pygame.time.get_ticks()
         
            elif e.type == pygame.locals.JOYBUTTONUP: 
                key_list[e.button] = pygame.time.get_ticks() - key_list[e.button]
         #何フレームボタンが押されていたか表示する
                print("frame : " + str(key_list[e.button]/1000*60 ))
            
if __name__ == '__main__': 
    main()

##参考サイト
http://nakamura001.hatenablog.com/entry/20101212/1292163993

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?