ページ 11

ファンクションキーを無効にしたい

Posted: 2018年7月01日(日) 19:59
by torisan
お世話になっております。

現在、所謂音ゲを作っているのですが、ゲーム中の操作の一環として、
楽曲プレイ中にESCキーを押した時に、
プレイ中の楽曲を途中中断し選曲画面に戻る、という機能を実装しました。

機能そのものは実装出来たのですが、
隣のF1キーを押してしまい意図しない画面が表示される事が考えられる為、
F1キーを無効化したいです。

デフォルトで設定してあるファンクション機能
(F1:ゲームのプロパティ F12:リセット 等)
を無効化する事は出来ますか?
(できれば他の機能を付加したい)

スクリプトヘルプのINPUTの欄を見ると
F5~F9 以外はシステムで予約されている的な
事が書かれているので通常の方法では難しそうですが。。

何か良い手があれば知恵をお貸しください、
また無理なら「無理」との回答が頂ければと思います。
よろしくお願いします。

Re: ファンクションキーを無効にしたい

Posted: 2018年7月01日(日) 23:59
by TOMO
無理

Re: ファンクションキーを無効にしたい

Posted: 2018年7月03日(火) 21:51
by torisan
試しにスクリプトの無限ループ内で
F1キーを押してみたところ、問題なく(?)
F1キーを押した時に出るウィンドウが出てきました。
UPDATEに帰らなくても出るという事は
ウィンドウそのものに設定してある機能みたいですね。
回答ありがとうございました。

Re: ファンクションキーを無効にしたい

Posted: 2018年7月05日(木) 22:40
by seea
無効にしてプレイヤー的に大丈夫なのかどうかはさておき、
無効にすることは可能です。
「RGSSDisableF1AltEnterF12」で検索してみてください。有志の方のGitHubが見つかると思います。

他の機能を付加するのは、自力でコードを書かないといけないです。結構面倒です。

Re: ファンクションキーを無効にしたい

Posted: 2018年7月08日(日) 16:41
by torisan
検索してみた所、サンプルプロジェクトを見つけました。

それを参考に『F1AltEnterF12.dll』を『System』フォルダに入れ、
以下のスクリプトを記述した所、
無事ファンクションキー(自分の場合はF1キー)を無効化することができました!

コード: 全て選択

Win32API.new("System/F1AltEnterF12", "hook", "III", "").call(1,0,0)

(1,0,0)は左からF1、F12、ALT+ENTER 、
1で無効化、0で有効(通常通り)のようです。

非常に助かりました、ありがとうございました!

※以下DLL起動用元ソース

コード: 全て選択

#==============================================================================
# Chainsawkitten's Disable F1, Alt+Enter, F12 v1.1
#------------------------------------------------------------------------------
# Disable the use of F1, Alt+Enter and F12 by registering a hook which consumes
# keypress events as well as setting the keyboard state.
#==============================================================================

module CskDisable
  # Whether to disable F1. 0 = enable, 1 = disable.
  DISABLE_F1 = 1
 
  # Whether to disable F12. 0 = enable, 1 = disable.
  DISABLE_F12 = 1
 
  # Whether to disable Alt+Enter. 0 = enable, 1 = disable.
  DISABLE_ALT_ENTER = 1
end

Win32API.new("System/F1AltEnterF12", "hook", "III", "").call(
  CskDisable::DISABLE_F1,
  CskDisable::DISABLE_F12,
CskDisable::DISABLE_ALT_ENTER)