如何在python中获取桌面项目数?

Posted

技术标签:

【中文标题】如何在python中获取桌面项目数?【英文标题】:How to get desktop item count in python? 【发布时间】:2014-12-27 02:33:37 【问题描述】:

我正在尝试在 python 2.7 中使用 win32gui 获取桌面上的项目数。

以下代码:win32gui.SendMessage(win32gui.GetDesktopWindow(), LVM_GETITEMCOUNT) 返回零,我不知道为什么。

我后来写了win32api.GetLastError(),它也返回零。

提前致谢。

编辑:我需要使用这种方法,因为最终目标是获取图标的位置,并且通过类似的方法完成。所以我只是想确保我知道如何使用这种方法。另外,我认为它可以提供与列出桌面内容不同的输出(可以吗?)。第三,我如何获得建议的职位的来源 - 例如http://www.codeproject.com/Articles/639486/Save-and-restore-icon-positions-on-desktop。

EDIT2:

获取计数的完整代码(对我不起作用):

import win32gui
from commctrl import LVM_GETITEMCOUNT
print win32gui.SendMessage(win32gui.GetDesktopWindow(), LVM_GETITEMCOUNT)

再次感谢!

解决方案:

import ctypes
from commctrl import LVM_GETITEMCOUNT
import pywintypes
import win32gui
GetShellWindow = ctypes.windll.user32.GetShellWindow


def get_desktop():
    """Get the window of the icons, the desktop window contains this window"""
    shell_window = GetShellWindow()
    shell_dll_defview = win32gui.FindWindowEx(shell_window, 0, "SHELLDLL_DefView", "")
    if shell_dll_defview == 0:
        sys_listview_container = []
        try:
            win32gui.EnumWindows(_callback, sys_listview_container)
        except pywintypes.error as e:
            if e.winerror != 0:
                raise
        sys_listview = sys_listview_container[0]
    else:
        sys_listview = win32gui.FindWindowEx(shell_dll_defview, 0, "SysListView32", "FolderView")
    return sys_listview

def _callback(hwnd, extra):
    class_name = win32gui.GetClassName(hwnd)
    if class_name == "WorkerW":
        child = win32gui.FindWindowEx(hwnd, 0, "SHELLDLL_DefView", "")
        if child != 0:
            sys_listview = win32gui.FindWindowEx(child, 0, "SysListView32", "FolderView")
            extra.append(sys_listview)
            return False
    return True

def get_item_count(window):
    return win32gui.SendMessage(window, LVM_GETITEMCOUNT)

desktop = get_desktop()
get_item_count(desktop)

【问题讨论】:

【参考方案1】:

你可以使用os.listdir:

import os

len(os.listdir('path/desktop'))

【讨论】:

我实际上想获取图标的位置,在此之前我需要图标的数量。无论如何,我必须对职位使用相同的方法。此外,我不确定这些方法是否总是返回相同的输出 - 这是一个好问题。我主要使用这种方法,因为我的消息来源建议这样做(例如codeproject.com/Articles/639486/…) 您使用的是什么实际代码? listdir 返回我桌面上的所有内容,我不使用 windows 但我看到有人使用commctrl.LVM_GETITEMCOUNT? Listdir 不能帮助我获得职位。为了获得职位,我需要了解win32gui和消息的方法。 嗯,你的问题是如何计算,所以我确实回答了你的问题,编辑和更改问题不是要走的路 好的答案在这里的第二个问题中,***.com/questions/1669111/… GetDesktopWindow() 返回的是实际桌面,但您需要FindWindowEx 才能访问存储图标的资源管理器桌面

以上是关于如何在python中获取桌面项目数?的主要内容,如果未能解决你的问题,请参考以下文章

使用Python获取桌面通知

python获取当前路径

在VB中如何读取到桌面的路径?

如何通过 Qt 在 Android 和桌面中使用相机

如何获取桌面位置?

在 OpenCV 中从桌面获取输入流