2011-10-31 18 views
0

Comment puis-je vérifier si une fenêtre spécifique est ouverte ou non. Je n'ai qu'une partie du nom de la fenêtre. Je pense à utiliser EnumWindows() dans l'application console QT mais je reçois quelques erreurs indiquant "main.obj: -1: erreur: symbole externe non résolu imp__GetWindowTextW @ 12 référencé dans la fonction" int __stdcall EnumWindowsProc (struct HWND *, long) "(? EnumWindowsProc @@ YGHPAUHWND __ @@ J @ Z)"Qt - Obtenir toutes les fenêtres ouvertes Titre

Voici mon exemple de code

BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) { 
    char buff[255]; 

    if (IsWindowVisible(hWnd)) { 
     GetWindowText(hWnd, (LPWSTR) buff, 254); 
    } 
    return TRUE; 
} 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    EnumWindows(EnumWindowsProc, 0); 

    return 0; 
} 
+1

Je fais quelques suppositions ici, mais faites-vous des liens avec user32.lib? – Bart

+0

check out [Problème lien natif API Windows sur Qt + win32 + mingw] (http://stackoverflow.com/questions/267672) –

+0

Je parviens à compiler mes applications QT sans erreur en ajoutant #include Lynnooi

Répondre

0

EnumWindowsProc est pas de Qt, il est une fonction API windows, vous devez inclure windows.h

Je n'ai pas utilisé Qt, et le code peut passer complie, mais la sortie ne semble pas correcte. Quoi qu'il en soit, voici mon code

#include <conio.h> 
#include <iostream> 
#include <windows.h> 
using namespace std; 
char buff[255]; 
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) 
{ 
    if (IsWindowVisible(hWnd)) 
    { 
     GetWindowText(hWnd, (LPWSTR) buff, 254); 
    } 
    return TRUE; 
} 


int main() 
{ 
    EnumWindows(EnumWindowsProc, 0); 
    for(int i = 0; i != 254; ++i) 
     cout << buff[i]; 
    getch(); 
    return 0; 
} 
+0

j'avais déjà inclus le windows.h dans mon code – Lynnooi

+0

@Lynnooi votre code fonctionne dans mon application ... essayez de ne pas utiliser Qt, utilisez le code C++ natif. – shengy

0

Vous pouvez utiliser

Application.OpenForms["FormName"]

pour vérifier si la forme est ouverte ou non

+0

je voudrais obtenir toutes les fenêtres d'application ouvertes y compris celles qui ne sont pas l'application QT – Lynnooi

2

C'est une erreur de liens plutôt que d'une erreur de compilation.

Vous avez correctement inclus windows.h mais vous devez également ajouter les bibliothèques d'importation à vos options de l'éditeur de liens. Les trois fonctions Win32 dans votre exemple de code nécessitent que vous liez user32.lib.

Questions connexes