VisualBasic [VBS] Tastendruck + WshShell.AppActivate wird nicht erkannt...

Nepumax

Newbie
Dabei seit
Nov. 2011
Beiträge
5
Hallo,

Bei dem Versuch, einen Tastendruck nach einer bestimmten Zeit zu simulieren, bin ich auf mehrere Quellen gestoßen, die sich im Code alle leicht unterscheiden, mit dem Ergebnis, dass bei mir gar nichts funktioniert.

Ich starte ein Spiel über eine BATCH-Datei, damit ein paar überflüssige Programme geschlossen und doppelt angelegte Screenshots gelöscht werden.

WoT.bat
Code:
@ECHO OFF
KILL /F CCC.exe
KILL /F MOM.exe
DEL "D:\Spiele\World of Tanks\*.png"
START "WoT" "D:\Spiele\World of Tanks\WorldofTanks.exe"
[COLOR="SlateGray"]START "ENTER" "D:\Spiele\World of Tanks\WoT.vbs"[/COLOR]
Da ich aber den Tastendruck nur mit VBScript realisieren kann, musste ich die letzte Zeile, meiner Recherche zufolge, hinzufügen.

Das Problem liegt nun in meiner VBS-Datei, die so aussieht:

WoT.vbs
Code:
dim WshShell
set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 500
WshShell.AppActivate "W.o.T. Client"
WScript.Sleep 15000
WshShell.SendKeys "~"
WScript.Sleep 2500
Als ich nach dem Ausführen der Datei mal aus Versehen zum Editor gewechselt bin, konnte ich festellen, dass der zwar Tastendruck simuliert wird, jedoch nicht bei dem Fenster des Spiels.

Ich habe bereits ausprobiert:

Code:
WshShell.AppActivate "WorldofTanks.exe"
WshShell.AppActivate "D:\Spiele\World of Tanks\WorldofTanks.exe"
WshShell.AppActivate "WoT"
Wo liegt der Fehler?
 

Grantig

Captain
Dabei seit
Okt. 2008
Beiträge
3.543
Der Fehler liegt wohl darin, dass die AppActivate Methode keinen Pfad erwartet, sondern entweder ne ProcessID oder einen Fenstertitel.
Du musst also den Fenstertitel von WoT rausfinden, was relativ einfach gehen sollte.
Einfach im Taskmanager unter Anwendungen schauen, was da steht.

Für ein neues Editor Fenster wäre das z.B. Unbenannt - Editor
Dein Aufruf würde dann dementsprechen so aussehen: WshShell.AppActivate "Unbenannt - Editor"

Evtl. kannst du auch mal WshShell.SendKeys "~" durch WshShell.SendKeys "{ENTER}" ersetzen, wobei ich nicht glaube, dass das nen Unterschied macht. Letzteres sieht nur schöner aus finde ich^^


Kann natürlich auch gut sein, dass WoT ein bisschen direkter auf die Hardware zugreift (z.B. per DirectInput) und deine SendKeys Kommandos einfach ignoriert.
Dann hast du wohl Pech gehabt, denn ob du dann mit ein bisschen VBS überhaupt was ausrichten kannst wage ich zu bezweifeln.
 

Nepumax

Newbie
Ersteller dieses Themas
Dabei seit
Nov. 2011
Beiträge
5
Habe das mit dem "{ENTER}" bereits ausprobiert, weil ich das auch irgendwie schöner fand. :p

Jedoch bleibt es bei meinem Problem, denn auch wenn ich den Fenstertitel eingebe, passiert nichts. Habe den ganzen Code mal auf PID erweitert und auch dabei passiert nichts.

Code:
dim WshShell, Pid
strComputer = "."
Set objWMIService = GetObject _
    ("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'WorldOfTanks.exe'")
For Each objProcess in colProcessList
    PID = objProcess.ProcessId
Next
set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep 3000
WshShell.AppActivate PID
WScript.Sleep 15000
WshShell.SendKeys "{ENTER}", True
WScript.Sleep 2500
Also trifft wohl letzteres zu, dass WoT direkt auf die Hardware zugreift und ich keine Chance habe, mit VB-Script einzugreifen. Schade.

Trotzdem: Vielen Dank! :)
 

Luckyman7471

Cadet 1st Year
Dabei seit
Apr. 2013
Beiträge
10
Hallo,

ich würde gerne eine vbs datei schreiben die automatisch sobald ich links klick drücke ein bisschen zeitversetzt rechts klick drückt.
Ich weiß leider nicht wie der Befehl heißt bei dem die vbs datei weitermacht sobalt eine taste gedrückt wird?
 
Top