Kann man Tastaturbefehle an ein anderes Program senden ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Sperber
Beiträge: 2
Registriert: 06.12.2004 21:25
Wohnort: Oberhausen

Kann man Tastaturbefehle an ein anderes Program senden ?

Beitrag von Sperber »

Hallo zusammen,

kann ich mit PureBasic einem anderen Task / Programm z.B Word Tastaturbefehle zuschicken ?
Und wenn ja, wie ?
:)
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Siehe Beispiel SendKeys von Danilo :wink:

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

Willkommen im Forum :D
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Sperber
Beiträge: 2
Registriert: 06.12.2004 21:25
Wohnort: Oberhausen

Beitrag von Sperber »

Danke für die schnellen Antworten ihr seit ja super fix :)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

@Danilo: sorry - wie von Dir vermutet, war dies nicht absichtlich gemeint.

Werde es fürs neue Release auf jeden Fall ändern :allright:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag 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!
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

@jear: danke, werde es testen und für das Archiv ggf. noch mit einbauen.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten