![]() |
String an anderes Programm schicken
Hallo
ich würde ganz gerne über meine Application einen string an ein anderes Programm schicken. bei VB gibt es da wohl so einen befehl wie application_send("application","Taste","string") weiß zufällig jemand ob es sowas auch in delphi gibt, bzw wie ich das vielleicht anstellen könnte? vielen dank |
Re: String an anderes Programm schicken
Da gibt es SEHR VIELE Möglichkeiten. WM_COPYDATA, Named Pipes, MMFs, Atoms, WriteProcessMemory mit einer "normalen" Fensternachricht gekoppelt... Du kannst ja einfach mal suchen und schauen, was dir am besten gefällt.
|
Re: String an anderes Programm schicken
Schau mal unter
![]() [edit] Ich bin wohl doch zu alt und damit zu lagsam [/edit] |
Re: String an anderes Programm schicken
danke für die superschnelle antwort, ich schau mal, und melde mich wieder falls ich fragen habe
|
Re: String an anderes Programm schicken
Ich hoffe, dass dir keiner eine Antowrt dafür gibt. Wenn du mal suchen würdest findest du bestimmt 1000 Beiträge, die den gleichen Inhalt haben^^
MFG Lars Wiltfang Tipps: ![]() ![]() |
Re: String an anderes Programm schicken
Vielen Dank an Lars Wiltfang,
wenn ich eine ahnung gehabt hätte nach was ich speziell suchen soll hätt ichs auch getan, mehr sag ich dazu net..... _____________________________________ _____________________________________ Also nochmal zur Erklärung was ich genau machen will: ich möchte an ein anderes programm einen text übergeben dazu muss ich den Hotkey des programms aktivieren und den string senden, also wenn es so eine ähnliche funktion wie in vb gbt wo ich die application, den key und dann den string angeben kann wäre mir geholfen.... danke |
Re: String an anderes Programm schicken
Dafür gibts so ungefähr 1000 und eine Funktion (naja villeicht nicht ganz). Die wichtigesten sind genannt, zu ergänzen wären noch Sockets über den localhost, was am sinnvollsten ist, hängt vom Einzelfall ab und davon wieviel (persöhnliche) Zeit und (System-) Resourcen man da rein in investieren will.
|
Re: String an anderes Programm schicken
Zitat:
![]() @SimStar001: Ich finde keine Definition des VB Befehls "Application_Send". Hast Du einen Link für mich? Ich glaube nämlich nicht, das dieser Befehl in VB existiert (weil ich nichts gefunden habe). Es gibt unter Windows nämlich keinen Standard für das Empfangen eines Strings. woher soll nun dieser ominöse VB-Befehl wissen, wie die Zielanwendung den String empfangen will? Unter Delphi (und jeder anderen Sprache unter Windows) würde ich das über die Windows-Botschaft "WM_COPYDATA" lösen. Du packst die zu versendende Information in eine Struktur (steht alles in der MSDN-Hilfe unter 'WM_COPYDATA') und schickst diese Nachricht zusammen mit der Struktur an das Zielprogramm, da benötigt man keinen Hotkey. Die Zielseite reagiert auf diese Nachricht und schaut einfach in der übergebenen Struktur nach. Oder meinst du, das Du mit dem 'Key' die Zielanwendung aufweckst und dann den 'String' in das Eingabefeld (wenn denn dort eins ist) schickst? Saug dir mal die LMD-Komponenten, ich glaube, auch im Freewarepacket ist eine Komponente 'SendKey', die macht das. |
Re: String an anderes Programm schicken
*push* für den anderen Thread!
|
Re: String an anderes Programm schicken
![]() Eventuell verpushe ich mich da gerade :mrgreen: |
Re: String an anderes Programm schicken
@alzaimar vielen dank für deine antwort, ich habe hier mal den code von nem kumpel aus vb bekommen
AppActivate "IvAc", true Sendkeys "{F4}",1 Sendkeys "{Down}",1 Sendkeys t1(m).text,1 Sendkeys "{Enter}",1 zu "WM_COPYDATA" habsch schon mal gesucht und mir die Beispile angeschaut, ich weiß nur noch net ob mir das wirklich hilft, weil ichs nicht ausprobieren kann, dann bei mir kennt der den befehl net.... muss ich dafür noch eine bestimmte UNIT einbinden? zu deiner letzten frage, dass Programm an das ich senden will läuft schon im Hintergrund |
Re: String an anderes Programm schicken
Du solltest uns auch alles sagen und nicht nur die Hälfte. :roll:
Ist das zweite Programm von dir? Kannst du am Quelltext was ändern oder ist es ein fremdes Programm, welches du "fernsteuern" willst? Welche Schnittstellen werden von dem anderen Programm zur Verfügung gestellt? Was verstehst du unter "senden"? Soll der Text in ein Eingabefeld eingetragen werden oder wie nimmt das Programm den Text entgegen? |
Re: String an anderes Programm schicken
das andere programm ist nicht von mir, ud ich weiß auch nicht welche schnittstellen es zur verfügung stellt.
ich will halt das was ich im IVAC mit der Hand selber eintragen kann nun von meinem programm erledigen, so cih hoffe das reicht an infos... |
Re: String an anderes Programm schicken
Zitat:
|
Re: String an anderes Programm schicken
sorry, dass ich vergessen habe dir noch denine letzte frage zu beantworten!
unter senden versteh ich nun insofern, dass ich den text den ich dann ins andere programm eintragen will von meinem programm aus irgendwie ins andere programm schicke, sende, eintrage.... und am quellcode des anderen rogs kann ich wie gesagt nix ändern |
Re: String an anderes Programm schicken
Zitat:
Soll der Text in ein Eingabefeld des anderen Programmes eingetragen werden? |
Re: String an anderes Programm schicken
ja soll er, hatte ich aber auch schon weiter oben geschrieben...
|
Re: String an anderes Programm schicken
Ich finde die Stelle zwar nicht, wo du das geschrieben hast...
Such dir das Handle des Eingabefeldes mit ![]() ![]() ![]() ![]() |
Re: String an anderes Programm schicken
ok, vielen dank, dazu muss ich dann bestimmt npch die unit senkeys einbinden oder?
|
Re: String an anderes Programm schicken
Nein, nur die Unit Windows.
|
Re: String an anderes Programm schicken
ok danke ich werde es gleich mal ausprobieren
|
Re: String an anderes Programm schicken
So, mit den Infos kann man doch schon mehr anfangen :wink:
Dann kann man auch konkret helfen, noch ein kleines Beispiel wie sowas aussehen kann, hier eine procedure die z.B eine '0' in ein neues Editor-Fenster schreibt (muss offfen sein), allerdings musst du erst rausfinden, wie bei dir das Eingabefeld heißt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Window: HWND; begin Window := FindWindow('Notepad','Unbenannt - Editor'); if Window <> 0 then begin Window := FindWindowEx(Window, 0, 'Edit', nil); PostMessage(Window, WM_KEYDOWN, 48, 0); end else showmessage('Konnte das Editorfenster nicht finden!'); end; |
Re: String an anderes Programm schicken
ok danke für das codebeispiel...
leider kenne ich mich mit den ganzen funktionen nicht aus. ich hab mal folgendes programmiert
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var fenster : hwnd; begin fenster := findwindow('IvAc','IvAc - 1.1.10.171 - EDDF_OBS'); showmessage(inttostr(fenster)); end; laut deinem beispiel hast du ja notepad.exe genommen. so mein anzusprechendes programm heißt IvAc und im Fenster steht z.b. das hier "IvAc - 1.1.10.171 - EDDF_OBS" so nun gibt mir die funktion aber immer 0 zurück!? was mache ich falsch? |
Re: String an anderes Programm schicken
Lass den ersten Parameter mal leer, das ist die Fensterklasse und nicht der Programmname.
|
Re: String an anderes Programm schicken
hab das jetzt ausprobiert.... und geht immernoch net!
Delphi-Quellcode:
fenster := findwindow(nil,'IvAc - 1.1.10.171 - EDDF_OBS');
|
Re: String an anderes Programm schicken
|
Re: String an anderes Programm schicken
Zitat:
|
Re: String an anderes Programm schicken
genau ich habe mal kurz reingesehen und das hilft mir nicht wirklich weiter... aber trotzdem danke
|
Re: String an anderes Programm schicken
ich habe mal das hier ausprobiert und ich beokomme nicht mehr null zurück!
Delphi-Quellcode:
fenster := findwindow(nil,'');
wie kann ich jetzt herausfinden dass das auch meine anwendung ist die ich versuche anzusprchen!? |
Re: String an anderes Programm schicken
damit wirst du irgendein Fenster gefunden haben, welches keinen Titel hat. Ich bemühe gerade verzweifelt die Suche, aber die läd sich zu Tode. Ein Mitglied hat mal ein Programm geschrieben, mit dem man die Fenster finden kann und welches einem sogar den passenden Code generiert.
|
Re: String an anderes Programm schicken
Hier, hab ich vor 100 Jahren mal geschrieben. Man muss aber auf die Items links klicken, damit die Kindfenster angezeigt werden.
|
Re: String an anderes Programm schicken
Finds auch nicht, aber aber cih hab mal folgenden Schnipsel gebastelt, hilft allerdings noch nicht interher auch die Klasse von der Kompnente im Fenster zu finden:
Delphi-Quellcode:
So
procedure TForm1.Button1Click(Sender: TObject);
var Window: HWND; WindowClassName: array[0..79] of Char; begin //Window := FindWindow(nil, 'Titel in Titelleiste'); Window := FindWindow('Notepad', 'Unbenannt - Editor'); if Window <> 0 then begin GetClassName(Window, @WindowClassName, 80); //gehe davon aus das daas NULL an Ende mit gezählt wird, falls das falsch ist, bitte mal anmerken Showmessage('Fenster lpClassName: ' + WindowClassName); Window := FindWindowEx(Window, 0, 'Edit', nil); PostMessage(Window, WM_KEYDOWN, 48, 0); GetClassName(Window, @WindowClassName, 80); Showmessage('Komponente lpClassName: ' + WindowClassName); end else showmessage('Konnte das Editorfenster nicht finden! Errorcode: ' + IntToStr(GetLastError)); end;
Delphi-Quellcode:
solltest du dein Fenster eigentlich schon finden, du musst aber beachten, dass dir das bei mehreren Fenstern mit gleichen Titel nur das Handle auf das zuletzt angeklickte liefert (Ergebnis von einem praktischen Test eben), ist also hier sicherer, wenn du es erst mal anklickst. Danach sollte dir das GetClassName den Namen liefern, nur wie ich an die Komponente komme, wenn ich sie vorher nicht kenne, weiß ich auch noch nicht.
Window := FindWindow(nil, 'Titel in Titelleiste');
|
Re: String an anderes Programm schicken
Zitat:
|
Re: String an anderes Programm schicken
wenn ich deinen code ausführe wie er da steht kommt fehlercode '2'
wenn ich dann allerdings diese zeile ausführe...
Delphi-Quellcode:
dann findet der bei mir nur das Mozilla browserfenster?
Window := FindWindow(nil, 'Titel in Titelleiste');
|
Re: String an anderes Programm schicken
mir fällt da gerade so mal ein, dass wir die ganze zeit nach enm fenster suchen!? wäre es nicht besser erstmal nach der anwendung zu suchen?
|
Re: String an anderes Programm schicken
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: String an anderes Programm schicken
super damit konnet ich zumindest mal di caption und die windoclass ermitteln, mal sehen wies nu weiter geht ich werde mal weiter rumprobieren
|
Re: String an anderes Programm schicken
so ich habe jetzt doch ein problem.... und zwar ist die caption der anwendung die ich ansprechen möchte immer unterschiedlich, sie ändert sich mit der mausbewegung....
als class bekomme ich soetwas angezeigt: Afx:00400000:0 kann ich jetzt irgendwie immer di aktuelle caption herausfinden? |
Re: String an anderes Programm schicken
Ich habe das mit EnumWindows gelöst, dort bekommst du für jedes Fenster in Windows sowohl den Klassennamen als auch die Überschrift (Caption). Wenn die Fensterklasse ansonsten eindeutig ist, reicht das doch.
Probieren geht über Studieren. |
Re: String an anderes Programm schicken
on die fensterklasse eindeutig ist weiß ich leider noch net ich probiers die stunden aus und melde mich sonst wieder
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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