• Anmelden

1

Montag, 20. Juli 2015, 00:50

Den F1 Optionsdialog deaktivieren im RPG Maker XP und VX Ace

:presentation: Intro


Shab hat mich heute im Chat gefragt, wie man den F1 Dialog deaktivieren kann und ich meine dazu schonmal was geschrieben zu haben und auch andere Skripter wie Reborn und Cremno haben sich damit beschäftigt, aber bis auf Cremnos DLL habe ich das alles nicht wiedergefunden. Also habe ich flugs nochmal in die WinAPI Dokumentation auf MSDN geguckt[1] und das Skript neugeschrieben.
Vielleicht können das Skript ja noch mehr hier in der Community gebrauchen - neben unserm guten Shabraxxx. (Deswegen habe ich auch gleich noch eine Version für den VX Ace ergänzt).

:wrench-screwdriver: Benutzung


Fügt das Skript über Main (im Ace unter Materials) auf einer neuen Seite ein und ruft bei Bedarf
  • Ruby Quellcode

    1
    
    RGSS_Player.disable_f1

    oder
  • Ruby Quellcode

    1
    
    RGSS_Player.enable_f1
auf, um das öffnen des Dialogs zu erlauben, oder zu verbieten.

:ruby: Quellcode


Spoiler: Quellcode für RPG Maker XP :rmxp:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#============================================================================
# ** RGSS Player Modul [Version 1.0]
#----------------------------------------------------------------------------
#  Bietet die Möglichkeit den F1 Dialog zu sperren oder wieder freizugeben.
#----------------------------------------------------------------------------
#  Autor: Playm
#  Datum: Juli 2015
#  Maker: RPG Maker XP
#  Einfache Nutzung in nicht-kommerziellen  RMXP  Projekten ist gestattet.
#  Keine kommerzielle Nutzung gestattet. Für Lizenzen an den Autor wenden.
#  Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet.
#============================================================================
module RGSS_Player
  #--------------------------------------------------------------------------
  # * Konstanten
  #--------------------------------------------------------------------------
  HWND = Win32API.new("user32", "GetForegroundWindow", "V", "L").call
  MENU = Win32API.new('user32','GetSystemMenu','ll','l').call(HWND,0)
  #--------------------------------------------------------------------------
  # * Deaktiviert F1
  #--------------------------------------------------------------------------
  def self.disable_f1
    Win32API.new('user32', 'EnableMenuItem', 'iii', 'i').call(MENU, 40003, 1)
  end
  #--------------------------------------------------------------------------
  # * Reaktiviert F1
  #--------------------------------------------------------------------------
  def self.enable_f1
    Win32API.new('user32', 'EnableMenuItem', 'iii', 'i').call(MENU, 40003, 0)
  end
end
zum Lesen den Text mit der Maus markieren


Spoiler: Quellcode für RPG Maker VX Ace :ace:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#============================================================================
# ** RGSS Player Modul [Version 1.0]
#----------------------------------------------------------------------------
#  Bietet die Möglichkeit den F1 Dialog zu sperren oder wieder freizugeben.
#----------------------------------------------------------------------------
#  Autor: Playm
#  Datum: Juli 2015
#  Maker: RPG Maker VX Ace
#  Einfache Nutzung in nicht-kommerziellen VX Ace Projekten ist gestattet.
#  Keine kommerzielle Nutzung gestattet. Für Lizenzen an den Autor wenden.
#  Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet.
#============================================================================
module RGSS_Player
  #--------------------------------------------------------------------------
  # * Konstanten
  #--------------------------------------------------------------------------
  HWND = Win32API.new("user32", "GetForegroundWindow", "V", "L").call
  MENU = Win32API.new('user32','GetSystemMenu','ll','l').call(HWND,0)
  #--------------------------------------------------------------------------
  # * Deaktiviert F1
  #--------------------------------------------------------------------------
  def self.disable_f1
    Win32API.new('user32', 'EnableMenuItem', 'iii', 'i').call(MENU, 2001, 1)
  end
  #--------------------------------------------------------------------------
  # * Reaktiviert F1
  #--------------------------------------------------------------------------
  def self.enable_f1
    Win32API.new('user32', 'EnableMenuItem', 'iii', 'i').call(MENU, 2001, 0)
  end
end
zum Lesen den Text mit der Maus markieren


:quill: Trivia


  • Das Skript deaktiviert eigentlich den Eintrag im Kontextmenü (macht mal einen Rechtsklick auf die Fensterleiste des RGSS Players), woraus dann folgt das F1 keine Wirkung mehr hat.
  • Alternativ könnte man auch die RGSS DLL mit einem Tool öffnen und die Acceleratortable[2] abändern, dass der Eintrag für den Optionsdialog auf einen anderen (oder unmöglichen) Knopf geändert wird. (Ist aber sehr wahrscheinlich unerwünscht und erfordert, dass die Spieler eure Version der RGSS DLL verwenden.)
  • Die Skripte für RMXP und VX Ace sind im Prinzip identisch, nur die ID des Menüeintrages hat sich geändert.
  • Mit der im Skript verwendeten Technik kann man nicht den Vollbildmodus deaktivieren, aber man könnte den Schließen-Button deaktivieren.



[1] EnableMenuItem function (Windows) - Dokumentation auf MSDN
[2] About Keyboard Accelerators - MSDN

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

2

Montag, 20. Juli 2015, 01:48

Hallo Playm,

vielen Dank für den wie üblich lachhaft schnellen Support. Da erwähnt man bloß beiläufig etwas im Chat, und schwuppdiwupp zaubert Rubinmagier Playmolini eine #edle Lösung aus dem Plastikhut - Chapeau!
Gruß, Shabz
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

Social Bookmarks