Diskuze: event pro začátek procesu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 17 zpráv z 17.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


http://www.codeproject.com/Articles/12138/Process-Information-and-Notifications-using-WMI
Díky, bohužel to neřeší můj problém, takže menší upřesnění: spustí se jakýkoliv, i předem nedefinovaný, proces (tzn. do předu neznám, který proces se spustí - vím pouze, že vzroste/se změní v určité chvíli počet procesů ve windows)
public class ProcessChecker
{
public event Action<string> OnProcessChange;
private Process[] processes;
private Timer timer;
public ProcessChecker(int interval)
{
processes = Process.GetProcesses();
timer = new Timer
{
Interval = interval
};
timer.Tick += (o, e) =>
{
var allNewProcesses = Process.GetProcesses();
var newProcesses = allNewProcesses.Select(s => s.ProcessName).Except(processes.Select(s => s.ProcessName)).ToList();
processes = allNewProcesses;
foreach (string p in newProcesses)
OnProcessChange(p);
};
timer.Start();
}
}
Užití:
ProcessChecker processChecker = new ProcessChecker(1000);
processChecker.OnProcessChange += (p) =>
{
Debug.WriteLine(p);
};
Netestoval jsem to nějak moc, ale fungovalo to. Kdyžtak můžeš kouknout po nečem systémovém.
Ještě jsem to troku improvnul:
public class ProcessChecker
{
private class ProcessComparer : IEqualityComparer<Process>
{
public bool Equals(Process x, Process y)
{
return x.ProcessName == y.ProcessName && x.Id == y.Id;
}
public int GetHashCode(Process obj)
{
return obj.ProcessName.GetHashCode() ^ obj.Id.GetHashCode();
}
}
public event Action<Process> OnProcessChange;
private Process[] processes;
private Timer timer;
public ProcessChecker(int interval)
{
processes = Process.GetProcesses();
timer = new Timer
{
Interval = interval
};
timer.Tick += (o, e) =>
{
var allNewProcesses = Process.GetProcesses();
var newProcesses = allNewProcesses.Except(processes, new ProcessComparer()).ToList();
processes = allNewProcesses;
foreach (var p in newProcesses)
OnProcessChange(p);
};
timer.Start();
}
}
Dostaneš přímo celý proces a už si s ním dělej co chceš.
ProcessChecker processChecker = new ProcessChecker(1000);
processChecker.OnProcessChange += (p) =>
{
Debug.WriteLine(p.ProcessName);
};
}
Snad to je konečně co jsi chtěl 
Ahoj,
pokud bys měl čas a chuť, nemohl bys to ještě jednou "improvnout" a
zakomentovat to? Přiznám se, že jsem se dokonale ztratil. 
Kdybych měl parafrázovat Kocoura z Červeného trpaslíka, tak jsem tomu rozuměl po to "Ještě jsem to trochu improvnul."
Tady to máš:
public class ProcessChecker
// třída pro kontrolu procesů
{
private class ProcessComparer : IEqualityComparer<Process>
// podtřída pro jejich porovnávání
{
public bool Equals(Process x, Process y)
// porovnávající metoda
{
return x.ProcessName == y.ProcessName && x.Id == y.Id;
// samotné porovnání (rovnají se jména i ID
}
public int GetHashCode(Process obj)
// získání zahashovaného řetězce
{
return obj.ProcessName.GetHashCode() ^ obj.Id.GetHashCode();
// name XOR id
}
}
public event Action<Process> OnProcessChange; // událoct změny
private Process[] processes; // pole procesů
private Timer timer; // použitý časovač
public ProcessChecker(int interval) // konstruktor
{
processes = Process.GetProcesses(); // získání procesů
timer = new Timer //vytvoření časovače s předaným intervalem
{
Interval = interval
};
timer.Tick += (o, e) => // reakce na událost Tick časovače
{
var allNewProcesses = Process.GetProcesses();
// nové procesy
var newProcesses = allNewProcesses.Except(processes, new ProcessComparer()).ToList();
// list procesů, které jsou navíc oproti původním
processes = allNewProcesses;
// z nových se stanou staré pro další kontroly
foreach (var p in newProcesses)
OnProcessChange(p);
// volání funkce zaregistrované pro událost pro každý nový proces
};
timer.Start(); // start timeru
}
}
ProcessChecker processChecker = new ProcessChecker(1000);
// instance s timeoutem časovače 1000
processChecker.OnProcessChange += (p) => // reakce na událost
{
Debug.WriteLine(p.ProcessName); // zpracování (to co chceš dělat)
};
}
snad to takhle stačí.
Díky moc, teď tomu líp rozumím. Je to opravdu mnohem srozumitelnější.
Díky, ale obávám se, že nikoliv - možnosti událostí ve W8.1 (kde jich
je naštěstí už víc, než jen ve W8) v suspended režimu jsou značně
omezené, a nejen timer, ale i další workaroundy, které fungují normálně
na desktopu, se naneštěstí ukazují neúčinné, případně nespolehlivé
nebo absolutně nevhodné (například vyžadující neustálé připojení k
internetu
)
http://msdn.microsoft.com/…h977059.aspx
K čemu to ve Win 8.1 potřebuješ ? Rozhraní je právě udělané tak, aby aplikace bez vědomí uživatele nedělala něco co by neměla. Nezasahovala přímo do systému apod aniž by o tom uživatel nevěděl.
Pro vytvoření Windows Store app a momentálně (veřejně) blíže
nespecifikovaná usnadnění pro uživatele (netvrdím, že se jedná o něco
převratného, ale podobnou app sem ve storu neviděl - dost možná to stejně
bude úplný propadák) 
Proč přesně potřebuješ právě zjišťovat procesy ? Win 8.1 Modern UI je stejně jako Windows Phone uzavřené prostředí. Na 1. stranu možná mínus ze strany vývoje z druhé strany obrovské plus pro uživatele -> aplikace nebudou dělat neplechy.
Jak jsem již psal, blíže to specifikovat momentálně nebudu. A chci je zjišťovat právě proto, že mám zařízení s W8.1 i Windows Phone - je dost možné, že by takovou app (skoro) nikdo jiný nevyužil, případně od části zamýšlené funkcionality upustím kvůli složitosti pro běžného uživatele (vč. té zahrnující zjišťování procesů). Každopádně čím více se touto otázkou zabývám, mě to také začlo zajímat čistě ze zvědavosti z pohledu programátora, zda je něco takového vůbec možné (což je - bohužel z pohledu běžného užití nepoužitelné/nevhodné).
Mě spíš jde o to že se snažíš třeba o něco a vlastně to i píšeš
co je pro uživatele zbytečné. A přijmi fakt že W8.1 i WP jsou systémy ve
výoji, jsou celkem uzavřené a poskytují především funkcionalitu pro
uživatele ne pro nějaké hrabání a testování 
Zobrazeno 17 zpráv z 17.