![]() |
Fremde Anwendung ansteuern
Hallo 8)
ich muss aus meiner Anwendung eine (ganz einfache) andere fremde Anwendung starten (nur ein Formular mit einem Edit-Feld und einem Button. Ich muss in das Edit dann automatisch was schreiben und den OnClick des Buttons auslösen. Geht das überhaupt? Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Klar geht das.
Zum Starten kannst du Shellexecute nehmen oder CreateProcess, siehe dazu auch die Code-Library. Zum Steuern selber kannst du dir ja mal das hier ankucken: ![]() Für's edit kannst du ja mal selber suchen :-) Das wurde schon einige mal hier besprochen... |
Re: Fremde Anwendung ansteuern
Danke Alexander :D ,
ich werde am Wochenende ausprobieren ob ich mit dem Problem irgendwie zu Recht komme. Falls nicht melde ich mich nächste Woche noch einmal zur Wort Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Schon ein erstes Problem :oops:
wie bekomme ich die Handle der Fremder Anwendung um diese dann z.B. an solche Funktion: function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean; weiter geben? Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Hallo,
suche mal nach ![]() und wähle z.B. ![]() |
Re: Fremde Anwendung ansteuern
Hallo APP und andere System Profis 8)
Wie ich sehe hier gibt’s absolute Profis in diesem für mich ganz neuem Bereich. Ich bräuchte nur den Übergang zwischen: 1.) Ein fremder Programm automatisch öffnen 2.) Seine Handle dann herausholen (ich kapiere es hier nicht) 3.) Diese auf die genannte Funktion übergeben function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean; Es muss ein Program Test.Exe gestartet werden und ein Button angeklickt werden... sonnst nicht...Es dürfte für Euch ungefähr so schwer sein wie für mich z.B. ein berechnetes Feld zu sortieren (Datenbanken) Wäre sehr Dankbar. Die Links sind zwar schön und gut... blicke ich aber nicht... Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Wie wärs denn mit
Delphi-Quellcode:
? Vielleicht reicht das ja schon.
ShellExecute
|
Re: Fremde Anwendung ansteuern
Lieber Hansa :D
Du bist doch ein Datenbank-Profi so weit ich weiß... lass es gut sein... Das ist natürlich nicht das was ich brauche...Wie man startet weiß ich schon... Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Zitat:
|
Re: Fremde Anwendung ansteuern
Moin Paul jr.,
vielleicht kommst Du ja mit diesem Beispiel weiter. Dieses Beispiel setzt voraus, dass der anzuklickende Button die Klasse BUTTON hat, und nicht beispielsweise TButton oder vielleicht noch ganz anders. Ausserdem gehe ich hier davon aus, dass das Hauptfenster auf jeden Fall gefunden werden kann, da ich keine Absicherung treffe, für den Fall, dass das Fenster nicht da ist (dann läuft die Routine in eine Endlosschleife!) Das Beispiel ist ungetestet, sollte aber funktionieren.
Delphi-Quellcode:
// Für den Aufbau dieser Funktion siehe EnumChildProc im PSDK
// Der 1. Parameter ist das Handle des gerade gefundenen Child Window // Der 2. Parameter kann beliebig verwendet werden. // Ich übergebe hier die Adresse einer Variablen vom Typ DWORD, in der dann, // wenn der Button gefunden wurde, dessen aktuelles Handle zurückgegeben wird function FindButton(const AhWindow : DWORD;const ApButton : PDWORD) : longbool; stdcall; var pCaption : PChar; dwLen : DWORD; begin // True => Nächstes Child verarbeiten, soweit noch vorhanden Result := true; // Prüfen, ob das gefundenen Childwindow ein BUTTON ist pCaption := AllocMem(255); try // Klassenname konnte nicht ausgelesen werden, dann fertig if GetClassName(AhWindow,pCaption,255) = 0 then exit; // Ist kein Button, dann fertig if trim(UpperCase(pCaption)) <> 'BUTTON' then exit; finally FreeMem(pCaption,255); end; // Captionlänge auslesen, und entsprechend Speicher reservieren // (+1 wg. der terminierenden Null, da WM_GETTEXTLENGTH die Länge // ohne diese zurückgibt) dwLen := SendMessage(AhWindow,WM_GETTEXTLENGTH,0,0); pCaption := AllocMem(dwLen+1); try // Caption auslesen SendMessage(AhWindow,WM_GETTEXT,dwLen,lParam(pCaption)); // ist es nicht die gesuchte Caption dann fertig if AnsiUpperCase(trim(pCaption)) <> 'BUTTON CAPTION' then exit; // False => Nicht weitersuchen, da Button gefunden Result := false; // Das Handle des Button zurückgeben ApButton^ := AhWindow; finally FreeMem(pCaption,dwLen+1); end; end; procedure TForm1.Button1Click(Sender: TObject); var hWindow : DWORD; hButton : DWORD; begin // Programm starten ShellExecute(0,'open','Pfad der Exedatei',nil,nil,SW_NORMAL); // und auf das Handle des Fensters warten hWindow := 0; while hWindow = 0 do hWindow := FindWindow(nil,'Titel des zu suchenden Fensters'); // Die Child Windows durchgehen hButton := 0; EnumChildWindows(hWindow,@FindButton,integer(@hButton)); // Wenn hButton <> 0 ist, wurde der Button gefunden if hButton = 0 then exit; // und kann angeklickt werden SendMessage(hButton,BM_CLICK,0,0); end; |
Re: Fremde Anwendung ansteuern
Hallo Christian :lol:
hervorragend!!! DANKE !!! 8) Ich habe das was Du mir gegeben hast mit anderen Sachen die ich im Internet gefunden habe etwas vermischt. Und das sieht jetzt so aus:
Code:
Im Hintergrund liegt ein Programm Test.Exe (auf d:\TEST\Test.exe) und wird hier aufgerufen. Anhand einer Caption von Tbutton wird der Tbutton lokalisiert und OnClick Ereignis ausgelöst.
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellApi; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} FUNCTION EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall; VAR szFull: array[0..MAX_PATH] of Char; //Buffer for window caption BEGIN Result := Wnd <> 0; if Result then BEGIN GetWindowText(Wnd, szFull, SizeOf(szFull)); // put window text in buffer if (Pos(SL[0], StrPas(szFull)) > 0) and // Test for text (SL.IndexOfObject(TObject(Wnd)) < 0) then // Test for duplicate handles SL.AddObject(StrPas(szFull), TObject(Wnd)); // Add item to list EnumChildWindows(Wnd, @EnumChildProc, Longint(SL)); //Recurse into child windows END; END; function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean; var SL: TStringList; H: hWnd; begin SL := TStringList.Create; try SL.AddObject(ButtonCaption, nil); // First item in list is text to find EnumChildWindows(ParentWindow, @EnumChildProc, Longint(SL)); H := 0; case SL.Count of 1: ShowMessage('Window text not found.'); 2: H := hWnd(SL.Objects[1]); else ShowMessage('Ambiguous text detected.'); end; finally SL.Free; end; Result := H <> 0; if Result then PostMessage(H, BM_CLICK, 0, 0); end; procedure TForm1.Button1Click(Sender: TObject); var hWindow : DWORD; hButton : DWORD; begin // Programm starten ShellExecute(0,'open','d:\Test\Test.exe',nil,nil,SW_NORMAL); // und auf das Handle des Fensters warten hWindow := 0; Sleep(1000); while hWindow = 0 do hWindow := FindWindow(nil,'TESTFORM'); // Die Child Windows durchgehen hButton := 0; IF hWindow <> 0 THEN ClickButton(hWindow,'TESTBUTTON'); END; end. Nun jetzt habe ich auf diesen Test-Formular noch eine Komponente TEdit hingelegt. Jetzt muss ich also auch die TEdit Komponente mit einem Text versehen (natürlich aus diesem Program hier her). Kann jemand diese hier oben genannte SourcCode vervollständigen... so das z.B. in dem TEdit dann ein Text ’HURRRA’ erscheint? Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Kuck dir mal im MSDN WM_SETTEXT Message an.
Nachtrag: Zitat:
|
Re: Fremde Anwendung ansteuern
Hallo Alexander 8)
ich habe schon vorher geschrieben, dass ich hier überhaupt keine Ahnung habe... also entweder wird jemand von der Systemprofis mir weiter helfen (dessen bin ich mir irgendwie sicher) oder komme nicht weiter. Mit links kann ich mich jetzt nicht herumschlagen... da ich (noch) nicht die Abläufe die hier stattfinden richtig verstehe... Also BITTE keine Links... :freak: Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
wenn du den code zum ausfüllen des editfeld hast dann schreibst du ihn doch hier rein??? bitte denn da hänge ich auch gerade fest und ich brauch das unbedingt... danke im vorraus. dAb :angle:
|
Re: Fremde Anwendung ansteuern
Tragisch tragisch ....
Ich sage nur: Anwendungen, die gesteuert werden wollen, bieten eine OLE/COM Interface ... bei anderen sollte man es tunlichst vermeiden. Auch wenn Programme ala "WinAMP Remote Control" ja immer beliebter werden. Sowas sollte nur fuer Studienzwecke (Debugging, RE etc) oder in Ausnahmefaellen benutzt werden. |
Re: Fremde Anwendung ansteuern
Hallo Assarbad 8) ,
als ich noch Datenbank-Moderator in dem heute schon legenderem Delphi-Forum war wurde mir mal dein Name ins Ohr geflüstert. Schon damals wurdest Du als einer der besten System-Programmierer :coder: (wenn ich mich richtig erinnere) schlecht hin gehandelt... zugegeben nicht immer mit dem leichtestem Umgang...was mich überhaupt nicht gestört hat... Schade das Du heute für mich nur ein Hinweis auf ein Studiengang hast...da mein Herz schlug schneller als ich zuerst Dein Name in diesem Beitrag sah... schade... Vielleicht sind inzwischen auch neue Talente auf diesem Gebiet geboren, die diese Angelegenheit nicht so streng sehen wie Du... und mir weiter helfen würden... Herzliche Grüße :D Paul Jr. |
Re: Fremde Anwendung ansteuern
Hehe, ich bin geschmeichelt. Aber es war nur als Hinweis gedacht. Die Beispiele die dir oben geboten wurden, entsprechen doch eigentlich dem was du machen willst, oder hab ich da was verpasst?
Deinen Namen kenne ich uebr auch noch aus dem alten DF. |
Re: Fremde Anwendung ansteuern
Hallo Davtix 8)
natürlich zeige hier alles... sobald mir jemand hilft Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
das beruht auf gegenseitigkeit...
mal ein tip: vieleicht kannst du was mit dem quellcode von en_dis_able.exe (von assarbad) was anfangen. mit dem prog kann mann fremde formen min, max, schliessen, und zeigen und verstecken(visible:=true false) und der liest auch die button.caption edit.text usw. das hat ja fast mit dem zu tun nur ne kleine veränderung mit WM_SETTEXT und das soll funzen... so sagt ein gemeiner kumpel der auch der meinung ist das jeder selbst seinen hirn kurz vor einer explosion bringen soll 'dann lernt mann besser, wenn mann gerade vorm kollaps die lösung bekommt'. jedoch wer nicht weiss wies funzt kann sich kaum einen klugen kopf drüber machen um evtl. was neues zu .... :coder: **dAb** |
Re: Fremde Anwendung ansteuern
So schwer kann das doch nicht sein.
Delphi-Quellcode:
Trotzdessen, schließe ich mich Assarbad an.
var
s: String; begin s := 'Hello World'; SendMessage(hEdit, WM_SETTETXT, 0, Integer(@s[1])); |
Re: Fremde Anwendung ansteuern
Hallo Luckie,
ich verstehe das irgendwie nicht. Ich weiß noch Zeiten wo ich Datenbank-Anfänger Schritt für Schritt Wochenlang begleitet und betreut habe... bis sie am Ziel waren. Wie ich sehe, die Zeiten haben sich geändert... zumindest hier in diesem Forum. Das habe ich deutlich bei meinen Geometrie-Fragen zu spüren bekommen und hier wiederholt sich das wider. Ich weiß ehrlich nicht was soll ich darüber Denken... Du hast jetzt bestimmt „auf Lager“ eine clevere Riposte die mir schon zeigen wird... was kann ich hier erwarten... langsam habe ich echt genug... hier um Hilfe zu betteln. Wenn ich schreibe das ich übers dieses Thema keine Ahnung habe... sollte es genügen!!! Es waren auch noch Zeiten... wo Du Dich auch viel stärker eingesetzt hast...so wie ich...damals Ich kann hier nicht mehr so agieren wie es schon einmal war... diese Grunde sind dir bekannt...Viele Leute verdanken mir schon einiges (auch manche sind hier anzutreffen)... aber das hier ist wirklich bitter Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Was hast du denn?
Funktioniert es jetzt? |
Re: Fremde Anwendung ansteuern
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Es stellt sich doch so dar: Du hast ein Problem und erwartest Hilfe hier im Forum. Und ich, und auch andere, sind auch gerne bereit dir zu helfen. Aber ich, für die anderen kann ich nicht sprechen, erwarte auch etwas Eigeninitiative. Die ich bei dir im Moment gänzlich vermisse. Und da vergeht einem die Lust zu helfen. Du präsentierst hier uns dein Probelm und sagst: "Macht mal." So nicht - zu mindest nicht mit mir. Wenn du willst, dass dir einer das Programm schreibt, dann sagt das. Poste in der Job-Börse oder mach eine Ausschreibung auf deiner HP und gegen eine angemessene Bezahlung wird sich jemand finden, der dir das Programm schreibt. Zurück zum Problem: Was verstehst du da nicht? hEdit ist das Handle des Edits, in s steht die Zeichenkette drin, die in das Edit geschrieben werden soll und WM_SETTEXT ist eine Window-Nachricht, die mit SendMessage an Windows bzw. an das Edit gesendet wird, um die Zeichenkette in das Edit zu kopieren. Die API SendMessage erwartet noch zwei zusäztliche Parameter lParam und wParam. Wobei der wParam nicht genutzt wird und 0 ist. Im lParam (ein Integer) steht die Adresse im Speicher zu der Zeichenkette, deswegen auch @s[1] und der Cast nach Integer. Alles was dir jetzt noch zu tun bleibt ist das Handle des Edit rauszubekommen. Da du ja schon das Handle zu dem utton schon hast, dachte ich du seist in der L<ge auch an das Handle zu dem Edit zu kommen. Dies war wohl ein Trugschluß, der darauß resultiert, dass du den Code von sakura in keinster Weise verstanden hast. Und das zeigt mir, dass du dich mit deinem Problem bzw. dessen Lösung nicht auseinander gesetzt hast. Mehr kann und will ich dir nicht helfen. Nur noch so viel: Kuck mal im Forum nach FindWindow, FindWindowEx, EnumWindows, EnumChildWindows. Da solltest du genug Beispiele, auch fertigen Code, finde, wie man die Handles von bestimmten Controls findet. Und mit etwas Eigeninitiative und etwas investierter Zeit, sollte es dir möglich sein dein Problem zu lösen. |
Re: Fremde Anwendung ansteuern
Hi,
geht sowas auch übers Netzwerk? Wenn ja wie? ketraun |
Re: Fremde Anwendung ansteuern
Hallo Luckie,
natürlich hast Du recht. Bald wirst Du mit deiner didaktischen einwandfreien Antworten... die entweder aus Belehrungen oder Links bestehen die stolze 10.000 Zahl der Beiträge erreichen Damit wirst Du zu MEGA-Moderator... :lol: Was Dir auch herzlichst wünscht...Dein Paul Jr. |
Re: Fremde Anwendung ansteuern
Hallo Davtix 8)
Es ist schon merkwürdig, dass für angeblich so leichtes Problem noch keine Antwort vorhanden ist... Die Anzahl der Aufrufe in diesem Thema zeigt, dass viele user sich für solche infantile Probleme wie das hier... interessieren... Zeige mir bitte ein Link auf die Assarbad SourceCode... ich werde am Wochenende probieren es zu knacken... es seitdem findet sich hier doch jemand, dann anhand meiner schon lauffähiger Source (die ich hier schon gepostet habe) uns weiter hilft. Und im übrigen, falls ich etwas weiß werde ich Dir per eMail eine komplette Lösung posten...da hier wäre es unverantwortlich und didaktisch FALSCH...(sonnst würden die Anderen User NICHTS lernen)... Solltest Du schneller dieses Problem lösen als ich erwarte ich das Gleich von Dir. Gruß :D Paul Jr. _________ |
Re: Fremde Anwendung ansteuern
Hallo Leute,
könntest Ihr bitte allesamt mal wieder mit den Füßen auf den Boden zurückkehren? Und zwar jetzt. Danke. :wink: @PaulJr: Eine Sache hat sich hier in der DP seit früher nicht geändert: Niemand hat ein verbrieftes Recht auf fertige Lösungen. Dennoch bist Du ja von Deiner Lösung nicht weit entfernt. Dein letztes Problem besteht doch im Auffinden des Handles für das Editfeld. Mit dem Code von Christian grast Du doch alle Controls dieses Fensters ab und wirst innerhalb dieser Schleife früher oder später auch das Editfeld aufgelistet bekommen. Wenn in Deinem Fall der Typ des Feldes zur eindeutigen Identifizierung ausreicht, dann hast Du bereits gewonnen.
Delphi-Quellcode:
Die letzte Zeile dieses Blockes must Du abändern. Ich bin von Natur aus neugierung und würde erstmal per ShowMessage die Klassen aller gefundenen Controls anzeigen lassen (oder sonst wie, aber ShowMessage geht so schön schnell - wenn es schief läuft, hat man eben eine ganze Menge zu klicken :wink:).
...
// Klassenname konnte nicht ausgelesen werden, dann fertig if GetClassName(AhWindow,pCaption,255) = 0 then exit; // Ist kein Button, dann fertig if trim(UpperCase(pCaption)) <> 'BUTTON' then exit; ... Wenn Du also siehst, dass Dein Editfeld dabei ist und mit seiner Klasse einzig ist, dann musst Du eben eine entsprechende IF-Konstruktion basteln, die diese Klasse berücksichtigt. Die Routine liefert dann das Handle zurück und mit Luckies Code von oben kannst Du dann per API den Text setzen. |
Re: Fremde Anwendung ansteuern
Hallo Daniel, 8)
endlich fange etwas zu verstehen... mit der Klasse kann ich schon etwas anfangen...Danke... Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Hier mit will ich mich bei meiner etwas rüden Art, wie ich mit PaulJr. umgesprungen bin, öffentlich entschuldigen. Es tut mir leid. Ich kann mir leider nicht erklären, wie das passieren konnte.
Ich bin nach einem Anstoß einer dritten Person noch mal in mich gegangen und sehe ein, dass ich etwas sehr übertrieben und gereizt reagiert habe. Auch mußte ich festellen, dass PaulJr wohl recht hat. So wie ich zur Zeit antworte kann es bei mir nicht weitergehen. Ich gelobe in Zukunft Besserung. Gerade ein Moderator sollte in solchen Situationen etwas feinfühliger reagieren. Im Nachhinein sehe ich mein Posting mit tiefen Bedauern. Michael Puff. |
Re: Fremde Anwendung ansteuern
Hallo Luckie, :D
Ich muss ehrlich sagen, dass Deine Antwort jetzt... hat mich sehr angenehm überrascht. Ich sehe schon wieder wie den alten Luckie langsam aufwache, der immer als erste den anderen zu helfen eilte. Wir waren mal ein unglaublich starken Team... jeder in seinem Bereich. Und plötzlich, wie aus dem heiterem Himmel wurden wir beide und noch ein paar andere Top-Leute, als abtrünnige bezeichnet worden (ich sogar mehrmals verband... und schon wieder Eingestellt – Tragikomödie) ...und unsere verdienste waren plötzlich nichts mehr Wert...Das Forum, unser Zuhause brach zusammen und somit auch ALLE unsere Beiträge die zum Teil sehr wertvoll und unglaublich umfangreich waren... verschwanden für IMMER. Du bist jünger als ich und hast Dich noch ein mall motivieren lassen... ich jedoch, der ganze 2 Jahre dort alles gegeben hatte und Teilweise gleichzeitig für 3 Sparten (Datenbanken / Datenbanke –MySQL in dem noch anderem http-Forum und Ausbildung-Sparte) als Moderator verantwortlich war...kann leider nicht mehr so agieren wie es das mal war... Dennoch, standen wir damals nach dem Zusammenbruch...vor der Wahl, da viele neue Delphi Foren wollten sofort der alten Platz besetzten, für welche Forum wollen wir uns entscheiden. Wir haben uns für diese Forum hier entschieden...obwohl damals würden wir überall und SOFORT als Moderatoren eingestellt... so gut waren wir. Ich habe, und Du bestimmt auch...damals ein paar abwerbungs- Angebote gekriegt...man blieb aber hier beim Daniel. Daniel als Administrator ist eben das was wir uns damals gewünscht hätten...ein toller Mensch mit hoher Sensibilität und persönlichen Kultur. Ich war hier von Anfang an und half dies hier mit vielen anderen tollen Moderatoren aufzubauen. Allerdings standen wir hier vor dem nichts. Ich merkte ganz schnell... nach ein paar Monaten, dass mir ganz einfach die Kräfte dazu fehlen und habe mich leider aus dem aktivem Bereich hier zurückgezogen. Also den alten Zeiten wegen... verzeih mir, wenn ich manchmal vielleicht nicht so komme wie ich natürlich kommen könnte. Und Du Luckie...womöglich brauchst Du eine kurze Pause, da man muss auch mal abschalten... Wie auch immer...das war nur zur Erinnerung woher kommen wir... Auch ich möchte mich bei Dir entschuldigen... und hoffe, dass wir wieder Internet-Freunde bleiben... da wir schon so viel zusammen erlebt haben... Viele Grüße 8) Paul Jr. |
Re: Fremde Anwendung ansteuern
:P und noch das dazu: :cheers: und auf weitere gute Zusammenarbeit beim :coder:
|
Re: Fremde Anwendung ansteuern
Wo wir schonmal beim Thema sind, wo sind eigentlich die ganzen Beiträge hin? Hieß es nicht damals, die Übergabe erfolge mit allen Beiträgen? Oder sind die noch auf der gewohnten Domain (also im DF) zu finden?
@Paul Jr: Zieh dir mal das PSDK, vielleicht kannst du dann mehr damit anfangen, wenn dir die Leute Beispiele für den Umgang mit APIs geben. Wenn du willst schicke ich es dir auch gern auf CD zu (zB wenn du zu wenig Bandbreite hast). Da du dich nicht mehr geäußert hast, ich hoffe auch, daß du mir das nicht übel genommen hast. Aber Daniel hat da schon einen sehr guten Punkt angesprochen: "dass Dein Editfeld dabei ist und mit seiner Klasse einzig ist" ... und das kann man nicht garantieren, auf keinem System zu keiner Zeit. Daher auch meine (hoffentlich nicht zu forsche) "Absage" an dein Vorhaben ;) ... übrigens, wenn du mir danach plausibel gemacht hättest, daß du es unbedingt für was bestimmtes brauchst, hätte ich dir sogar ein komplettes Beispiel geschrieben. Meine Aussage galt nur insofern, daß diese Technik unzuverlässig und unsauber ist. Nix für "reelle" Produkte. Das gilt auch nach wie vor. Auch von mir ein :cheers: zum :coder: |
Re: Fremde Anwendung ansteuern
Zitat:
@Paul Natürlich von mir auch ein "Entschuldigung". Aber hast du jetzt dein Problem selber lösen können oder nicht? |
Re: Fremde Anwendung ansteuern
auch auf die "Gefahr" hin, dass du es schon geschafft hast, habe ich mal deine funktion ein wenig abgeändert, so sollte sie zum Ändern des Edit-Feld funktionieren..Habe es allerdings nicht getestet:
Delphi-Quellcode:
Aufruf
function ChangeText(ParentWindow: Hwnd; EditCaption: string): Boolean;
var SL: TStringList; H : hWnd; s : String; begin SL := TStringList.Create; try SL.AddObject(EditCaption, nil); // First item in list is text to find EnumChildWindows(ParentWindow, @EnumChildProc, Longint(SL)); H := 0; case SL.Count of 1: ShowMessage('Window text not found.'); 2: H := hWnd(SL.Objects[1]); else ShowMessage('Ambiguous text detected.'); end; finally SL.Free; end; Result := H <> 0; s := 'Edit-Caption'; if Result then SendMessage(h, WM_SETTEXT, 0, LongInt(s)); end;
Delphi-Quellcode:
IF hWindow <> 0 THEN
ChangeText(hWindow,'Edit1'); |
Re: Fremde Anwendung ansteuern
Hallo Alexander, 8)
erst jetzt sehe ich, dass Du etwas für mich geschrieben hast... DANKE... nun jetzt habe ich keine Zeit es nachzuprüfen... werde etwas später machen... Inzwischen aber habe ich schon ein kleines Posting für Assarbad vorbereiten.. lies es durch... und sage, ob das was Du geschrieben hast den Anforderungen hier entspricht... Danke und viele Grüße :D Paul Jr. __________________________________________________ _______ __________________________________________________ _______ Hallo Assarbad, 8) Danke für Deine nette Worte und Dein Angebot mir eine CD zuzuschicken. Das allerdings (CD) wäre für mich viel zu viel... da ich nur ein kleines Beispiel brauche. Ich denke, dass mit so einem Beispiel würde ich schon in dieser Materie mehr oder weniger (bei meinen weiteren Entwicklung) zu recht kommen. Dies ist eben der Knackpunkt...wie spreche ich solche Komponenten an die wie hier keine Caption besitzen. Mit dem TButton war es einfach. Ich habe im Internet nichts vergleichbares gefunden... und wenn schon, dann sind die Beispiele für mich zu komplex. Anders gesagt, Du siehst wie viele Leute schon hier in dieses Thema ein Blick geworfen haben, so ein Beispiel könnte man ohne weiteres in FAQ aufnehmen. Falls Du Dich doch entschlossen solltest so ein Beispiel zu schreiben müsste das natürlich weder heute noch morgen geschehen... aber schon in einer absehbaren Zeitspanne...(z.B. innerhalb nächsten Wochen wenn Dir langweilig wäre). Somit könnte ich so was in aller Ruhe studieren... und sehen ob ich es verstehe... _________________________________ Hier noch einmal die Ausgangsposition: 1.) Ich habe eine Anwendung TEST.EXE die NUR aus einem Formular besteht. Die Caption des Formulars ist : ’FormTest’ 2.) Auf diesem Formular befinden sich NUR zwei TEdit Komponenten ___________________ Man startet die Anwendung TEST.EXE und erscheint ein Formular mit 2 leeren Edit- Felder So... Jetzt starte ich meine Anwendung, die nichts anderes machen sollte, als diese 2 Edit-Felder mit unterschiedlichen Texten zu bestücken... Assarbad, natürlich wenn Du jetzt zeitlich verhindert bist geht das natürlich in Ordnung... bloß sage es einfach... ich werde dann nicht beleidigt oder so was, he, he... Viele Grüße :D Paul Jr. |
Re: Fremde Anwendung ansteuern
Hallo Paul,
eigentlich passt doch mein Source, du musst dann doch nur statt
Delphi-Quellcode:
das
IF hWindow <> 0 THEN
ChangeText(hWindow,'Edit1');
Delphi-Quellcode:
schreiben, oder ist da noch ein Fehler drin.
IF hWindow <> 0 THEN
ChangeText(hWindow,''); |
Re: Fremde Anwendung ansteuern
Hallo Alexander, 8)
ich kriege ein Fehler: Window text not found. Sollte aber hier: ChangeText(hWindow, 'Edit1'); 'Edit1' für den Name der Edit-Komponente stehen... ist das natürlich sofort unbrauchbar...da ich den Namen nicht kenne (natürlich kenne ich sie schon...aber es geht hier um etwas mehr). Gruß und Danke :D Paul Jr. |
Re: Fremde Anwendung ansteuern
Das sollte eigentlich die Caption sein, aber ich habe das auch nciht getestet und kann es derzeit auch nciht testen, da ich an diesem PC kein Delphi habe :sad:
|
Re: Fremde Anwendung ansteuern
Hallo Alexander, 8)
da muss ich Dich leider enttäuschen...TEdit-Komponente hat keine Caption- Eigenschaft... Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Jupp meinte auhc die TEXT-Eigenschaft ;-)
Ich habe den alten Code von dir und Christian genommen und nur ein wenig umgearbeitet....und da habe ich das wohl vergessen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 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