Seite 1 von 1
Kann man Tastaturbefehle an ein anderes Program senden ?
Verfasst: 06.12.2004 21:30
von Sperber
Hallo zusammen,
kann ich mit PureBasic einem anderen Task / Programm z.B Word Tastaturbefehle zuschicken ?
Und wenn ja, wie ?

Verfasst: 06.12.2004 21:48
von Franky
Hi, man müsste die messageverarbeitung von z.B. kennen, aber allgemein kann man folgendes sagen:
1.) Mittels FindWindow_(0,"Word") kann man die adresse des Fensters rausfinden ("Word" muss der Text der Fensterzeile sein)
2.) Tastaturbefehle Sendet man via #wm_keydown mit Sendmessage_(, der wparam ist dann jeweils die id der taste.
3.) Sendet man die tastaturbefehle an ein fenster und es passiert nix, kann es auch sein, dass die tastaturabfrage für ein gadget bzw in der api eine windowex/childwindow.
Teste mal ersteres und zweiteres, wenn das nicht geht, sag bescheid, dann schreib ich dir mal eine callbackfunktion, mit der kannst du dir dann die Klassennamen auslesen und, ich denke, man wird das "Dokumentgadget", wenn wir´s mal so nennen, da müsste man dann die tastaturbefehle hinsenden
Verfasst: 06.12.2004 22:30
von Andre
Siehe Beispiel
SendKeys von Danilo
Und noch einige andere im CodeArchiv auf
www.PureArea.net
Willkommen im Forum

Verfasst: 06.12.2004 23:22
von Sperber
Danke für die schnellen Antworten ihr seit ja super fix

Verfasst: 07.12.2004 08:29
von Danilo
Andre hat geschrieben:Siehe Beispiel
SendKeys von Danilo

ARGHHH!
Ich dachte eig. ich hatte es Dir schonmal gesagt: Diese Prozedur
ist *nicht* von mir, sondern von "PB" - das ist Paul Bowley (Bowlay?)
aus dem engl. Forum.
Ich hatte es nur im DE-Forum gepostet:
SendKeys
...und auch dazugeschrieben das es von "PB" ist.
Ich weiß, Du meinst es wohl nicht schlecht, und verwechselst
das nur immer wieder. Genau durch sowas kann aber so ein
Zeug wie "Codeklau-Gerüchte" entstehen.
Ich bitte Dich also darum das "Author: Danilo" und "; Posted
07 April 2003 by Danilo on german forum" zu entfernen, so
daß keine Mißverständnisse diesbezüglich entstehen.
"Author: PB (Paul Bowley)" reicht aus. Mußt nur nochmal
genau checken wie sein Nachname geschrieben wird - aber
ich glaube "Bowley" dürfte richtig sein.
Verfasst: 07.12.2004 14:31
von Andre
@Danilo: sorry - wie von Dir vermutet, war dies nicht absichtlich gemeint.
Werde es fürs neue Release auf jeden Fall ändern

Verfasst: 07.12.2004 14:49
von jear
Darf man zu Pauls Code etwas beitragen ...
Code: Alles auswählen
; This block gives the target window the focus before typing.
thread1=GetWindowThreadProcessId_(GetForegroundWindow_(),0)
thread2=GetWindowThreadProcessId_(handle,0)
If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf
If IsZoomed_(handle) = #False : ShowWindow_(handle,#SW_MAXIMIZE) : EndIf
SetForegroundWindow_(handle) ; Target window now has the focus for typing.
Sleep_(250) ; 1/4 second pause before typing to prevent fast CPU problems.
Ohne das :
If IsZoomed_(handle) = #False : ShowWindow_(handle,#SW_MAXIMIZE) : EndIf
gehen die gesendeten Zeichen gern ins Leere.
Seit ich das eingebaut habe, klappt es auch dann, wenn das angesprochene Fenster minimiert ist!
Verfasst: 07.12.2004 14:51
von Andre
@jear: danke, werde es testen und für das Archiv ggf. noch mit einbauen.