2013-04-04 3 views
0

Как получить дескриптор HWND диалогового окна, который пользователь открывает при нажатии кнопки. Я использую Spy ++ для поиска класса окна и названия, но он говорит, что такого окна не найдено. И как тогда получить дескриптор этого диалога на C++ с помощью Win API?Обзор дескриптора диалогового окна папки C++

Я надеюсь, что смогу сделать это, используя простые функции, такие как FindWindow, GetParent, любую функцию WIN APi. Мне не нравится что-то вводить или загружать DLL. Благодаря

UPDATE: диалог браузера

папка открыта другая программа. Я хочу получить ручку из другой программы, моей программы. Благодарю. Ближайший к нужному мне на данный момент функция WindowFromPoint

+1

Это могло бы помочь. Я могу подтвердить, что он работает: http://blogs.msdn.com/b/oldnewthing/archive/2013/03/25/10404940.aspx – chris

+0

@chris Привет, есть ли другой способ, не впрыскивая DLL или без крючков? thanks – Jigberto

+0

Этот крючок не требует инъекции или DLL. Является ли ваш поток тем, кто создает диалог, или это другой процесс/поток? – chris

ответ

3

Accessibility Позволяет захватывать события создания окна из других процессов без вставки DLL. Вы можете изменить пример, подходящий для окна просмотра. Вот пример, который я сделал ранее для проверки, основанный на том, что из статьи. Изменяйте его, как хотите:

#include <iostream> 
#include <windows.h> 

void CALLBACK proc(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG obj, LONG child, DWORD thr, DWORD time) { 
    if (hwnd && obj == OBJID_WINDOW && child == CHILDID_SELF) { 
     switch (event) { 
      case EVENT_OBJECT_CREATE: { 
       std::cout << "Window created!\n"; 
       break; 
      } 

      case EVENT_OBJECT_DESTROY: { 
       std::cout << "Window destroyed!\n"; 
       break; 
      } 
     } 
    } 
} 

int main() { 
    HWINEVENTHOOK hook = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_DESTROY, nullptr, proc, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); 

    MSG msg; 
    while (GetMessage(&msg, nullptr, 0, 0)) { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    if (hook) { 
     UnhookWinEvent(hook); 
    } 
} 
+0

Привет, я могу получить ручку диалогового окна, но я не могу получить дескриптор элемента управления Edit элемента. Я хочу вставить в него текст, пожалуйста, помогите. – Jigberto

+1

@Jigberto, простой вызов 'FindWindowEx (hwndDlg, nullptr," EDIT ", nullptr);' должен получить его. – chris

+0

Я сделал это, я могу найти дескриптор для EDIT, но я не могу получить или установить текст для объекта EDIT. 'GetWindowText (z, szName, ARRAYSIZE (szName)); 'эта функция возвращает пустое значение. Вы хотите, чтобы я открыл эту тему в качестве нового вопроса и попытался помочь мне? – Jigberto

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