回答
這是一些代碼。你想要關心多屏幕的情況下,特別是像Powerpoint的應用程序
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[DllImport("user32.dll")]
private static extern bool GetWindowRect(HandleRef hWnd, [In, Out] ref RECT rect);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
public static bool IsForegroundFullScreen()
{
return IsForegroundFullScreen(null);
}
public static bool IsForegroundFullScreen(Screen screen)
{
if (screen == null)
{
screen = Screen.PrimaryScreen;
}
RECT rect = new RECT();
GetWindowRect(new HandleRef(null, GetForegroundWindow()), ref rect);
return new Rectangle(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top).Contains(screen.Bounds);
}
如果你隱藏任務欄,這將錯誤地報告全屏應用 – Rolle 2014-02-04 14:46:18
@Rolle是正確的。任何解決方案?我想很難將全屏視頻/遊戲/ PowerPoint演示文稿中運行輔助屏幕(無任務欄)的最大化記事本分開,而不考慮每個過程。 – 2015-06-18 06:40:40
不知道究竟你以後,但如果你想在帳戶任務欄,你可以通過替換''screen.WorkingArea' screen.Bounds'。 – 2015-06-18 08:15:07
我做了一些修改。使用下面的代碼,當任務欄被隱藏或在第二個屏幕上時,它不會錯誤地返回true。在Win 7下測試。
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[DllImport("user32.dll", SetLastError = true)]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("user32.dll")]
private static extern bool GetWindowRect(HandleRef hWnd, [In, Out] ref RECT rect);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
public static bool IsForegroundFullScreen()
{
return IsForegroundFullScreen(null);
}
public static bool IsForegroundFullScreen(System.Windows.Forms.Screen screen)
{
if (screen == null)
{
screen = System.Windows.Forms.Screen.PrimaryScreen;
}
RECT rect = new RECT();
IntPtr hWnd = (IntPtr)GetForegroundWindow();
GetWindowRect(new HandleRef(null, hWnd), ref rect);
/* in case you want the process name:
uint procId = 0;
GetWindowThreadProcessId(hWnd, out procId);
var proc = System.Diagnostics.Process.GetProcessById((int)procId);
Console.WriteLine(proc.ProcessName);
*/
if (screen.Bounds.Width == (rect.right - rect.left) && screen.Bounds.Height == (rect.bottom - rect.top))
{
Console.WriteLine("Fullscreen!")
return true;
}
else {
Console.WriteLine("Nope, :-(");
return false;
}
}
- 1. 有沒有辦法檢查子進程是否仍在運行?
- 2. 有沒有辦法檢查腳本是否由PowerShell ISE運行?
- 3. 檢測用戶是否有全屏運行的應用程序
- 4. 有沒有辦法檢查代碼是否在TransactionScope中執行?
- 5. 有沒有辦法檢查回發是否正在進行?
- 6. 有沒有辦法判斷Safari是否全屏? (例如document.fullscreenElement)
- 7. 有沒有辦法檢查JS線程是否忙?
- 8. 有沒有辦法檢查打印過程是否成功?
- 9. 有沒有辦法告訴子程序是否有運行時日誌(n)?
- 10. 有沒有辦法檢查用戶是否正在使用Android中的其他應用程序?
- 11. 有沒有辦法檢查(文件)句柄是否有效?
- 12. 有沒有辦法檢查我的腳本是否在phantomjs中運行?
- 13. 有沒有辦法檢查一個函數是否正在jQuery中運行?
- 14. 有沒有辦法檢查SQL SP是否正在運行或完成?
- 15. 有沒有辦法檢查ansicon.exe是否存在,而不使用CMake運行它?
- 16. 有沒有辦法檢查Django管理命令是否正在運行?
- 17. 有沒有辦法告訴程序是否仍在運行一個方法?
- 18. 有沒有辦法檢查.NET線程池中運行的是什麼?
- 19. 有沒有辦法打開SublimeText 2從其他應用程序
- 20. 有沒有辦法檢查應用程序簽名是否調試或發佈?
- 21. 有沒有辦法檢查我的應用程序是否高於20Mb?
- 22. 如何檢查是否有其他應用程序實例正在運行
- 23. 檢查是否有其他批處理文件仍在運行
- 24. 檢查程序沒有運行
- 25. 運行FactoryGirl時有沒有辦法檢查DB數據?
- 26. 有沒有辦法檢查進程是64位還是32位?
- 27. 可可 - 有沒有辦法檢查NSURLConnection是否存在緩存?
- 28. 有沒有辦法檢查iCloudDrive是否啓動?
- 29. 有沒有辦法在.NET中檢查Bitmap是否爲空?
- 30. Swift - 有沒有辦法檢查是否使用可變參數?
你想知道你的程序控制程序是否被完全屏蔽,或者你想知道另一個程序是否正在全屏運行嗎? – 2010-09-19 00:05:54
相關:http://stackoverflow.com/questions/3536373/detect-if-user-has-any-application-running-in-fullscreen。另外http://stackoverflow.com/questions/3686311/my-c-winform-needs-to-detect-when-other-applications-enter-exit-run-in-tr-full。我懷疑後者會回答你的問題。 – 2010-09-19 01:56:05