저는 파이썬 2.7에서 win32gui를 사용하여 데스크탑에있는 항목의 수를 얻으려고합니다.파이썬에서 데스크탑 항목 수를 얻는 방법은 무엇입니까?
다음 코드는 win32gui.SendMessage(win32gui.GetDesktopWindow(), LVM_GETITEMCOUNT)
이며 0을 반환하며 이유를 알 수 없습니다.
나중에 win32api.GetLastError()
을 썼고 0을 반환했습니다.
미리 감사드립니다.
편집 : 최종 목표는 아이콘의 위치를 얻는 것이므로이 방법을 사용해야하며 비슷한 방법으로 완료됩니다. 그래서 저는이 방법을 사용하는 방법을 확실히 알고 싶었습니다. 또한 데스크톱의 내용을 나열하는 것과는 다른 출력을 줄 수 있다고 생각합니다 (가능합니까?). 세 번째로, 위치를 얻는 방법에 대한 나의 정보원이이를 위해 이렇게 제안했습니다. 예를 들어 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 차적으로 사용한다 (http://www.codeproject.com/Articles/639486/Save-and-restore-icon-positions-on-desktop 예) –
어떤 실제 코드를 사용하고 있습니까? listdir이 내 바탕 화면에있는 모든 것을 반환하므로 창문을 사용하지 않지만'commctrl.LVM_GETITEMCOUNT'을 사용하는 사람들을 볼 수 있습니까? –
Listdir이 직위를 확보하는 데 도움이되지 않습니다. 그리고 win32gui와 메시지의 방법을 이해하는 데 필요한 직책을 얻으려고합니다. –