1

ブログ投稿で説明されているスクリプトを使用してWindows7ユーザータイルをセットアップする方法。ただし、これに必要な.NET Frameworkの依存関係は必要ないため、DllCall()を介して直接呼び出すようにします。ただし、これを機能させることはできません。

#RequireAdmin
FileCopy("user_tile.jpg", "C:\Windows\system32\user_tile.jpg")
$rtn = DllCall(@SystemDir & "\shell32.dll", "long", 262, "wstr", "ahiscox", "int", 0, "wstr", "C:\Windows\system32\user_tile.jpg")
MsgBox(16, "DLL Return", $rtn[0])

戻り値-2147024894を取得しました(shell32.dllがuser_tile.jpgを見つけられなかったようです)。wstrに変更すると、-2147221008が返されます。コードを実行しても何も起こりません(ユーザータイルは変更されません)。

4

3 に答える 3

3

fejesjocoに感謝します。私もあなたのブログのサンプルコードをAutoItに変換しようとしていて、それを機能させることができませんでした。CoInitializeの提案がそれを行いました。AutoItフォーラムのこのスレッドでAutoItコードを見つけることができ ます。

$sUserName = "DOMAIN\rvdmast"
$sPicPath = "\\server\data\fotos\rvdmast.jpg"

; call CoInitialize
DLLCall("ole32.dll","int","CoInitialize","ptr",0)

$hPicPath = DLLStructCreate("wchar[128]")
DllStructSetData($hPicPath, 1, $sPicPath)

$hUserName = DLLStructCreate("wchar[128]")
DllStructSetData($hUserName, 1, $sUserName)

$aRet = DllCall(@SystemDir & "\shell32.dll", "long", 262, "ptr", DllStructGetPtr($hUserName), "int", 0, "ptr", DllStructGetPtr($hPicPath))

MsgBox(4096, "SetUserTile", $aRet[0])
于 2011-05-31T09:13:42.443 に答える
2

そのブログの作者に尋ねることもできます。彼は親切な人です。私だから知っています:)スレッドがSTAのアパートにあるかどうかを確認する必要があります。また、CoInitializeを自分で呼び出す必要がある場合もあります。.NETでは、フレームワークがそれを行いますが、これは前提条件です。

于 2011-04-08T19:51:00.153 に答える
1

ブログには、ユーザー名をMACHINE\userまたはDOMAIN\userの形式で指定する必要があると記載されています。それ以外は、相対的な画像パスを使用でき、shell32にインストールする必要はないと思います(おそらく管理者権限も必要ありません)が、動作するようになったら試してみてください。

于 2011-03-01T09:02:11.033 に答える