沒有一個API提供了詳細程度。
的WH_MOUSE
和WH_MOUSE_LL
鉤SetWindowsHookEx()
,或RegisterRawInputDevices()
交付WM_INPUT
消息,可以告訴當鼠標正與intereacted和GetCursorPos()
功能可以告訴你的鼠標光標在屏幕上位於點擊時間,但它不能告訴你它是什麼點擊。你必須手動解決這個問題。
例如,桌面被實現爲ListView控件,這樣你就可以使用WindowFromPoint()
和GetDesktopWindow()
功能檢查,如果鼠標位於與桌面窗口本身,而不是一個應用程序窗口座標,如果這樣的話使用LVM_HITTEST
和LVM_GETITEM
消息來確定正在點擊桌面上的哪個圖標並提取其顯示文本。然後使用SHGetDesktopFolder()
函數和IShellFolder
接口或SHParseDisplayName()
函數解析該文本,並查看它是否返回表示路徑/文件的PIDL
,如果是,則使用SHGetPathFromIDList()
來獲取實際的路徑/文件名。
如果你想用Windows資源管理器應用程序做同樣的事情,它會變得更復雜一點。使用WindowFromPoint()
,GetWindowThreadProcessId()
,OpenProcess()
和EnumProcessModules()
來確定鼠標是否在Windows資源管理器應用程序上。但是,它的用戶界面從Windows版本更改爲下一版本,但問題是您必須通過AttachThreadInput()
和GetActiveWindow()
手動定位集中控制,檢查它是否是TreeView/ListView控件,如果是,則使用特定於控件的消息獲取有關鼠標光標座標下的項目/圖標的信息,並再次使用IShellFolder
來確定該項目/圖標的文本實際表示的內容。
殼牌編程是非常複雜的系統,並不是爲了與心靈的佯攻進行交互。所以你需要問自己,爲什麼你首先需要這些信息?