0

インストールを構成するページと、ペイロードのダウンロードとインストールの進行状況バーを表示するページの 2 つのページを含む、カスタム UI を備えた小さなブートストラップがあります。私の問題: 2 番目のページでユーザーが Enter キーを押すと、インストールが完了していなくてもインストーラーが終了します。

UI からできるすべてのコントロールを次のように削除しました。

GetDlgItem $1 $HWNDPARENT 1 //(2, and 3)
System::Call `User32::DestroyWindow(i $1)`

onGuiInit 関数で、最初のページは Enter キーとスペース キーを無視するようになりましたが、2 ページ目は Enter キーで終了します。そのページには、いくつかのラベル、プログレスバー、およびスライドショー (nsisSlideshow プラグイン) を除いて、他のコンポーネントはありません。バックグラウンドで、ペイロードをダウンロードしてインストールするスレッドがあります。

ページは次のように宣言されます。

Page Custom Options_Show Options_Leave
Page Custom Progress_Show Progress_Leave

つまり、簡単に言うと、Enter キーを押すと、nsDialogs::Show 関数が返され、インストーラーが強制終了されます。

これを止める方法はありますか?

4

2 に答える 2

0

まず、小さなコード スニペット:

!macro EnableNextButtonM IsEnable
    Push $1
    GetDlgItem $1 $HWNDPARENT 1 ;next button
    EnableWindow $1 ${IsEnable}
    Pop $1
!macroend
!define EnableNextButton "!insertmacro EnableNextButtonM"

次に、関数 Progress_Show で呼び出す必要があります

${EnableNextButton} 0

nsDialogs::表示

[次へ] ボタンが表示される前に無効にします。ダウンロード完了後 (ダウンロード コールバック時) 呼び出し

${EnableNextButton} 1

再度有効にします。

.onGuiInit を使用したバリアントは、最初のページが表示される前に一度呼び出されるため、機能しません。ただし、次のすべてのページは再び動的に作成されるため、すべての UI ページをページ カスタム -Pre 関数に実装する必要があります。

于 2015-09-24T07:49:00.697 に答える