Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Vistan virransäästötilojen vaihtaminen (AutoHotKey)

kayttaja-2791 [04.02.2009 23:10:08]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta