前提・実現したいこと
興味本位でExcel VBAでWin32 APIコマンドを実行しています。
最終的にバックグラウンド(切り離されたデスクトップ)で処理が走るようにしたいです。
発生している問題・エラーメッセージ
下記ソースコードを実行すると"SetThreadDesktop(hDesktop)"の箇所でエラーが発生します。 エラー発生理由、解消方法をご教示頂けないでしょうか。 実行時エラー '170' アプリケーション定義またはオブジェクト定義のエラーです。
該当のソースコード 言語:VBA (Excel)
Option Explicit Private Declare PtrSafe Function GetThreadDesktop Lib "user32" (ByVal dwThread As Long) As LongPtr Private Declare PtrSafe Function GetCurrentThreadId Lib "kernel32" () As Long Private Declare PtrSafe Function CreateDesktop Lib "user32.dll" Alias "CreateDesktopW" (ByVal lpszDesktop As LongPtr, ByVal lpszDevice As LongPtr, ByVal pDevmode As LongPtr, ByVal dwFlags As Long, ByVal dwDesiredAccess As Long, ByVal lpsa As LongPtr) As LongPtr Declare PtrSafe Function SwitchDesktop Lib "user32" (ByVal hDesktop As LongPtr) As Long Declare PtrSafe Function SetThreadDesktop Lib "user32" (ByVal hDesktop As LongPtr) As Long Private Declare PtrSafe Function GetLastError Lib "kernel32.dll" () As Long Sub Desktop() Const GENERIC_ALL& = &H10000000 Const MAX_PATH = 260 Dim hDesk As LongPtr Dim hDesktop As LongPtr Dim rcThDesktop As Long hDesk = GetThreadDesktop(GetCurrentThreadId()) hDesktop = CreateDesktop(StrPtr("hidden-desktop"), 0, 0, 0, GENERIC_ALL, 0) rcThDesktop = SetThreadDesktop(hDesktop) If rcThDesktop Then Else Err.Raise GetLastError() End Sub
試したこと
"hDesktop"を"hDesk"等に変更してみましたが、現象に変化ありませんでした。
補足情報(FW/ツールのバージョンなど)
Windows10 Home
64ビット オペレーティングシステム、x64ベース プロセッサ
Excel(Microsoft365)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/21 10:51
2020/09/27 09:09 編集