Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.
Seite 1 von 2  1 2      

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