J'ai une fonction en C (!) qui cherche tout ce qui tourne
TestSiUnique(void)
{
// Cherche une occurence du programme courant par son titre.
// Passe en revue toutes les applications qui tournent.
//
HWND hWnd;
hWnd = GetTopWindow(NULL);
while (hWnd != NULL)
{
if ((IsWindowVisible(hWnd) != 0) &&
(IsWindowEnabled(hWnd) != 0))
{
long TL;
// On n'a ici que les noms de feuilles ppales "visibles"
// Si pas test, on trouve aussi ce qui est en "arrière-plan"
TL = GetWindowLong(hWnd, GWL_STYLE);
if ((TL & WS_POPUP) != WS_POPUP)
{ // != WS_POPUP donne nom de titres de fenêtres
// == WS_POPUP donne le nom des applications
char WName[256]; // ? Taille maxi de chaîne ?
WName[0] = '\0';
GetWindowText(hWnd, WName, sizeof(WName));
// Dans WName, on a le titre des feuilles
}
}
hWnd = GetWindow(hWnd, GW_HWNDNEXT);
}
}
// fin de module TestSiUnique
A transposer en VB (vu que je crois avec les VB modernes (VB3, il fallait expliciter les prototypes des API), on appelle les API "directement".
Le && est le AND du VB. NULL c'est zéro. != c'est <> (différent, non égal). char WName[256]; c'est un string de 256 caractères.
Le & tout seul, c'est un AND binaire.