SWT程序中怎么嵌入第三方程序的窗口


本篇内容主要讲解“SWT程序中怎么嵌入第三方程序的窗口”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SWT程序中怎么嵌入第三方程序的窗口”吧! 在开发系统的时候经常需要嵌入外部的程序,比 香港云主机如将企业原有的系统集成到我们的系统中,而且要求看起 来像和我们的程序一样嵌入到我们的系统中,这时就要借助于Win32了。在以前使用VC、Delphi、C#开发的 使用的时候可以直接调用Win32的API来操作,好在SWT中提供了Win32API的封装,而且封装的比较好,大部 分都在org.eclipse.swt.internal.win32.OS这个类中。核心原理就是调用SetParent这个API将我们的程序中的某个控件设置为被嵌套程序的父窗口。 核心代码如下: private void execute(String fileName) throws Exception { int hHeap = OS.GetProcessHeap (); TCHAR buffer = new TCHAR (0, fileName, true); int byteCount = buffer.length () * TCHAR.sizeof; int lpFile = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount); OS.MoveMemory (lpFile, buffer, byteCount); SHELLEXECUTEINFO info = new SHELLEXECUTEINFO (); info.cbSize = SHELLEXECUTEINFO.sizeof; //隐藏启动info.lpFile = lpFile; info.nShow = OS.SW_HIDE; boolean result = OS.ShellExecuteEx (info); if (lpFile != 0) {OS.HeapFree (hHeap, 0, lpFile); }if(result==false){ throw new Exception(“启动失败!”); }} protected void startThirdExe() throws Exception { //”notepad.exe”为待启动的程序名 execute(“notepad.exe”);//等待NotePad.exe启动并且初始化完毕,需要根据实际情况调整sleep的时间Thread.sleep(1000);//”Notepad”为被嵌套程序窗口的ClassName(Win32级别),可以使用Spy++等工具查看 int notepadHwnd = OS.FindWindow(new TCHAR(0,”Notepad”,true),null);//&~WS_BORDER去掉内嵌程序边框,这样看起来更像一个内嵌的程序。如果需要显示边框,则将这两行代 码删除 int oldStyle = OS.GetWindowLong(notepadHwnd, OS.GWL_STYLE);OS.SetWindowLong(notepadHwnd, OS.GWL_STYLE, oldStyle&~OS.WS_BORDER);//composite为承载被启动程序的控件 OS.SetParent(notepadHwnd, composite.handle); //窗口最大化 OS.SendMessage(notepadHwnd, OS.WM_SYSCOMMAND, OS.SC_MAXIMIZE, 0); } 到此,相信大家对“SWT程序中怎么嵌入第三方程序的窗口”有了更深的了解,不妨来实际操作一番吧!这里是开发云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: 如何修改maven本地仓库路径

如何修改maven本地仓库路径,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你 香港云主机能解决这个问题。手动创建本地仓库的地址为:d:/m2/repository从windows的环境变量中增加了:M2_REPO…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/21 12:51
下一篇 09/21 12:52

相关推荐