前回の記載内容にいくつか誤りがありましたので訂正します。
下のコードは Windows XP + Excel 200 VBA で動作確認しました。
VB6 でも、同様にすれば動作すると思います。
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal uCmd As Long) As Long
Private Declare Function ListView_GetItemRect Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal MSG As Long, ByVal lngIndex As Long, ByRef rc As RECT) As Long
Private Declare Function ListView_SetItemPosition Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal MSG As Long, ByVal lngIndex As Long, ByVal lngPosition As Long) As Long
Private Type LVITEM
mask As Long
iItem As Long
iSubItem As Long
state As Long
stateMask As Long
pszText As Long
cchTextMax As Long
iImage As Long
lParam As Long
iIndent As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Const LVM_GETITEMRECT As Long = &H100E
Private Const LVM_SETITEMPOSITION As Long = &H100F
Private Const GW_CHILD As Long = 5
Private Const LVIR_ICON As Long = 1
Private Sub CommandButton1_Click()
Dim lngTopWindow As Long
Dim lngChildWindow As Long
Dim lngSysListView32 As Long
Dim lvi As LVITEM
Dim rc As RECT
lngTopWindow = FindWindow("Progman", "Program Manager")
If lngTopWindow Then
lngChildWindow = GetWindow(lngTopWindow, GW_CHILD)
If lngChildWindow Then
lngSysListView32 = GetWindow(lngChildWindow, GW_CHILD)
If lngSysListView32 Then
' インデックス= 0 のアイコンの位置を取得します。
rc.Left = LVIR_ICON
ListView_GetItemRect lngSysListView32, LVM_GETITEMRECT, 0, rc
' X 方向に +100 移動させます
ListView_SetItemPosition lngSysListView32, LVM_SETITEMPOSITION, 0, rc.Top * &H10000 + rc.Left + 100
End If
End If
End If
End Sub
お礼
おぉぉぉぉぉ!!!! できました!! ほんっとにありがとうございました!!!