2009-12-25 107 views
1

我喜歡在桌面上使用大圖標,但很多時候它們恢復到正常大小,仍然無法追蹤爲什麼:)。 作爲一名程序員,我決定編寫自己的工具來保存和恢復圖標位置。谷歌搜索並沒有提供太多的信息。 任何人都可以給我一個提示或指向我可以開始的地方嗎?如何從Delphi中獲取/設置桌面圖標的位置和大小?

回答

2

你不可靠。雷蒙德陳explains why在這個職位。

基本上,這是因爲沒有辦法強制圖標位於桌面上的特定位置,這意味着無法指定單個圖標的位置。

+0

開始謝謝,很有意思! – kuaw26 2009-12-29 18:37:04

2

在一個時間點,即在Win2k/WinXP中爲肯定,桌面實際上是一個類型的ListView。我不確定在新操作系統中仍然如此。知道獲取桌面句柄並使用LV api函數很容易將其操作爲使用報告樣式進行顯示。

這裏有兩個函數,告訴你如何開始操縱桌面。

注:我知道這適用於WinXP,我認爲它將適用於Vista和Win7,但我沒有測試過它。使用這些示例,不需要花費很長時間編寫一組函數來獲取/設置桌面上所有內容的圖標位置。

procedure ReportStyleDesktop; 
var 
    wHandle : THandle; 
    wStyle : Longint; 
begin 
    wHandle := GetDesktopWindow; 

    if wHandle <> 0 then 
    wHandle := FindWindowEx(wHandle, 0, 'Progman', 'Program Manager'); 

    if wHandle <> 0 then 
    wHandle := FindWindowEx(wHandle, 0, 'SHELLDLL_DefView', 0); 

    if wHandle <> 0 then 
    wHandle := FindWindowEx(wHandle, 0, 'SysListView32', 0); 

    if wHandle <> 0 then 
    begin 
    wStyle := GetWindowLong(wHandle, GWL_STYLE); 
    wStyle := wStyle and (not LVS_TYPEMASK); 
    wStyle := wStyle or LVS_REPORT or LVS_ICON; 
    SetWindowLong(wHandle, GWL_STYLE, wStyle); 
    end; 
end; 

procedure NormalStyleDesktop; 
var 
    wHandle : THandle; 
    wStyle : Longint; 
begin 
    wHandle := GetDesktopWindow; 

    if wHandle <> 0 then 
    wHandle := FindWindowEx(wHandle, 0, 'Progman', 'Program Manager'); 

    if wHandle <> 0 then 
    wHandle := FindWindowEx(wHandle, 0, 'SHELLDLL_DefView', 0); 

    if wHandle <> 0 then 
    wHandle := FindWindowEx(wHandle, 0, 'SysListView32', 0); 

    if wHandle <> 0 then 
    begin 
    wStyle := GetWindowLong(wHandle, GWL_STYLE); 
    wStyle := wStyle and (not LVS_TYPEMASK); 
    wStyle := wStyle or LVS_ICON; 
    SetWindowLong(wHandle, GWL_STYLE, wStyle); 
    end; 
end; 
+0

謝謝,那好點從 – kuaw26 2009-12-26 08:28:11

相關問題