2015-10-06 2 views
4

Как я могу получить заголовок окна, на который в данный момент сосредоточен пользователь? Я делаю программу, которая запускается с другим окном, и если пользователь не сосредоточен на этом окне, я не нахожу причины для моей программы продолжать обновление.Как получить активное окно, которое не является частью моего приложения?

Итак, как я могу определить, в каком окне сосредоточиться пользователь?

я стараюсь смотреть в

[DllImport("user32.dll")] 
static extern IntPtr GetActiveWindow(); 

, но я, кажется, я могу использовать только, что если окно является частью моего приложения, которое является его нет.

+0

Вы читали документацию для этой функции? Если да, то какая часть была непонятна? Если нет, почему бы и нет? –

ответ

8

Проверьте этот код:

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


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

private string GetActiveWindowTitle() 
{ 
    const int nChars = 256; 
    StringBuilder Buff = new StringBuilder(nChars); 
    IntPtr handle = GetForegroundWindow(); 

    if (GetWindowText(handle, Buff, nChars) > 0) 
    { 
    return Buff.ToString(); 
    } 
    return null; 
} 
+0

Теперь он работает, спасибо. Я буду принимать его, когда смогу. –

+0

Извините, на это потребовалось столько времени, чтобы принять ответ, сделанный сейчас. –

+0

@JoakimCarlsson Thats alright !!! Благодаря :) –

1

Используйте GetForegroundWindow, чтобы получить ручку сфокусированного окна и GetWindowText, чтобы получить заголовок окна.

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

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

static void Main() { 
    StringBuilder builder = new StringBuilder(255) ; 
    GetWindowText(GetForegroundWindow(), builder, 255) ; 

    Console.WriteLine(builder) ; 
} 
+0

По какой-то причине это будет составлять длину строителя 0. –

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