Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Item in Fremder ListView doppelt anklicken (https://www.delphipraxis.net/113288-item-fremder-listview-doppelt-anklicken.html)

napsterxx 5. Mai 2008 18:46


Item in Fremder ListView doppelt anklicken
 
Habe das Handle einer Listview eines anderen Programms. Ich möchte nun den zweiten eintrag anklicken. Ist das möglich?

toms 5. Mai 2008 20:09

Re: Item in Fremder ListView doppelt anklicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Das ist nicht ganz trivial. Ich habe es mal so hingebracht:

Delphi-Quellcode:

uses
  CommCtrl, uProcessMemMgr {siehe Anhang};

function LVDblClickItemByIndex(hwndLV: HWND; ItemIndex: Word): Boolean;
// Führt einen Doppelklick (Enter) auf ein Item in einer fremden ListView aus
// hwndLV: Handle der ListView
// ItemIndex: Index des Items, angefangen bei 0
// Diese Methode funktioniert u.U nur, wenn kein anderes Item markiert ist.
const
  MaxTextLen = 1024;
var
  MemMgr: TProcessMemMgr;
  LVItem: TLVItem;
  iLVitemsCount: Integer;
  PrItem: PLVItem;
begin
  Result := False;
  MemMgr := CreateProcessMemMgrForWnd(hwndLV);
  try
    PrItem := MemMgr.AllocMem(SizeOf(TLVItem));
    iLVitemsCount := ListView_GetItemCount(hwndLV);
    if ItemIndex < iLVitemsCount then
    begin
      FillChar(LVItem, SizeOf(LVItem), 0);
      //  Item Eigenschaften setzen
      LVItem.mask := LVIF_TEXT;
      LVItem.iItem := ItemIndex;
      MemMgr.Write(LVItem, PrItem, SizeOf(TLVItem));
      if not ListView_GetItem(hwndLV, PrItem^) then Exit;
      MemMgr.Read(PrItem, LVItem, SizeOf(TLVItem));
      if ListView_GetItem(hwndLV, PrItem^) then
      begin
        //  Item "Selected" Eigenschaften setzen
        LVItem.state := LVIS_SELECTED;
        LVItem.stateMask := LVIS_SELECTED;
        //  Item markieren
        MemMgr.Write(LVItem, PrItem, SizeOf(TLVItem));
        if Boolean(SendMessage(hwndLV, LVM_SETITEMSTATE, ItemIndex, LongInt(PrItem))) then
        begin
        // Enter senden
          PostMessage(hwndLV, WM_KEYDOWN, VK_RETURN, 0);
          PostMessage(hwndLV, WM_KEYUP, VK_RETURN, 0);
        // SendMessage(hwndLV, WM_LBUTTONDBLCLK, ItemNumber, LongInt(PrItem));
          Result := True;
        end;
      end;
    end;
  finally
    MemMgr.Free;
  end;
end;

napsterxx 6. Mai 2008 13:23

Re: Item in Fremder ListView doppelt anklicken
 
Funktioniert nicht

toms 6. Mai 2008 13:33

Re: Item in Fremder ListView doppelt anklicken
 
Zitat:

Zitat von napsterxx
Funktioniert nicht

Betrifft es Garena?

napsterxx 6. Mai 2008 14:14

Re: Item in Fremder ListView doppelt anklicken
 
Genau und wenn ichs bei meiner listview mache und im OnKeyPress ereignis ShowMessage habe, sodass ich weis ob Enter gedrückt wurde bekomme ich 2000 msgs und das Prog stürzt ab

toms 6. Mai 2008 14:22

Re: Item in Fremder ListView doppelt anklicken
 
Hast du Vista?

napsterxx 6. Mai 2008 14:23

Re: Item in Fremder ListView doppelt anklicken
 
Nein XP SP2
Zudem möchte ich ja klicken :D Nicht enter drücken

toms_ 6. Mai 2008 19:27

Re: Item in Fremder ListView doppelt anklicken
 
Sende der ListView mal ein diese Nachrichten

Delphi-Quellcode:
  xy := LPARAM(Longword(Word(90) shl 16));
  PostMessage(wndChild, WM_MOUSEMOVE, 0, xy);
  PostMessage(wndChild, WM_LBUTTONDOWN, MK_LBUTTON, xy);
  PostMessage(wndChild, WM_LBUTTONUP, 0, xy);
wobei

Delphi-Quellcode:
var
  xy : Integer;

napsterxx 6. Mai 2008 19:49

Re: Item in Fremder ListView doppelt anklicken
 
da wird auf glaube ich ein Random Item geklickt...immer ein anderes

toms 6. Mai 2008 19:58

Re: Item in Fremder ListView doppelt anklicken
 
Bei mir wird nur immer das 2 Item angeklickt.

napsterxx 6. Mai 2008 20:46

Re: Item in Fremder ListView doppelt anklicken
 
Da sind ca 50 Items in der ListView. Es wird immer das dritte angeklickt von dem ausschnitt den man sieht. Scrollt man z.B. runter sodass man ab dem 6 item erst die restlichen items sieht wird das 9 item angeklickt und so

toms 7. Mai 2008 05:01

Re: Item in Fremder ListView doppelt anklicken
 
Zitat:

Zitat von napsterxx
Da sind ca 50 Items in der ListView. Es wird immer das dritte angeklickt von dem ausschnitt den man sieht. Scrollt man z.B. runter sodass man ab dem 6 item erst die restlichen items sieht wird das 9 item angeklickt und so

Dann könnte man mal die Item Position herausfinden und als lparam übergeben.

napsterxx 7. Mai 2008 12:51

Re: Item in Fremder ListView doppelt anklicken
 
Muss ich die X und Y Koordinaten rausfinden? Wenn ja ist ds keine besonders elegante lösung ... schließlich haben verschiedene leute verschiedene Bildschirmauflösungen

napsterxx 7. Mai 2008 18:05

Re: Item in Fremder ListView doppelt anklicken
 
:lol: :lol:

toms 7. Mai 2008 20:55

Re: Item in Fremder ListView doppelt anklicken
 
Zitat:

Zitat von napsterxx
Muss ich die X und Y Koordinaten rausfinden? Wenn ja ist ds keine besonders elegante lösung ... schließlich haben verschiedene leute verschiedene Bildschirmauflösungen

Ich würde mit ListView_GetItemRect() die Item Position ermitteln.
Bildschirmauflösungen spielen so keine Rolle.

napsterxx 8. Mai 2008 13:21

Re: Item in Fremder ListView doppelt anklicken
 
OK funktioniert jetzt :D
Weist du auch wie man von der Listview sofer ich dsa handle habe alle einträge speichern kann?

toms 8. Mai 2008 13:44

Re: Item in Fremder ListView doppelt anklicken
 
Zitat:

Zitat von napsterxx
OK funktioniert jetzt :D

Wie hast du es gemacht / Wie sieht dein Code aus?

Zitat:

Weist du auch wie man von der Listview sofer ich dsa handle habe alle einträge speichern kann?
Suche mal nach Bei Google suchenGrabListView

napsterxx 8. Mai 2008 16:05

Re: Item in Fremder ListView doppelt anklicken
 
Finde nichts was ich verstehe. Ich möchte ja eig nur einmal alles speichern

toms 10. Mai 2008 19:36

Re: Item in Fremder ListView doppelt anklicken
 
Zitat:

Zitat von napsterxx
Finde nichts was ich verstehe. Ich möchte ja eig nur einmal alles speichern

Schau mal hier

PS: Meine Frage hast du noch nicht beantwortet.
Zitat:

Zitat von toms
Zitat:

Zitat von napsterxx
OK funktioniert jetzt :D

Wie hast du es gemacht / Wie sieht dein Code aus?

Zitat:

Weist du auch wie man von der Listview sofer ich dsa handle habe alle einträge speichern kann?
Suche mal nach Bei Google suchenGrabListView



Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 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