2012-02-29 45 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