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 :wink:

Und noch einige andere im CodeArchiv auf www.PureArea.net

Willkommen im Forum :D

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 :wink:
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 :allright:

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.