Linux嵌入外部程序窗口,C#操作移动其他程序窗口

在做项目时候,曾经遇到一个问题,就是用C#的WinForm,来打开一个使用C++编写的软件,并控制打开窗体位置和大小。

在这里使用了Win32 API来做的。可以使用C#根据窗体的路径,启动一个进程,然后使用Win32 API控制打开窗口的位置和大小。

主要代码如下:

public class A

{

//调用Win32 API

[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "MoveWindow")]

public static extern bool MoveWindow(System.IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

//打开窗体方法,fileName是C++的窗体名称,包含路径

private void OpenAndSetWindow(String fileName)

{

Process p = new Process();//新建进程

p.StartInfo.FileName = fileName;//设置进程名字

p.StartInfo.CreateNoWindow = true;

p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;

p.Start();

MoveWindow(p.MainWindowHandle, 200, 300, 500, 400, true);

//p.MainWindowHandle是你要移动的窗口的句柄;200,300是移动后窗口左上角的横纵坐标;500,400是移动后窗口的宽度和高度;true表示移动后的窗口是需要重画

}

}0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PySide2中,可以使用QWindow类和QWindow.fromWinId()方法来嵌入外部程序窗口。 以下是一个示例代码: ```python import sys from PySide2.QtWidgets import QApplication, QWidget from PySide2.QtGui import QWindow, QGuiApplication from PySide2.QtCore import Qt class ExternalWindow(QWidget): def __init__(self, winId): super().__init__() self.winId = winId self.initUI() def initUI(self): self.setWindowFlags(Qt.FramelessWindowHint) self.setAttribute(Qt.WA_TranslucentBackground) self.setGeometry(0, 0, 800, 600) self.show() def createWindowContainer(self): container = QWindow.fromWinId(self.winId) container.setFlags(Qt.FramelessWindowHint) container.setGeometry(0, 0, 800, 600) container.create() container.setParent(self.winId, Qt.Window) container.show() if __name__ == '__main__': app = QApplication(sys.argv) external_win_id = 12345 # replace with your external window id external_win = ExternalWindow(external_win_id) external_win.createWindowContainer() sys.exit(app.exec_()) ``` 在上述代码中,我们首先创建一个名为ExternalWindow的QWidget类,该类将承载外部程序窗口。接下来,我们使用QWindow.fromWinId()方法创建一个QWindow实例,并将其设置为无边框窗口(Qt.FramelessWindowHint)。然后,我们将QWidget实例与QWindow实例相关联,并显示窗口。最后,我们在应用程序中启动ExternalWindow实例。 请注意,要嵌入外部程序窗口,您需要知道其窗口ID。在Windows上,您可以使用Spy ++工具来查找窗口ID。在Linux上,您可以使用xwininfo或xprop工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值