AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi In die Listbox eines anderen Programmes adden / deleten
Thema durchsuchen
Ansicht
Themen-Optionen

In die Listbox eines anderen Programmes adden / deleten

Ein Thema von Harry M. · begonnen am 10. Jan 2006 · letzter Beitrag vom 10. Jan 2006
Antwort Antwort
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#1

In die Listbox eines anderen Programmes adden / deleten

  Alt 10. Jan 2006, 00:47
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?
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: In die Listbox eines anderen Programmes adden / deleten

  Alt 10. Jan 2006, 05:25
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
perle

Registriert seit: 8. Apr 2004
183 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: In die Listbox eines anderen Programmes adden / deleten

  Alt 10. Jan 2006, 07:10
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;
(17:05:33) ( deccer ) duuu keine ahnung vonski?
(17:05:46) ( deccer ) duuuu ober dörticode schreibsorinski?
(17:06:02) ( deccer ) bist doch schlimmor wie uall :F
>> brechi : Livecracking is shice, da sieht man immer die Fehler <<
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#4

Re: In die Listbox eines anderen Programmes adden / deleten

  Alt 10. Jan 2006, 07:57
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 von API Help:
[Now Supported on Windows NT]

The FindWindowEx function retrieves the handle to a window ...
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz