Pencereyi bir adla (örneğin, hesap makinesi vb. Herhangi bir uygulama) kapatmak istiyorum. C# nasıl yapılır? WinAPI işlevlerini içe aktarma Evet, Windows API işlevlerini almalısınız: FindWindow()
, SendMessage()
;Pencerenin adı nasıl kapatılır?
cevap
ve WM_CLOSE
sabitidir. Windows API işlevlerinin
Yerli tanımları:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
/// Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.
/// </summary>
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
const UInt32 WM_CLOSE = 0x0010;
Müşteri kodu:
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Untitled - Notepad");
if (windowPtr == IntPtr.Zero)
{
Console.WriteLine("Window not found");
return;
}
SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
Evet, bu Not Defteri için gayet iyi çalışıyor (tabii ki, pencere başlığı tam olarak burada verdiğiniz şeydir, ki bu muhtemelen büyük ihtimalle değil). Ancak, üst düzey bir pencerenin kapatılmasından sonra tüm uygulamayı kapatmak için özel olarak tasarlanmadıkça, çok sayıda üst düzey pencereye sahip uygulamalar için çalışmaz. Aksi halde, uygulamanın kapandığından emin olmak için en üst düzey pencerelerin * her birine * "WM_CLOSE" göndermeniz gerekir. –
Ayrıca, uygulamalar, "WM_CLOSE" işlevine yanıt vermeyi seçebilirler. Örneğin, bazı programlar, aslında aslında kapatmak yerine, bu iletinin alınmasından sonra görev çubuğunun bildirim alanına en aza indirmeyi seçer. Uygulamanın iletiye nasıl yanıt verdiğini kontrol edemediğinizden, bu yöntemi kapsamlı olarak test etmeniz ve bilinmeyen ve test edilmemiş uygulamalarla uğraşırken ne kadar hassas olabileceğini fark etmeniz gerekir. –
Bu 'CloseWindow (windowPtr) 'gibi mi? –
Diğer işlemler ait pencereleri kapatmak için çalışıyoruz. Bu güvenilir bir şekilde gideceğini varsayabilecek bir şey değil. Bir şey için, bu pencerelere sahip değilsiniz, bu yüzden diğer süreçlerin pencereleri ile uğraşmak ve karmaşa yapmak için herhangi bir otomatik yetkiniz yok.
Diğer yanıtta da görüldüğü gibi, pencereye bir WM_CLOSE göndermeyi deneyebilirsiniz, ancak diğer sürecin onu onurlandırma hakkına sahip olmadığı konusunda uyarıda bulunabilirsiniz. WM_CLOSE'a yanıt, kabul edilebilirlik ve tamamen reddedilmeye temiz bir kapatma olabilir. İkinci durumda gerçekten başka seçeneğin yok. Bu senin sürecin değil. Aralarında gördüğünüz gibi, üzerinde durmanız gereken herhangi bir ara pencere, diyalog kutusu, vb. Olabilir.
Peki burada ne elde etmeye çalışıyorsunuz? Neden diğer süreçlere ait pencereleri kapatmaya çalışıyorsunuz? Amacın ne olduğunu açıklığa kavuşturmak yardımcı olabilir.
- 1. Modal pencerenin dışına tıklayarak bir model nasıl kapatılır? Çok basit bir jQuery modal olarak
- 2. "Eşleşen" vurgulaması nasıl kapatılır
- 3. TortoiseSVN'deki sesler nasıl kapatılır?
- 4. Çoğaltma mongodb'de nasıl kapatılır?
- 5. Mono Debug - Nasıl kapatılır?
- 6. Git Şubesi nasıl kapatılır?
- 7. Pencerenin konumu nasıl alınır?
- 8. 'Windows Özellikleri' programatik olarak nasıl kapatılır veya kapatılır
- 9. LLVM'nin entegre montajcısı nasıl kapatılır?
- 10. Capybara ile tarayıcı nasıl kapatılır?
- 11. iOS'ta barkod tarayıcı nasıl kapatılır?
- 12. Komut dosyasında xdebug nasıl kapatılır?
- 13. IIS Çalışan İşlemi nasıl kapatılır
- 14. FileStreamResult ile, MemoryStream nasıl kapatılır?
- 15. UIActionSheet otomatik olarak nasıl kapatılır
- 16. CSS'de yazım denetimi nasıl kapatılır?
- 17. Seçilen paketlerde minification nasıl kapatılır?
- 18. ROR'da pencerenin adını nasıl ayarlayabilirim?
- 19. Pencerenin sonunda mouseup nasıl algılanır?
- 20. Son pencere kapatıldıktan/sonlandırıldıktan sonra bir pygtk uygulaması nasıl kapatılır
- 21. Pencerenin Odaklandığından Şekil Çıkışı
- 22. window.Open Üst pencerenin arkasında yeni pencerenin görünmesine neden oluyor
- 23. Java kodundan log4j günlüğü nasıl kapatılır
- 24. SQL 2016 için telemetri nasıl kapatılır
- 25. Tarih seçiminden sonra datetimepicker nasıl kapatılır?
- 26. MediaRecorder.start() tarafından "bip" sesi nasıl kapatılır?
- 27. Glibc çalışma zamanı korumaları nasıl kapatılır?
- 28. PHP NetBeans'da otomatik paketleme "sarma" nasıl kapatılır?
- 29. Tensorflow'da test için bırakma nasıl kapatılır?
- 30. Realm.getDefaultInstance tarafından açılan bölge nasıl kapatılır?
http://www.codeproject.com/Articles/22257/Find-and-Close-the-Window-using-Win-API ... google rox bildiğiniz – m0s
Olası kopya. http://stackoverflow.com/questions/116090/how-do-i-kill-a-process-using-vb-net-or-c – Lloyd
@Lloyd: Yinelenen değil, bir işlemi öldürmek aynı şeyle aynı şey değildir. bir pencereyi kapatmak. –