![]() |
WM_SETTEXT speichern geht nicht
Hallo, ich sitze schon seit einiger Zeitttttttttt........... an einem Problem und bekomme es nicht gelöst,
ich versuche mal das ganze zu umschreiben. Also, ich habe einen Telefonmonitor der es mir erlaubt bei einem bestehenden Anruf einen Text in ein Textfeld einzugeben der dann zu dem Anruf in einer Datenbank mit gespeichert wird. Nun habe ich ein kleines Popup geschrieben welches bei einem Anruf in einer Datenbank nach der Telefonnummer sucht und die Daten (Geburtstag usw..) per WM_SETTEXT in das Feld des Telefonmonitors kopiert.
Delphi-Quellcode:
soweit funktioniert das auch alles.wnd := FindWindow('ThunderRT6Form', 'Gesprächsmonitor - Vertical TeleVantage ViewPoint'); wndTV := wnd; wnd := FindWindowEx(wnd, 0, 'ABSDynaBarCls', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6PictureBox', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6UserControl', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6UserControl', nil); wnd := GetWindow(Wnd, GW_HWNDNEXT); wnd := FindWindowEx(wnd, 0, 'ThunderRT6UserControl', nil); wnd := GetWindow(Wnd, GW_HWNDNEXT); wnd := GetWindow(Wnd, GW_HWNDNEXT); wnd := FindWindowEx(wnd, 0, 'ABSDynaBarCls', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6PictureBox', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6UserControl', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6UserControl', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6UserControl', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6UserControl', nil); wnd := FindWindowEx(wnd, 0, 'ThunderRT6TextBox', nil); if wnd <> 0 then begin SendMessage(wnd, WM_SETTEXT, 0, LPARAM(PChar(frmInfo.Memo1.Text))); // SendMessage(wnd, WM_LBUTTONUP,0,0); // SendMessage(wnd, VK_RETURN,0,0); // sleep(100); // SendMessage(wnd, WM_KEYDOWN, VkKeyScan('1'), 0); // SendMessage(wnd, WM_CHAR, VkKeyScan('1'), 0); // SendMessage(wnd, WM_KEYUP, VkKeyScan('1'), 0); end; Das Problem ist nun wenn der Text in das Textfeld des Telefonmonitors via WM_SETTEXT plaziert wurde und der Anruf beendet wir, wird der Text nicht mit abgespeichert. Schreibe ich aber noch Text von Hand dazu geht das problemlos. Wir Ihr seht habe ich schon mit diversen SendMessages versucht noch eine Tastatureingabe zu simulieren was das Feld auch schön mitmacht, aber leider wird troz allem nicht gespeichert. Erst wenn ich von Hand was dazutippe geht das speichern. Hat jemand vielleicht noch einen Tip woran es liegen könnte ? Bin für jede Hilfe dankbar. Gruss Martin |
Re: WM_SETTEXT speichern geht nicht
Wahrscheinlich weil das Programm wo du den Text einfügst erst speichert nachdem das OnChange-Ereignis des Edits aufgerufen wurde.
kp...gibts da ne Nachricht für ?!? |
Re: WM_SETTEXT speichern geht nicht
vllt speichert das programm auch gar nicht den text des edits, sondern hat dafür noch intern eine variable, aus der es dann die daten ausliest, und quasi das edit nur als "anzeige" benutzt wird..
mfg |
Re: WM_SETTEXT speichern geht nicht
Zitat:
wie kann ich das rausfinden ? mfg Martin |
Re: WM_SETTEXT speichern geht nicht
Also ich habe das mal hier 'nachprogrammiert' und bei mir tut das. (So aehnlich).
Zumindest bekommt das 'Zielprogramm' auch einen ChangeEvent, wenn ich Text in die Editbox baller. Hast Du das Zielprogramm, an das der Text gesendet wird, selbst geschrieben - oder ist das nur ein Binary, das Du benutzt? Will heissen, kannst Du an dem Proggie was umbauen? |
Re: WM_SETTEXT speichern geht nicht
bei dem Quelltext fällt mir als erstes auf das nie geprüft wird ob FindWindowEx oder FindWindow Erfolgreich war. Gibt eine der beiden Funktionen 0 zurück wird dies stur an die nächste übergeben und so weiter.
|
Re: WM_SETTEXT speichern geht nicht
Hi Sir,
Zitat:
Aus Codersicht hast Du Recht. Hat aber wohl nix mit dem Fehler zu tun. |
Re: WM_SETTEXT speichern geht nicht
Zitat:
Martin |
Re: WM_SETTEXT speichern geht nicht
Zitat:
da hast Du schon recht, aber ich habe per Debugging geprüft ob die Handles stimmen und das tun Sie auch, sonst würde ja der Text den ich sende gar nicht ankommen. Die Prüfung mit entsprechenden Fehlerhinweisen kommt später noch dazu :-) Martin |
Re: WM_SETTEXT speichern geht nicht
was ist den der große Unterschied wenn ich die Funktin WM_SETTEXT benutze oder manuell den Text per Tastatur in das Textfeld schreibe?
Martin |
Re: WM_SETTEXT speichern geht nicht
Zitat:
Zitat:
Zum Beispiel hat das Textfeld nie den Focus. - auch wenn ein Onchange-Event ausgefuehrt wird. Man weiss ja nie, was da um den Code alles herumgestrickt ist... Nur mal als Idee zum Testen: +Anruf kommt +Du hast in Deinem Popup einen Breakpoint, so dass der WM_Settext (noch) nicht ausgefuehrt wird. <Alt-Tab> +Du gehst in das ThunderRT6 (oder wie auch immer der Monitor heisst) und gehst mal mit Tab durch alle Felder <Alt-Tab> (back 2 Delphi) <F9> +anruf beenden und ... ... nachschauen, ob er das gefressen hat Wenn ja, hat irgendein Programmierer des Monitors Dreck produziert. Wenn Nein - nochmal: +Anruf kommt +Du hast in Deinem Popup einen Breakpoint, so dass der WM_Settext (noch) nicht ausgefuehrt wird. <Alt-Tab> +Du gehst in das ThunderRT6 (oder wie auch immer der Monitor heisst) und gehst mal mit Tab durch alle Felder bis zum fraglichen Feld. Bleib drin. <Alt-Tab> (back 2 Delphi) <F9> +anruf beenden und ... ... nachschauen, ob er das gefressen hat Wenn ja, hat irgendein Programmierer des Monitors Dreck produziert. (Hinweis: in der zweiten Variante stehst Du mit dem Cursor im fraglichen Feld!) Wenn beides zu keinem Ergebnis fuehrt, melde dich nochmal. Hab hier zu Hause kein Delphi (nur Linux und Lazarus) - von daher kann ich Dir dann mit Sachdienlichen Hinweisen erst wieder am Montag zur Seite stehen. Du kannst mir ja auch mal den Namen des Monitors verklickern. ein Kollege von mir programmiert auch so Telefonanlagenzeugs, vielleicht koennte ich den mal fragen. Schoenes WE |
Re: WM_SETTEXT speichern geht nicht
Zitat:
Zitat:
noch ne Idee woran es liegen kann ? mfg MArtin |
Re: WM_SETTEXT speichern geht nicht
Jatzt faellt mir auf die schnelle nix mehr ein. Aber ich werde mich vermutlich im Laufe des Tages noch einmal melden.
Gruss |
Re: WM_SETTEXT speichern geht nicht
probier mal folgendes:
SendMessage(wnd, WM_Setfocus,0,0); SendMessage(wnd, WM_SETTEXT, 0, LPARAM(PChar(csMessage))); SendMessage(wnd, WM_KeyDown, 0, 64); SendMessage(wnd, WM_KeyUp, 0, 64); SendMessage(wnd, WM_Command, 0, 0); Das wird Dir nicht helfen, aber bei mir kommt wenigstens ein Fehler wenn die Datenmenge nicht in Edit-Mode (oder insert) ist. |
Re: WM_SETTEXT speichern geht nicht
Zitat:
der letzte SendMessage (WM_COMMAND) beendet die Application, manchmal hängt sie sich auch auf. Martin |
Re: WM_SETTEXT speichern geht nicht
Zitat:
Mit einer ADO-Komponente (tAdoTable) konnte ich Deinen Fehler nun nachvollziehen. Die geht auch nicht automagisch in den Edit-Mode. Hast Du Kontakt zu den Entwicklern des Monitor-Programms (Service- oder Supportvertrag?) - ohne, dass die Jungs was aendern wirst Du wohl kaum weiterkommen... :-( |
Re: WM_SETTEXT speichern geht nicht
Zitat:
gibt es kein Systemkommando mit dem ich den EDIT Mode aktivieren kann ? Martin |
Re: WM_SETTEXT speichern geht nicht
*push*
hi hab das selbe Problem. Hat vllt. jemand ne Lösung gefunden. Es muss doch eine Lösung geben das Onchange Event der anderen Applikation auszulösen(Notfalls iwie mit keybd_event) Danke |
Re: WM_SETTEXT speichern geht nicht
Wie genau funktioniert es denn, wenn Ihr den text per Hand eingebt??
Ihr klickt auf das Edit und schreibt mit der Tastatur los!!?? Und dann? Drückt Ihr noch Enter, oder irgendwas anderes oder was?? mfg |
Re: WM_SETTEXT speichern geht nicht
Also es funktioniert wenn man halt selber Text reinschreibt :P
2. Möglichkeit ist nachdem man mit WM_SETTEXT etwas hingeschrieben hat, in das Edit Feld zu klicken und dann zB ein 'A' tippen und es wieder weg machen und schon bleib der von WM_SETTEXT übergebene Text drin wenn man allerdings nach der Sendmessage nur reinklickt und dann in ein anderes Edit Feld klickt verschwindet der Text, was iwie dafür spricht das der Text nicht wirklich von der Applikation aufgenommen wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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 by Thomas Breitkreuz