0

VBA と api 'HtmlHelp' を使用してカスタム ヘルプ ファイル (CHM) を開いています。

hWnd = HtmlHelp(Application.hWndAccessApp, sFile, HH_HELP_CONTEXT, context_id)

ヘルプ ファイルは開きますが、Access ウィンドウの背後に隠れており、アイコンはタスク バーに表示されますが、アイコンをクリックしても前面に表示されず、Access の背後に隠れたままです。

最初にヘルプ ファイルのテストを (Win8.1 マシンで) 開始したとき、ヘルプ ファイルは Access ウィンドウの前に正しく開きましたが、現在は開きません。この動作の原因について何か提案はありますか?

4

2 に答える 2

2

いくつかの考えだけですが、最初のヒントには注意してください。


ファイル hh.dat はどのような目的に役立ちますか?

hh.dat ファイルには、システム上のすべての HTMLHelp ファイル (*.CHM) に関するユーザー固有の情報 (位置、お気に入りのトピック、検索履歴など) が保存されており、何らかの形で破損している場合はエラーが発生する可能性があります。ファイル hh.dat を削除するか名前を変更して、システム上のすべての (!) CHM ウィンドウをデフォルト設定にリセットします。次のディレクトリに hh.dat があります。

\Documents and Settings\%username%\Application Data\Microsoft\HTML Help

次に任意の .chm ファイルを開くと、Windows によって新しいバージョンの hh.dat が作成されます。


Microsoft の HTML ヘルプ API ドキュメント ( http://msdn2.microsoft.com/en-us/library/ms644703(VS.85).aspx ) によると:

HTML ヘルプ API を使用して作成したヘルプ ウィンドウは、呼び出し側 (親プログラム) によって所有されます。これにより、ヘルプ ウィンドウは親ウィンドウの上に表示されますが、フォーカスのある他のプログラムの上には表示されません。

したがって、ヘルプ ウィンドウがフォーカスを保持しているという事実は、実際には標準的な動作です。

典型的な HTML ヘルプ API 呼び出しを見ると、最初のパラメーターが、ヘルプが呼び出されるウィンドウの「ハンドル」を指定していることがわかります。

 HtmlHelp(hwndCaller,"YourHelpFile.chm",HH_HELP_CONTEXT,1001); 

開発者が呼び出しの最初のパラメーターとしてウィンドウ ハンドルではなく "null" を渡すと、ヘルプ ウィンドウは呼び出し側プログラムによって所有されなくなり、フォーカスを保持しません。変更された呼び出しの例を次に示します。

HtmlHelp(0,"YourHelpFile.chm",HH_HELP_CONTEXT,1001);

ただし、これには欠点があります。この方法で呼び出されると、ヘルプ ウィンドウは呼び出し側プログラムのアクションに拘束されなくなります。そのため、ユーザーがプログラムを閉じるか最小化しても、ヘルプ ウィンドウも閉じたり最小化したりしません。

于 2015-09-04T10:43:38.787 に答える
0

hWndヘルプ ウィンドウをプログラムで最前面に表示するコードを追加できると思いますか?

SetForegroundWindow()仕事をするために電話することができます。誰かがすでに同様の問題を解決SetForegroundWindow()しています。呼び出しを VBA に、またはVBAに移植するだけですSetForegroundWindowNative()


SetForegroundWindow()編集:ヘルプ ウィンドウが短時間だけ点滅するという奇妙な動作が報告されています。

VBA のAppActivate コマンドを発行してみてください。他の誰かの役に立ちました

この問題が解決しない場合は、アプリとヘルプ ウィンドウのサイズを変更して並べて表示するなどの回避策を試すことができます。

于 2015-09-02T04:43:25.580 に答える