Seite 1 von 1

#LVM_GETITEMTEXT auf DesktopIcons anwenden

Verfasst: 06.11.2004 18:59
von bingo

Code: Alles auswählen

#LVM_GETTITEMCOUNT = $1000 + 4

hDesktop=GetDesktopWindow_();
hDesktop=FindWindowEx_(hDesktop, 0, "Progman", "Program Manager");
hDesktop=FindWindowEx_(hDesktop, 0, "SHELLDLL_DefView", 0);
hDesktop=FindWindowEx_(hDesktop, 0, "SysListView32", 0); 
  
Debug SendMessage_(hDesktop, #LVM_GETTITEMCOUNT, 0, 0) ;anzahl der desktop icons
aber wie weiter mit ...

lvi.LV_ITEM
lvi\iSubItem
lvi\pszText
lvi\cchTextMax
lvi\mask = #LVIF_TEXT

SendMessage_(hDesktop, #LVM_GETITEMTEXT, iconindex, @lvi)

... um den namen/label zu vergleichen ?

Verfasst: 26.11.2006 23:11
von tobe
hi,
ich hab es so gelöst:

Code: Alles auswählen

EnableExplicit
Define h, pid, ItemCount, hProcess, smItem, smName, item.LVITEM, Written, i, text$
h = FindWindow_("Progman",0)
h = FindWindowEx_(h, 0, "SHELLDLL_defVIEW",0)
h = FindWindowEx_(h, 0, "SysListView32",0)
GetWindowThreadProcessId_(h, @pid)
ItemCount = SendMessage_(h, #LVM_GETITEMCOUNT, 0, 0)
hProcess = OpenProcess_(#PROCESS_VM_OPERATION | #PROCESS_VM_READ | #PROCESS_VM_WRITE, 0, pid)
smItem = VirtualAllocEx_(hProcess,0,SizeOf(LVITEM),#MEM_RESERVE | #MEM_COMMIT, #PAGE_READWRITE)
smName = VirtualAllocEx_(hProcess,0,40,#MEM_RESERVE | #MEM_COMMIT, #PAGE_READWRITE)
item\mask = #LVIF_TEXT
item\cchTextMax = 40 
item\pszText = smName
WriteProcessMemory_(hProcess, smItem, item, SizeOf(LVITEM), @Written)
For i = 0 To ItemCount - 1
  SendMessage_(h, #LVM_GETITEMTEXT, i, smItem)
  text$ = Space(40)
  ReadProcessMemory_(hProcess, smName, @text$, 40, @Written)
  Debug text$
Next i
VirtualFreeEx_(hProcess, smItem, SizeOf(LVITEM), #MEM_RELEASE)
VirtualFreeEx_(hProcess, smName, 40, #MEM_RELEASE)
CloseHandle_(hProcess)

Verfasst: 27.11.2006 20:06
von bingo
:allright: 8)