Game Maker: Voorbeeldscripts m.b.t. het Register

Het Register is een onderdeel van Windows waarin applicaties en Windows zelf gegevens opslaan. De beste indruk van het Register wordt verkregen door simpelweg de Registereditor van Windows te starten: dit kan via Start, Uitvoeren, regedit. Aan de linkerkant ziet u de sleutels, verdeeld over een klein aantal hoofdsleutels (de HKEY_'s, het precieze aantal is afhankelijk van het besturingssysteem). Rechts ziet u de paren die in de geselecteerde sleutel staan: deze paren bestaan uit een naam en een waarde.

Game Maker heeft beperkte functies ingebouwd waarmee in het Register kan worden gelezen en geschreven. De ondersteuning is beperkt tot de datatypes getallen opgeslagen als REG_BINARY en tekenreeksen opgeslagen als REG_SZ. Bovendien kan Game Maker alleen sleutels lezen wanneer er ook schrijfrechten beschikbaar zijn: Game Maker-spellen kunnen dus niet uit bijvoorbeeld HKEY_LOCAL_MACHINE lezen, tenzij het spel via een beheerdersaccount wordt uitgevoerd. Om deze en andere beperkingen te overkomen, kan het nodig zijn een DLL te gebruiken, zoals de door mijzelf geprogrammeerde Registry Reader DLL, die op de website van Blijbol gevonden kan worden. [Download mijn Registry Reader DLL]

De omgevingsvariabelen van Windows zijn ook in het Register opgeslagen, maar Game Maker heeft een aparte functie (get_environment_variable()) om die op te vragen. In het onderdeel Systeem van het Configuratiescherm kunnen deze bekeken en bewerkt worden.

Hieronder staan enkele gebruiksvoorbeelden van zowel het Register als omgevingsvariabelen.

Naam gebruikersaccount en computer

Met het volgende eenvoudige script is de naam van de Windows-gebruikersaccount van de speler te achterhalen:

return environment_get_variable("USERNAME");

Met een iets ingewikkelder script is de computernaam op te vragen:

var key, name;
key = reg_key_open(hkey_local_machine, "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName");
name = reg_value_read_string(key, "ComputerName");
reg_key_close(key);
return name;

De computernaam is bedoeld voor identificatie van de computer in het netwerk en kan worden ingesteld in het onderdeel Systeem van het Configuratiescherm. Dit laatste script vereist mijn Registry Reader DLL, aangezien het script uit HKEY_LOCAL_MACHINE moet lezen. Als alternatief zou ook de omgevingsvariabele COMPUTERNAME kunnen worden gelezen, maar deze bestaat niet op oudere systemen zoals Windows 98.

Systeemkleuren gebruiken

Met het volgende script kunt u systeemkleuren inlezen in Game Maker, waarna u deze kunt gebruiken in uw spel:

var result;
registry_set_root(0);
result = registry_read_string_ext("Control Panel\Colors", argument0);
if(string_count(" ", result) == 2 &&
   string_length(string_digits(result)) == string_length(result) - 2)
 return execute_string("return make_color(" +
                       string_replace_all(result, " ", ", ") +
                       ");");
return -1;

Aangezien er hier een REG_SZ uit HKEY_CURRENT_USER gelezen moet worden, kan dit zonder DLL. Indien er een fout optreedt, retourneert dit script het getal -1; indien alles goed gaat, wordt de kleurwaarde geretourneert.

Als argument moet de naam van de kleur als tekenreeks worden opgegeven. De volgende waarden zijn mogelijk: ActiveBorder, ActiveTitle, AppWorkSpace, Background, ButtonAlternateFace, ButtonDkShadow, ButtonFace, ButtonHilight, ButtonLight, ButtonShadow, ButtonText, GradientActiveTitle, GradientInactiveTitle, GrayText, Hilight, HilightText, HotTrackingColor, InactiveBorder, InactiveTitle, InactiveTitleText, InfoText, InfoWindow, Menu, MenuBar, MenuHilight, MenuText, Scrollbar, TitleText, Window, WindowFrame en WindowText.

Systeemmappen openen

Met dit laatste script kunt u de paden van systeemmappen inlezen in Game Maker:

var env;
env = environment_get_variable(argument0);
if(string_length(env) > 2)
 if(string_copy(env, 2, 2) == ":\")
  if(filename_dir(env) == env)
   return env;
registry_set_root(0);
return registry_read_string_ext("Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", argument0);

Dit script kijkt eerst tussen de omgevingsvariabelen en, als dat niet lukte, in het register om het pad van de opgegeven map te vinden. Indien zelfs dat laatste mislukt, dan wordt een lege tekenreeks geretourneerd. Indien het script wel succesvol was, wordt het pad van de gevraagde map geretourneerd.

Het script heeft een enkel argument, te weten de gevraagde map. Deze moet als tekenreeks worden opgegeven. U kunt hieruit kiezen: Administrative Tools (Menu Start, Hulpprogramma's voor Systeembeheer), AllUsersProfile, AppData (toepassingsdata), Cache (tijdelijke internetbestanden), CD (huidige map), CD Burning, Cookies, Desktop, Favorites, Fonts, History, Local AppData (lokale toepassingsdata), Local Settings, My Music, My Pictures, My Video, NetHood, Personal (mijn documenten), PrintHood, ProgramFiles, Programs (menu start, alle programma's), Recent (onlangs geopend), SendTo (rechtermuisklik op een bestand, verzenden naar), Start Menu, Startup (menu start, alle programma's, opstarten), SystemRoot, Temp of Tmp (tijdelijke map), Templates, WinDir (Windows-installatiemap), UserProfile. Merk op dat de beschikbaarheid van sommige van deze mappen afhangt van de versie van het besturingssysteem! Als de map per gebruiker verschilt, dan wordt de map van de huidige gebruiker gekozen.

0 reacties

Voeg een reactie toe