PDA

Tam Sürümünü Görmek İçin : process açıldıgın event ı tetiklesin!


syperusta
13/02/2006, 13:28
Merhaba arkadaşlar,

C# da yeni bir process başladıgında bir event i tetikleyebilirmiyim.
böyle bir şey varmı?

Yani yeni bir uygulama çalıştıgında programımdaki event çalışacak.


ceeyt
13/02/2006, 17:15
F()
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = @"c:\....";
p.Start();

p.EnableRaisingEvents = true; // asagidaki eventin calisabilmesi
//icin bu true olmak zorunda.

p.Exited += new EventHandler(p_Exited); // p sonlandiginda
// calisacak event
}

void p_Exited(object sender, EventArgs e)
{
// p sonlandiktan sonra ne yapacaksan buraya yazabilrisn.
}

syperusta
13/02/2006, 22:16
İlgin için teşekkürler. Fakat sanırım sorum pek anlaşılmadı,

Benim ögrenmek istedigim windows ta bir program başladıgında bunu anlayabilirmiyim. daha dogrusu program başladıgında bir event çalıştırabilirmiyim.

İstedigim olayı process leri tek tek kontrol ederek yapıyorum esasında. fakat benim istedigim bunun iş içinde FileSystemWatcher benzeri birşeyin olup olmadıgı.

Sabahi
14/02/2006, 03:43
Anlayabilirsiniz, ve calistirabilirsiniz, ancak bu amacla yazilmis hazir bir program duymadim duymamis olmam yoktur demek degil tabiki. Birde sorunuz biraz genel olmus, bu yuzden fazla bir detay vermek zor. Ornegin bir text dosyasi acip asagidaki kodu yazar ve .vbs uzantili bir isimde saklarsaniz, bu dosyanin ustune iki tikladiginizda yeni bir process baslar. Koddan da anlayabileceginiz gibi butun amaci "Untitled - Notepad" isimli pencere acilincaya kadar beklemek ve bu pencere acildiginda "Calculator" programini calistirmak.

set shell = CreateObject("WScript.Shell")

While ( shell.AppActivate("Untitled - Notepad") = False)
WScript.Sleep 500
Wend

shell.run "calc.exe"

Elbette ki boyle bir script oldukca basit ve her yerde kullanilamayacak bir ornek. Amaciniza bagli olarak daha kompleks bir cozum gerekebilir ama mutlaka bir yolu var ondan eminim.

ceeyt
15/02/2006, 15:08
Fakat sanırım sorum pek anlaşılmadı.

evet yanlis anlamisim.

C# ile nasil yapilir acikcasi cok fazla fikrim yok, belki belli araliklarla mevcut islemlerin listesini alip kontrol etmek olabilir.

Belki daha kolay bir yontemi vardir ama dedigim gibi aklima simdilik baska bisey gelmiyor.

Listeyi asagidaki gibi alabilirsin.

System.Diagnostics.Process[] processes;
processes = System.Diagnostics.Process.GetProcesses();

ceeyt
15/02/2006, 19:15
İstedigim olayı process leri tek tek kontrol ederek yapıyorum esasında.

Bunu yazmana ragmen aynisini onermisim :) Kusura bakma.