2012-02-29 46 views
5

我想写一个应用程序来处理某些用户操作。透明窗口应用程序覆盖在Windows中

该应用程序将永远是透明的,应点击。所以,后面的窗口将被看到,并且透明的应用程序点击后,我应该可以点击后面的窗口。只有特定的用户操作(如双击)我想在我的透明应用程序中处理。

有没有可能做到这一点?任何指导方针,赞赏。

回答

3

您可以从您的应用程序使假冒的窗口中点击:

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] 
    public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo); 

    private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
    private const int MOUSEEVENTF_LEFTUP = 0x04; 
    private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
    private const int MOUSEEVENTF_RIGHTUP = 0x10; 

private void Form_MouseClick(object sender, MouseEventArgs e) 
{ 
    this.Hide(); 
    Point p = this.PointToScreen(e.Location); 
    mouse_event(MOUSEEVENTF_LEFTDOWN , p.X, p.Y, 0, 0); 
    mouse_event(MOUSEEVENTF_LEFTUP, p.X, p.Y, 0, 0); 
    this.Show();//since this.opacity = 0; form will never be really visible 
} 

现在上双击,你可以设置你什么都想要。

+0

你会如何去确保这个假表格在顶部?当用户将其他表单带到z顺序的顶部时,此表单将不会收到双击。 – 2012-02-29 15:08:02

+0

@ DavidHeffernan - 是的,这确实是一个问题。 – Jimmy 2012-02-29 17:39:37

+0

@大卫Heffernan,普通人:'this.TopMost = true;' – 2012-02-29 17:43:01

1

您可以制作一个透明的窗口并点击。然而,这是全部或没有。除了双击之外,您无法点击。

所以,要做你想做的事,我相信你将需要使用全局鼠标钩来处理双击。但是这将需要本地代码。

事实上,想一想,为什么你需要透明的点击窗口呢?

+0

在进行演示或培训时可以提供提升经验的能力。例如,我可以强调/圈出我展示的应用程序/演示文稿的一部分。 – Jimmy 2012-02-29 17:29:41

+0

已经有很多工具可以做到这一点。 – 2012-02-29 17:38:39

+1

是的,但我希望能够扩展功能。我还没有看到任何可以扩展的开源工具。 – Jimmy 2012-02-29 17:44:51