我需要在启动时运行.py。 该代码有效,但是我可以启动的唯一方法是使用此方法-
import os
import subprocess
DIR = os.path.join('C:\\', 'Users', '7', 'Desktop', 'windowlessecclesiasticusworking.py')
subprocess.call(['python', DIR])
有没有一种方法可以编写在startp上运行的批处理文件,该批处理文件可以在启动后立即运行此方法来启动.py文件?
由于某种原因,.py不再启动,除非通过打开python shell并使用上述方法启动文件“ windowlessecclesiasticusworking.py”来打开它。
这里是windowlessecclesiasticusworking.py文件在代码中的外观。
import win32api, win32con, win32gui, win32ui, timer, threading
windowText = 'Ecclesiasticus'
hWindow = 0
def main():
hInstance = win32api.GetModuleHandle()
className = 'MyWindowClassName'
wndClass = win32gui.WNDCLASS()
wndClass.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW
wndClass.lpfnWndProc = wndProc
wndClass.hInstance = hInstance
wndClass.hIcon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
wndClass.hCursor = win32gui.LoadCursor(None, win32con.IDC_ARROW)
wndClass.hbrBackground = win32gui.GetStockObject(win32con.WHITE_BRUSH)
wndClass.lpszClassName = className
wndClassAtom = win32gui.RegisterClass(wndClass)
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
style = win32con.WS_DISABLED | win32con.WS_POPUP | win32con.WS_VISIBLE
hWindow = win32gui.CreateWindowEx(
exStyle,
wndClassAtom,
None,
style,
0, # x
0, # y
win32api.GetSystemMetrics(win32con.SM_CXSCREEN), # width
win32api.GetSystemMetrics(win32con.SM_CYSCREEN), # height
None, # hWndParent
None, # hMenu
hInstance,
None # lpParam
)
win32gui.SetLayeredWindowAttributes(hWindow, 0x00ffffff, 255, win32con.LWA_COLORKEY | win32con.LWA_ALPHA) ####### COLOR
win32gui.SetWindowPos(hWindow, win32con.HWND_TOPMOST, 0, 0, 0, 0,
win32con.SWP_NOACTIVATE | win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW)
thr = threading.Thread(target=customDraw, args=(hWindow,))
thr.setDaemon(False)
thr.start()
win32gui.ShowWindow(hWindow, win32con.SW_SHOWNORMAL)
win32gui.UpdateWindow(hWindow)
timer.set_timer(10000, customDraw)
win32gui.PumpMessages()
counter = 0
def customDraw(timer_id, time):
global hWindow
global counter
global windowText
if counter > 40:
counter = 0
text = ["1:1 All wisdom is from the Lord God, and hath been always with him, and is before all time. ",
"1:2 Who hath numbered the sand of the sea, and the drops of rain, and the days of the world? Who hath measured the height of heaven, and the breadth of the earth, and the depth of the abyss? ",]
windowText = text[counter]
counter = counter + 1
win32gui.InvalidateRect(hWindow, None, True)
def wndProc(hWnd, message, wParam, lParam):
if message == win32con.WM_PAINT:
hdc, paintStruct = win32gui.BeginPaint(hWnd)
dpiScale = win32ui.GetDeviceCaps(hdc, win32con.LOGPIXELSX) / 60.0
fontSize = 18
lf = win32gui.LOGFONT()
lf.lfFaceName = "Comic Sans"
lf.lfHeight = int(round(dpiScale * fontSize))
hf = win32gui.CreateFontIndirect(lf)
win32gui.SelectObject(hdc, hf)
rect = win32gui.GetClientRect(hWnd)
win32gui.DrawText(hdc, windowText, -1, rect,
win32con.DT_LEFT | win32con.DT_BOTTOM | win32con.DT_SINGLELINE
)
win32gui.EndPaint(hWnd, paintStruct)
return 0
elif message == win32con.WM_DESTROY:
print('Being destroyed')
win32gui.PostQuitMessage(0)
return 0
else:
return win32gui.DefWindowProc(hWnd, message, wParam, lParam)
calrect = win32gui.DrawText(hdc, text, -1, rect, textformat | win32con.DT_CALCRECT);
rect.top = rect.bottom - calcrect.bottom;
win32gui.DrawText(hDC, text, -1, rect, textformat)
if __name__ == '__main__':
main()
最初,当我只是试图在不触摸它的情况下打开windowlessecclesiasticusworking.py python文件并运行时,我遇到了win32api错误。.我更新了python,并使用了第一种谈论的方法从python shell启动.py文件。现在它可以工作了,但是我需要它在启动时启动,因此也许可以在批处理文件中运行外壳程序代码的“ import os import subprocess”代码段。该解决方案可以是任何我只是认为Windows批处理文件在启动时最容易运行的解决方案。但我显然不是专家,因此任何建议都将大有帮助。谢谢。
答案 0 :(得分:2)
如果只希望它在用户帐户登录时启动,只需在此处放置.py文件的快捷方式即可:
C:\Users\<user name>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
如果您希望对计算机上的所有用户执行此操作,请放在此处:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
答案 1 :(得分:1)
将您的主要代码添加到py文件中,我们将其称为“ pythontarter.py”-然后制作一个引用该文件的.bat文件,如下所示:
@echo off
python c:\temp\pythonstarter.py
如果您要从用户登录开始,请将新的批处理文件添加到此位置,并用特定用户替换用户名:
C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
如果您希望在用户登录之前从Windows开始,请遵循以下说明: