Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi In die Listbox eines anderen Programmes adden / deleten (https://www.delphipraxis.net/60616-die-listbox-eines-anderen-programmes-adden-deleten.html)

Harry M. 10. Jan 2006 00:47


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: http://www.swissdelphicenter.ch/de/showcode.php?id=1335
Aber wie komme ich jetzte zum Handle der zu editierenden ListBox?

chaosben 10. Jan 2006 05:25

Re: In die Listbox eines anderen Programmes adden / deleten
 
Um an das Handle zu kommen, musst die Funktionen
MSDN-Library durchsuchenFindWindow
MSDN-Library durchsuchenFindWindowEx bemühen. Mit diesen kannst du dich durch die Struktur der fremden Anwendung suchen. Um letztere zu erkunden, macht sich das Tool WinDowse ganz gut.

perle 10. Jan 2006 07:10

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;

tomsel 10. Jan 2006 07:57

Re: In die Listbox eines anderen Programmes adden / deleten
 
Zitat:

Zitat von perle
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;

Zitat:

Zitat von API Help
[Now Supported on Windows NT]

The FindWindowEx function retrieves the handle to a window ...



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