Koodivinkin tarkoitus on tutustuttaa pintapuolisesti AutoHotkey skriptikieleen, joka on Windowsille toteutettu skriptikieli jolla pystyy lähinnä tekemään helposti skriptejä WinApia hyväksikäyttäen. Lisätietoa: http://en.wikipedia.org/wiki/Autohotkey
Halusin omaan kannettavaani pikanäppäimeen toiminnon joka vaihtaisi virransäästötilojen välillä suoraan ilman erillisiä toimenpiteitä. Aikaisemman AHK (AutoHotkey) kokemuksen perusteella päädyin käyttämään kyseistä kieltä, ja pienten säätöjen kautta se onnistuikin. Toiminta perustuu käytännössä Vistan powercfg (voi olla myös XP:ssä) työkalun käyttöön.
Käyttäjän tulee ensin määritellä koodiin nykyiset virransäästötilat, ja niille nimet. Näiden hakeminen onnistuu "powercfg -l" käskyllä (josta ne pitää kirjoittaa ohjelmakoodin sekaan). Sen jälkeen skripti on käyttövalmis, tiedoston ajettaessa ohjelma vaihtaa virransäästötilaa, ja ilmoittaa siitä käyttäjälle kahden sekunnin popupilla (balloon popup).
Ajo vaatii AutoHotkey tulkin, jonka saa ilmaiseksi täältä: http://www.autohotkey.com/
AHK-ympäristö sisältää myös jonkinlaisen kääntäjän, jolla ohjelman saa helposti .exe binäärimuotoon.
; Yleisiä asetuksia, älä kysy SetBatchLines -1 AutoTrim Off ; Guidit, saa listattua käskyllä powercfg -l stateGuid1 = 381b4222-f694-41f0-9685-ff5bb260df2e stateGuid2 = 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c stateGuid3 = a1841308-3541-4fab-bc81-f71556f20b4a ; Valittavien tilojen lukumäärä states = 3 ; Nimet tiloille stateName1 = balanced stateName2 = high performance stateName3 = power saver ; Haetaan aktiivinen state komentorivikäskyllä "powercfg -getactivescheme" ; Tallennetaan se tieto temp-tiedostoon, luetaan sen sisältö muuttujaan ja lopuksi poistetaan temp-tiedosto RunWait, %comspec% /c powercfg -getactivescheme > %A_Temp%CurrentPowerstate.txt, %A_WorkingDir%, Hide FileRead, currState, %A_Temp%CurrentPowerstate.txt FileDelete, %A_Temp%CurrentPowerstate.txt ; Muuttujan esittely, seuraavan staten järjestysnumero nextState = 1; ; Käydään läpi statet Loop, %states% { ; Jos käytössä, päätellään seuraava IfInString, currState, % stateGuid%A_Index% { nextState := A_Index + 1 if (nextState > states) { nextState := nextState - states } } } ; Seuraavan staten guidi muuttujaan nextStateGuid := stateGuid%nextState% ; Seuraavan staten nimi muuttujaan nextStateName := stateName%nextState% ; Säädetään uusi state komentorivikäskyllä "powercfg -setactive uusiGuidi" Run, %comspec% /c powercfg -setactive %nextStateGuid%, %A_WorkingDir%, Hide ; Ilmoitus uudesta statesta TrayTip, Power state changed, Power state has been changed to %nextStateName%, 2 Sleep, 2000
Aihe on jo aika vanha, joten et voi enää vastata siihen.