3k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von abwasch Einsteiger_in (19 Punkte)
Hallo Forum,
ich habe für die VBA eine kleine Frage.
Möchte mir für ein (altes) Spiel meiner Tochter gerne ein Skript schreiben, das beim Programmstart über die .exe Verknpfung die Bildschirmauflösung reduziert und die Farbtiefe auf 16 bit heruntersetztt (und nach Beenden des Spiels wieder auf die ursprüngliche Bildschirmauflösung / Farbtiefe zurückspringt).
Das "manuelle" Umstellen der Werte vor dem Spiel möchte ich vermeiden, eine Einstellungsoption IM Spiel existiert nicht.
Leider bin ich nicht so der vba Profi. Ich habe mir folgendes bereits aus den Foren und Netz zusammengesucht. dieses Skript arbeitet auch schon einigermaßen (Auflösung wird bereits heruntergesetzt, Spiel wird gestartet), mir fehlt aber der Befehl/Code um auch die Farbtiefe auf 16 bit herunterzusetzten.
Skriptstart: -->
set WshShell = CreateObject("WScript.Shell")
WshShell.run "control %windir%\system32\desk.cpl,,3"
WScript.Sleep 500
WshShell.sendkeys "(%l)"
WshShell.sendkeys "{HOME}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}"
WshShell.sendkeys "~"
WScript.Sleep 500
WshShell.sendkeys "j"
WScript.Sleep 500
WshShell.run """\Program Files (x86)\LEGO Media\Constructive\LEGO LOCO\Exe\Loco.exe"""
<--Skriptende

Kann mir vielleicht ein Experte hier die richtige(n), noch fehlende(n) Zeile(n) ergänzen? Mir ist bewusst, das dies ein sehr "einfaches" Skript ist und es sicherlich elegantere Lösungen gibt, aber weniger ist manchmal mehr...;o)
Gewünschte Werte nach der Skriptausführung:
Auflösung:1280x1024
Farbtiefe: 16bit
System: OS WIN7 Home Premium

Danke im Vorraus für Eure Unterstützung.
Gruß
abwasch

4 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Bischen spät, aber:

für dei Farbtiefe einfügen:
WshShell.sendkeys " {UP}"

Und zwar vor der Zeile:
WshShell.sendkeys "~"

Das erste Zeichen ist ein Tabstop, kein Leerzeichen.
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
Der Weg mit Sendkeys quasi die einstellung über die Dialogfelder zu machen funktioniert - möchte aber noch eine Alternative hier zeigen:

www.realtimesoft.com/de/ultramon/

du kannst mit einer VBS-Datei dann z.B. einen 2. monitor aktivieren, auflösung und / oder farbtiefe auslesen (und welche monitore aktiv sind)
das spiel starten und beim beenden die alten einstellungen wieder speichern...
Das geht sogar so weit das man die Icon-positionen speichern lassen kann wenn durch das ändern der Anzeige die Desktopicons immer durcheinander kommen.

Es sind einige beispiel scripte in verschiedenen Sprachen beigelegt (z.B.VBS) - die Software ist aber nicht kostenfrei, wobei in der 2.5er version die VBS-Script auch in der testversion ohne einschränkung nach ablauf der testphase noch funktionieren. bei der neuen habe ich das noch nicht getestet.
0 Punkte
Beantwortet von abwasch Einsteiger_in (19 Punkte)
Hallo kicia,
ich habe den Eintrag wie von Dir beschrieben in das script eingefügt (copy -paste).
Leider passiert danach mal sogar nichts anderes als vorher.
Bist Du Dir sicher, dass dies der passende Code ist, um die FARBTIEFE auf 16 bit zu ändern?
Oder habe ich beim kopieren - einfügen etwas falsch gemacht?
Mit dem Zusatz von Dir "erstes Zeichen ist ein Tabstop" kann ich nicht wirklich etwas anfangen....

Wäre toll, wenn Du nochmal in DIch gehst.
Danke für die Mühe.
Gruß
Abwasch
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Ich hätte sagen sollen ich habs nur auf XP getestet. Ich dachte auf Win7 wärs sicher das selbe. Möglicherweise ist es dort anders.

Mit "erstes Zeichen ist ein Tabstop" meine ich, daß in der Zeile von mir:
WshShell.sendkeys " {UP}"
Innerhalb der Anführungsstriche das erste Zeichen ein Tabstop-zeichen ist, und kein Leerzeichen, wie man denken könnte.
Ich hätte es so schreiben sollen:
WshShell.sendkeys "{TAB}{UP}"

Aber Probiers mal mit :
WshShell.sendkeys "(%f){UP}"
(Das bedeutet: Alt-f = auf Farbqualität wechseln, Pfeil-nach-oben Taste = auf 16 bit wechseln, Wieder in XP jedenfalls)

Ich hab grad kein Win7 hier.

Um selbst die richtigen Tasten herauszubekommen, kannst Du testweise alles ab einschliesslich
WshShell.sendkeys "~"
löschen. Dann ist das Fenster der Anzeigeeigenschaften geöffnet. Probiere, welche Tasten Du wie oft drücken musst, um die gewünschte Einstellung zu erreichen. Notiere die Tastendrücke.
ZB:
- wie oft Du die TAB Taste drücken musst, um auf das Feld der Farbtiefe zu kommen
- wie oft Du Pfeil-hoch oder Pfeil-runter drücken musst, um auf 16 bit zu kommen.

Die notierten Tastendrücke schreibst Du dann in eine Zeile mit WshShell.sendkeys, wie Du es schon kennst.

Du brauchst vermutlich Tasten wie:
TAB = nächstes Feld auswählen
Shift -TAB = voriges Feld auswählen

Tasten mit ALT werden mit Prozentzeichen notiert, zB. ALT-F = %F.
Tasten mit SHIFT werden mit Pluszeichen notiert, zB. SHIFT-TAB = +{TAB}.

Du kannst Felder direkt "anspringen", indem Du gleichzeitig ALT und den im Feld-titel unterstrichenen Buchstaben drückst. (Der Buchstabe ist vermutlich erst unterstrichen, sobald Du ALT drückst)

siehe auch:
Windows Script Host - SendKeys Method
...