none
デスクトップの作業領域を変更したい。 RRS feed

  • 質問

  • デスクトップの作業領域を変更したいと思い、以下のようにコードを書きましたが変更されませんでした。

    どのようにしたら、デスクトップの作業領域を変更できるでしょうか?

    Visual Studio 2015 Express / Windows 10 Pro 64bit / .NET Framework 4.5

    Imports System.Runtime.InteropServices
    
    Public Class Form1
        <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
        Private Shared Function SystemParametersInfo(uiAction As Integer, uiParam As Integer, ByRef pvParam As RECT, fWinIni As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
        End Function
    
        Private Const SPIF_SENDWININICHANGE As Int32 = 2
        Private Const SPIF_UPDATEINIFILE As Int32 = 1
        Private Const SPIF_change As Int32 = SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE
        Private Const SPI_SETWORKAREA As Int32 = 47
        Private Const SPI_GETWORKAREA As Int32 = 48
    
        <StructLayout(LayoutKind.Sequential)>
        Public Structure RECT
            Public Left As Int32
            Public Top As Int32
            ' top is before right in the native struct
            Public Right As Int32
            Public Bottom As Int32
        End Structure
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim R As RECT
            R.Right = 1656
            R.Bottom = 1040
            SystemParametersInfo(SPI_SETWORKAREA, IntPtr.Zero, R, SPIF_change)
        End Sub
    
    End Class



    • 編集済み VB User1 2015年11月29日 2:24
    2015年11月28日 16:03

回答

すべての返信

  • Rightに値を設定しないということは、横幅ゼロのデスクトップ作業領域に設定したいということでしょうか?

    なんにせよ戻り値やエラー(Marshal.GetLastWin32Error)を確認し、意図通りに動作しない理由を探るべきです。

    • 回答の候補に設定 星 睦美 2015年11月30日 0:24
    2015年11月28日 21:17
  • >Rightに値を設定しないということは、横幅ゼロのデスクトップ作業領域に設定したいということでしょうか?

    ご指摘ありがとうございます。サンプルコードの誤りです。

    R.Top = 1656 を R.Right = 1656 に訂正いたしました。

    >なんにせよ戻り値やエラー(Marshal.GetLastWin32Error)を確認し、意図通りに動作しない理由を探るべきです。

    SystemParametersInfo の戻り値は True でした。

    Marshal.GetLastWin32Error() で得られたエラーコードは 1460(10進数)

    FormatMessage() で取得できたエラーメッセージは、「タイムアウト期間が経過したため、この操作は終了しました。」でした。


    2015年11月29日 2:47
  • Windows 7 などで動いていたとしても Windows 10 では動かないという話はあるそうです。
    下記の記事によると、第 4 引数の差ですかね?

    http://stackoverflow.com/questions/31568561/windows-10-not-responding-to-uiaction-47-spi-setworkarea-for-user32-dlls-syst

    • 回答の候補に設定 星 睦美 2015年11月30日 0:24
    • 回答としてマーク VB User1 2015年12月4日 3:12
    2015年11月29日 6:23
    モデレータ
  • Azulean さま

    ご紹介いただいたサイトを参考に,第4引数を変更することで動作を確認できました。

    ありがとうございます。

    SystemParametersInfo(SPI_SETWORKAREA, IntPtr.Zero, NEWAREA, SPIF_UPDATEINIFILE)

    2015年12月4日 3:11