Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi String an anderes Programm schicken (https://www.delphipraxis.net/116987-string-anderes-programm-schicken.html)

SimStar001 9. Jul 2008 18:05


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

Apollonius 9. Jul 2008 18:07

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.

DeddyH 9. Jul 2008 18:07

Re: String an anderes Programm schicken
 
Schau mal unter Hier im Forum sucheninter process communication, da gibt es verschiedene Möglichkeiten (WM_COPYDATA, Pipes, Mailslots...)

[edit] Ich bin wohl doch zu alt und damit zu lagsam [/edit]

SimStar001 9. Jul 2008 18:09

Re: String an anderes Programm schicken
 
danke für die superschnelle antwort, ich schau mal, und melde mich wieder falls ich fragen habe

Larsi 9. Jul 2008 18:09

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:
http://www.delphipraxis.net/internal...=string+senden
http://www.delphipraxis.net/internal...=string+senden

SimStar001 9. Jul 2008 18:19

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

Cyf 10. Jul 2008 01:39

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.

alzaimar 10. Jul 2008 04:52

Re: String an anderes Programm schicken
 
Zitat:

Zitat von Larsi
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

Vielleicht liest Du dir kurz durch, worauf sich die Moderatoren zu diesem Thema geeinigt haben: Eine Einstellung, die Du dir aneignen könntest.
Hier das Statement, insbesondere der 5.Absatz

@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.

rotfc 10. Jul 2008 05:09

Re: String an anderes Programm schicken
 
*push* für den anderen Thread!

rotfc 10. Jul 2008 05:15

Re: String an anderes Programm schicken
 
http://www.delphipraxis.net/internal...t.php?t=138287

Eventuell verpushe ich mich da gerade :mrgreen:

SimStar001 10. Jul 2008 08:16

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

Luckie 10. Jul 2008 08:17

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?

SimStar001 10. Jul 2008 08:21

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...

Luckie 10. Jul 2008 08:24

Re: String an anderes Programm schicken
 
Zitat:

Zitat von SimStar001
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...

Nein, das reicht nicht. Warum ignorierst du meine Fragen? Ich, und die anderen auch, würden dir ja gerne helfen, aber ich finde es immer nervig, wenn man den Leuten immer erst alles mühsam aus der Nase ziehen muss, weil sie einfach ihr Problem nicht vollständig beschreiben. :evil:

SimStar001 10. Jul 2008 08:30

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

Luckie 10. Jul 2008 08:49

Re: String an anderes Programm schicken
 
Zitat:

Zitat von SimStar001
irgendwie ins andere programm schicke, sende, eintrage....

Gut versuchen wir es mit ja/nein Fragen anders scheint es nicht zu funktionieren.

Soll der Text in ein Eingabefeld des anderen Programmes eingetragen werden?

SimStar001 10. Jul 2008 08:58

Re: String an anderes Programm schicken
 
ja soll er, hatte ich aber auch schon weiter oben geschrieben...

Luckie 10. Jul 2008 09:02

Re: String an anderes Programm schicken
 
Ich finde die Stelle zwar nicht, wo du das geschrieben hast...

Such dir das Handle des Eingabefeldes mit MSDN-Library durchsuchenFindWindow und MSDN-Library durchsuchenFindWindowEx und schreiben dann den Text mit der Nachricht MSDN-Library durchsuchenWM_SETTEXT und MSDN-Library durchsuchenSendMessage in das Eingabefeld.

SimStar001 10. Jul 2008 09:03

Re: String an anderes Programm schicken
 
ok, vielen dank, dazu muss ich dann bestimmt npch die unit senkeys einbinden oder?

Luckie 10. Jul 2008 09:09

Re: String an anderes Programm schicken
 
Nein, nur die Unit Windows.

SimStar001 10. Jul 2008 09:12

Re: String an anderes Programm schicken
 
ok danke ich werde es gleich mal ausprobieren

Cyf 10. Jul 2008 14:13

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;

SimStar001 10. Jul 2008 14:38

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?

Luckie 10. Jul 2008 14:49

Re: String an anderes Programm schicken
 
Lass den ersten Parameter mal leer, das ist die Fensterklasse und nicht der Programmname.

SimStar001 10. Jul 2008 14:54

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');

andyvdeu 10. Jul 2008 14:57

Re: String an anderes Programm schicken
 
Schau mal hier, vielleicht hilt das weiter
http://delphi.about.com/od/windowssh...m_copydata.htm

Luckie 10. Jul 2008 14:59

Re: String an anderes Programm schicken
 
Zitat:

Zitat von andyvdeu
Schau mal hier, vielleicht hilt das weiter
http://delphi.about.com/od/windowssh...m_copydata.htm

Ähm ja und was soll im das helfen? das würde nämlich voraussetzen, dass das andere Fenster auf die Nachricht reagiert, was ich aber stark bezweifele.

SimStar001 10. Jul 2008 15:01

Re: String an anderes Programm schicken
 
genau ich habe mal kurz reingesehen und das hilft mir nicht wirklich weiter... aber trotzdem danke

SimStar001 10. Jul 2008 15:06

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!?

Luckie 10. Jul 2008 15:12

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.

alzaimar 10. Jul 2008 15:16

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.

Cyf 10. Jul 2008 15:32

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:
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;
So
Delphi-Quellcode:
Window := FindWindow(nil, 'Titel in Titelleiste');
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.

Cyf 10. Jul 2008 15:36

Re: String an anderes Programm schicken
 
Zitat:

Zitat von alzaimar
Hier, hab ich vor 100 Jahren mal geschrieben. Man muss aber auf die Items links klicken, damit die Kindfenster angezeigt werden.

Wäre gut, wenn dus noch anhängst. :wink:

SimStar001 10. Jul 2008 15:45

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:
Window := FindWindow(nil, 'Titel in Titelleiste');
dann findet der bei mir nur das Mozilla browserfenster?

SimStar001 10. Jul 2008 15:56

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?

alzaimar 10. Jul 2008 16:25

Re: String an anderes Programm schicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Cyf
Zitat:

Zitat von alzaimar
Hier, hab ich vor 100 Jahren mal geschrieben. Man muss aber auf die Items links klicken, damit die Kindfenster angezeigt werden.

Wäre gut, wenn dus noch anhängst. :wink:

:oops: :oops: :oops: :oops:

SimStar001 10. Jul 2008 16:42

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

SimStar001 10. Jul 2008 17:18

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?

alzaimar 10. Jul 2008 17:39

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.

SimStar001 10. Jul 2008 17:56

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 09:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz