2015-06-17 4 views
1

Я создал несколько глобальных горячих клавиш для своего приложения, и я хочу, чтобы они работали, только если мое приложение активно. (Это не должно работать, если мое приложение не является активной формой).Как проверить, является ли мое приложение формой активации Windows

Итак, как я могу проверить, является ли мое приложение winform C# активным, среди всех остальных приложений Windows?

Я попытался

if(this.Focused) 
    //Do somthing 

Но это не работает

+0

неясно, что вы asking..please положить немного света – tharif

+0

@utility Вопросы были обновлены –

ответ

0

Попробуйте это:

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] 
private static extern IntPtr GetForegroundWindow(); 
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
private static extern int GetWindowThreadProcessId(IntPtr handle, out int processId); 

public static bool Activates() 
{ 
    var x = GetForegroundWindow(); 
    if (x == IntPtr.Zero) { 
     return false;  
    } 

    var y = Process.GetCurrentProcess().Id; 
    int i; 
    GetWindowThreadProcessId(x, out i); 

    return i == y; 
} 

Вы также можете обратиться: C#: Detecting which application has focus

0

Вы можете использовать функцию API для Windows GetForegroundWindow и GetWindowText ,

GetForegroundWindow:

Функция GetForegroundWindow возвращает дескриптор окна, с которым пользователь работает в настоящее время.

GetWindowText:

В GetWindowText функция копирует текст заголовка заданного окна (если оно имеется) в буфер.

Добавить ниже код, чтобы объявить функции API:

[ DllImport("user32.dll") ] 
     static extern int GetForegroundWindow(); 

[ DllImport("user32.dll") ] 
     static extern int GetWindowText(int hWnd, StringBuilder text, int count); 

Запуск таймера:

private void timer1_Tick(object sender, System.EventArgs e) 
     { 
      GetActiveWindow(); 
     } 

Активная функция окна:

private void GetActiveWindow() 
    { 

     const int nChars = 256; 
     int handle = 0; 
     StringBuilder Buff = new StringBuilder(nChars); 

     handle = GetForegroundWindow(); 

     if (GetWindowText(handle, Buff, nChars) > 0) 
     { 
      this.captionWindowLabel.Text = Buff.ToString(); 
      this.IDWindowLabel.Text = handle.ToString(); 
     } 

    } 
Смежные вопросы