在程序化右键单击后,WindowsForms失去突出显示的状态

时间:2017-11-08 13:48:10

标签: c# windows winforms low-level

我正在实施一种软件,允许(禁用)用户仅通过鼠标点击导航Windows。为此,我有一个沿着屏幕边缘绘制到当前光标位置的雷达。

可能值得一提的是,我的窗口完全是点击通过:

#region Make window totally clickthrough
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x80000 /* WS_EX_LAYERED */ | 0x20 /* WS_EX_TRANSPARENT */ | 0x80/* WS_EX_TOOLWINDOW */ | 0x08000000 /* WS_EX_NOACTIVATE */;
        return cp;
    }
}
#endregion

当用户输入"突出显示"状态,我以编程方式告诉系统通过

开始突出显示
public void StartHighlighting()
{
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    Thread.Sleep(50);
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
}

然后我移动光标直到突出显示完成并告诉系统停止突出显示:

public void StopHighlighting()
{
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}

这就像一个魅力。但是,当我想通过以下方式右键单击选定的文本时:

public void PerformRightclick()
{
    mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
}

在显示上下文菜单之前,文本将失去其突出显示的状态。 mouse_event函数来自user32.dll库。

0 个答案:

没有答案