Başlık, bir değişken son eki ile kısmen statiktir. Örneğin, "Pencere Başlığı {- user_id}".Tam olarak bilinmeyen bir başlık ile bir pencerenin tutamacını alın. (C#)
Tam başlığı bilmeden tanıtıcıyı nasıl alabilirim?
Başlık, bir değişken son eki ile kısmen statiktir. Örneğin, "Pencere Başlığı {- user_id}".Tam olarak bilinmeyen bir başlık ile bir pencerenin tutamacını alın. (C#)
Tam başlığı bilmeden tanıtıcıyı nasıl alabilirim?
Tüm Prosesleri gözden geçirin ve MainWindowTitle'u kontrol edin. sınıf adı ve üst pencere kolu tarafından
foreach(Process proc in Process.GetProcesses())
{
if(proc.MainWindowTitle.StartsWith("Some String"))
{
IntPtr handle = proc.MainWindowHandle;
// ...
}
}
İlginç. Çoğu durumda çalışmalıdır. Ancak bir süreç birden fazla üst düzey pencereye sahipse ne olur? –
@Serge: Tam olarak emin değil ... –
Teşekkürler! Vay canına, bununla uğraşacağını ve Win32 API kludgesinden sakınacağını asla bilemezdim. – Jonas
This CodeProject article, Üst düzey pencerelerin nasıl numaralandırılacağını anlatır (Win32 API EnumWindows'a dayanarak). Kısmen bir pencere başlığına filtre uygulamak için kolayca değiştirebilirsiniz: EnumWindowsCallBack'i değiştirin.
HTH.
Get (Sen, vb İfadelerinin kullanabilir veya StartsWith
olabilir). Örneğin: win32api'yi kullanarak başlatma tutamacını başlatın. Önce spyxx aracını kullanarak ana pencere sınıfı adını biliyorsunuz.
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr handleParent, IntPtr handleChild, string className, string WindowName);
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string className, string windowTitle);
Kullanımı:
IntPtr handle = FindWindowEx(FindWindow("Shell_TrayWnd",null), new IntPtr(0), "Button", null);
Ek? Sanırım sonek demek istiyorsun. Senin için tamir edeceğim. – Ray