我正在实施一种软件,允许(禁用)用户仅通过鼠标点击导航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库。