
Mellékelt példa megnyitása előtt szükséges egy ProcessorTemperature nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
Asus alaplapok esetén igen könnyen meghatározhatjuk e két hőmérséklet értéket. Ehhez csak egy-egy paraméter nélküli függvényt kell meghívunk az Asus.dll-ből:
public class Asus
{
[DllImport("asus.dll")]
public static extern Int32 GetCPUTemperature();
[DllImport("asus.dll")]
public static extern Int32 GetMBTemperature();
}
E DLL üzembeállításának részletes leírása megtalálható a leírás végén hivatkozott cikkben.
A ProcessorTemperature kontrol létrehozása
Szükségünk lesz még egy Image nevű property-re is, ahol egy tetszőleges kis képet is megadhatunk, melyet a kontrol megjelenít.
[Editor(typeof(ImageUrlEditor),typeof(UITypeEditor))]
public string Image
{
get
{
return image;
}
set
{
image = value;
}
}
A kijelzendő érték kiválasztásához létrehozunk egy felsorolt típust.
public enum TemperatureEnum
{
CPU,
Motherboard
}
Majd e típushoz egy property-t is.
private TemperatureEnum temperature;
public TemperatureEnum Temperature
{
get
{
return temperature;
}
Amikor változik e property értéke, akkor a ChildControlsCreated property-t hamisra állítjuk. Ennek eredményeképpen újra fut a CreateChildControls függvény, mely az új feltételek figyelembevételével ismételten létrehozza a kontrol tartalmát.
set
{
temperature = value;
this.ChildControlsCreated = false;
}
}
A kontrol tartalmának létrehozásakor első lépésként lekérdezzük a megfelelő hardver eszköz hőmérsékletét.
protected override void CreateChildControls()
{
try
{
int c;
if (temperature == TemperatureEnum.CPU)
{
c = Asus.GetCPUTemperature();
}
else
{
c = Asus.GetMBTemperature();
}
Az aktuális értékét egy Label segítségével jelenítjük meg a kontrolon belül.
Label l = new Label();
l.Text = c.ToString() + "°C";
l.Style.Add("left", "20");
l.Style.Add("top", "20");
l.Style.Add("position", "absolute");
Controls.Add(l);
...
}