サンプル投稿用掲示板 VB2005 〜 用トップページ VB6.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 の 値も変化します。
上記実行結果(エクスプローラ と デスクトップ 画像をクリックすると元のサイズで見られます)
-
|