2014-12-27 3 views
4

저는 파이썬 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) 

답변

2

당신은 os.listdir를 사용할 수 있습니다

import os 

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

는 사실은 아이콘의 위치를 ​​얻으려면 그 전에 아이콘의 번호가 필요합니다. 어쨌든 나는 같은 방법을 사용해야한다. 또한 이러한 메서드가 항상 동일한 출력을 반환하는지 확신 할 수 없습니다. 좋은 질문입니다. 나는 근원이 이렇게 제시했기 때문에 나는이 방법을 1 차적으로 사용한다 (http://www.codeproject.com/Articles/639486/Save-and-restore-icon-positions-on-desktop 예) –

+0

어떤 실제 코드를 사용하고 있습니까? listdir이 내 바탕 화면에있는 모든 것을 반환하므로 창문을 사용하지 않지만'commctrl.LVM_GETITEMCOUNT'을 사용하는 사람들을 볼 수 있습니까? –

+0

Listdir이 직위를 확보하는 데 도움이되지 않습니다. 그리고 win32gui와 메시지의 방법을 이해하는 데 필요한 직책을 얻으려고합니다. –

관련 문제