GetWindowText возвращает пустую строку для другого процесса - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь получить текст Window другого приложения MFC в цикле (я получаю дескриптор этого другого процесса, используя ProcessId). Но иногда я получаю это пустым. Когда я выполняю какие-то действия в этом другом приложении MFC, я иногда получаю текст Window, а иногда его нет. Я пытался с GetLastError, но он возвращает 0, когда GetWindowText возвращает пустое значение. Так есть ли способ узнать, в чем может быть ошибка в моем приложении или другом приложении MFC?

Пример кода:

 HWND hWnd = GetProcessHWND(<processid>); //This is function created to get 
    hWnd using process id
    if (hWnd)
   {
       CWnd *pWnd = CWnd::FromHandle(hWnd);
       while (pWnd->GetParent())
       {
          pWnd = pWnd->GetParent();
       }
       TCHAR chTitle[MAX_PATH];
       pWnd->GetWindowText(chTitle, MAX_PATH);
   }

1 Ответ

0 голосов
/ 20 января 2019

Ваша программа работает с правами обычного пользователя или с полными правами администратора? Если вы не можете получить текст окна из программ, работающих с полными правами администратора, это может быть связано с тем, что Microsoft ввела « фильтр сообщений привилегий пользовательского интерфейса (UIPI) » в Windows Vista: по умолчанию процесс не может отправить оконное сообщение другому процессу с более высоким уровнем целостности.

Если это так, и у вас есть исходный код программ, которые не дают действительных результатов, вы можете использовать API ChangeWindowMessageFilterEx (Windows 7 / Server 2008 R2 и выше), чтобы разрешить выбор или ChangeWindowMessageFilter (Windows Vista / Server 2008), чтобы разрешить всем сообщениям из непривилегированной программы достигать процесса, который выполняется с более высокими привилегиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...