TopMost活跃但没有关注焦点

时间:2014-12-07 16:54:16

标签: c#

我在这个网站和谷歌看,但一无所获。 我需要显示一个包含一些控件显示信息的表单,但需要不要将焦点偷到其他窗口(如窗口全屏幕游戏)并且可以使用表单内的文本框,进行写入而无需窃取游戏窗口焦点。

我可以使用以下方法启动窗口而不使用steal焦点:Opening a WinForm with TopMost=true but not having it steal focus?

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

3 个答案:

答案 0 :(得分:0)

  

我需要显示一个包含一些控件显示信息的表单,但需要   不要把焦点偷到其他窗户   ...   但是当我点击窗口时,获得焦点。

所以听起来像是你想要一个普通的窗口,但只有在第一次显示时才会窃取焦点?

不使用内置的Form.Show(),而是使用带SW_SHOWNA的ShowWindow()API:

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);
}

答案 1 :(得分:0)

$(document).ready(function(){
    $('#html_container').load('random.html'function(){
        $('#random_div').html('<div id="loaded_html_div"></div>');
    });    
});

答案 2 :(得分:0)

您可以像下面的示例一样使用窗口显示标志进行控制。但这有一些问题。要提高最高排名,当前关注的过程应具有此窗口。另一方面,一个进程有两个窗口。 window1被聚焦,但是window2没有聚焦。如果保持window1的焦点,则调用波纹管函数。但是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);

秒:删除TOPMOST属性

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