| Autor |
Beitrag |
F.Art
      
Beiträge: 434
|
Verfasst: Mo 13.07.09 02:42
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| unit main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellApi;
type THauptform = class(TForm) Button1: TButton; Edit: TEdit; procedure Button1Click(Sender: TObject); private public end;
var Hauptform: THauptform;
implementation
{$R *.dfm}
procedure PostKey(key: Byte); begin keybd_event(key, Mapvirtualkey(key, 0), 0, 0 ); end;
Procedure Senden(variable:string); var wnd:HWND; i:integer; begin wnd := FindWindowEx(0, 0, nil, 'Unbenannt - Editor'); if wnd <> 0 then begin if length(variable) <> 0 then begin SetForegroundWindow(wnd); ShowWindow(wnd, 1); Sleep(500); for i := 0 to length(variable) do SendMessage(wnd, WM_CHAR, Ord(variable[i]), 0); PostKey(VK_RETURN); end; end; end;
procedure THauptform.Button1Click(Sender: TObject); var Windows:HWND; begin ShellExecute(Hauptform.Handle,'open',PChar('C:\Windows\system32\notepad.exe'),nil, nil,SW_SHOWNORMAL); sleep(500); Senden(Edit.Text); end;
end. |
ich möchte im notepad den text im edit feld eintragen lassen.
irgend etwas mache ich falsch.
wie müsste es richtig sein? Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 13.07.2009 um 18:11
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 13.07.09 04:51
Wie kommst du auf die Idee das Editorfenster könnte ein Kindfenster des Desktops sein ( FindWindowEx(0, ...))?
Da das wohl auch bei dir kaum der Fall sein dürfte, versuch einmal das: Delphi-Quelltext 1:
| wnd := FindWindow(nil, 'Unbenannt - Editor'); |
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Mo 13.07.09 11:25
das funktioniert leider auch nicht, die taste RETURN wird übergeben, nur nicht das aus dem editfeld
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Mo 13.07.09 12:53
_________________ Ciao, Sprint.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Mo 13.07.09 15:48
Such doch z.B. erst mal hier im Delphi-Forum:
Da findest Du dann bei den Suchbegriffen "text senden anwendung" (ohne die Hochkommas) z.B. diesen Thread:
[URL= www.delphi-forum.de/...enden+anwendung]Text in ein Feld einer externen Anwendung einfügen
[/URL]
Hilft Dir das nicht schon weiter?
Zuletzt bearbeitet von ffgorcky am Di 14.07.09 18:36, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.07.09 13:16
Setze den Text mit WM_SETTEXT in das Editorfenster.
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Di 14.07.09 13:51
Irgendwie blicke ich nicht so wirklich da durch.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure PostKey(key: Byte); begin keybd_event(key, Mapvirtualkey(key, 0), 0, 0 ); end;
Procedure Senden(variable:string); var Windows : HWND; i : integer; begin Windows := FindWindowEx(0, 0, nil, 'Unbenannt - Editor'); if Windows <> 0 then begin if length(variable) <> 0 then begin SetForegroundWindow(Windows); ShowWindow(Windows, 1); Sleep(500); for i := 0 to length(variable) do SendMessage(Windows, WM_CHAR, Ord(variable[i]), 0); PostKey(VK_RETURN); end; end; end; |
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Di 14.07.09 16:30
Einfach nur, um noch mal an die Ausgangsfrage anzuknüpfen:
Möchtest Du denn diesen Text nur als *.txt-Datei speichern?
Dieses wäre doch auch eine Möglichkeit:
Dann könntest Du das doch einfach nur, indem Du z.B. ein Memo nimmst
[evtl. vorher die alte Datei mit MemoText.LoadFromFile('hierDeineDatei.txt') lädst]
und dort den Text reinkopierst und dann einfach nur dieses Memo wieder mit MemoText.SaveToFile('hierDeineDatei.txt') abspeicherst.
Dass die Dateiangabe mit Pfad voran passieren muss, falls sie nicht im aktuellen Arbeitsverzeichnis ist, versteht sich ja von selbst...
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Di 14.07.09 18:05
ne es soll nicht als txt gespeichert werden.
ich möchte mich mit dem bedienen von anderen tools beschäftigen und möchte lernen mit den ganze befhelne um zu gehen.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Di 14.07.09 18:36
Das sieht mir doch so ziemlich nach dem gleichen Problem wie in diesem Thema aus.
- Oder findest Du da einen unterschied - außer, dass Du da die beiden Befehle "umdrehen" musst? - Also hillft Dir das nicht?
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Di 14.07.09 19:04
am besten mal schritt für schritt alles durchgehen.
Delphi-Quelltext 1:
| Windows := FindWindowEx(0, 0, nil, 'Unbenannt - Editor'); |
mit diesem befehhl FindWindowsEx lasse ich das fenster suchen.
n8un stehen noch ein paar 0en und so in der klammer. dazu könnte ich noch erklärungen gebrauchen was der genauere sinn ist. und wie kann ich es machen, wenn er das gesuchte fenster nicth finden dann eine nachricht ausgibt?
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.07.09 19:52
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Di 14.07.09 22:02
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Procedure Senden(variable:string); var Win : HWND; i : integer; begin Win := FindWindow(nil, 'Unbenannt - Editor'); if Win <> 0 then begin if length(variable) <> 0 then begin SetForegroundWindow(Win); Sleep(500); for i := 0 to length(variable) do SendMessage(Win, WM_GETTEXT, Ord(variable[i]), 0); end; end; end; |
hab es etwas abgeändert.
was bvedeutet das NIL bei findwindows?
und so überträt das projekt leider auch noch kein text aus dem edit in den notepad.
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 15.07.09 04:21
Nun ja, damit findest du jetzt ein Fenster mit der genannten Caption und einer beliebigen (nil) Klasse. Jetzt hast du das Fenster des Editors. Und jetzt musst du darin das Eingabefeld suchen.
Du kannst dir mit WinSpy den Code automatisch generieren lassen:
www.delphi-forum.de/viewtopic.php?p=124897
www.delphipraxis.net/post124648.html (etwas neuere Version)
F.Art hat folgendes geschrieben : | Delphi-Quelltext 1:
| SendMessage(Win, WM_GETTEXT, Ord(variable[i]), 0); | [...]
und so überträt das projekt leider auch noch kein text aus dem edit in den notepad. |
Naja, Get Text macht wohl was? Text anfordern, genau... was du wohl meinst ist Set Text...
Und dazu solltest du dir die Dokumentation einmal anschauen, denn so benutzt du das falsch. Du musst da keine Buchstaben als Asciicodes senden...
msdn.microsoft.com/e...ibrary/ms632644.aspx
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: Do 16.07.09 23:59
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button3Click(Sender: TObject); var Win : HWND; i : integer; begin ShellExecute(Form1.Handle,'open',PChar('C:\Windows\system32\notepad.exe'),nil, nil,SW_SHOWNORMAL); Sleep(500); Win := FindWindow(NIL, 'Unbenannt - Editor'); if Win <> 0 then begin SetForegroundWindow(Win); for i := 1 to length(Edit1.Text) do if VkKeyScan(Edit1.Text[i])>255 then begin keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(VkKeyScan(Edit1.Text[i]), 0, 0, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); end else keybd_event(VkKeyScan(Edit1.Text[i]), 0, 0, KEYEVENTF_KEYUP); end; keybd_event(VkKeyScan(chr(vk_return)),0,0,keyeventf_keyup); end; |
habs nun so gemacht
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 17.07.09 05:04
Wozu das Sleep? Was, wenn es mal länger dauert, ...?
Wie wäre es richtig:
www.delphi-library.d...ewtopic.php?p=571423
Ja, du kannst es dir natürlich auch etwas schwerer machen und es so machen, klar. Für die Zukunft solltest du dir WinSpy vielleicht trotzdem einmal anschauen und den davon generierten Code um zu verstehen wie das eigentlich funktioniert.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Fr 17.07.09 10:00
F.Art hat folgendes geschrieben : | | was bvedeutet das NIL bei findwindows? |
Dazu erst mal eine (hoffentlich richtige) generelle Antwort:
Soweit ich das weiß, heißt das in C# z.B. nur Null und ist also eine Angabe, dass dieser Variable noch kein bestimmter Werk zugewiesen wurde/werden konnte - also dass sie noch nicht initialisiert wurde.
- Oder? Bin ich da jetzt gerade "auf dem Holzweg"?
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 17.07.09 17:02
Sagte ich ja: jaenicke hat folgendes geschrieben : | | Nun ja, damit findest du jetzt ein Fenster mit der genannten Caption und einer beliebigen (nil) Klasse. |
Um genau zu sein ist das ein Pointer. Und ein Pointer auf die Stelle 0 im Arbeitsspeicher ist eben "nix".
|
|
F.Art 
      
Beiträge: 434
|
Verfasst: So 19.07.09 13:50
das mit der funktion gefällt mir, habe es auch schon mit übernommen.
allerdings könnte ich sowas nun in richtung fensterhandle gebrauchen.
ich habe für mich zum automatisch ausfüllen der passwörter für vnc ein projekt gecodet.
sobald man denn vnc startet und die ip/host einträgt wird nach der connection ein weiteres fenster aufgebaut und genau dieses würde ich gerne auch drauf warten bis es da ist.
hat jemand da ne schöne lösung?
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 19.07.09 14:09
|
|
|