2012-10-18 36 views
1

我有一個應用程序。如果應用程序在一段時間內未被使用一定數量,則應該隱藏。當應用程序被隱藏並且我們將鼠標懸停在圖標上時,它應該被恢復。如何在c#中觸發自動隱藏圖標?

我怎樣才能做到這一點?提前致謝。

回答

1

就像JesseJames說的那樣,使用計時器來測量應用程序的非活動時間,並在一段時間後隱藏它。當鼠標懸停在NotifyIcon上時重新激活它。下面是一個示例WindowsForms解決方案,它的工作:

private Timer _timer; 
private int _ticks; 

public Form1() 
{ 
    _timer = new Timer { Interval = 1000, Enabled = true }; 
    _timer.Tick += TimerTick; 

    Activated += Form1_Activated; 
    MouseMove += Form1_MouseMove; 
    //notifyIcon1 is an icon set through the designer 
    notifyIcon1.MouseMove += NotifyIcon1MouseMove; 
} 

protected void TimerTick(object sender, EventArgs e) 
{ 
    //After 5 seconds the app will be hidden 
    if (_ticks++ == 5) 
    { 
     WindowState = FormWindowState.Minimized; 
     Hide(); 
     _timer.Stop(); 
     _ticks = 0; 
    } 
} 

protected void NotifyIcon1MouseMove(object sender, MouseEventArgs e) 
{ 
    WindowState = FormWindowState.Normal; 
    Show(); 
    _ticks = 0; 
    _timer.Start(); 
} 

protected void Form1_MouseMove(object sender, MouseEventArgs e) 
{ 
    _ticks = 0; 
} 

或許有可能存在一個清晰的解決方案,我不知道,但它可以讓你在路上。 WPF的原理相同,只是代碼略有不同。希望這可以幫助!

2

您必須在您的應用程序中定義一個計時器,以計算鼠標未超過窗體/窗口的時間。然後隱藏你的應用程序。

下載WPF NotifyIcon 和處理鼠標懸停事件,這將顯示窗體/窗口

編輯:

如果你不需要,儘量減少應用程序到系統托盤和隱藏窗口保持它在桌面上 - >使用相同的算法,但不隱藏窗口,只需將透明度設置爲0%或10%即可。當鼠標懸停時 - 將透明度設置爲100%。

+0

我寧願你的第一個方法。如果應用程序是透明的,你仍然可以與它進行交互嗎?因此,我認爲隱藏/最小化應用程序是「更安全」的... – Abbas

0

要查看用戶是否有任何輸入,您可以使用類似的方法,如this之一。爲了讓您的應用程序再次可見,您需要一種獲取全局鼠標和鍵盤輸入的方法,爲此可以使用鉤子,您可以找到針對該here的一個解決方案。如果鉤子被觸發,它實際上取決於你正在使用的是什麼樣的UI,但調用特定的hideshow方法應該足夠了。