2016-05-06 12 views
0

ich den folgenden Code in einem NSIS Skript ...NSIS Lizenz Seite prechecked

!define MUI_LICENSEPAGE_CHECKBOX 
!insertmacro MUI_PAGE_LICENSE "eula.txt" 

... und es funktioniert gut. Wie erwartet, muss der Benutzer das "Ich akzeptiere ..." checkbox überprüfen und dann wird die Installation button aktiviert.

Ich möchte den Prozess vereinfachen, so dass die checkbox überprüft wird und die Installation button standardmäßig aktiviert ist und der Benutzer nur installieren oder abbrechen muss.

Danke euch allen.

Antwort

2
!define MUI_LICENSEPAGE_CHECKBOX    ; Tell MUI you want the checkbox version of the license page 
!define MUI_PAGE_CUSTOMFUNCTION_SHOW licshow ; Tell MUI to call a function before the page is displayed 
!insertmacro MUI_PAGE_LICENSE "eula.txt"  ; Adds the page 

Function licshow        ; Function to be called before the page is displayed 
    ; Check it 
    FindWindow $0 "#32770" "" $HWNDPARENT ; Find the inner dialog (See attached picture) 
    GetDlgItem $0 $0 0x40A     ; Find the checkbox control 
    SendMessage $0 ${BM_SETCHECK} 1 0  ; Check the checkbox 

    ; Enable button 
    GetDlgItem $0 $hwndparent 1    ; Find the Install/Next button 
    EnableWindow $0 1      ; Enable the button 
FunctionEnd 

Die letzte GetDlgItem + EnableWindow Befehle durch SendMessage $HWNDPARENT ${WM_COMMAND} 0x40A 0 ersetzt werden kann, den Benutzer durch Klick zu simulieren und würde NSIS interne Verarbeitung führen die Schaltfläche zu aktivieren.


NSIS inner and outer dialog

+0

Danke für die Kommentare. Warum wird 0x40A in beiden Fällen verwendet? Sollten die Checkbox und die Schaltfläche nicht unterschiedliche IDs haben? Die Funktionsaufrufe ergeben für mich Sinn. Wie man jedes Dialogelement identifiziert, tut es nicht. – Lara

+1

Sie können die IDs für Standard-Steuerelemente finden @ https://sourceforge.net/p/nsis/code/HEAD/tree/NSIS/trunk/Source/exehead/resource.h oder ein Tool wie WinSpy ++ verwenden. Die WM_COMMAND-Nachricht nimmt die ID des geänderten Steuerelements, nur NSIS weiß, dass das Kontrollkästchen an die Schaltfläche Weiter gebunden ist. – Anders

+0

Wow. Es wäre mir nie in den Sinn gekommen. Ich meine, "WM_COMMAND Nachricht nimmt die ID der Kontrolle, die sich geändert hat", wow.Thank Sie, mein Freund. – Lara

0

Ich hatte Glück und konnte Code von mehreren Stellen zusammenwerfen.

Das folgende funktioniert, aber ich weiß nicht wirklich warum NSIS-weise, die ich überhaupt nicht mag. Wenn jemand es kaputt machen kann, würde ich es wirklich, wirklich schätzen.

!define MUI_LICENSEPAGE_CHECKBOX 
!define MUI_PAGE_CUSTOMFUNCTION_SHOW licshow 
!insertmacro MUI_PAGE_LICENSE "eula.txt" 

Function licshow 
    ; Check it 
    FindWindow $0 "#32770" "" $HWNDPARENT 
    GetDlgItem $0 $0 0x40A 
    SendMessage $0 ${BM_SETCHECK} 1 0 

    ; Enable button 
    GetDlgItem $0 $hwndparent 1 
    EnableWindow $0 1 
FunctionEnd