Il n'y a pas d'API unique qui fournit ce niveau de détail.
Le WH_MOUSE
et WH_MOUSE_LL
crochets de SetWindowsHookEx()
, ou le message WM_INPUT
délivré par RegisterRawInputDevices()
, peuvent dire quand la souris est intereacted avec, et la fonction GetCursorPos()
peut vous dire où le curseur de la souris se trouve à l'écran au moment d'un clic , mais il ne peut pas vous dire sur quoi il clique. Vous devez comprendre cela manuellement.
Par exemple, le bureau est implémenté comme un contrôle ListView, vous pouvez utiliser les fonctions WindowFromPoint()
et GetDesktopWindow()
pour vérifier si la souris se trouve aux coordonnées correspondant à la fenêtre de bureau lui-même au lieu d'une fenêtre d'application, et si oui, utiliser les messages LVM_HITTEST
et LVM_GETITEM
pour déterminer quelle icône onthe bureau est en cours cliqué sur et extraire le texte d'affichage. Puis utilisez la fonction SHGetDesktopFolder()
et l'interface IShellFolder
, ou la fonction SHParseDisplayName()
, pour analyser ce texte et voir s'il renvoie un PIDL
qui représente un chemin/fichier, et si c'est le cas, utilisez SHGetPathFromIDList()
pour obtenir le chemin/nom de fichier réel.
Si vous voulez faire la même chose avec l'application Windows Explorer, cela devient un peu plus compliqué. Utilisez pour déterminer si la souris est sur l'application Windows Explorer WindowFromPoint()
, GetWindowThreadProcessId()
, OpenProcess()
et EnumProcessModules()
. Toutefois, son interface utilisateur passe de la version Windows à la suivante, mais vous devez localiser manuellement le contrôle ciblé via AttachThreadInput()
et GetActiveWindow()
, vérifier s'il s'agit d'un contrôle TreeView/ListView, et si oui, utiliser des messages spécifiques au contrôle pour obtenir des informations sur l'élément/icône sous les coordonnées du curseur de la souris, et utilisez à nouveau IShellFolder
pour comprendre ce que le texte de cet élément/icône représente réellement. La programmation de Shell est un système très complexe et pas pour la feinte de coeur d'interagir avec. Donc, vous devez vous demander, pourquoi avez-vous besoin de cette information en premier lieu?