[ Vertyg01 @ 13.09.2005. 13:41 ] @
Zanima me kako da prikazem trenutno aktivne prozore (aplikacije) i da se kao u task manageru mogu prebacivati izmedju aplikacija (switch to) ?
[ makaze @ 14.09.2005. 15:00 ] @
informacije o trenutno pokrenutim procesima možeš dobiti vrlo lako. VS.NET olakšava posao oko toga...
evo ti primjer (VB kod):

Code:
Dim p As Process
Dim outData As String

For Each p In Process.GetProcesses()
     outData = ""
     outData = outData & p.Id & vbTab
     outData = outData & p.ProcessName & vbTab
     outData = outData & p.Threads.Count & vbTab
     outData = outData & p.BasePriority & vbTab
     outData = outData & p.TotalProcessorTime.ToString() & vbTab
     outData = outData & p.UserProcessorTime.ToString() & vbTab
  
   Console.Write(outData & vbNewLine)
Next p


ovo je samo brza demonstracija kako možeš izlistati info o procesima. potraži malo na netu i mislim da ćeš naći primjer kako da odradiš 'switch to' kod, pokupiš i prikazuješ ikone i ostale sitnice...

woah!
[ Shadowed @ 14.09.2005. 15:35 ] @
Malo bolja varijanta. Stedi resurse, brze radi i perciznija je.

Code:
Dim p As Process
Dim Procs() AsProcess
Dim outData As String

Procs = Process.GetProcesses()
For Each p In Procs
     outData = ""
     outData = outData & p.Id & vbTab
     outData = outData & p.ProcessName & vbTab
     outData = outData & p.Threads.Count & vbTab
     outData = outData & p.BasePriority & vbTab
     outData = outData & p.TotalProcessorTime.ToString() & vbTab
     outData = outData & p.UserProcessorTime.ToString() & vbTab
  
   Console.Write(outData & vbNewLine)
Next p
[ havramm @ 15.09.2005. 00:25 ] @
Citat:
Shadowed: Malo bolja varijanta. Stedi resurse, brze radi i perciznija je.


Stvarno ne vidim razliku izmedju navedenih primera, osim eksplicitnog deklarisanja promenljive za niz procesa (koja se inace implicitno generise ukoliko se koristi kao u prvom primeru). A ako cemo vec o resursima - da li znate koliko se novih stringova kreiralo u ovim vasim primerima? Ja sam izbrojao 20 u svakoj iteraciji, mozda gresim - neka me neko ispravi... Razmislite malo o tome...

[Ovu poruku je menjao havramm dana 15.09.2005. u 01:30 GMT+1]
[ erkan @ 15.09.2005. 08:38 ] @
Da 20, sta preoprucujes,
StringBuilder?
[ Shadowed @ 15.09.2005. 09:58 ] @
Zar se nece Process.GetProcesses() izvrziti svaki put na kraju petlje kada se proverava da li je p stigao do kraja? Zbog toga sam i naveo onaj drugi primer jer ce se tada izvrsiti samo jednom. Mada moguce je da "ispod haube" prvi primer radi isto sto sam ja uradio u drugom.
Sto se stringova tice, u pravu si ali sam ja hteo da ukazem na onaj prvi deo pa sam ostalo ostavio isto.
[ havramm @ 15.09.2005. 11:51 ] @
Code:
static void Main(string[] args)
{
    foreach (Process p in Process.GetProcesses())
    {
        Console.WriteLine(p.ProcessName);
    }
}


se prevodi u
Code:
locals init ([0] class [System]System.Diagnostics.Process p,
           [1] class [System]System.Diagnostics.Process[] CS$00000007$00000000,
           [2] int32 CS$00000008$00000001)
  IL_0000:  call       class [System]System.Diagnostics.Process[] [System]System.Diagnostics.Process::GetProcesses() // Poziva se samo jednom
  IL_0005:  stloc.1 // i smesta u CS$00000007$00000000
  IL_0006:  ldc.i4.0
  IL_0007:  stloc.2 // kreira novu promenljivu (CS$00000008$00000001) koju ce da koristi za inkrementiranje
  IL_0008:  br.s       IL_001d // bezuslovno ide na IL_001d - pocetak petlje
  IL_000a:  ldloc.1
  IL_000b:  ldloc.2
  IL_000c:  ldelem.ref // uzima referencu i-tog elementa u nizu procesa
  IL_000d:  stloc.0 // i smesta u p
  IL_000e:  ldloc.0
  IL_000f:  callvirt   instance string [System]System.Diagnostics.Process::get_ProcessName()
  IL_0014:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0019:  ldloc.2
  IL_001a:  ldc.i4.1
  IL_001b:  add // inkrementira CS$00000008$00000001
  IL_001c:  stloc.2
  IL_001d:  ldloc.2
  IL_001e:  ldloc.1
  IL_001f:  ldlen
  IL_0020:  conv.i4
  IL_0021:  blt.s      IL_000a // poredi CS$00000008$00000001 sa duzinom niza - ukoliko je manje ide na IL_000a
  IL_0023:  ret

Tako da se Process.GetProcesses() izvrsava samo jednom posto se interno sve odvija na neki nacin kao for petlja, tj. - for (int i = 0; i < Process.GetProcesses().Length; i++)...

Pozdrav!