![]() |
Postmessage wm_lbuttondblclk geht aber wm_lbuttondown nicht?
hallo, ich lasse an einer bestimmten position in einem externen programm die linke maustaste drücken.
wenn diese gedrückt wird, sollte in einem edit einer externen anwendung dann ein text erscheinen. dies passiert jedoch nicht. hier mal der Code:
Delphi-Quellcode:
//Text bei wirklichen klick mit maus wird gespeichert form1.Memo1.Lines.Add(callsign + ' selected first'); //Hier wird die Anwendung (extern) nochmals in den vordergrund gerufen mittels einer Funktion aus der Sndkey32.pas appactivate(radar_handle,1); //Hier setze ich die Maus auf die von mir gewünschte, berechnete Position im Programm // Diese x,y koordinate ist im bezug auf den desktop berechnet SetCursorPos(x + 25,y + 25); //Hier wird jetzt der Mausklick simuliert und die x,y koordinate umgerechnet postMessage(Radar_handle,wm_lbuttondown,0,Makelparam(x + 25,y + 25)); postmessage(Radar_handle,wm_lbuttonup,0,makelparam(x + 25,y + 25)); //ich lasse hier bewusst buttondown, und buttonup senden, weil entweder das eine oder das andere funktioniert nicht //Hier wird der Text der in dem Edit erscheinen sollte ausgelesen callsign2 := get_commbox_selected_callsign; //und zur kontrolle gespeichert form1.Memo1.Lines.Add(callsign2 + ' second selected'); Meine vermutung ist nun, dass die berechnete x,y Koordinate auf dem desktop nicht mit der gewünschten umgerechneten Position im externen programm übereinstimmt! hat jemand eine idee woran es denn liegen könnte? |
Re: Postmessage probleme (falsche lparam werte)???
Solange du uns nicht offenbarst wie du deine Variablen x und y zuvor versorgst, kann man da nicht mehr mutmaßen als du es bereits selbst getan hast. Da du den Cursor aber ja an die Stelle setzt, solltest du doch sehen können ob du getroffen hast.
Edit: Es kann zu dem gut sein, dass du den Mausclick relativ zum fremden Fenster, nicht zum Desktop durchführen musst. Evtl. musst du dann auch noch zwischen Client- und NC-Area unterscheiden, da bin ich gerade unsicher. Auch wäre die Implementierung von "get_commbox_selected_callsign;" evtl. interessant falls die Koordinaten ansonsten passen. |
Re: Postmessage probleme (falsche lparam werte)???
ja also wie gesagt, x, y errechne ich wie folgt:
1. Maus wird auf Position 100,100 bewegt, dort werden aus dem Porgramm koordniaten ausgelesen, 2. Maus wird auf Position 500,500 bewegt, dort werden aus dem Porgramm koordniaten ausgelesen, 3. Es wird errechnet, welche Länge bzw Breite 1 Pixel in x-Richtung und 1 Pixel in y-Richtung hat. demzufolge bewege ich dann meine maus auf die gewünschtge Position. Diese ist auch korrekt, nur wird scheinbar der klick nicht vollständig ausgeführt. klicke ich nach ausführen des codes genau an die Stelle wo die maus hin bewegt wurde, dann funktioniert das was bei einem linksklick auch passieren sollte. das macht mich stutzig! Wahrscheinlich liegt es wirklich an der fensterposition, wie bekomme ich denn die Borderhöhe des Fensters raus?
Delphi-Quellcode:
Function Get_CommBox_selected_CallSign : string;
var Handle : Hwnd; WndCaption: PWideChar; len: Integer; begin Handle := Find_WindowHandle('#32770','COMMBox'); Handle := get_Handle(Handle,'Edit'); len := SendMessage(Handle, WM_GETTEXTLENGTH, 0, 0); if len > 0 then begin len := len * 2; WndCaption := GetMemory(len + 1); if Assigned(WndCaption) then begin SendMessageW(Handle, WM_GETTEXT, len + 1, Integer(WndCaption)); result := String(WndCaption); FreeMemory(WndCaption); SendMessageW(Handle, WM_setTEXT, 0, Integer(0)); end; end; end; also auch wenn ich die Borderhöhe und alles abziehen von der position funktioniert der linksklich nicht! es geht nur ein rechtsklick; |
Re: Postmessage probleme (falsche lparam werte)???
Also ich habe nochmal folgendes ausprobiert:
Delphi-Quellcode:
setcapture(Radar_Handle); postmessage(Radar_Handle,WM_lBUTTONdblclk,makelparam(x,y),0); releasecapture; wenn ich einen doppelklick ausführe, funktioniert das, es wird an der richtigen stelle ausgeführt, nur ein normaler linksklick nicht!? wieso zum teufel nochmal denn nicht! ich verzweifel bald! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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