![]() |
In die Listbox eines anderen Programmes adden / deleten
Wo muss ich ansetzten um auf Einträge einer ListBox eines anderen Programmes / Fensters zuzugreifen. Beim Handle ist klar... aber wie geht das dann mit der Listbox? Einträge hinzufügen, löschen anderen usw. Wonach muss ich suchen?
Greetz Harry Edit: Das hier hilft mir weiter: ![]() Aber wie komme ich jetzte zum Handle der zu editierenden ListBox? |
Re: In die Listbox eines anderen Programmes adden / deleten
Um an das Handle zu kommen, musst die Funktionen
![]() ![]() ![]() |
Re: In die Listbox eines anderen Programmes adden / deleten
Delphi-Quellcode:
function GetItemIndex(aText : String; const CaseSensitive : Boolean = FALSE) : Integer;
function GetListView : Cardinal; begin // sollte von dir angepasst werden result := FindWindow(nil,'Form1'); result := FindWindowEx(result, 0, 'TListView', nil); end; var ListView: HWND; ProcessId: DWORD; Process: THandle; Size: Cardinal; MemLocal: Pointer; MemRemote: Pointer; NumBytes: Cardinal; IconIndex: Integer; IconLabel: string; begin result := 0; ProcessId := 0; ListView := GetListView; GetWindowThreadProcessId(ListView, @ProcessId); Process := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId); if (Process <> 0) then try Size := SizeOf(TLVItem) + SizeOf(Char) * MAX_PATH + 1; MemLocal := VirtualAlloc(nil, Size, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); MemRemote := VirtualAllocEx(Process, nil, Size, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); if Assigned(MemLocal) and Assigned(MemRemote) then try for IconIndex := 0 to SendMessage(ListView, LVM_GETITEMCOUNT, 0, 0) - 1 do begin ZeroMemory(MemLocal, SizeOf(TLVItem)); with PLVItem(MemLocal)^ do begin mask := LVIF_TEXT; iItem := IconIndex; pszText := LPTSTR(Cardinal(MemRemote) + Cardinal(SizeOf(TLVItem))); cchTextMax := MAX_PATH; end; NumBytes := 0; if WriteProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes) and Boolean(SendMessage(ListView, LVM_GETITEM, 0, LPARAM(MemRemote))) and ReadProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes) then begin IconLabel := string( PChar(Cardinal(MemLocal) + Cardinal(SizeOf(TLVItem)))); if CaseSensitive then begin IconLabel := LowerCase(IconLabel); aText := LowerCase(aText); end; if IconLabel = aText then begin Result := IconIndex; exit; end; end; end; except end; if Assigned(MemRemote) then VirtualFreeEx(Process, MemRemote, 0, MEM_RELEASE); if Assigned(MemLocal) then VirtualFree(MemLocal, 0, MEM_RELEASE); finally CloseHandle(Process); end; end; |
Re: In die Listbox eines anderen Programmes adden / deleten
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz