我有2個可見的窗體。是否有可能檢測到消息框是否可見/顯示在另一個表單上?如何檢測消息框是否可見?
1
A
回答
2
做到這將是使周圍MessageBox.Show
跟蹤在Shared
財產呼叫自己的包裝最簡單的方法,然後專門調用它,而不是MessageBox.Show
和MsgBox
。
2
這是可能的,但需要相當大的P/Invoke服務。訣竅是枚舉UI線程擁有的窗口,並檢查它們中的一個是否是Windows對話窗口。這段代碼將會訣竅。我無法保證100%的準確性,應用程序中可能會有另一個非託管對話框,類似於消息框模板。
using System;
using System.Text;
using System.Runtime.InteropServices;
static class MessageBoxFinder {
public static bool IsPresent() {
// Enumerate windows to find the message box
EnumThreadWndProc callback = new EnumThreadWndProc(checkWindow);
return false == EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero);
}
private static bool checkWindow(IntPtr hWnd, IntPtr lp) {
// Checks if <hWnd> is a dialog
StringBuilder sb = new StringBuilder(260);
GetClassName(hWnd, sb, sb.Capacity);
if (sb.ToString() != "#32770") return true;
// Got a dialog, check if the the STATIC control is present
IntPtr hText = GetDlgItem(hWnd, 0xffff);
return hText == IntPtr.Zero;
}
// P/Invoke declarations
private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp);
[DllImport("user32.dll")]
private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp);
[DllImport("kernel32.dll")]
private static extern int GetCurrentThreadId();
[DllImport("user32.dll")]
private static extern int GetClassName(IntPtr hWnd, StringBuilder buffer, int buflen);
[DllImport("user32.dll")]
private static extern IntPtr GetDlgItem(IntPtr hWnd, int item);
}
0
我想通了,最簡單的答案是使用這個和尋找消息框的標題:
<System.Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
End Function
相關問題
- 1. 如何檢測mediacontroller是否可見?
- 2. 檢查窗口是否是消息框
- 3. 如何檢查JOptionPane是否可見?
- 4. 如何檢查圖像是否可見?
- 5. 如何檢測自動隱藏的任務欄是否可見?
- 6. 檢查UIAlertView是否可見
- 7. 如何使用jQuery在聊天中檢查消息狀態「消息可見」
- 8. 檢測消息框的創建
- 9. 如何檢測mod_rewrite是否可用?
- 10. 檢查文本框是否爲空,然後發佈消息框
- 11. 檢測是否格是在瀏覽器窗口中可見
- 12. activemq消息可見性
- 13. 如何檢測該消息被
- 14. 如何檢測發送的消息?
- 15. 檢測是否裝配可
- 16. 如何檢測Web元素是否看不見?
- 17. 檢測第一個元素是否可見w/jQuery
- 18. 檢測輸入佔位符是否可見
- 19. 檢測div是否可見或不使用jquery
- 20. AS3:檢測sprite在scrollRect內是否可見?
- 21. Android - 檢測RecyclerView中的最後一個項目是否可見
- 22. 檢測NSUndoManager的警報視圖是否可見
- 23. 檢測div是否可見,並在10秒內改變顏色
- 24. 檢測圖像是否在背景上可見
- 25. 檢測用戶是否丟棄了消息
- 26. 如何檢測對象是否已移出OpenGL ES中的可見窗口?
- 27. Selenium WebDriver - 使用Java - 如何檢查錯誤消息是否可見或不在網頁中?
- 28. VirtualTreeView:檢查節點是否可見
- 29. 咖啡 - 檢查屏幕是否可見
- 30. Deplhi TEmbeddedWB檢查元素是否可見
我不知道爲什麼System.Windows.Forms.MessageBox擁有一個私人的構造函數。如果你可以繼承基本實現並更改hide/show方法,那將會容易得多。 – 2010-02-25 19:20:01
這是一個共享類。那是不可能的。 – SLaks 2010-02-25 19:23:02
好點。這就說得通了。 – 2010-02-25 19:36:34