Yesterday I made a GameMaker: Studio extension that provides a bunch of utility functions:
- Allows to minimize/maximize/restore the window on demand.
- Allows to disable/enable minimize button, maximize button, close button, and window movement.
- Allows to override behavior for when minimize/maximize/close buttons are clicked.
It is available for free via itch.io; Some examples of uses follow.
Minimize the game window
If you've enabled "borderless window" option in Global Game Settings, you might want a custom "minimize" button, but the built-in functions can't offer you one. This extension does, though:
window_command_run(window_command_minimize);
Which is what you would run when the button is clicked and the game should be minimized.
Disable the close-button
This is made easy enough because there's a function just for this:
Create Event:
window_command_set_active(window_command_close, false);
To re-enable the close-button, you would call the same function but with true as second argument.
Note that while this will disable closing the game via the button or Alt+F4, tools like Task Manager would still work, so you should only use this to hint that current operation should not be interrupted.
Show confirmation dialog on closing the game
Create Event:
window_command_hook(window_command_close);
Step Event:
if (window_command_check(window_command_close)) { if (show_question("Are you sure you want to exit?")) game_end(); }
window_command_hook overrides the given command (in this case, close-action), instead changing an internal variable. Then, when window_command_check is called, the variable' state is returned and it is reset, meaning that the function will return true once after the act.
So in this case, when the game detects that a close-button was clicked, it displays a yes/no dialog and closes the game if the user clicks "yes".
Enter fullscreen mode on "maximize"
Oddly enough, this is what the extension was originally made for - utilizing the "maximize" button in an otherwise-not-resizeable application window to allow the user to enter full screen mode in a click.
Create Event:
window_command_set_active(window_command_maximize, true); window_command_hook(window_command_maximize);
Step Event:
if (window_command_check(window_command_maximize)) { window_set_fullscreen(true); }
The logic is much akin to what was shown before - the button is enabled and hooked. Then, when it is clicked, the game enters the fullscreen mode.
In conclusion
This is honestly a pretty simple extension that only does a few things, but does them well.
How do I make the window hide?
Using window_set_visible_w
I mean I have to set “window set_visible(false)” right?
window_set_visible_w(false)
, yesDon’t work :(
Hard to tell, try downloading “window_commands demo (for GMS2.3 and GM2022+).yyz” – that’s a demo that has a button for visibility too
Man, When I import the yyz I get an error
You could instead unzip the YYZ file, but you have to be more specific than “it doesn’t work” – this is technical support, not a divination of what might not be working.
Does the extension work for all versions of Windows?
Tested on Windows 10 and Windows 11, but I would expect it to work on Windows 7.
Check your Output for load errors, see if other functions work, and make sure that you are importing the correct extension version (e.g. the YYMPS for GMS2.3 / GM2022+)
And if you are trying to hide your window right on game start, I don’t think you can do that as there’s no game window until the first Draw event.
Is it possable to give window_command a window handle to change the window it is targeting with its functions?
In context of window_frame extension, no – the reason it has re-implementations of Window Commands functions is that the “frame” window isn’t even in the same process.
window_command_set_active(window_command_close, false) disables the window buttons but doesn’t disable alt+f4 for me. what do I do?
Seems to work fine in the demo? Alt+F4 does send the same signal as the close button.
Hi!
Great functions, however, I can’t really get them to work somehow…
I wrote this:
if current_time-last_click < 1000
{ window_command_run(window_command_minimize) ; }
last_click = current_time ;
..to make the window minimize on double click. The debugger shows that the function is read, but the game window doesn't minimize :S … Any clues to what I'm doing wrong?
Thanks!
P.S.
I’m on Windows 10, using Gamemaker Studio 2, if that help.
Also the game seems to compile correctly without errors.
Maybe I’m just using the function wrong?
You can take a look at the demo project that comes with the extension – it has a test button for minimizing the window.
Thanks for the tip!
I did some debugging and got the same problems in the demo though … What I realised was that the function didn’t work when assigning it to the pressing of a mouse button,
however when using keyboard-buttons – as in the demo – it worked as expected.
I figured maybe Windows somehow forces the window to stay up when pressing it (?) so I tried to use a mouse_button_release instead, and it worked!
I hope I made myself clear.
Thanks again for great functions though!
Yo! Many thanks to your debugging. I was havin’ the same problem. Thanks again :)
Hello you would have an extension with a GM8 function for GMS
“Let the game window always stay on top”? tanks.
Added a function for that to this extension.
Great to have when you want to do http requests before the game end, when the player click the close button.