当前位置: 首页 > 编程语言 > C#

如何判断我的应用程序是否处于活动状态(有焦点)分享

时间:2023-04-11 12:19:05 C#

有.IsActive=true吗?我正在编写一个Messenger应用程序,并希望它在处于非活动状态和收到新消息时在任务栏中闪烁。使用P/Invoke并循环[System.Runtime.InteropServices.DllImport("user32.dll")]staticexternIntPtrGetForegroundWindow();privatestaticboolIsActive(Windowwnd){//最小化错误的解决方法//Managed.IsActive可能返回错误值if(wnd==null)returnfalse;返回GetForegroundWindow()==newWindowInteropHelper(wnd).Handle;}publicstaticboolIsApplicationActive(){foreach(varwndinApplication.Current.Windows.OfType())if(IsActive(wnd))returntrue;返回假;你可以订阅主窗口的激活事件并做任何你想做的事。你能试一试吗?试试这个,在你的MainForm中覆盖OnActivated方法并做任何你想做的事}跳转这对你有帮助ThereareApplicationhasActivatedandDeactivatedevents.如果你希望能够绑定到IsActive,你可以在App.xaml.cs中添加一个属性,当然你也可以通过代码访问这个属性Appapplication=Application.CurrentasApp;boolisActive=application.IsActive;App.xaml.cspublicpartialclassApp:Application,INotifyPropertyChanged{privateboolm_isActive;publicboolIsActive{get{返回m_isActive;}私有集{m_isActive=value;OnPropertyChanged("IsActive");}}protectedoverridevoidOnStartup(StartupEventArgs.e){OnStartup(e);Activated+=(objectsender,EventArgsea)=>{IsActive=true;};Deactivated+=(objectsender,EventArgsea)=>{IsActive=false;};}公共事件PropertyChangedEventHandlerPropertyChanged;privatevoidOnPropertyChanged(stringpropertyName){if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs(propertyName));一种方法(可能有更好的方法)是通过WindowsAPI找到活动窗口,然后找到活动窗口的进程名称。if(yourProcessName==ActiveWindowProcessName){//yourwindowisinfocus}另一种方法是保留对所有窗口的引用,以及当您想知道您的应用程序是否处于活动状态时,只需遍历所有窗口并检查IsActive值Another方法是使用MainWindow的OwnedWindows属性。每当创建一个新窗口时,主窗口就被指定为它的所有者。然后您可以遍历MainWindow的所有OwnedWindows并检查是否有任何活动。(没试过这种方法)以上就是C#学习教程的全部内容:如何判断我的应用是否活跃(有焦点)分享,如果对大家有用还需要详细了解C#学习教程,希望大家以后会多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢