windows合并窗口,不同程序嵌入窗口

在实际项目开发中,往往需求和实现方式千奇百怪,有时候会用不同的语言去实现不同的需求。

本次实现在windows系统中,不同程序之间的窗口嵌套。

用到的工具包:

  • org.eclipse.swt.win32.win32.x86_3.100.1.v4234e.jar
  • org.eclipse.swt.win32.win32.x86_64_3.100.1.v4236b.jar

由于每个程序之间的启动顺序和时间都不确定,因此,使用线程去做合并窗口的任务。在线程中循环查找各个程序的窗口句柄,然后进行合并。

代码过于简单,不做详细分析了,请自行查看。

需要注意的地方有两个,如下:

  • GlassWndClass-GlassWindowClass-2为窗口类型,可以使用Microsoft_Spy++软件进行查看。
    
    AppName为窗口的title,即窗口标题栏的名称。

 工具包和Microsoft_Spy++下载地址:

windows不同程序窗口合并工具包-桌面系统文档类资源-CSDN下载

package com.rtcce.ugv.view;

import com.rtcce.ugv.MainApp;
import com.rtcce.ugv.common.Constants;
import org.apache.log4j.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.internal.win32.TCHAR;

public class ShowDesktopThread extends Thread
{
	private static Logger LOG = Logger.getLogger(ShowDesktopThread.class);

	private long childD360 = 0;
	private long childFpv = 0;
	private long childTask = 0;
	private long parent = 0;

	private boolean succeed = false;

	public void run()
	{
		while (MainApp.running && !succeed)
		{
			try
			{
				if(parent == 0)
				{
					parent = OS.FindWindow(new TCHAR(0, "GlassWndClass-GlassWindowClass-2", true),new TCHAR(0, Constants.AppName, true));
				}

				if (parent == 0)
				{
					Thread.sleep(1000);
				     continue;
				}

				if(childD360 == 0)
				{
					childD360 = OS.FindWindow(new TCHAR(0, "SunAwtFrame", true), new TCHAR(0, "D360", true));
					if(childD360 != 0)
					{
						OS.SetWindowPos(childD360, OS.HWND_TOPMOST, 50 , 0, 1225, 720, SWT.NULL);
						OS.SetParent(childD360, parent);
					}
				}

				if(childFpv == 0)
				{
					childFpv = OS.FindWindow(new TCHAR(0, "SunAwtFrame", true), new TCHAR(0, "FPV", true));
					if(childFpv != 0)
					{
						OS.SetWindowPos(childFpv, OS.HWND_TOPMOST, 1280 , 0, 1280, 720, SWT.NULL);
						OS.SetParent(childFpv, parent);
					}
				}

				if(childTask == 0)
				{
					childTask = OS.FindWindow(new TCHAR(0, "SunAwtFrame", true), new TCHAR(0, "TASK", true));
					if(childTask != 0)
					{
						OS.SetWindowPos(childTask, OS.HWND_TOPMOST, 2565 , 0, 768, 432, SWT.NULL);
						OS.SetParent(childTask, parent);
					}
				}

				if (childD360 != 0 && childFpv != 0 && childTask != 0)
				{
					succeed = true;
				}

				try
				{
					Thread.sleep(1000);
				} catch (InterruptedException e)
				{
					//nothing
				}
			}
			catch (Exception e)
			{
				LOG.error(e.getMessage(), e);
			}
		}
	}
}

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值