一个操控桌面图标的程序,可以设定桌面图标的文字颜色、文字的透明背景、按不通方式排列图标、显示、隐藏桌面图标。利用了Windows API的FindWindows函数。
http://www.applevb.com/sourcecode/controldesktopicon.zip

解决方案 »

  1.   

    SystemParametersInfo(SPI_SETDESKWALLPAPER,...
    不记得了。
      

  2.   

    Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
    Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Public Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
    Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const REG_SZ = 1                         ' Unicode nul terminated string
    Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
    Public Const SPIF_UPDATEINIFILE = &H1
    Public Const SPIF_SENDWININICHANGE = &H2
    Public Const SPI_SETDESKWALLPAPER = 20
    Dim success As Long
    Dim hKey As Long
    Dim picname As String
    If Right(Dir1.Path, 1) = "\" Then
      picname = Dir1.Path & File1.filename
    Else
      picname = Dir1.Path & "\" & File1.filename
    End If
    success = RegCreateKey(HKEY_CURRENT_USER, "Control Panel\desktop", hKey)
    If success = 0 Then
      Call RegSetValueEx(hKey, "Wallpaper", 0, REG_SZ, ByVal picname, 4)
    End If
    Call changbizhi
    End Sub
    Sub changbizhi()
    Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, 0, 0)
    End Sub
      

  3.   

    Option Explicit
    '这是本人以前编写的一个程序中的一个模块代码可实现图标的右排、顶面对
    '齐、底对齐及环形排列,但使用前必须手动取消自动排列图标的功能;同时'本人是在WIN98/MEVB5及800X600标准图标大小及间隔(77)下使用的,其它情形请自行修改程序中的参数。
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wmsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Private Const LVM_GETTITEMCOUNT& = (&H1000 + 4)
    Private Const LVM_SETITEMPOSITION& = (&H1000 + 15)
    Private Const LVM_FIRST = &H1000
    Private Const LVM_GETITEMPOSITION = (LVM_FIRST + 16)
    Private Const LVM_GETITEMTEXT = LVM_FIRST + 45
    Private Const LVM_GETIMAGELIST = (LVM_FIRST + 2)
    Private Const LVSIL_NORMAL = 0
    Private Const LVM_GETITEM = (LVM_FIRST + 5)
    Private Const LVM_ARRANGE = (LVM_FIRST + 22)
    Private Const LVM_REDRAWITEMS = (LVM_FIRST + 21)
    Private Type POINTAPI
            X As Long
            y As Long
    End Type
    Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
    Private Const SPI_GETWORKAREA = 48Public Sub GetDeskIconPosition(ByVal SX As String)
    '参数SX为对齐方式
    'Dim hdesk As Long
    Dim WorkArea As RECT
    Dim DeskWidth As Long
    Dim DeskHeight As Long
    Dim Pointx() As POINTAPI
    Dim Hdesk As Long
    Hdesk = GetrDeskIconHandle()
    SystemParametersInfo SPI_GETWORKAREA, 0, WorkArea, 0
    DeskWidth = WorkArea.Right
    DeskHeight = WorkArea.Bottom
    Dim IconCount As Long
    IconCount = SendMessage(Hdesk, LVM_GETTITEMCOUNT, 0, 0)
    Dim TR As Long, J As Long, Ji As Long
    Dim RF As Long, Frt As Boolean, Rf1 As Long, FR As Boolean, LT As Boolean
    Dim Rf2 As Long
    LT = False
    FR = False
    Frt = False
    TR = 0
    J = 0
    ReDim Pointx(IconCount)
    For TR = 0 To IconCount - 1
    Ji = Ji + 1DoEvents
    Ds: Select Case SX
    Case "桌面图标左顶对齐"
    Pointx(TR).y = 77 * (J + 1) - 77
    Pointx(TR).X = 77 * Ji - 50
    If Pointx(TR).X > DeskWidth - 10 Then
    Ji = 1
    J = J + 1
    GoTo Ds
    End If
    Case "桌面图标右顶对齐" '右顶对齐Pointx(TR).y = 77 * (J + 1) - 77
    Pointx(TR).X = DeskWidth - 77 * Ji + 10
    If Pointx(TR).X < 10 Then
    Ji = 1
    J = J + 1
    GoTo Ds
    End If
    Case "桌面图标左对齐" '左对齐
    Pointx(TR).y = 77 * Ji - 77
    Pointx(TR).X = 77 * J + 10If Pointx(TR).y > DeskHeight - 40 Then
    Ji = 1
    J = J + 1
    GoTo Ds
    End IfCase "桌面图标右对齐" '右对齐Pointx(TR).y = 77 * Ji - 77
    Pointx(TR).X = DeskWidth - 77 * J - 77
    If Pointx(TR).y > DeskHeight - 40 Then
    Ji = 1
    J = J + 1
    GoTo Ds
    End If
    Case "桌面图标左右环绕" '环绕
    '左顶对齐
    If ((DeskWidth - 77) > (77 * Ji - 50)) And Frt = False Then
    Pointx(TR).y = 0 '77 * (J + 1) - 77
    Pointx(TR).X = 77 * Ji - 50
    RF = Pointx(TR).X
    Else
    '右对齐
    If Frt = False Then
    Ji = 2
    Frt = True
    End If
    If FR = False And ((DeskHeight - 40) > (77 * Ji - 77)) Then
    Pointx(TR).X = RF
    Pointx(TR).y = 77 * Ji - 77
    Rf1 = Pointx(TR).y
    Else
    '右底对齐
    If FR = False Then
    FR = True
    Ji = 2
    End If
    If LT = False And DeskWidth - 77 * Ji > 10 Then
    Pointx(TR).y = Rf1
    Pointx(TR).X = DeskWidth - 77 * Ji
    Rf2 = Pointx(TR).X
    Else
    '左对齐
    If LT = False Then
    LT = True
    Ji = 2
    End If
    Pointx(TR).X = Rf2
    Pointx(TR).y = DeskHeight - 77 * Ji
    End If
    End If
    End If
    Case "桌面图标右底对齐" '右底对齐
    Pointx(TR).X = DeskWidth - 77 * Ji
    Pointx(TR).y = DeskHeight - 77 * (J + 1)
    If Pointx(TR).X < 10 Then
    Ji = 1
    J = J + 1
    GoTo Ds
    End If
    End Select
    SendMessageLong Hdesk, LVM_SETITEMPOSITION, TR, CLng(Pointx(TR).X + Pointx(TR).y * &H10000)
    Next TR
    Erase Pointx()
    End SubPublic Function GetrDeskIconHandle() As Long
    Dim Wnd As Long
    Wnd = FindWindow("progman", vbNullString)
    Wnd = FindWindowEx(Wnd, 0, "shelldll_defview", vbNullString)
    Wnd = FindWindowEx(Wnd, 0, "syslistview32", vbNullString)
    GetrDeskIconHandle = Wnd
    End Function