国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Visual Basic > 正文

VB編程控制電腦桌面圖標

2023-06-12 12:11:27
字體:
來源:轉載
供稿:網友

利用VB完全控制你的桌面圖標 Windows中的桌面圖標的排列方式是否讓你感到厭倦而想按照自己的想法排列圖標。是否想改變桌面圖標文字的背景而不使在圖標文字下出現一個個難看的色塊。這里我要介紹如何通過VB來對桌面的圖標進行徹底的改變。

 其實在Windows下的桌面以及任務欄等都是窗口對象,我們可以利用Windows API函數FindWindow和FindWindowEx來獲得它們的句柄,然后再調用其它相應的API函數來控制它們。而放置桌面圖標的窗口是一個ListView對象,利用SendMessage函數向該窗口發送相應的消息,就可以對圖標進行修改了。下面是具體的程序實現。

首先在VB中建立一個新的工程,在Form1中加入三個CommandButton控件,然后在Form1的代碼窗口中加入以下代碼:

Option Explicit
Private Type POINTAPI x As Long, y As Long
End Type
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) 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 Declare Function UpdateWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage 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 SendMessageP Lib "user32" Alias "SendMessageA" (ByVal _ hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) _ As Long
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function SetSysColors Lib "user32" (ByVal nChanges As Long, _ lpSysColor As Long, lpColorValues As Long) As Long
Const LVM_FIRST = &H1000
Const LVM_GETITEMCOUNT = LVM_FIRST + 4
Const LVM_SETTEXTCOLOR = LVM_FIRST + 36
Const LVM_REDRAWITEMS = LVM_FIRST + 21
Const LVM_SETTEXTBKCOLOR = LVM_FIRST + 38
Const LVM_SETITEMPOSITION = LVM_FIRST + 15
Const COLOR_DESKTOP = 1'RestoreColor函數回復默認的圖標文字顏色和背景

Sub RestoreColor()
  Dim lColor As Long
  lColor = GetSysColor(COLOR_DESKTOP)
  SetSysColors 1, COLOR_DESKTOP, lColor
End Sub

Sub SetIconText(clFore, clBack As Long, bTrans As Boolean)
Dim hWindow As Long
Dim lItemCount As Long '通過三步查找到放置桌面圖表的窗口
hWindow = FindWindow("Progman", "Program Manager")
hWindow = FindWindowEx(hWindow, 0, "SHELLDLL_DefView", "")
hWindow = FindWindowEx(hWindow, 0, "SysListView32", "")
If bTrans Then '透明背景
  SendMessage hWindow, LVM_SETTEXTBKCOLOR, 0, &HFFFFFFFF
Else '非透明背景
  SendMessage hWindow, LVM_SETTEXTBKCOLOR, 0, clBack
End If
 
'設置圖標文字的顏色
SendMessage hWindow, LVM_SETTEXTCOLOR, 0, clFore '重新繪制所有的圖標
lItemCount = SendMessage(hWindow, LVM_GETITEMCOUNT, 0, 0)
SendMessage hWindow, LVM_REDRAWITEMS, 0, lItemCount - 1
 '更新窗口
UpdateWindow hWindowEnd SubSub ArrangeDesktopIcon(iWidth As Integer, iHeight As Integer)
Dim hWindow As Long Dim i1, i2, i, iCount As Integer
Dim po As POINTAPI
'通過三步查找到放置桌面圖表的窗口
hWindow = FindWindow("Progman", "Program Manager")
hWindow = FindWindowEx(hWindow, 0, "SHELLDLL_DefView", "")
hWindow = FindWindowEx(hWindow, 0, "SysListView32", "")
i1 = 20: i2 = 20
iCount = SendMessage(hWindow, LVM_GETITEMCOUNT, 0, 0)
For i = 0 To iCount - 1
po.x = i1: po.y = i2
'發送LVM_SETITEMPOSITION消息排列圖標
Call SendMessage(hWindow, LVM_SETITEMPOSITION, i, i2 * 65536 + i1)
i1 = i1 + iWidth
If i1 > ((Screen.Width / 15) - 32) Then
i1 = 20
i2 = i2 + iHeight
End If
Next i
SendMessage hWindow, LVM_REDRAWITEMS, 0, iCount - 1
'更新窗口
UpdateWindow hWindow
End Sub

Private Sub Command1_Click()
 '設置圖標文字的顏色為藍色,背景色為黑色,背景為透明
SetIconText vbBlue, vbBlack, True
End
SubPrivate Sub Command2_Click()
RestoreColor
End Sub
Private Sub Command3_Click()
'以100x100像素為單位排列圖標
ArrangeDesktopIcon 100, 100
End Sub
Private Sub Form_Load()
Command1.Caption = "設置文字背景"
Command2.Caption = "恢復文字背景"
Command3.Caption = "排列桌面圖標"
End Sub

運行程序,點擊Command1,可以看到桌面圖標的文本景色變成了藍色,如果你設置了桌面圖片,還可以看到文字的背景變成了透明的而不是在下面有一個難看的色塊,點擊Command2可以恢復Windows的默認設置,點擊Command3可以使你的桌面圖標以橫排的方式排列,不過前提是要將桌面圖標的自動排列屬性設置為False。 以上程序在VB6,Windows98,Windows2000下運行通過。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 彭州市| 钟山县| 渝北区| 色达县| 白玉县| 绵阳市| 肃南| 丰台区| 安龙县| 罗源县| 苏尼特左旗| 赣州市| 汾阳市| 大洼县| 广元市| 旺苍县| 北票市| 开阳县| 郓城县| 南城县| 固阳县| 新乡市| 台南市| 兴安盟| 白玉县| 永善县| 房山区| 藁城市| 秭归县| 南阳市| 赣州市| 兴隆县| 扎囊县| 来凤县| 阿尔山市| 丹巴县| 青铜峡市| 客服| 辛集市| 牙克石市| 临湘市|