reklama

Staňte se programátorem: Jak na C# pod Linuxem II.

Microsoft .NET Framework je dnes již k dispozici i na Linuxu. Projekt se jmenuje Mono a s pomocí GTK nebo Windows Forms tak můžete v C# psát multiplatformní aplikace.

V minulém díle jste si s námi mohli vytvořit program – správce procesů, napsaný v jazyce C# pro operační systém Linux. Platforma .NET je sice nativně vytvořena pro operační systém Windows, avšak pro Linux existuje jeho klon s názvem Mono ve vývojovém prostředí MonoDevelop. Ukázali jsme si práci s ovládacími prvky knihovny GTK, na které je mimochodem založen visuální prostředí GNOME.

Na prvním projektu jsme si ukázali základní práci, dnes se k němu vrátíme, popíšeme si ale naopak kód, pomocí kterého jsme zjistili systémové proměnné a některé běžící procesy.

V dnešním díle si ukážeme:

  • Práce s procesy
  • Výpis systémových proměnných
Klepněte pro větší obrázek  Klepněte pro větší obrázek
Dialog s výpisem informací o systému a související spuštěné procesy

Systémové proměnné

Systémové proměnné jsou takové proměnné, ke kterým má každá aplikace přístup. Systémové proměnné většinou obsahují cesty k souborům či složkám, informace o uživateli, systému či hardwaru. V jazyce C# se k systémovým proměnným nejjednodušeji dostaneme pomocí metody GetEnvironmentVariables třídy System.Environment, která vrací instanci třídy System.Collections.IDictionary. Tato třída slouží jako slovník – obsahuje uspořádané dvojice ve tvaru klíč – hodnota (analogie k asociativnímu poli v PHP aj.). K procházení jednotlivých uspořádaných dvojic použijeme cyklus foreach. Tyto dvojice jsou představovány třídou DictionaryEntry. Ke zjištění klíče použijeme vlastnost Key. Pro zjištění hodnoty, jež náleží tomuto klíči, použijeme vlastnost Value.

IDictionary promenne = Environment.GetEnvironmentVariables();

foreach (DictionaryEntry de in promenne)
{
    // Vloží název systémové proměnné do komponenty typu ComboBoxEntry
    this.comboboxentry1.AppendText(de.Key.ToString());
}

Pro získání hodnoty určité systémové proměnné, použijeme metodu GetEnvironmentVariable třídy Environment, která jako argument očekává název proměnné, jež má být vrácena.

this.label5.Text = "Hodnota: " + 
                                              Environment.GetEnvironmentVariable(this.comboboxentry1.ActiveText);

Práce s procesy

Každý proces systému je představován třídou System.Diagnostics.Process.

Pro získání pole procesů slouží metoda GetProcesses třídy Process. Chceme-li ve Windows ukončit určitý proces (jehož jméno zjistíme vlastností ProcessName), použijeme metodu Kill.

foreach(Process p in Process.GetProcesses())
{
    // Ukončí poznámkový blok
    if (p.ProcessName == “notepad“)
    {
        p.Kill();
        break;
    }
}

Jelikož ne všechny třídy obsažené v platformě Mono jsou kompletní, metoda Kill nefunguje. K ukončení procesu tedy musíme použít jiný způsob – tím je použití statické metody kill třídy Mono.Unix.Native.Syscall. Tato metoda jako svůj argument očekává tzv. PID, což je neduplicitní číslo, pod kterým se každý proces v systému identifikován. Druhým argumentem je položka výčtového typu Mono.Unix.Native.Signum.SIGKILL představující signál, kterým bude proces ukončen.

MyTreeNode vybranaPol;

// Projde jednotlivé běžící procesy
foreach(Process p in Process.GetProcesses())
{
    // Identifikuje vybraný proces
    if (p.ProcessName == vybranaPol.NazevProcesu)
    {
        // Ukončí proces sygnálem SIGKILL
        Mono.Unix.Native.Syscall.kill(p.Id,Mono.Unix.Native.Signum.SIGKILL);
        ns.RemoveNode(vybranaPol);
        break;
    }
}

Pro spuštění procesu složí statická přetížená metoda Start třídy Process, které můžeme dosadit jeden či dva řetězce – argumenty. Chceme-li spustit proces bez parametrů, dosadíme jako argument řetězec představující cestu k aplikaci, jež má být spuštěna.

Process.Start(“firefox“);

Chceme-li spustit aplikaci s parametry, použijeme je jako druhý argument:

Process.Start(“firefox“,“google.com“);

Pro nastavení priority procesu použijeme vlastnost PriorityClass třídy Process, které přiřadíme položku výčtového typu ProcessPriorityClass představující nastavovanou úroveň priority procesu.

// Projde jednotlivé procesy
foreach(Process p in Process.GetProcesses())
{
    // Vybere proces jehož jméno je shodné s jménem
    // vybraným ve komponentě NodeView
    if (p.ProcessName == “nějaký proces“)
    {
        // Nastaví prioritu
        if (this.comboboxentry1.ActiveText == "Nečinný")
            p.PriorityClass = ProcessPriorityClass.Idle;
       
else if(this.comboboxentry1.ActiveText == "Podprůměrná")
            p.PriorityClass = ProcessPriorityClass.BelowNormal;
        else if(this.comboboxentry1.ActiveText == "Průměrná")
            p.PriorityClass = ProcessPriorityClass.Normal;
        else if(this.comboboxentry1.ActiveText == "Nadprůměrná")
            p.PriorityClass = ProcessPriorityClass.AboveNormal;
        else if(this.comboboxentry1.ActiveText == "Vysoká")
            p.PriorityClass = ProcessPriorityClass.High;
        else if(this.comboboxentry1.ActiveText == "Nejvyšší")
            p.PriorityClass = ProcessPriorityClass.RealTime;
    }
)

Multiplatformní .NET

Práce se systémovými proměnnými a procesy v .NET knihovně se napříč systémy příliš neliší, pokud tedy už máte s C# určité zkušenosti, práce na Linuxu by pro vás neměla být nikterak velikým překvapením – přestože Mono ještě není zcela funkční a kompatibilní. A platí to i o vývojovém prostředí, v každé moderní linuxové distribuci stačí z oficiálního repozitáře nainstalovat program MonoDevelop, který díky knihovně Gtk# nabízí i prostředí pro návrh vizuálních aplikací.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Vývojové prostředí MonoDevelop se příliš neliší od standardu Visual Studia nebo SharpDevelopu

Nakonec opět přikládáme projekt pro MonoDevelop a spustitelný program pro linuxovou platformu. Ke spuštění programu budete potřebovat běhové prostředí Mono. Program má sice příponu *.exe, z terminálu jej ale můžete spustit třeba příkazem: mono TaskManagerProgram.exe.

Témata článku: Software, Programování, Linux, Elsa

14 komentářů

Nejnovější komentáře

  • Mi.Chal 27. 1. 2009 21:25:15
    Ono dost zalezi na tom, co je to za projekt. Kdyz neco delas pro zakaznika...
  • Michal Smrž 26. 1. 2009 16:32:35
    Tak Windows.Forms nepovažuji za důležitou součást mona (má GTK#), ale s...
  • tucekj 26. 1. 2009 11:58:11
    No, zkuste si napsat malé řecké omega na klávesnici… Pokud řecký znak není...
reklama
Určitě si přečtěte

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

** Herní hardware se od toho běžného často liší jen vzhledem ** Při výběru stále nezapomínejte na základní parametry ** Poradíme jak vybrat herní hardware i periferie

20.  2.  2017 | Stanislav Janů | 36

10 nejhorších produktů v historii Microsoftu

10 nejhorších produktů v historii Microsoftu

20.  2.  2017 | Karel Javůrek | 133

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

** Každý bastlíř se po čase neobjede bez armády švábů ** Dnes si některé z nich vyzkoušíme ** Třeba zázračný posuvný registr

19.  2.  2017 | Jakub Čížek | 39

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

** AMD uvedlo první tři procesory Ryzen 7 ** Všechny budou pracovat s osmi jádry a šestnácti vlákny ** Na pulty obchodů se dostanou už za týden

22.  2.  2017 | Stanislav Janů | 130

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

** Evropští úředníci chtějí, aby byly Desítky transparentnější ** Microsoft od jara skutečně chystá změny ** Ochráncům soukromí to ale nestačí

21.  2.  2017 | Jakub Čížek | 217

Vyhledávání ve Windows není dokonalé, zkuste to 5× jinak

Vyhledávání ve Windows není dokonalé, zkuste to 5× jinak

** V macOS funguje vyhledávání Spotlight, ve Windows podobně propracovaná funkce chybí ** Alternativy se zaměřují na rychlé hledání souborů i externí zdroje ** Mnohé mohou vyhledávání ve Windows kompletně nahradit

18.  2.  2017 | Stanislav Janů | 58


Aktuální číslo časopisu Computer

Supertéma o počítačové bezpečnosti

AMD Ryzen přichází

Velké testy kinoprojektorů a levných špuntových sluchátek

Příslušenství do USB-C

reklama
reklama