>>253
VBでいいのかな? 漏れの作ったのでよければ。

Private Declare Function SHChangeIconDialogA Lib "shell32" Alias "#62" (ByVal hWnd As Long, ByVal szFilename As String, ByVal Reserved As Long, lpIconIndex As Long) As Long
Private Declare Function SHChangeIconDialogW Lib "shell32" Alias "#62" (ByVal hWnd As Long, ByVal szFilename As Long, ByVal Reserved As Long, lpIconIndex As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Function ChangeIconDialog(ByVal hWnd As Long, strPath As String, Optional Iconidx As Long = 0) As Boolean
Const MAX_PATH As Long = 260
Dim strBuf As String * MAX_PATH, strRet(MAX_PATH) As Byte
Dim lPtr As Long, lRet As Long

strBuf = strPath & vbNullChar
If IsWinNT() Then           ←OSがNTかどうか判断。自分で作る
  lPtr = StrPtr(strBuf)
  lRet = SHChangeIconDialogW(hWnd, lPtr, MAX_PATH, Iconidx)
  CopyMemory strRet(0), ByVal lPtr, MAX_PATH
  strBuf = CStr(strRet)
Else
  lRet = SHChangeIconDialogA(hWnd, strBuf, MAX_PATH, Iconidx)
End If

If lRet Then
  ChangeIconDialog = True
  strPath = Left$(strBuf, InStr(strBuf, vbNullChar) - 1)
End If
End Function

呼ぶときは
Call ChangeIconDialog(Me.hWnd, パス, インデックス)
パス、インデックスに変更された値が戻ってくる。