Você está aqui: C++ ::: Win32 API (Windows API) ::: Formulários e Janelas |
Usando a função EnumWindows() da API do Windows para retornar uma lista das janelas visíveisQuantidade de visualizações: 8082 vezes |
A função EnumWindows() é usada quando precisamos obter uma lista de todas as janelas de nível alto (top-level) visíveis na tela (ainda que minimizadas ou sobrepostas pelas janelas de outros programas). Esta função opera juntamente com uma função de CALLBACK EnumWindowsProc() que deve ser fornecida por nossos programas C++. Veja o protótipo da função EnumWindows(): BOOL EnumWindows( WNDENUMPROC lpEnumFunc,...... Veja que o primeiro parâmetro da função é um ponteiro para a função de callback definida em nossa própria aplicação. Esta função de callback é chamada uma vez para cada janela encontrada. O segundo parâmetro é um valor a ser fornecido também por nossa aplicação. Geralmente fornecemos o valor 0 para este parâmetro. Veja agora o protótipo da função de callback EnumWindowsProc(): BOOL CALLBACK EnumWindowsProc( HWND hwnd,...... Esta função de callback possui dois parâmetros. O primeiro (hwnd) guarda o handle para a janela encontrada na iteração atual. O segundo parâmetro (lParam) é o valor fornecido à função EnumWindows() no momento de sua chamada. Para continuar e exibir os dados da próxima janela, a função de callback deve retornar TRUE. Para interromper a listagem, basta retornar o valor FALSE. Veja um programa no qual listamos todas as janelas visíveis na tela, incluindo seu handle, id do processo, título e caminho e nome do executável: #include <cstdlib> #include <iostream> #include <windows.h> #include <psapi.h> /* Este exemplo usa o header <psapi.h> É necessário fazer uma referência à psapi.lib */ using namespace std; // função de CALLBACK usada para listar todas as janelas BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam){ CHAR temp[255]; DWORD dwThreadId, dwProcessId; HINSTANCE hInstance; HANDLE hProcess; if(!hWnd) return TRUE; // não é uma janela if(!IsWindowVisible(hWnd)) return TRUE; // é janela, mas não está visível if(!SendMessage(hWnd, WM_GETTEXT, sizeof(temp), (LPARAM)temp)) return TRUE; // é janela, está visível, mas não possui título // obtém o handle da instância da janela hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); // obtém o id da thread que criou este processo dwThreadId = GetWindowThreadProcessId(hWnd, &dwProcessId); // abre o processo...... Note que alguns programadores C/C++ fornecem o valor NULL como segundo argumento para uma chamada à EnumWindows(). No Dev-C++ 4.9, teremos uma mensagem de advertência se fizermos isso. Veja: [Warning] passing NULL used for non-pointer converting 2 of ...... |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |