• ベストアンサー

デスクトップ上のアイコンの位置の取得

いつもお世話になってます。 皆様の知恵をお借りできればと思います。 やりたいことは、 デスクトップ上にあるアイコンの座標を知り、たとえばデスクトップの真ん中にアイコンを移動する。 そういったことがしたいのですが、ネットを探してもなかなかサンプルと呼べるものがなく、質問させていただきました。 皆さんよろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

前回の記載内容にいくつか誤りがありましたので訂正します。 下のコードは 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

takosin_co
質問者

お礼

おぉぉぉぉぉ!!!! できました!! ほんっとにありがとうございました!!!

その他の回答 (3)

回答No.3

ご使用のソフトは何でしょう? VB6とVBAは比較的似ていますが、VB.NETはVB6、VBAとはかなり異なった仕様となっています。 とは言っても、いずれにせよ WIN32API を使用することになると思います。 ソースコードではなく概略だけ書きます。 1. API の FindWindowを使用して、 クラス名:Program タイトル:FolderView のウインドウのハンドルを取得します。(Windows7で確認した内容なので、他のWindowsでは違っているかもしれません。) 2. API の GetWindowを使用して 1.の子ウインドウのハンドルを取得します。 3. API の GetWindowを使用して 2.の子ウインドウのハンドルを取得します。(このハンドルが SysListView32 になります。) 4. 3. のハンドルに対してAPI の SendMessage で LVM_GETITEMRECT を送り、アイコンの位置を取得します。 5. アイコンの位置を変数するには 3. のハンドルに対してAPI の SendMessage で LVM_SETITEMPOSISION を送ります。

takosin_co
質問者

補足

すいません。使用環境はVB6です。

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.2

SysListView32を調べてみると幸せになれるかも

takosin_co
質問者

補足

SysListView32は調べてみたんですが・・・。自分にはどうもレベルが高すぎです(泣) SysListView32のサンプル的なソースはないですか?

  • dondoko4
  • ベストアンサー率12% (1161/9671)
回答No.1

アイコンにの座標というのが分かりませんが、真ん中にアイコンを持ってくることは簡単です。アイコンの自動整列を外せば良い。 好きなところに置けます。

関連するQ&A

  • デスクトップのアイコンの位置を固定する方法はありませんか

    デスクトップにはいろいろなアイコンやショートカットが設定されています。 アイコンは左隅に縦に並んでいるのですが、ショートカットは見分けを よくするために 真中に集めています。 しかし、その真中においておいたエクセル等のショートカットが 左端に移動してしまいます。 指定した位置に固定する方法はありますか? 教えてください

  • デスクトップのアイコン位置を任意の位置に固定したい

    Win10です。長年、デスクトップのアイコンを任意の位置に移動させて使っていました。 最近スリープに入ったり、シャットダウンして立ち上げると、勝手に移動してしまいます。移動後の位置はいつも同じです。 デスクトップをクリック「表示」で「自動整列」のチェックは外しています。 なお、アイコンのサイズを変更すると別の並び方になります。 「アイコンキャッシュを再構築するにはもとあるアイコンキャッシュ[C:\Users\ユーザ名\AppData\Local\IconCache.db]を一度削除してもう一度アイコンキャッシュを自動生成させます」というのも試みました」 勝手に移動しないようにしたいのですが、ご教示ください。 よろしくお願いいたします。

  • デスクトップ上のアイコン名の取得方法

    デスクトップ上の座標を指定し、そこに配置してあるアイコン名(ファイル名) を返すようにする方法ってないですか? 但し、アイコンの配置はあらかじめ知らないとします。 つまり、座標を与えることでリアルタイムにデスクトップ上の 情報を得ることは可能でしょうか。 返してくれるのはアイコン名(ファイル名)だけで構いません。 環境はwindows vista又はXP、言語はc++(Eclipse+MinGW)です。

  • VBでデスクトップ上のアイコン座標を取得することはできますか?

    Windows98上でVB6(SP4)を使っています。 デスクトップに散らばっているフォルダやショートカットの座標を取得したいです。 そもそもVBでアイコンの座標を取得する事ができるのでしょうか? また、そのアイコンを動かしたいのです。 MSDN等で調べてみたのですが、期待しているドキュメントがひっかかりません。 GetIconInfo等が使えそうかな・・・と思ったのですが、「ここ見ろ」でも結構なので教えてください。よろしくお願いします。

  • デスクトップ、アイコン位置

    こんにちは。先日あるソフトをかったのですが、そのソフトを起動すると使用中は画面が640x480に自動でなります。終了すると自動で元の設定に戻るのですが、デスクトップアイコンが640x480にサイズの中に移動しています。デスクトップアイコン位置が、一発で元に戻る、フリーソフト友人から教えてもらったのですが、そのサイトがもうありませんでした。誰か、知っておられる方いましたら、よろしくお願いします。 Win XP Pro を使用しています。

  • デスクトップのアイコンについて。

     OSは、WindowsXPです。  私は、自分が使っているソフト等を、常に一覧したいので、デスクトップにソフト等のショートカットのアイコンを多数(100くらい)並べているのですが、たまに、このアイコンが一つ・二つ、場所を移動してしまうので、困るときがあります。使いやすく、見やすい順番に並べているのに、一つ二つ、いつも、場所が入れ替わったりするのです(動くアイコンは、いつもだいたい決まってます)。  なぜ、こういうことが起こるのでしょうか?また、防ぐ方法はないのでしょうか?  どなたか教えてください。お願いします。

  • デスクトップのアイコンの位置を取得したいのですが(C#

    C#.net 2002を使っています。 デスクトップのアイコンの位置をとりたいのですが、解らずに困っています。 まず、SendMessageを使い、LVM_GETITEMPOSITIONを送ってみた“ SendMessage(hWnd, LVM_GETITEMPOSITION, iD, ref pt) ”のですが、値が帰ってきませんでした。(ptはPOINT型) 次に、ネットで検索し、http://www.est.hi-ho.ne.jp/getchan/junks/junk01.html のページを見つけたのですが、C++なので私にはよく解らず、試しに*や&のところを、refを使ってそれなりに動くようにしましたが、やはり値は返ってきませんでした。 デスクトップのアイコンの位置をC#で取得する方法を御存知でしたら、教えてください。お願いします。

  • デスクトップのアイコンの移動について

    今晩は。いつもお世話になっております。1つ質問をお願いします。 デスクトップのアイコン動かしたのですが、一度PCを閉めてもう一度立ち上げるとアイコンンの位置が変わっております。「アイコンを自動・・・」のチェックを外してやっても同じでした。アイコンが動かなくする方法を教えてください。OSはWinXPです。

  • デスクトップ画面のアイコンについてです。

    デスクトップにアイコン20個ぐらいのアイコンを置いているのですが,ある場所に置いたアイコン5個ほどが,いつのまにか左隅に移動してしまいます。 いつも決まったアイコンです。 ほかのアイコンは動かないのですが,どうしてでしょうか? 動かないようにするには,どのようにしたらよいでしょうか。 パソコン初心者です。 ご存じの方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • デスクトップアイコンが変わった!こまっています

    デスクトップアイコンが フォルダのマークの真ん中に時計がついたような ものに変わってしまいました。 あとマイコンピュータ、マイドキュメントも アイコンマークなしになりました。 なぜでしょうか?どなたかたすけてください☆

専門家に質問してみよう