![]() |
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:
|
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
also ich spiele atm sehr viel poker im inet^^
und da gibt es so Turniere, wo man richtiges geld gewinnen kann... diese sind natürlich SOFORT voll :roll: und weil ich nich immer am PC sein kann um mich an diesen turnieren anzumelden dachte ich, dass ich mir mal ein kleines programm dazu schreibe, wo ich das turnier und die uhrzeit eingebe, an dem er mich dann anmeldet :) jo und diese ganzen Turniere, die es da so gibt sind halt in so einer ListView, die ich nun auch in meinem prog sehe und davon ein turnier auswähle... dann muss das programm diesen tisch wieder in dem original ListView finden und halt ein Doppelklick ausführen^^ so ich verwende eigentlich alles was für mich kompliziert war von dir xD d.h. das Auslesen der ListView bzw das Durchsuchen und selektieren^^ aber langsam steig ich da auch immer mehr durch! ich hatte nur vorher immer das prob, dass er den doppelklick zwar ausgeführt hat aber immer nur den Pokertisch genommen hat, der grad anvisiert war... aber durch deinen code kann ich jetzt beliebige tische anklicken deinen code habe ich insofern ergänzt, dass es jetzt nach 2 string die listView durchsucht (item + subitem) und dann hab ich das mit dem enter entfernt und stattdessen das eingefügt:
Delphi-Quellcode:
auf dieses "LongInt(PrItem))" wär ich nie gekommen^^
SendMessage(hwndLV, WM_LBUTTONDBLCLK, i, LongInt(PrItem));
so naja die grundzüge gehen jetzt alle! und ich hoffe, da die anmeldungszeiten dieser turniere immer spät inner nacht sind (USA-Zeit) und wenn immer gleich voll sind, dass ich mich da mal anmelden kann :) thx nochma mfg |
Re: ListView aus einer fremden Anwendung durchsuchen/anklick
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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