掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB2010からAccess起動の問題 (ID:148142)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
昨夏に、同様の件で Microsoft の有償サポートに問い合わせたことがあります。 (自分の場合は、CreateObject からの Excel 起動でしたが) アプリが背面起動する場合、下記が原因の可能性があるとのことです。 http://support.microsoft.com/kb/886217/ja 記載の通り、以下のレジストリを設定してみてください。 当方はそれで回避できています。 (設定後端末を再起動してください) キー : HKEY_CURRENT_USER\Control Panel\Desktop 名前 : ForegroundLockTimeout (REG_DWORD) 値 : 0 事前設定が難しい場合や、他アプリへの影響範囲を抑えたい場合には、 SPI_SETFOREGROUNDLOCKTIMEOUT によって、一時的に設定を変更する手法があります。 この方法で回避できることも確認済みです。 (1) GetForegroundWindow + GetWindowThreadProcessId で 現在のフォアグラウンドウィンドウのスレッドを取得 (2) 手順 1 で得たスレッドが自スレッドではなかった場合、 AttachThreadInput で上記スレッドにアタッチする (3) SPI_{GET|SET}FOREGROUNDLOCKTIMEOUT を SystemParametersInfo API に渡して、 タイムアウトを 0 に一時的に変更する (4) LockSetForegroundWindow で LSFW_UNLOCK を指定。 (5) 本題の SetForegroundWindow を呼び出して切り替える。 http://msdn.microsoft.com/ja-jp/library/cc411039.aspx その後、下記の手順で後始末を行う (6) SPI_SETFOREGROUNDLOCKTIMEOUT を再度呼び出して 手順3 で 0 にしておいた設定を元の状態に復元する (7) 手順2 でアタッチしていた場合は、それを AttachThreadInput でデタッチする なお、Visual Studio 2010/2012 からテストする場合、 開発環境の起動時に、SPI_{GET/SET}FOREGROUNDLOCKTIMEOUT の値が 破壊される不具合が発見されています。(値とポインタを取り間違えたとのこと) http://support.microsoft.com/kb/2763075/ja この問題は実行環境には影響を与えませんが、開発環境でテストする場合には、 上記問題の回避のため、アプリ作成後は OS を再起動した上で、 Visual Studio を起動せずに EXE からの単体実行でテストしてください。 (あるいは、VS2008 以下のバージョンで検証するようにする)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.