2016-04-12 5 views
0

с использованием функции GetWindowText. Я пытаюсь получить заголовок окна с помощью C# сообщения об ошибке. Я могу получить заголовок окна каждой кнопки в диалоге, но не текст ярлыка. Используя Spy ++, я определил диалог, и поле «Окно Caption» заполнено сообщением в метке диалога, но GetWindowText этой Window Handle дает мне пустую строку. По сравнению с кнопкой Window Handle, которая дает мне строку с окном Caption. Это код, который я использую:GetWindowText только дает мне заголовок кнопок с окнами, но не метки

string nameOfStuff = ""; 
StringBuilder lpClassName = new StringBuilder(); 
int index = 20; 
int ct = 0; 
IntPtr result = IntPtr.Zero; 
do 
{ 
    result = FindWindowEx(appHandle, result, null, null); 
    if (result != IntPtr.Zero) 
    { 
     GetWindowText(result, lpClassName, 100); 
     nameOfStuff += "  " + Convert.ToString(ct) + lpClassName.ToString() + "\n"; 
     ++ct; 
    } 
} 

while (ct < index && result != IntPtr.Zero); 

Этот код дает мне все текстовые титры, кроме тех, что указаны на этикетке. Вот как Spy ++ выглядит следующим образом: enter image description here

enter image description here

Любая идея, почему я не могу получить заголовок окна метки таким образом? Спасибо!

+0

[GetWindowText] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633520.aspx): * «Однако GetWindowText не может получить текст элемента управления в другом приложении». * – IInspectable

+0

Так как же я получил ярлык кнопки? И какова правильная функция для получения заголовка окна? – doom4

+0

* «Как же я получил ярлык на кнопке?» * - Удачное совпадение. Однако вопрос о том, почему что-то работает, когда используется вне его спецификации, не очень помогает. * «И какая правильная функция для получения заголовка окна?» * - Опять же, из [GetWindowText] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633520.aspx): * «Чтобы получить текст элемента управления в другом процессе, отправьте сообщение [** WM_GETTEXT **] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632627.aspx) непосредственно, а не вызов ** GetWindowText **. "* – IInspectable

ответ

0

Вы можете использовать этот код, чтобы получить подпись:

LRESULT result = ::SendMessage(handle_of_window, WM_GETTEXT, 255, (LPARAM)charArray); 
if (result > 0) 
{ 
    // Print charArray to get result. 
}