reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Čtení kláves + Zasílání kláves (VBS ?)

petrofff (30)|25.2.2010 08:59
Jednoduchý vbs skript, který zašle aplikaci sekvenci kláves:
[code]WshShell.AppActivate("opWindow")
WScript.Sleep 100
WshShell.SendKeys "^w"
WScript.Sleep 100
WshShell.SendKeys " "
WScript.Sleep 100
' [zde bude smyčka]
WshShell.SendKeys "{ENTER}"
WScript.Sleep 100
WshShell.SendKeys "+{DOWN}"
WScript.Sleep 100
WshShell.SendKeys "{ENTER}"
WScript.Sleep 100[/code]Potřeboval bych ho upravit, aby se nemusel opakovaně (mnohokrát) spouštět, ale běžel v cyklu; ten musí v jistém místě obsahovat smyčku, která:
- přečte stisknutou klávesu a pošle ji (pomocí SendKeys) aplikaci
- předtím ji testuje na: konec smyčky / konec programu
VBS dle mého číst klávesy neumí - pokud neumí volat nějaký systém.modul tak zbývá:
- buď spustit nějaký kód v souboru, který vrátí klávesu v exitcode
- nebo to celé udělat v jiném jazyce, který zvládá číst i posílat klávesy (a SW byl pro mě dostupný)
- anebo se mýlím a takto to fungovat nebude (problém vyplývající z toho, že fokus má aplikace Opera, která zachytává klávesy a dál je neposílá)
?
Dojigiri (1629)|25.2.2010 10:00
Myslím si, že tak jednoduchý to nebude (v základu pokud se nepletu stisky kláves dostává pouze aplikace, která je v tu chvíli aktivní - resp. aktivní okno dostává zprávy WM_KEY... atd.). Pokud chceš odchytávat všechny stisky kláves (jako např. keylogery) není to úplně triviální, je na to potřeba udělat global hook (příklad zde: http://www.daniweb.com/code/snippet217096.html).

VBS neumím, tak nevím jestli to v něm půjde, ale možná by se dalo vcelku dobře použít AutoIt (http://www.autoitscript.com/autoit3/index.shtml).
petrofff (30)|25.2.2010 17:46
Začínal jsem si myslet, že VBS taky neumím (odesílání kláves nedělá to, co by mělo)
Nakonec jsem udělal prostý test => 20x odeslání dvojice příkazů:[code]WshShell.SendKeys "w"
WScript.Sleep 100[/code]Výsledek:
wwwwwwww (pouze 8w)
Pokud prodloužím čas Sleep na 200ms, objeví se pouze 4w
Jako by WSH nenechal doběhnout všechny příkazy, ale po vteřině ukončil proces
?