2008-09-25 48 views
23

幾年前,我無意中嘗試寫一個小應用程序來保存我的戰術桌面圖標,因爲當有些事件重置它們時,我厭倦了將它們拖回到它們的位置。我在放棄WAY之後放棄了太多時間,無法找到查詢方式,更不用說保存和重置我的圖標桌面位置。如何以編程方式操縱Windows桌面圖標位置?

任何人都知道Windows在哪裏持續這個信息,如果有一個API來設置它們?

感謝, 理查德

回答

10

如果我沒有弄錯桌面只是一個ListView,你必須發送LVM_SETITEMPOSITION消息到桌面的句柄。

我搜索了一些C#代碼並找不到示例,但是我找到了以下文章。 Torry: ...get/set the positions of desktop icons?。這是德爾福的代碼,但我覺得它很可讀,並且有一些P/Invokes,你可以將它翻譯成C#。

+0

我開始使用這個代碼作爲基礎,但是當用google搜索一些東西時,找到了我發佈的鏈接作爲答案,所以我將相信你的答案,謝謝。 – ZeroBugBounce 2008-09-26 16:38:08

+0

現在這個鏈接看起來像是垃圾...... – 2015-02-01 22:52:07

0

我不知道該API的想法,但我知道的UltraMon(http://www.realtimesoft.com/ultramon/)已列入保存圖標放置一個功能(雖然我從來沒有用過它保存圖標的位置,它是多顯示器使用不可或缺)。最新的beta版本與Vista完美無瑕地工作(除了最初通過RDP登錄到我的機器時有時會出現輕微故障或兩個故障),當然,對於XP沒有任何問題。我已經使用了四年多了。

我有沒有提到它是多顯示器使用的最佳工具?

2

桌面只是一個ListView控件,您可以獲取其句柄並向其發送消息以使用LVM_SETITEMPOSITION移動圖標。不過,使用LVMGETITEMPOS獲取圖標位置有點複雜。您必須將指針傳遞給POINT結構作爲您的LPARAM。如果您嘗試這樣做,您可能會崩潰Explorer。問題在於你在地址空間中傳遞了一個指針,控制器將其解釋爲資源管理器地址空間中的一個指針。哎喲!

我使用的解決方案是將一個DLL注入資源管理器進程並從那裏發送消息。然後,您只需要有一種方法將位置信息返回到您的流程。

相關問題