c# – 需要激活一个窗口
发布时间:2020-12-16 01:38:20 所属栏目:百科 来源:网络整理
导读:我有这种情况. 我有一个应用程序的窗口句柄.我需要激活它.我尝试了所有这些功能,但总是不能正常工作.(大多数时候,它不能在第一次工作,我将不得不手动点击它来激活它.第二次尝试以后它工作正常) 我这样做的原因是因为我在表单的Form.Activate事件中编写了代码
我有这种情况.
我有一个应用程序的窗口句柄.我需要激活它.我尝试了所有这些功能,但总是不能正常工作.(大多数时候,它不能在第一次工作,我将不得不手动点击它来激活它.第二次尝试以后它工作正常) 我这样做的原因是因为我在表单的Form.Activate事件中编写了代码,我需要执行该代码. 应用程序是单实例应用程序.创建新实例时,它首先检查是否存在任何其他进程,如果找到,则将旧进程的句柄传递给这些函数,以便用户可以处理旧表单. 从不同的C应用程序调用应用程序. ????????[的DllImport( “USER32.DLL”)] ????????public static extern int ShowWindow(IntPtr hWnd,int nCmdShow); [DllImport("user32.dll")] public static extern int SetForegroundWindow(IntPtr hWnd); [DllImport("user32")] public static extern bool PostMessage(IntPtr hwnd,int msg,IntPtr wparam,IntPtr lparam); 解决方法
SetForgroundWindow仅在其进程具有输入焦点时才有效.这是我使用的:
public static void forceSetForegroundWindow( IntPtr hWnd,IntPtr mainThreadId ) { IntPtr foregroundThreadID = GetWindowThreadProcessId( GetForegroundWindow(),IntPtr.Zero ); if ( foregroundThreadID != mainThreadId ) { AttachThreadInput( mainThreadId,foregroundThreadID,true ); SetForegroundWindow( hWnd ); AttachThreadInput( mainThreadId,false ); } else SetForegroundWindow( hWnd ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Oracle中对数字加汉字的排序
- c# – 如何从.NET 4.5中的并行任务中获得收益
- 案例学习BlazeDS+Spring之十一:Simple Data Push
- swift – 在Caches目录中复制Realm文件
- ruby-on-rails – rails controller respond_to格式,带有两
- 通过Ajax Laravel DataTable返回html内容(使用yajrabox包)
- .net – 无法加载文件或程序集“”或其一个依赖项 API调用异
- bboss mvc ajax响应输出中文乱码解决方法
- 将带括号的字符串转换为树,Ruby
- Cocos2d-JS中使用CocosStudio资源——关卡选择界面