Čtení kláves + Zasílání kláves (VBS ?)
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á)
?
[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á)
?
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).
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).
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
?
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
?