问题描述
我想做一个后台热键管理软件,有些按键按下去之后有小窗口的提示,不过要是处于全屏状态的话显示小窗口会导致离开全屏模式来显示小窗口,我想在用户处于全屏时不显示小窗口,如何做到?
解决方案
解决方案二:
顶
解决方案三:
要用API,c#本身办不到首先声明一个结构,API函数要用到[StructLayout(LayoutKind.Sequential)]publicstructRECT{publicintLeft;publicintTop;publicintRight;publicintBottom;}//取得前台窗口句柄函数[DllImport("user32.dll")]privatestaticexternIntPtrGetForegroundWindow();//取得桌面窗口句柄函数[DllImport("user32.dll")]privatestaticexternIntPtrGetDesktopWindow();//取得Shell窗口句柄函数[DllImport("user32.dll")]privatestaticexternIntPtrGetShellWindow();//取得窗口大小函数[DllImport("user32.dll",SetLastError=true)]privatestaticexternintGetWindowRect(IntPtrhwnd,outRECTrc);//桌面窗口句柄privateIntPtrdesktopHandle;//Windowhandleforthedesktop//Shell窗口句柄privateIntPtrshellHandle;//Windowhandlefortheshell因为桌面窗口和Shell窗口也是全屏,要排除在其他全屏程序之外。//取得桌面和Shell窗口句柄desktopHandle=GetDesktopWindow();shellHandle=GetShellWindow();//取得前台窗口句柄并判断是否全屏boolrunningFullScreen=false;RECTappBounds;RectanglescreenBounds;IntPtrhWnd;//取得前台窗口hWnd=GetForegroundWindow();if(hWnd!=null&&!hWnd.Equals(IntPtr.Zero)){//判断是否桌面或shellif(!(hWnd.Equals(desktopHandle)||hWnd.Equals(shellHandle))){//取得窗口大小GetWindowRect(hWnd,outappBounds);//判断是否全屏screenBounds=Screen.FromHandle(hWnd).Bounds;if((appBounds.Bottom-appBounds.Top)==screenBounds.Height&&(appBounds.Right-appBounds.Left)==screenBounds.Width)runningFullScreen=true;}}
解决方案四:
收藏
解决方案五:
但是如果在此之前有一个顶层窗口被显示在上面,那获得的窗体岂不是非全屏?
解决方案六:
可以调用DLL让程序Attach到程序运行的线程,通过任务管理器里面的Applications/Task比如Outlook就Attach到Inbox-MicrosoftOutlook.然后再利用2楼提供的方式就可以了