VB を使用してデスクトップ アイコンを完全に制御する Windows のデスクトップ アイコンの配置に飽きていて、自分のアイデアに従ってアイコンを配置したいと思っていますか?アイコン テキストの下に見苦しいカラー ブロックを表示させずに、デスクトップ アイコン テキストの背景を変更したいですか?ここではVBでデスクトップアイコンを完全に変更する方法を紹介します。
実際、Windows のデスクトップとタスクバーはすべてウィンドウ オブジェクトであり、Windows API 関数 FindWindow および FindWindowEx を使用してハンドルを取得し、他の対応する API 関数を呼び出してそれらを制御できます。デスクトップ アイコンが配置されているウィンドウは ListView オブジェクトであり、SendMessage 関数を使用して対応するメッセージをウィンドウに送信すると、アイコンを変更できます。具体的なプログラムの実装は以下の通りです。
まず、VB で新しいプロジェクトを作成し、3 つの CommandButton コントロールを Form1 に追加してから、次のコードを Form1 のコード ウィンドウに追加します。
Option Explicit
プライベートタイプ POINTAPI x と同じ長さ、y と同じ長さ
エンドタイプ
プライベート宣言関数 FindWindow Lib user32 Alias FindWindowA _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
プライベート宣言関数 FindWindowEx Lib user32 Alias FindWindowExA _ (ByVal hWnd1 As Long、ByVal hWnd2 As Long、ByVal lpsz1 As String、_ ByVal lpsz2 As String) As Long
プライベート宣言関数 UpdateWindow Lib user32 (ByVal hwnd As Long) As Long
プライベート宣言関数 SendMessage Lib user32 Alias SendMessageA (ByVal _ hwnd As Long、ByVal wMsg As Long、ByVal wParam As Long、ByVal lParam As Long) _ As Long
プライベート宣言関数 SendMessageP Lib user32 Alias SendMessageA (ByVal _ hwnd As Long、ByVal wMsg As Long、ByVal wParam As Long、lParam As Any) _ As Long
プライベート宣言関数 GetSysColor Lib user32 (ByVal nIndex As Long) As Long
プライベート宣言関数 SetSysColors Lib user32 (ByVal nChanges As Long、_lpSysColor As Long、lpColorValues As Long) As Long
定数LVM_FIRST = &H1000
定数 LVM_GETITEMCOUNT = LVM_FIRST + 4
定数 LVM_SETTEXTCOLOR = LVM_FIRST + 36
定数 LVM_REDRAWITEMS = LVM_FIRST + 21
定数 LVM_SETTEXTBKCOLOR = LVM_FIRST + 38
定数 LVM_SETITEMPOSITION = LVM_FIRST + 15
Const COLOR_DESKTOP = 1'RestoreColor 関数は、デフォルトのアイコンのテキストの色と背景を復元します。
SubRestoreColor()
薄暗い色ほど長く
lColor = GetSysColor(COLOR_DESKTOP)
SetSysColors 1、COLOR_DESKTOP、lColor
エンドサブ
Sub SetIconText(clFore、clBack As Long、bTrans As Boolean)
薄暗くウィンドウを長くする
Dim lItemCount As Long 'デスクトップ チャートが配置されているウィンドウを 3 つのステップで検索します
hWindow = FindWindow(プログラムマン、プログラムマネージャー)
hWindow = FindWindowEx(hWindow, 0, SHELLDLL_DefView, )
hWindow = FindWindowEx(hWindow, 0, SysListView32, )
bTrans の場合 '透明な背景
SendMessage hWindow、LVM_SETTEXTBKCOLOR、0、&HFFFFFFFF
Else '不透明な背景
SendMessage hWindow、LVM_SETTEXTBKCOLOR、0、clBack
終了の場合
'アイコンのテキストの色を設定します
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
点火 As POINTAPI
' デスクトップ チャートが配置されているウィンドウを 3 つのステップで見つける
hWindow = FindWindow(プログラムマン、プログラムマネージャー)
hWindow = FindWindowEx(hWindow, 0, SHELLDLL_DefView, )
hWindow = FindWindowEx(hWindow, 0, SysListView32, )
i1 = 20: i2 = 20
iCount = SendMessage(hWindow, LVM_GETITEMCOUNT, 0, 0)
i = 0 から iCount - 1 まで
po.x = i1: po.y = i2
'LVM_SETITEMPOSITION メッセージを送信してアイコンを配置します
SendMessage(hWindow, LVM_SETITEMPOSITION, i, i2 * 65536 + i1) を呼び出す
i1 = i1 + iWidth
If i1 > ((Screen.Width / 15) - 32) then
i1 = 20
i2 = i2 + i高さ
終了の場合
次は私
SendMessage hWindow、LVM_REDRAWITEMS、0、iCount - 1
'更新ウィンドウ
更新ウィンドウ hWindow
エンドサブ
プライベートサブコマンド1_Click()
'アイコンの文字色を青、背景色を黒、背景を透明に設定します
SetIconText vbBlue、vbBlack、True
終わり
SubPrivate サブ Command2_Click()
色の復元
エンドサブ
プライベートサブコマンド3_Click()
'アイコンを100×100ピクセル単位で配置
デスクトップアイコンの配置 100、100
エンドサブ
プライベートサブフォーム_Load()
Command1.Caption = テキストの背景を設定します
Command2.Caption = テキストの背景を復元する
Command3.Caption = デスクトップ アイコンを配置する
エンドサブ
プログラムを実行し、[Command1] をクリックします。デスクトップ アイコンのテキストの背景が青色に変わることがわかります。デスクトップのピクチャを設定すると、下の [Command2] をクリックすると、テキストの背景が透明になります。 Windows のデフォルト設定を復元するには、[Command3] をクリックしてデスクトップ アイコンを水平に配置します。ただし、デスクトップ アイコンの自動配置プロパティが False に設定されている場合に限ります。 上記のプログラムは、VB6、Windows98、および Windows2000 で正常に動作します。