![]() |
ListView aus einer fremden Anwendung durchsuchen/anklicken
Hi!
Ich versuche mich gerade an einem prog, dass ein ListView aus einem fremden Programm ausliest... ich benutze den code von toms, den ich hier iwo gefunden habe,um das listView überhaupt einmal auszulesen und alles in mein eigenes ListView zu übertragen. Jetzt möchte ich aber, wenn ich in meinem Programm, in meinem ListView eine Zeile anklicke, der selbe klick auch auf dem listview in dem fremden Programm ausgeführt wird. Das heißt ich muss die fremde listview nach der angeklickten´Caption durchsuchen und dieses item anklicken... also die cation von der angeklickten zeile kriege ich so heraus:
Delphi-Quellcode:
nur wie durchsuche ich jetzt die fremde listview danach und klicke das item danach an?
label2.Caption:=(listview1.Selected.Caption);
ist das überhaupt möglich? vielen Dank schonma im Vorraus :) mfg |
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
Schau mal nach LVM_FINDITEM und LVM_SETITEM (zumindest klingen die Beschreibungen recht vielversprechend).
|
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
Hallo Innos,
Zitat:
gleich direkt auf den entsprechenden Itemindex zugreifen. (ausser in der fremde Listview wurden die Items und somit Reihenfolge in der Zwischenzeit geändert. Zitat:
oder ob es nur genügt, das Item zu markieren? Nachtrag: So sollte es funktionieren. Vielleicht gibt's noch eine elegantere Methode? 1. Item sichtbar machen LVM_ENSUREVISIBLE 2. Item Position herausfinden (mit LVM_GETITEMRECT / LVM_GETITEMPOSITION) 3. Mit mouse_event WM_LBUTTONDOWN/WM_LBUTTONUP senden. |
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
also ich lese diese listbox aus, klicke dann ein beliebiges item an... (die original listbox in dem fremden prog KÖNNTE geändert worden sein, aber das item ist immernoch enthalten) und dann soll es quasi nach der angeklickten cation aus meinem prog suchen... und das dazu gehörige item in dem fremden prog an klicken...
so THX erstma für eure tips ich schaus mir gleich ma an |
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
mmhh check grade nicht wie ich das machen soll...
also
Delphi-Quellcode:
nur diese nullen dahinten sind alle integer werte xD sry dass ich son noob bin :D aber wo kommt da mein string hin, nachdem ich suchen will?
sendmessage(w,LVM_FINDITEM,0,0);
|
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
Zitat:
|
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
so ich habs jetzt soweit, dass ich mithilfe deines streams, toms, dieses ListView durchsuchen kann... ich habe also die nummer des Items aus dem original ListView... wie sende ich jetzt einen klick genau auf dieses item?
also quasi:
Delphi-Quellcode:
nur wo gebe ich jetzt dieses item an, dass er in dem handle (die ListView) anklicken soll?
sendmessage(w,WM_LBUTTONDOWN,0,0);
sendmessage(w,WM_LBUTTONUP,0,0); danke schon mal für eure hilfe :thumb: |
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
Mir ist keine Möglichkeit bekannt, einem bestimmten Item eine "onclick" Nachricht zu schicken.
Eine Möglichkeit wäre es, das gefundene Item zu markieren und dann Enter der Listview zu senden. Dies funktioniert sogar dann, wenn das Fenster, auf welchem sich die Listview befindet, nicht sichtbar ist. Die Click Funktion könnte dann grob etwa so aussehen:
Delphi-Quellcode:
function LVClickItem(hwndLV: HWND; sItemText: string): Boolean;
const MaxTextLen = 1024; var MemMgr: TProcessMemMgr; Item: TLVItem; i: Integer; PrItemText: PChar; PrItem: PLVItem; begin Result := False; MemMgr := CreateProcessMemMgrForWnd(hwndLV); try PrItemText := MemMgr.AllocMem(MaxTextLen); PrItem := MemMgr.AllocMem(SizeOf(TLVItem)); i := ListView_GetNextItem(hwndLV, -1, LVNI_ALL); while i >= 0 do begin //Item Eigenschaften setzen Item.mask := LVIF_TEXT; Item.iItem := i; Item.iSubItem := 0; Item.pszText := PrItemText; Item.cchTextMax := MaxTextLen; MemMgr.Write(Item, PrItem, SizeOf(TLVItem)); if not ListView_GetItem(hwndLV, PrItem^) then Break; MemMgr.Read(PrItem, Item, SizeOf(TLVItem)); //Überprüfen, ob Item mit gesuchtem Item übereinstimmt. if MemMgr.ReadStr(Item.pszText) = sItemText then begin //Item "Selected" Eigenschaften setzen Item.state := LVIS_SELECTED; Item.stateMask := LVIS_SELECTED; //Item markieren MemMgr.Write(Item, PrItem, SizeOf(TLVItem)); if Boolean(SendMessage(hwndLV, LVM_SETITEMSTATE, i, LongInt(PrItem))) then begin //Enter senden PostMessage(hwndLV, WM_KEYDOWN, VK_RETURN, 0); PostMessage(hwndLV, WM_KEYUP, VK_RETURN, 0); Result := True; end; Break; end; i := ListView_GetNextItem(hwndLV, i, LVNI_ALL); end; finally MemMgr.Free; end; end; |
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
:thumb: wooooww thx :D
ich werde deinen code noch bisl ändern zB geht das mit dem Enter nicht.... also atm markiere ich das item so wie du und dann sene ich den doppelklick aus :) GANZ großes Kino :thumb: |
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 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