2 Application die miteinander Werte austauschen, geht das ?
-
Hallo,
ich hab ne BarcodeScanner Application geschrieben die den Barcode am besten automatisch in die gerade active Windows Application setzen soll, bei mir im fall wäre es das Edit1 Feld.
Wie kann ich aus der Scanner Application das aktuelle Fenster ermitteln und in der gefunden Applikation das Eingabefeld Edit1 setzen ?
Geht das überhaupt?
Oder gibt es eine andere Möglichkeit mit einem anderen Programm zu kommunizieren? Ich muss nur einen Wert übermitteln. Die andere Application hab ich auch geschrieben könnte die evtl. anpassen. Die Applikation in der Ich reinschreiben will ist mehrfach gestartet, nur mal als Info und ich muss den Barcode nur in die aktuell ausgewählte Application reinschreiben.
Hat jemand eine Idee? Ich nutze den C++ Builder.
-
Hallo
Grundlegend sind Windows-Messages für dich deine Zwecke das richtige. Theoretisch könntest du mit Windows-Messages das gesuchte Edit auswählen lassen und dort text reinschreiben.
Das ist allerdings aufwendig und fehleranfällig. Besser ist es einfach den Barcode als Tastatur-Eingabe (Siehe FAQ) einfach an das Fenster senden. Dann muß die Zielanwendung nur noch alle Tastatureingaben filtern und je nach Bedingung die Barcodes verarbeiten. Das Abfangen und Filtern must du aber auch nur machen wenn es dir nicht reicht das der Barcode in dem gerade aktiven Control "eingegeben" werden soll.bis bald
akari
-
Wenn schon mit Windows-Nachrichten, dann würde ich aber nicht die Eingaben imitieren, sondern eine eigene Nachricht definieren (WM_APP+x), die die (aufbereiteten) Barcode-Daten als Parameter mitbekommt.
(natürlich mußt du auf der gegenüberliegenden Seite diese Nachricht verarbeiten und die Daten in ihrem Edit-Feld anzeigen)
-
AnsiString text="test"; HWND fhandle = GetForegroundWindow(); HWND ChildLB; if (fhandle != NULL) ChildLB=FindWindowEx(fhandle,0,"Edit",0); if(ChildLB != NULL) SendMessage(ChildLB, WM_SETTEXT, 0, (LPARAM)text.c_str());der gepostet code funktioniert nicht, kommt nix an im Edit1 Feld. Wenn ich aber das erste Handle benutze schreibt er es mir in den Fenstertitel:
SendMessage(fhandle, WM_SETTEXT, 0, (LPARAM)text.c_str());
Noch als Info am Rande es sind mehrere Edit felder vorhanden.
-
AnsiString text="test"; HWND fhandle = GetForegroundWindow(); HWND ChildLB; if (fhandle != NULL) ChildLB=FindWindowEx(fhandle,0,"TEdit",0); if(ChildLB != NULL) SendMessage(ChildLB, WM_SETTEXT, 0, (LPARAM)text.c_str());ich habs gefunden:
ChildLB=FindWindowEx(fhandle,0,"TEdit",0);
vorher:
ChildLB=FindWindowEx(fhandle,0,"Edit",0);
danke an alle :-).