Entwickler-Ecke

Sonstiges (Delphi) - Strings in die Adressleiste übernehmen


Seraph - Mi 21.09.05 13:14
Titel: Strings in die Adressleiste übernehmen
Hey Leute!
Ich hoffe ein paar Freaks hier können mir weiterhelfen!
Ich versuche nur ganz simpel einen String (wie zum Beispiel 'Hallo') in die Adressleiste
vom IEX oder Arbeitsplatz zu übernehmen! Das muss doch gehen!
Und eigentlich müssten die Adressleisten von den ganzen WindowsProgs auf den selben Befehl anspringen oder irre ich mich? :?

Gruß Andy


uall@ogc - Mi 21.09.05 13:27


Delphi-Quelltext
1:
  SetWindowText(FindWindow(nil,'Arbeitsplatz'),'Hallo');                    


du musst nur den Aktuellen Text wissen oder den klassennamen


//addressleiste flasch gelesen ;P


Seraph - Mi 21.09.05 13:33
Titel: Re: Strings in die Adressleiste übernehmen
Das Problem ist folgendes!
Ich habe mein Problem auch etwas Falsch geschildert!

Kann ich einen Text an meinem Cursor einfügen, egal in welchem Textfeld er gerade ist?

Ähnlich wie diese Windows Bildschirmtastatur!


uall@ogc - Mi 21.09.05 13:36

such mal hier imforum nach

Suche in: Delphi-Forum, Delphi-Library KEYBD_EVENT

da solltest genug finden


Seraph - Mi 21.09.05 14:00
Titel: Schritt 1 hat geklappt
Danke erstmal für die Hilfe!

Ich hab zur Zeit voll den Durchhänger!

Damit du weißt, was ich gerade Programmiere:

Ich habe eine Tastatur Programmiert, die alles was ich schreibe, ins gerade Aktive bzw. Global gefokuste Textfeld schreiben soll!
Dazu müsste ich aber erstmal rausfinden, welches Fenster überhaupt zur zeit geöffnet bzw. Angewählt ist! Zum Beispiel die IEXPLORER Adressleiste!

Du bist schon lange im Geschäft! Ich glaube das du mir weiterhelfen könntest!


hallo - Mi 21.09.05 14:43

Also :

Mit
windows.GetForegroundWindow; bekommt man das Fenster das vorne ist!

Dann mit GetWindowText kann man auch noch das Fenstercaption abrufen!


Seraph - Mi 21.09.05 14:47
Titel: Missverständnis
Ich glaube wir reden ein bisschen aneinander vorbei!

Meine Frage war ja, wie ich den Text in der Adressleiste eines Fensters verändern kann, mit der Caption weiß ich doch nichts anzufangen, brauch ich daher auch nicht!


Seraph - Mi 21.09.05 15:02
Titel: Re: Missverständnis
Kennt jemand vielleicht eine WinApi, mit der ich Tasteneingaben Simulieren kann?

Wäre cool wenn mir da jemand weiterhelfen könnte!


hallo - Mi 21.09.05 15:06

Such mal nach:

Suche in: Delphi-Forum KEYBD_EVENT

Damit gehts!


Seraph - Mi 21.09.05 15:09

Ich kann nichts machen, diese Keybd Kacke funzt bei mir hinten und forne nicht!
Ich krieg für 97 statt a eine Eins! Das ist nicht normal!?


hallo - Mi 21.09.05 15:19


Delphi-Quelltext
1:
2:
3:
   
keybd_event(windows.VkKeyScan('a'),0,0,0);
keybd_event(windows.VkKeyScan('a'),0,KEYEVENTF_KEYUP,0);


so gehts!


Seraph - Do 22.09.05 07:58
Titel: Was soll bei keybd_event... passieren?
Sorry, bei mir funzt das immernoch nicht!
Drum schreibe ich ja hier! Wenn die Lösung so simpel wäre,
hätte ich mich hier garnicht erst eingeloggt!

Also ich sag dir jetzt mal, was passiert wenn ich das mache:


Delphi-Quelltext
1:
2:
3:
  
 keybd_event(windows.VkKeyScan('a'),0,0,0);
 keybd_event(windows.VkKeyScan('a'),0,KEYEVENTF_KEYUP,0);



Es passiert einfach nichts!
Was sollte denn passieren????


hallo - Do 22.09.05 13:14

Set mal deinen Focus auf ein EditFeld oder sowas ähnliches.

Als nächstes Lässt du diesen Code über einen Timer aufrufen. Der Focus muss immer noch im Editfeld sein! Nun wird ein a geschrieben!


Seraph - Do 22.09.05 13:26

ja gut! Das funzt jetzt wenigstens!

Aber jetzt habe ich wiederum ein ganz andres Problem!

Die Buchstaben sollen mit hilfe einer Virtuellen Tastatur (mein Programm) geschrieben werden!

Was glaubst du wird passieren, wenn ich mein Programm anklicke!
Sprich den Fokus vom Textfeld wegnehme?

Hab ichs mir gedacht! Das Programm macht dann nurnoch einen alten Scheiß!

Ich habe jetzt eine schlechte ersatzlösung gefunden:

Man giebt etwas über die Virtuelle Tastatur ein, diese hat ein integriertes Textfeld!

Man bestätigt dann den eingegeben Text und der wird dann nach ein paar sekunden
(Zeit um in die Adressleiste des InternetExplorers zu drücken!) in seine einzelnen Zeichen zerlegt!

Diese werden dann als Globaler Tastendruck simuliert! (Keybd_Event)

Ich finde jedenfalls so schnell keine Lösung für das Problem, das ich jetzt habe..

Grüße Seraph


retnyg - Do 22.09.05 13:32

im sourcecode von Suche in: Delphi-Forum SMILEMASTER findest du eine sendkeys unit und code um die keys an das fokusierte window zu senden.


Seraph - Do 22.09.05 13:37

Das Problem ist ja, dass das Fenster wo die Buchstaben von meiner Virtuellen Tastatur hinsollen nicht mehr Fokusiert ist, nachdem ich meine Tastatur angeklickt habe! (Logisch)

Das ist das Problem, falls es noch nicht nachvollziehbar sein sollte:

1. Arbeitsplatzadressfeld = focused;
2. Virtuelle Tastatur wird angeklickt (um etwas einzugeben);
3. Arbeitsplatzadressfeld <> focused;
4. Virtuele Tastatur = focused;

Grüße
Seraph


retnyg - Do 22.09.05 13:41

dann mach das mit nem hotkey, wie smilemaster 2005. dann ändert sich der focus nicht


Seraph - Do 22.09.05 13:47

Und wie stellst du dir das mit dem HotKey vor???
Das ich den Text in meinem Programm dann an den Cursor setze, wenn ich eine Bestimmte Taste drücke?

Du weißt doch hoffentlich, was eine Virtuelle Tastatur ist, die benutzt man, weil man keine richtige Tastatur hat!

Die brauchen Leute, die in ihrer Bewegungsfähigkeit stark eingeschränkt sind!
Oder, so wie in meinem Fall, braucht man sie, weil ich an einem Pc mit Touchscreen arbeite!


retnyg - Do 22.09.05 13:49

dann nimm nen timer der mit der GetSysFocus prozedur alle paar ms das aktive fenster in ne liste schreibt. sobald der focus dann auf deinem prog ist, schickst du den input an das zuletzt aktive fenster. wenn du den code aus SM 2005 nimmst haste vielleicht noch 10 minuten arbeit das bei dir zu implementieren.


Seraph - Do 22.09.05 13:56

(Du denkst dir jetzt bestimmt, ist der überlästig)

Der Vorschlag ist sehr gut! Man muss jedoch alles bedenken!
Das funktioniert wohl, solange nur diese zwei fenster miteinander komunizieren müssen!

Aber ich klicke mal zwischen verschiedenen Fenstern rum! Und bekomme immerwieder den Fokus auf das Feld, in dem ich gerade geschrieben habe!

Das heißt jetzt nicht das deine Idee nicht funktioniert hat!
Nur ist es auch nicht die perfekte Lösung!

Es gibt eine Virtuelle Tastatur von Windows, aber die ist für meinen Zweck zu klein und ich kann ihre position nicht beliebig bestimmen! (über Quellcode)
Darum brauch ich ne eigene, bessere!


retnyg - Do 22.09.05 16:05

user profile iconSeraph hat folgendes geschrieben:

Das funktioniert wohl, solange nur diese zwei fenster miteinander komunizieren müssen!

Aber ich klicke mal zwischen verschiedenen Fenstern rum! Und bekomme immerwieder den Fokus auf das Feld, in dem ich gerade geschrieben habe!

Das heißt jetzt nicht das deine Idee nicht funktioniert hat!
Nur ist es auch nicht die perfekte Lösung!

ich verstehe nicht ganz was du damit sagen willst :shock:
was ist jetzt das problem ? :gruebel: