Chaos Project

RPG Maker => General Discussion => Topic started by: KK20 on January 16, 2014, 04:03:24 pm

Title: Disabling ALT+Enter Discussion
Post by: KK20 on January 16, 2014, 04:03:24 pm
Current Conclusion:

In Main, right under the line that says begin, paste this:

 # Disable ALT+Enter
 reghotkey = Win32API.new('user32', 'RegisterHotKey', 'LIII', 'I')
 reghotkey.call(0, 1, 1, 0x0D)

If you are using the script that puts the game into fullscreen by simulating an ALT+Enter keypress, make sure that is placed before this.




People have been asking for ways to disable the player's ability to press ALT+Enter to go into (or get out of) fullscreen-mode for years now. I am unsure if there really is a "fix-all" for this, but I have taken action to see if perhaps there is.

I found a DLL made by Cremno that can disable ALT+Enter.
Spoiler: ShowHide

Get the DLL here: http://www.mediafire.com/download/ffr36fml1cua73r/NoF12.dll
Put the file into a blank test project.

Replace Main with this:

begin
 # Disable ALT+Enter
 noaltenter = Win32API.new('NoF12', 'NoAltEnter', 'L', nil)
 noaltenter.call(1)
 # Prepare for transition
 Graphics.freeze
 # Make scene object (title screen)
 $scene = Scene_Title.new
 # Call main method as long as $scene is effective
 while $scene != nil
   $scene.main
 end
 # Fade out
 Graphics.transition(20)
rescue Errno::ENOENT
 # Supplement Errno::ENOENT exception
 # If unable to open file, display message and end
 filename = $!.message.sub("No such file or directory - ", "")
 print("Unable to find file #{filename}.")
end

Now testplay and see if you can get into fullscreen.





Coming from this post (http://forum.chaos-project.com/index.php/topic,7814.msg181486.html#msg181486), I believed to have found a solution.
My Discovery and Trial Tests: ShowHide

You can copy this script and replace Main with it. The change is only the first few lines. Try this out in a new project.

begin
 # Disable ALT+Enter
 reghotkey = Win32API.new('user32', 'RegisterHotKey', 'LIII', 'I')
 result = reghotkey.call(0, 1, 0x4001, 0x0D)
 if result != 0 then print 'RegisterHotKey successfully completed' end
 # Prepare for transition
 Graphics.freeze
 # Make scene object (title screen)
 $scene = Scene_Title.new
 # Call main method as long as $scene is effective
 while $scene != nil
   $scene.main
 end
 # Fade out
 Graphics.transition(20)
rescue Errno::ENOENT
 # Supplement Errno::ENOENT exception
 # If unable to open file, display message and end
 filename = $!.message.sub("No such file or directory - ", "")
 print("Unable to find file #{filename}.")
end

If the method was successful, you should have a message window pop-up to confirm that. Try using ALT+Enter and see if it does anything. If you cannot toggle between fullscreen and windowed mode, insert this little snippet in just above Main:

class Scene_Map
 alias check_for_alt_enter update
 def update
   if Input.trigger?(Input::ALT) && Input.trigger?(Input::C)
     $game_system.se_play($data_system.decision_se)
   end
   check_for_alt_enter
 end
end

Try pressing ALT+Enter and ALT+C (or whatever is your confirm button). If you pressed these buttons at the same time, you should hear the beep for ALT+C but not for ALT+Enter.

Now try running another game with this one still open. Can you ALT+Enter into fullscreen? I couldn't, not until I closed this game's window first.





However, LiTTleDRAgo reported that this method did not work for him. To help with this investigation, I would like you, the users, to help me out. Please try the two methods above and report whether or not ALT+Enter was disabled. Also, please provide your OS and keyboard model. For me, I have tested this only on a NV59 Gateway laptop with the built-in keyboard running on Windows 7.
Title: Re: Disabling ALT+Enter Discussion
Post by: ForeverZer0 on January 16, 2014, 04:19:36 pm
Worked here. For some reason, using UnegisterHotKey using Win32API didn't seem to work for me.

Dell XPS L502 (Built-in keyboard)(BTW, I don't think the keyboard has anything to do with this not working...)
Windows 7 Ultimate x64
Title: Re: Disabling ALT+Enter Discussion
Post by: KK20 on January 16, 2014, 04:34:35 pm
Quote from: ForeverZer0 on January 16, 2014, 04:19:36 pm
For some reason, using UnegisterHotKey using Win32API didn't seem to work for me.

How and where did you use it? I did something stupid like

module Thing
  def self.unregister
    removehotkey = Win32API.new('user32', 'UnregisterHotKey', 'LI', 'I')
    removehotkey.call(0, 1)
  end
end

And had an event use a script call. Talking to the event allowed me to use ALT+Enter again.

Also, I'm not sure if putting the handle to the window is important or not. I still got the same results.

Quote
(BTW, I don't think the keyboard has anything to do with this not working...)

Yeah, I thought that too. Oh well, doesn't hurt, right? :P
Title: Re: Disabling ALT+Enter Discussion
Post by: Blizzard on January 16, 2014, 04:40:41 pm
*scratches ass*

The NoF12.dll references SetWindowsHookExA(), UnhookWindowsEx() and CallNextHookEx() (all found in user32.dll). Why don't you just take a look at their API reference and what they can do?

EDIT: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx

"WH_KEYBOARD: Installs a hook procedure that monitors keystroke messages. For more information, see the KeyboardProc hook procedure."
"WH_KEYBOARD_LL: Installs a hook procedure that monitors low-level keyboard input events. For more information, see the LowLevelKeyboardProc hook procedure."

I think this might be a much better lead than RegisterHotKey().

EDIT: Even with some instructions, lol! http://stackoverflow.com/a/2562158
Title: Re: Disabling ALT+Enter Discussion
Post by: KK20 on January 16, 2014, 05:30:33 pm
Been reading this over. I'm not entirely sure what to put in the parameters though. I'll just keep playing with it. Nice find! (as expected :roll:)

EDIT:

After looking into it more, it seems there's more to it than just those three calls, and I don't think you can do it in Ruby. Someone can prove me wrong though; I'm still fairly new into understanding these API calls.

I could still use some more feedback regarding the first post, especially you LiTTleDRAgo since you are, at this moment, the only odd one out.
Title: Re: Disabling ALT+Enter Discussion
Post by: LiTTleDRAgo on January 16, 2014, 11:47:57 pm
eeeh~ I'm the odd one?
currently I'm using notebook e-machines D725 running on Windows XP Professional SP3 version 2002, built-in keyboard.
I tested your method and still can change the game to fullscreen with Alt + Enter / Alt Gr + Enter.

if I can say, the closest one to prevent fullscreen without NoF12.dll is this script: >>Link (http://forums.rpgmakerweb.com/index.php?/topic/14081-fullscreen/)<<
although it only prevent Left Alt + Enter (Alt Gr + Enter still switch the game to fullscreen)


Title: Re: Disabling ALT+Enter Discussion
Post by: KK20 on January 17, 2014, 12:48:16 am
Windows XP huh? It sure does mention that a lot:
Quote
MOD_NOREPEAT
0x4000

Changes the hotkey behavior so that the keyboard auto-repeat does not yield multiple hotkey notifications.
Windows Vista and Windows XP/2000:  This flag is not supported.

Quote
Windows Server 2003, Windows XP, and Windows 2000:  If a hot key already exists with the same hWnd and id parameters, it is replaced by the new hot key.

When calling RegisterHotKey, you are returned zero, correct?
I wish I still had a Windows XP computer to test this out.
Also, I know you didn't say it explicitly, but from the way you wrote, it sounded like NoF12 works for you.

And I dunno about that script. I plugged it into an empty VXA project (Disable_VX_Fullscreen = true) and I was still able to use the left alt just fine. Did as he suggested to G_G about changing the line to

release_alt if Disable_VX_Fullscreen

and, if I pressed the two keys at the same time, was successful.
Title: Re: Disabling ALT+Enter Discussion
Post by: LiTTleDRAgo on January 17, 2014, 04:46:20 am
yeah, NoF12.dll is worked, but RegisterHotkey didn't (returns 0)

about fullscreen++, I noticed that too, but it seems that Zeus81 used keyboard that different from our standard.
Title: Re: Disabling ALT+Enter Discussion
Post by: KK20 on January 17, 2014, 01:07:33 pm
So Zeus's fix is out of the question.

Have you tried playing with the RegisterHotKey a bit? This part
Quote
MOD_NOREPEAT
0x4000

Windows Vista and Windows XP/2000:  This flag is not supported.

has been bothering me a bit. So, what if you were to remove it?

result = reghotkey.call(0, 1, 0x0001, 0x0D)
Title: Re: Disabling ALT+Enter Discussion
Post by: LiTTleDRAgo on January 17, 2014, 07:54:43 pm
@^ it works

result: ShowHide
Alt + Enter = didn't do anything
Alt Gr + Enter = didn't do anything
Alt + Alt Gr + Enter = didn't do anything

Alt + F4 = quit
Alt Gr + F4 = quit

Input.trigger?(Input::ALT) = works
Input.repeat?(Input::ALT) = works
Input.press?(Input::ALT) = works


It seems that only disable Alt + Enter, everything aside that is work normally
Opening another project without closing the first also make that project unable to use Alt + Enter
Title: Re: Disabling ALT+Enter Discussion
Post by: KK20 on January 17, 2014, 08:07:19 pm
:D :D :D :D :D

I think we just found our disable ALT + Enter. I used the same line in my game and got the same results despite using Windows 7.
If you want to disable ALT+F4, that's
reghotkey.call(0, 1, 1, 0x73)

where 0x73 is the code for F4. Of course, same rules apply: as long as the game is open, it disables ALT+F4 on everything else.