SetForegroundWindow在Windows Server 2008上失败【JAVA教程】

!
也想出现在这里? 联系我们
信息

SetForegroundWindow在Windows Server 2008上失败,第1张

概述SetForegroundWindow在Windows Server 2008上失败

场景我有我的主要应用程序,最初是用C#.Net应用程序启动的Borland C ++编写的。 这个主应用程序偶尔会从一个名为BRWSEXE的进程打开一个modal dialog。 popup一个modal dialog窗口后,您可能会不小心点击主应用程序中的某个位置(而不是对话框),导致焦点短暂地转换到发送Z后面的模式对话框的主应用程序。 但是在主应用程序中你实际上不能做任何事情,它被那个必须先closures的模式对话框locking,然后才能继续。

问题使用启动一切的.net应用程序,我可以找出与主应用程序相关的BRWSEXE实例,并强制它们进入前台。 这个策略到目前为止我已经testing过了(windows XP,windows 7,windows Server 2003 R2),但它在windows Server 2008上无法正常工作。所以据我所知,我的代码工作正常。但在那个环境中的东西正在抛弃它。

我的代码

[Dllimport(\”user32.dll\”)] static extern bool SetForegrounDWindow(IntPtr hWnd); [Dllimport(\”user32.dll\”)] static extern IntPtr AttachThreadinput(IntPtr IDAttach,IntPtr IDAttachTo,bool fAttach); private voID PushBRWSEXetoFront() { //Make sure MyApplication is running if (Process.GetProcessesByname(\”MyApplicationname\”).Length == 1) { Process[] brwsProc = Process.GetProcessesByname(\”BRWSEXE\”); //Locate any processes for the browse dialog windows for (int x = brwsProc.Length – 1; x > -1; x–) { //Make sure the browse window we are looking at is associated with the active program we are looking at if (brwsProc[x].SessionID == Process.GetCurrentProcess().SessionID || brwsProc[x].SessionID == Process.GetProcessesByname(\”MyApplicationname\”)[0].SessionID) { //attach to the main applications thread AttachThreadinput(brwsProc[x].MainWindowHandle,Process.GetProcessesByname(\”MyApplicationname\”)[0].MainWindowHandle,true); //Call Set foreground window to push the browse window in front of the rest of the program. SetForegrounDWindow(brwsProc[x].MainWindowHandle); //Detach from the main thread AttachThreadinput(brwsProc[x].MainWindowHandle,false); } } } }

如何从桌面应用程序中的windows Toast Notificiation接收文本框值?

释放registry处理速度更快

如何让多点触摸与JWinPointer在libGDX中正常工作?

服务启动时向windowslogin屏幕发送消息

如何在windows中使用C / C ++获取文件types图标?

试图在windows上用MAMP在PHP中安装mongodb

如何在windows中使用Python BasehttpRequestHandler将图像传输到客户端?

什么是轻量级windows应用程序的最佳开源示例?

在窗口中的WebKit for pygtk中embeddedFlash

通过链接更新桌面背景

你的AttachThreadinput声明是完全错误的。 它返回bool ,参数是uint 。 而你错误地使用它,你应该传递线程ID,而不是窗口句柄。 你需要GetwindowThreadProcessID() 。

而且你根本不检查错误,所以你显然不能诊断失败。 需要SetLastError属性,用Marshal.GetLastWin32Error()检索错误。 使用pinvoke.net更好的pinvoke声明。

我已经使用了SwitchToThisWindow() ,虽然MSDN说它可以在未来版本的windows中删除,但它仍然适用于我。

总结

以上是内存溢出为你收集整理的SetForegroundWindow在Windows Server 2008上失败全部内容,希望文章能够帮你解决SetForegroundWindow在Windows Server 2008上失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞61 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容