2014-01-21 2 views
0

Я искал форум, но ответов пока нет.Windows форма всегда сверху не работает C#

Мне нужно показать уведомление из приложения systray, пока пользователи работают в браузере.

Я хочу, чтобы это уведомление отображалось поверх всего, но даже если я установил его как TopMost, TopLevel или BringToFront или Focus, я не смогу добиться того, чего хочу.

Я использую простую форму Windows и показываю ее с помощью ShowDialog из приложения systray.

Пожалуйста, помогите мне :)

PS: если я запускаю форму уведомления от приложения с трее никакие другие приложения не открыты или сосредоточены она прекрасно работает, я просто не могу показать его в передней части окна активного браузера

+0

Если TopMost не работает, то вы можете попробовать использовать SetForegroundWindow в Win32 API, – MattR

+0

Просто пытался, но не повезло –

+0

проблема не в том, что я показываю уведомление как диалог из другого потока, то UI один, если я перемещу ShowDialog в пользовательский интерфейс нить все в порядке, но таким образом я блокирую взаимодействие с пользователем ... :( –

ответ

0
NameOfYourWindow myTopForm = new NameOfYourWindow(); 

myTopForm.Owner = App.Current.MainWindow; 
myTopForm.ShowInTaskbar = false; 
myTopForm.TopMost = true; 
myTopForm.ShowDialog(); 
+0

Не работает, мой владелец должен быть браузером, которое открыто в полноэкранном режиме –

0
#region SetForegroundWindow 
    [DllImport("kernel32.dll", ExactSpelling = true)] 
    public static extern IntPtr GetConsoleWindow(); 
    [DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    public static extern bool SetForegroundWindow(IntPtr hWnd); 
    #endregion 
    static void Main(string[] args) 
    { 
     while (true) 
     { 

      SetForegroundWindow(GetConsoleWindow()); 
     } 
    }