tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
デスクトップ・エクスプローラ等でのアイコンの表示間隔を変更(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2009/10/31 08:44
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[システム関係][エクスプローラ][]                                    *
* キーワード:アイコン,デスクトップ,表示間隔,ListView,タイル表示,,                *
***********************************************************************************
タイトル : 構造体を引数とするAPI(SystemParametersInfo)
記 事 No : 9525
投 稿 日 : 2009/10/29(Thu) 07:22
元質問者 : ダンボ  

記 事 No : 9526
投 稿 日 : 2009/10/29(Thu) 10:09
回 答 者 : オショウ  

ダンボ さんの投稿コードに、オショウ さんの回答コードで動作確認をできるように
一部コードを付け足してこちらに投稿しておきます。
(詳しくは、一連の元記事の方をご覧下さい)   -- By 花ちゃん --

Imports System.Runtime.InteropServices

Public Class Form1
   Private Const SPI_GETICONMETRICS As Integer = 45
   Private Const LF_FACESIZE As Int32 = 32
   Private Const SPI_SETICONMETRICS As Integer = 46

   <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto, Pack:=1)> _
   Private Structure LOGFONT
      Public lfHeight As Int32
      Public lfWidth As Int32
      Public lfEscapement As Int32
      Public lfOrientation As Int32
      Public lfWeight As Int32
      Public lfItalic As Byte
      Public lfUnderline As Byte
      Public lfStrikeOut As Byte
      Public lfCharSet As Byte
      Public lfOutPrecision As Byte
      Public lfClipPrecision As Byte
      Public lfQuality As Byte
      Public lfPitchAndFamily As Byte
      <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=LF_FACESIZE)> _
      Public lfFaceName As String
   End Structure

   <StructLayout(LayoutKind.Sequential, Pack:=1)> _
   Private Structure ICONMETRICS
      Public cbSize As Int32                 '構造体のバイト数
      Public iHorzSpacing As Int32           '水平方向の間隔
      Public iVertSpacing As Int32           '同、垂直方向
      Public iTitleWrap As Int32             '0のとき、キャプションを折り返さない
      Public lfFont As LOGFONT               'キャプションのフォントを指定するLOGFONT構造体
      Public Sub New(ByVal dummy As Integer)
         lfFont = New LOGFONT
      End Sub
   End Structure

   <DllImport("USER32.DLL", CharSet:=CharSet.Auto, _
                            EntryPoint:="SystemParametersInfo", SetLastError:=True)> _
   Private Shared Function SystemParametersInfo( _
      ByVal uAction As Integer, _
      ByVal uparam As Integer, _
      <[In](), Out()> ByRef lpvParam As ICONMETRICS, _
      ByVal fuWinIni As Integer _
      ) As Boolean
   End Function

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   Dim im As ICONMETRICS
   Dim bRet As Boolean
   im = New ICONMETRICS(0)
   im.cbSize = Marshal.SizeOf(im)
   bRet = SystemParametersInfo(SPI_GETICONMETRICS, Marshal.SizeOf(im), im, 0%)

   '実使用時は、現在の設定値を取得・保存しておいて終了時に元に戻すようにして下さい
   '(OS を再起動すれば元に戻ります)
   Debug.WriteLine(im.iHorzSpacing.ToString())
   Debug.WriteLine(im.iVertSpacing.ToString())
   Debug.WriteLine(im.iTitleWrap.ToString())

   im.iHorzSpacing = 50    'アイコンの水平方向の間隔を変更
   im.iVertSpacing = 50    'アイコンの垂直方向の間隔を変更
   im.iTitleWrap = 1       'アイコンのキャプションを折り返す(変わらないような?)
   bRet = SystemParametersInfo(SPI_SETICONMETRICS, Marshal.SizeOf(im), im, 0%)
End Sub
End Class

※ Vista と XP では、動作が少し違うようです、目的により fuWinIni の値を変更して見て下さい
  又、アイコンの間隔は、アイコンのサイズ+間隔 となり、画面のプロパティで設定できる
  アイコンの間隔は、純粋な間隔のサイズで、アイコンのサイズを変更するとiHorzSpacing の
  値も変化します。

上記実行結果(エクスプローラ と デスクトップ 画像をクリックすると元のサイズで見られます) 



 [スレッド一覧へ] [親スレッドへ]