• Anmelden

1

Samstag, 24. Januar 2009, 16:08

Aktion einer Taste beim Spielstart automatisch durchführen (Win32api)

Hi!

Jeder kennt sicherlich das Skript fürn Vollbild ...

Quellcode

1
2
3
4
5
6
7
  unless $keybd
  $keybd = Win32API.new 'user32.dll', 'keybd_event', ['i', 'i', 'l', 'l'], 'v'
  $keybd.call 0xA4, 0, 0, 0
  $keybd.call 13, 0, 0, 0
  $keybd.call 13, 0, 2, 0
  $keybd.call 0xA4, 0, 2, 0
  end


Das setzt man ja in Main am Anfang rein. Kann mir jmd. so einen Skriptteil coden, der nicht Alt+Enter ausführt, sondern F12 (zurück zum Titel)? Schön wäre natürlich, wenns nur einmal beim Spielstart passiert ... könnte man einfach mit einer globalen Variable/Switch steuern.

Danke & greetz

2

Samstag, 24. Januar 2009, 17:39

Folgendes über Main einfügen:

Quellcode

1
2
class Reset < Exception;end
raise Reset if !$@


EDIT: raise Reset hat denselben Effekt wie F12 drücken.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Cremno« (25. Januar 2009, 12:31)


3

Samstag, 24. Januar 2009, 18:54

Hi ... danke für die Antwort ...

In Main am Anfang einfügen, oder über Main ein neues Skript anlegen?

greetz

4

Sonntag, 25. Januar 2009, 12:33

Dürfte beides funktionieren :)

PS: Ist das wg. dem von dir angesprochenen Effekt, dass nach F12 das Spiel flüssiger läuft (was ich übrigens nicht bemerke)?

5

Sonntag, 25. Januar 2009, 12:44

Ja, genau deswegen ^^.

Und es zeigt wirkung =), danke!

Tja ... naja, flüssig ist vllt. das falsche Wort, die fps schiessen warscheinlich nicht in die Höhe oder so. Es geht mehr darum, dass der Maker kürzer zum Laden und abfragen benötigt, als beim ersten Start. Das ist auch warscheinlich erst bei wirklich vielem Zeug bemerkbar und vorteilhaft.

Ich hatte z.B. das Problem, dass ich konstantes Stocken in gewissen Abständen hatte ... was an der großen Menge an CE lag. Einmaliges F12 drücken beim start und das stocken war beseitigt. Ich hatte ja zuerst ein Code geschrieben, dass er zu Anfang einmal die Scene_Title neu aufruft, aber hatte leider nicht den selben Effekt wie F12 drücken ^^.

greetz

6

Montag, 26. Januar 2009, 13:25

Sry 4 Doppelpost

Muss dich leider enttäuschen, Cremno. Nach längerem testen ist mir doch aufgefallen, dass deine Codezeilen leider nicht den erwünschten Effekt hervorbringen. Ich hab es getestet, einmal mit Codezeilen ohne F12 und einmal ohne Codezeilen mit F12.

Beim letzteren tritt dieses Stock Phänomen nicht auf, beim ersten jedoch schon auch wenns im Vergleich zu vorher (hab ja Technik neu gemacht und optimiert) jetzt nicht soo schlimm ist, aber mich stört es.

Also ... meine Bitte gilt immer noch ... danke!

greetz

7

Montag, 26. Januar 2009, 18:48

Hm.. ich denke, ich gucke mir diesen Effekt mal genauer an ^^

Und um deiner Bitte nachzukommen - hier das (virtuelle) Drücken der F12-Taste:

Ruby Quellcode

1
2
3
4
5
6
if !$f12
  $f12 = Win32API.new('user32', 'keybd_event', 'L' * 4, nil)
  $f12.call(0x7B, 0, 0, 0)
  $f12.call(0x7B, 0, 2, 0)
  $f12 = true
end

Auf dieselbe Art wie das "Vollbildskript" einfügen.

EDIT: Ich muss dich leider enttäuschen: Das funktioniert das nicht. Wieso weiß ich auch nicht, aber ich guck mir das nochmal an, denn 0x7B bzw. 123 ist doch der richtige Virtual-Key Code?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Cremno« (26. Januar 2009, 19:24)


8

Montag, 26. Januar 2009, 19:24

Ich weiß nicht, ob dir das weiterhilft aber laut der Liste benutzt der SKriptteil vom Vollbild nicht den Code für ALT key sondern für LEFT MENU (was dann wohl linke ALT Taste ist). Wobei ich dann net verstehen, was dann ALT sein soll.

Naja ... hoffe, du packst das ^^.

greetz

9

Montag, 26. Januar 2009, 20:02

ich hab versucht ne lösung zu finden, und jetzt tut mein RGSS Player nicht mehr.

Ruby Quellcode

1
2
neustart = Win32API.new('user32','keybd_event','iiii','i')
neustart.call(0x7B,0,0,0)


ich weiß nicht ob die 'i'-s richtig sind aber...
also beim ersten mal hats geklappt, dannach war das Projekt kaputt :D

cow
Spoiler: Sachen
zum Lesen den Text mit der Maus markieren

10

Montag, 26. Januar 2009, 20:20

So.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
if !$f12
  Thread.start{
    $f12 = Win32API.new('user32', 'keybd_event', 'L' * 4, nil)
    $f12.call(0x7B, 0xDA, 0, 0)
    sleep(0.01)
    $f12.call(0x7B, 0xDA, 2, 0)
    $f12 = true
  }
end
Es kann sein, dass der Start ein wenig länger dauert, aber es funktioniert!

@Cow: Das lässt die F12-Taste gedrückt, jedoch fehlt das Loslassen (drittes Argument ist dann 2) ;)

11

Montag, 26. Januar 2009, 20:53

Hi, danke schonmal für die Mühe!

Ich muss dich leider wieder enttäuschen ... es bringt nicht den erwünschten erfolg. Ich hab mal den Vkey für F1 statt F12 eingesetzt und das funzt auch, sprich es kommt dieses optionsfenster beim start.

Aber F12 will irgendwie net. Die Startzeit müsste logischerweise etwas länger sein, da er ja noma das Spiel startet ... es bleibt aber genau so lang/kurz. Und dieses stocken ist weiterhin da, nur durch manuelles drücken der F12 Taste ist es weg ... ohne witz ^^.

Ich kann das ganze übrigens genaustens überwachen indem ich auf die FPS schaue.

Ca. jede 20 sekunde geht die FPS ganz kurz von 40 auf 37/38 runter und dann wieder hoch ... und genau das ist dieses stocken, hier bleibt es seeehr kurze zeit eben stehen.
Durch F12 drücken verschwindet das ... jedoch muss ich es, trotz deines Skriptes, manuell machen.

:-\

greetz

Social Bookmarks