Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最活跃但没有集中注意力_C# - Fatal编程技术网

C# 最活跃但没有集中注意力

C# 最活跃但没有集中注意力,c#,C#,我在这个网站和谷歌搜索,但什么也没找到。 我需要显示一个包含一些控件显示信息的窗体,但不需要将焦点窃取到其他窗口(如带窗口的全屏游戏),并且可以使用窗体内的文本框进行写入,而不必窃取游戏窗口焦点 我可以使用以下方法启动窗口而不窃取焦点: 但当我在窗口中单击时,会获得焦点。我需要使窗口处于活动状态,文本框可写,但不窃取其他窗口焦点 有可能吗 我需要显示包含一些控件显示信息的窗体,但需要 不要将焦点窃取到其他窗口 ... 但当我在窗口中单击时,会获得焦点 所以在我看来,你想要一个常规的窗口,但只有当

我在这个网站和谷歌搜索,但什么也没找到。 我需要显示一个包含一些控件显示信息的窗体,但不需要将焦点窃取到其他窗口(如带窗口的全屏游戏),并且可以使用窗体内的文本框进行写入,而不必窃取游戏窗口焦点

我可以使用以下方法启动窗口而不窃取焦点:

但当我在窗口中单击时,会获得焦点。我需要使窗口处于活动状态,文本框可写,但不窃取其他窗口焦点 有可能吗

我需要显示包含一些控件显示信息的窗体,但需要 不要将焦点窃取到其他窗口 ... 但当我在窗口中单击时,会获得焦点

所以在我看来,你想要一个常规的窗口,但只有当它第一次显示时才不会窃取焦点

与SW_SHOWNA一起使用ShowWindow()API,而不是使用内置的
表单.Show()

private const int SW_SHOWNA = 4;

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

private void ShowWindowWithoutFocus()
{
    ShowWindow(this.Handle, SW_SHOWNA);
}
//将窗口设置为前台
[DllImport(“user32.dll”)]
私有静态外部int SetForegroundWindow(IntPtr hwnd);
/// 
///onVisible焦点输入用户名文本框
/// 
受保护的覆盖无效OnVisibleChanged(事件参数e)
{
SetForegroundWindow(此.Handle);
根据可视性变化(e);
}

您可以使用窗口显示标志进行控制,如下例所示。但是它有一些问题。若要提升顶部位置,当前关注的流程应具有此窗口。另一方面,一个进程有两个窗口。window1已聚焦,但window2未聚焦。如果保持window1的焦点,则调用bellow函数。但是window1和window2进程是不同的。此功能不起作用

window2->SetWindowPos(0, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
要移动顶部位置而不考虑焦点和进程,请调用两次setWindowpos

第一:将屏幕移到最上面,但窗口始终处于最上面的位置并占据最上面的位置

window2->SetWindowPos(HWND_TOPMOST , 0,0,0,0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
第二:删除最顶端的属性

window2->SetWindowPos(HWND_NOTOPMOST , 0,0,0,0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);

恐怕不行,你不可能有一个没有焦点的可写文本框,那怎么办呢?当用户点击控件并写入时,它就会有焦点。但一旦他/她完成输入,您就可以关闭表单。然后,你可以使用你提到的技巧打开另一个看起来完全相同但没有焦点的窗口。我需要窗口不要窃取焦点,但允许使用前面提到的内部控件,在文本框中键入你的窗口需要焦点。你所要求的东西并不一致。
window2->SetWindowPos(HWND_NOTOPMOST , 0,0,0,0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);