J'utilise CBT Windows Hook pour détecter les événements de création/suppression/min-max/déplacement de fenêtre.Détecter les fenêtres d'application
Je fonctionne bien, mais j'ai besoin de filtrer les événements provenant des widgets normaux. Pratiquement, j'ai besoin d'être notifié par CBT hook uniquement pour les fenêtres que l'utilisateur considère Windows.
Le problème que je suis face à moi faire enrager, depuis que je reçois continuellement des événements parasites, même si je filtre fenêtre comme suit:
BOOL FilterWindowHandle(HWND hwnd)
{
// Filtered window having WS_CHILDWINDOW style
if ((GetWindowLongPtr(hwnd, GWL_STYLE) & WS_CHILDWINDOW) != 0)
return (TRUE);
// Filtered window not having WS_CAPTION style
if ((GetWindowLongPtr(hwnd, GWL_STYLE) & WS_CAPTION) == 0)
return (TRUE);
// Not filtered
return (FALSE);
}
Ces événements parasites vient des effets d'ombre, les menus et tout affichés à l'écran .
Existe-t-il une méthode robuste pour filtrer les fenêtres réelles de ses enfants?
J'évite le test de WS_BORDER
ou similaire, puisque certaines applications pourraient créer leur fenêtre principale sans bordure ... ou ai-je tort?
vous êtes celui avec un certain nombre de critères. vous avez dans votre esprit une définition de ce qu'est une "vraie fenêtre", et c'est différent de ce que le système d'exploitation considère comme une fenêtre. Définissez ces critères et écrivez votre code pour le faire correspondre. Conseil: utilisez Spy ++ pour examiner les styles de fenêtres des fenêtres de votre système, et ceci, plus MSDN, devrait vous aider à trouver la solution. – tenfour
@tenfour Plus facile à dire qu'à faire! ;) – Luca
peut-être, mais de toute façon à la fin, vous devez savoir ce que vous faites, et ce que les styles signifient.Personne n'a dit que la programmation était facile :) – tenfour