トップ回答者
デスクトップの作業領域を変更したい。

質問
-
デスクトップの作業領域を変更したいと思い、以下のようにコードを書きましたが変更されませんでした。
どのようにしたら、デスクトップの作業領域を変更できるでしょうか?
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
回答
-
Windows 7 などで動いていたとしても Windows 10 では動かないという話はあるそうです。
下記の記事によると、第 4 引数の差ですかね?
すべての返信
-
>Rightに値を設定しないということは、横幅ゼロのデスクトップ作業領域に設定したいということでしょうか?
ご指摘ありがとうございます。サンプルコードの誤りです。
R.Top = 1656 を R.Right = 1656 に訂正いたしました。
>なんにせよ戻り値やエラー(Marshal.GetLastWin32Error)を確認し、意図通りに動作しない理由を探るべきです。
SystemParametersInfo の戻り値は True でした。
Marshal.GetLastWin32Error() で得られたエラーコードは 1460(10進数)
FormatMessage() で取得できたエラーメッセージは、「タイムアウト期間が経過したため、この操作は終了しました。」でした。
-
Windows 7 などで動いていたとしても Windows 10 では動かないという話はあるそうです。
下記の記事によると、第 4 引数の差ですかね?