VB2008でデスクトップアイコンを移動したいと思っています。
環境はwindows7です。
様々なサイトを探しましたがC言語やVB6.0は見つかりましたが、
vb2008では見つかりませんでした。
vb6.0のコードやハンドルについて調べ自分なりにコードを考えましたが
lngChildWindow = FindWindowEx(lngTopWindow, 0, "SHELLDLL_DefView", vbNullString)の部分でオーバーフローしてエラーになります。
どうすれば良いのか見当もつきません。
助けてください。
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 Rectangle) 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 Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Const LVM_GETITEMRECT As Long = &H100E
Private Const LVM_SETITEMPOSITION As Long = &H100F
Dim lngTopWindow As Long
Dim lngChildWindow As Long
Dim lngSysListView32 As Long
Dim rc As Rectangle
lngTopWindow = FindWindow("Progman", "Program Manager")
If lngTopWindow Then
lngChildWindow = FindWindowEx(lngTopWindow, 0, "SHELLDLL_DefView", vbNullString)
If lngChildWindow Then
lngSysListView32 = FindWindowEx(lngChildWindow, 0, "SysListView32", vbNullString)
If lngSysListView32 Then
ListView_GetItemRect(lngSysListView32, LVM_GETITEMRECT, 0, rc)
ListView_SetItemPosition(lngSysListView32, LVM_SETITEMPOSITION, 0, rc.Top * &H10000 + rc.Left + 300)
End If
End If
End If
Win7 ならWinXPと同様の方法では取得できないはずです。
ましてVB6のコードが主ですと、ただ単に変換しても・・・
因みに掲載されているコードはVB6コードのままですので、VB2008
では、正しく動作しませんネ!
http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/2f2d3924-5485-4f94-be8d-3cff960455ae
アイコンの位置を取得するコードではありませんが、デスクトップ
のアイコンのテキスト情報を取得するコードです。
私は試してませんが、参考までに・・・
以上。