一个操控桌面图标的程序,可以设定桌面图标的文字颜色、文字的透明背景、按不通方式排列图标、显示、隐藏桌面图标。利用了Windows API的FindWindows函数。
http://www.applevb.com/sourcecode/controldesktopicon.zip
http://www.applevb.com/sourcecode/controldesktopicon.zip
解决方案 »
- 请问用VB操作WMI的话先地在工程里怎么操作?还要装什么软件吗?
- 请教关于LISTVIEW的问题??????????????????
- Access200数据库,通过VB6.0代码排序问题?
- 这样获得本机拨号时电信分配的动态IP?
- 我在Form1窗体里通过代码给Form2体里的Text1控件赋值时为什么要调用Form2的Form_Load事件,我不想让触发Load事件该怎么办?
- 我下了很多图标,可是图标的后缀名是icl的,怎么才能使用?
- 关于邮件系统的
- access数据库更新问题
- 不是我给分, ,是这个问题还没有解决,,大家快来帮助啊!谢谢
- 如何在程序起动后,将“开始” 状态条隐藏,就像游戏软件一样
- 用adodc控件为什么会打开多次数据库连接?
- 请问谁知道在VB中可以不等待本条句执行完继续执行下一条的办法?
不记得了。
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
'这是本人以前编写的一个程序中的一个模块代码可实现图标的右排、顶面对
'齐、底对齐及环形排列,但使用前必须手动取消自动排列图标的功能;同时'本人是在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