gpt4 book ai didi

c# - 是否可以将一个表格放在另一个表格之上,而不是 TopMost?

转载 作者:太空狗 更新时间:2023-10-30 00:48:32 25 4
gpt4 key购买 nike

我想做的很简单:将我的 WinForm 放在另一个之上,但不是最上面。比如,当我点击一个窗口时,我的 winform 会在它上面,但是当我点击其他东西时,比如浏览器,我的表单不会在它上面。

类似于 TopMost WinForm,但仅针对特定进程。(我正在为游戏制作叠加层,因此我需要它仅在游戏中位于最顶部。)

图片帮助(红色边框内的所有内容都是我的表格):enter image description here

然后当我切换到另一个窗口(在本例中为资源管理器)时,我希望我的表单处于后台,就像英雄联盟客户端一样 enter image description here

最佳答案

拥有的表单始终显示在其所有者表单的顶部。要使所有者拥有表单,您可以将所有者表单的引用分配给 Onwer拥有的表单的属性,例如:

var f = new Form();
f.Owner = this;
f.Show();

将另一个进程的窗口设置为所有者

要做到这一点,你应该首先找到其他进程的窗口句柄,然后使用SetWindowLong。 API函数,您可以将其设置为您的表单的所有者,例如:

//using System.Runtime.InteropServices;
//using System.Diagnostics;

[DllImport("user32.dll", EntryPoint = "SetWindowLong", CharSet = CharSet.Auto)]
public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
private void button1_Click(object sender, EventArgs e)
{
var notepad = Process.GetProcessesByName("notepad").FirstOrDefault();
if(notepad!=null)
{
var owner = notepad.MainWindowHandle;
var owned = this.Handle;
var i = SetWindowLong(owned, -8 /*GWL_HWNDPARENT*/, owner);
}
}

在上面的示例中,您的表单将始终位于记事本窗口的顶部。

关于c# - 是否可以将一个表格放在另一个表格之上,而不是 TopMost?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45901631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com