そのレベルの詳細を提供する単一のAPIはありません。
のWH_MOUSE
andWH_MOUSE_LL
フックSetWindowsHookEx()
、またはWM_INPUT
によって配信されるメッセージRegisterRawInputDevices()
は、マウスが相互作用してGetCursorPos()
いることを通知できます。また、関数は、クリック時にマウスカーソルが画面上のどこにあるかを通知できますが、クリックしている内容は通知できません。の上。あなたはそれを手動で理解しなければなりません。
たとえば、デスクトップはListViewコントロールとして実装されているため、WindowFromPoint()
andGetDesktopWindow()
関数を使用して、マウスがアプリケーションウィンドウではなくデスクトップウィンドウ自体に対応する座標にあるかどうかを確認できます。ある場合は、LVM_HITTEST
andLVM_GETITEM
メッセージを使用して決定します。デスクトップ上のどのアイコンをクリックして、その表示テキストを抽出します。次に、SHGetDesktopFolder()
関数とIShellFolder
インターフェイス、または関数を使用しSHParseDisplayName()
てそのテキストを解析しPIDL
、パス/ファイルを表すが返されるかどうかを確認します。返される場合は、を使用SHGetPathFromIDList()
して実際のパス/ファイル名を取得します。
Windowsエクスプローラーアプリで同じことをしたい場合は、もう少し複雑になります。WindowFromPoint()
、、、およびを使用してGetWindowThreadProcessId()
、マウスがWindowsエクスプローラーアプリ上にあるかどうかを確認します。ただし、そのUIはWindowsバージョンから次のバージョンに変わりますが、要点は、とを介してフォーカスされたコントロールを手動で見つけ、それがTreeView / ListViewコントロールであるかどうかを確認し、そうである場合は、コントロール固有のメッセージを使用して取得する必要があるということです。マウスカーソル座標の下にあるアイテム/アイコンに関する情報をもう一度使用して、そのアイテム/アイコンのテキストが実際に何を表しているかを把握します。OpenProcess()
EnumProcessModules()
AttachThreadInput()
GetActiveWindow()
IShellFolder
シェルプログラミングは非常に複雑なシステムであり、心の弱い人が相互作用するためのものではありません。それで、あなたは自分自身に尋ねる必要があります、なぜあなたはそもそもこの情報が必要なのですか?