C# 'Ta Aktif Olaran Programın Başlığı Çekmek
-
şimdi konunun başlığı biraz garip oldu farkındayım ama projemde şöyle bişi lazım
pc de a,b,c,d,e,f titleına sahip programlar çalışıyor
benim programımın kullanıcı sadece seçtigim programları aktif olarak kullanırken benim programımın çalışmasını istiorum
mesela 10 tane site açık adamda tahribata girince benim program aktif olsun aynen oaly bu
aktif olarak kullanılan programın title ı nasıl çekerim
-
olayı çok dağınık anlatmışsın, fakat c# kullanarak seçtiğin processin titleini almak istiyorsan.
using System.Diagnostics; i kullanarak
Process[] myprocess= Process.GetProcessesByName("notepad");
foreach (Process gettitle in myprocess)
{
MessageBox.Show(gettitle.MainWindowTitle);
}kodlarıyla yapabilirsin.
notepad yaptım. fakat sen onu "GetProcesses" gibi bir metot kullanarak geliştirebilsin.
2. dediğin olay
notepaddan gidiyorum. eğer notepad açıldıktan sonra notepadın titleını çekmek istiyorsan bir timer fonksiyonu ile sürekli notepadın açık olup olmadıgını kontrol ederek yapabilirsin.
verdiğim koda göre
/* kontrolü yaptığın bloğa yaz */
Process[] myprocess = Process.GetProcessesByName("notepad");
if (myprocess.Length != 0)
{// burada processi saptadıktan sonra yaptırmak istediklerini yaz.
foreach (Process gettitle in myprocess)
{
MessageBox.Show(gettitle.MainWindowTitle);
}
}
else
{
label1.Text = "process not active yet";
}şeklinde yaparsın.
kolay gelsin
-
öncelikle teşekkürler aradığım şey bu fakat bunun üstünde biraz değişiklik yapmam lazım
Process[] myprocess= Process.GetProcessesByName("notepad");
burada bir program deilde bütün programlar için olması için napmam lazım
eğer bütün programlar için mümkün deilse burda tek satıra 4,5 program ekleyebilirmiyim yoksa hepsi için bunu satırı yazıp ayrı ayrı kontrolmü ettirmem lazım
şu anda deneme fırsatım olmadığı için sormak istedim
not: saglam kafayla ilk mesajı okuyunca anladım cidden karışık olmuş :D
-
GetProcesses ile tüm processleri çekersin
bu kod ile listboxa aktarabilirsin, sürekli listboxu kontrol ettirip o processin açık olup olmadığına bakarakta yapbilirsin.
Process[] myproc = Process.GetProcesses();
foreach (Process all in myproc)
{
listBox1.Items.Add(all.ProcessName);
} -
kodu şimdi deneme fırsatım oldu kod tam olarak aradıgım şey deil neden dersen o an çalışan bütün programları çekio keza o program adını verincede oyle o program arkaplandada çalışsa çalışıo gözüküo title ı cekio
ben sadece o anda hangi programda işlem yapılıosa (ornek: ben buraya yazı yazarken firefox üstte) üstte hangi pencere varsa mantıgıyla
amacım bi çeşit stealer yapmak ve sadece belirli programlarda okuma yapmasını istiyorum okuma işlemini gerçekleştirdim ama şu belirledigim programlarda yapmasını nasıl saglarım bu mantıkta işime yarar ben title a gore düşündügüm için böyle mantık yürttüm
-
FCN bunu yazdı:
-----------------------------
kodu şimdi deneme fırsatım oldu kod tam olarak aradıgım şey deil neden dersen o an çalışan bütün programları çekio keza o program adını verincede oyle o program arkaplandada çalışsa çalışıo gözüküo title ı cekio
ben sadece o anda hangi programda işlem yapılıosa (ornek: ben buraya yazı yazarken firefox üstte) üstte hangi pencere varsa mantıgıyla
amacım bi çeşit stealer yapmak ve sadece belirli programlarda okuma yapmasını istiyorum okuma işlemini gerçekleştirdim ama şu belirledigim programlarda yapmasını nasıl saglarım bu mantıkta işime yarar ben title a gore düşündügüm için böyle mantık yürttüm
-----------------------------mainwindows title'ın mantığı odur, şuan hangi penceredeysen ff de onu çeker zaten.
-
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder strBuild, int maxCount);
public static string GetActiveWindowTitle()
{
StringBuilder str = new StringBuilder(255);
IntPtr hWnd = GetForegroundWindow();
GetWindowText(hWnd, str, 255);
return str.ToString();
}edit:
getwindowtext fonksiyonunun geri donus degeri, yazilan karakter sayisina esittir. kontrol yapilirsa daha tutarli olabilir
if (GetWindowText(..) > 0)
gibi ;)
-
C# bilmiyorum ama apilerin kullanımından bahsedeyim
GetForegroundWindow ile aktif pencerenin handle'ını alırsın
pencere başlığını aktarmak için string değişken oluştur.
oluşturduğun string değişkene GetWindowTextLength(handle) fornksiyonun geriye döndürdüğü pencere başlık uzunluğunun 1 fazlası kadar boşluk doldur
örneğin vb6da degisken=space(GetWindowTextLength(handle)+1)
bundan sonrada
GetWindowText handle,degisken,len(degisken) fonksiyonu bu şekilde kullanabilirsin parametreler sırasıyla pencerenin handle nosu,başlığın aktarılacağı değişken, değişkenin karakter uzunluğu
