Python - 如何检查Windows桌面是否已加载

时间:2014-12-31 19:41:17

标签: python windows desktop wallpaper

我想检查启动后是否加载了“活动桌面”。这是我可以运行我的启动例程,好像我传统上启动它(将它放在启动文件夹中)然后我的程序通常无法正确加载。举例来说,当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)

0 个答案:

没有答案