我想检查启动后是否加载了“活动桌面”。这是我可以运行我的启动例程,好像我传统上启动它(将它放在启动文件夹中)然后我的程序通常无法正确加载。举例来说,当Skype启动时,托盘图标经常丢失。另一个是当我尝试subst
驱动器(使用批处理文件)时,它通常不会。作为旁注,当我注销,然后重新开启时,它工作正常,一切都正常加载,但这很不方便。
我的活动桌面只是一个加载循环swf的HTML文件,所以几乎没有延迟(与gif相比)和CPU使用率很低。此外,FRAPS(从服务运行)在系统启动时,在桌面加载之前发出DirectX 9警告。
我已经尝试了几段代码来检查explorer.exe是否已经启动,但这没有任何帮助,因为它继续正常。我也试过使用time.sleep
,但这并不令人满意,因为很难猜出正确的延迟。
- 编辑 -
我找到了一种迂回的方法来解决这个问题。这种方法对CPU的影响越来越小。这是因为它检查活动窗口是否是桌面,然后更改壁纸。否则,它会“睡眠”3秒钟。要使这个方法起作用,我必须从.gif中提取每个图层作为.bmp并对它们进行编号。我的完整代码如下:
import ctypes
import os.path
import time
from win32gui import GetWindowText, GetForegroundWindow
## get current directory and add the working path to the end
cd = os.path.dirname(os.path.realpath(__file__)) + '\\wallpaperslides\\'
## find the number of files in this directory
nfiles = len(os.walk(cd).next()[2])
## initialise variables
invalidfiles = 0
fnum = 1
## check to see if every file is numbered and a .bmp
for x in range(nfiles):
fname = cd + str(x+1) + '.bmp'
if os.path.isfile(fname) != True:
## makes sure all of the files are there, otherwise...
print fname + ' doesn\'t exist'
invalidfiles = 1
## ...tell the user to fix
if invalidfiles == 1:
print 'All files should be numbered and in bitmap format'
print ''
raw_input('Press enter to exit\n')
raise SystemExit
elif invalidfiles == 0:
## Main loop
while True:
## Find active window, if it is the desktop...
if GetWindowText(GetForegroundWindow()) == '' or GetWindowText(GetForegroundWindow()) == 'Program Manager':
## Set wallpaper
ctypes.windll.user32.SystemParametersInfoA(20,0,cd + str(fnum) + '.bmp',0)
## increase index
fnum += 1
## reset index if it exceeds the number of files in the folder
if fnum > nfiles:
fnum = 1
## Delay animation
time.sleep(0.05)
## ...otherwise, do nothing.
else:
time.sleep(3)