0

NSIS インストーラーの [ファイルのインストール] ページにある読み込みバーの色を変更するにはどうすればよいですか?

次の例では、メッセージ PBM_SETBARCOLOR をロード バー ウィンドウに送信しようとしていますが、ロード バーの色は変わりませんか?

!include MUI2.nsh
!include WinMessages.nsh

InstallDir  "abc"
Name        "def"        
OutFile     "def.exe"

!define MUI_PAGE_CUSTOMFUNCTION_SHOW InstFilesPageShow
!insertmacro MUI_PAGE_INSTFILES

!macro RefreshWindow HWND IDC
    GetDlgItem $R0 ${HWND} ${IDC}
    ShowWindow $R0 ${SW_HIDE}
    ShowWindow $R0 ${SW_SHOW}
!macroend

Function InstFilesPageShow

    SendMessage 1004 ${PBM_SETBARCOLOR} 0 "COLORREF(0,200,200)" #0xFF0000
    System::Call `user32::SendMessage(i R1, i ${PBM_SETBARCOLOR}, i 0, i COLORREF(0,0,0))`  #System::Call `user32::SetWindowPos(i R8, i ${HWND_TOP}, i 0, i 0, i ${w}, i ${h}, i ${SWP_NOMOVE})`
    #!insertmacro RefreshWindow $HWND 1004
    #!insertmacro RefreshWindow $mui.InstallPage 1004
    !insertmacro RefreshWindow $HWNDPARENT 1004

FunctionEnd

Section "Dummy" 
    DetailPrint "Test"
SectionEnd
4

2 に答える 2

1
XPStyle on
Page instfiles "" instfilesShow

!include WinMessages.nsh

Function instfilesShow
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 1004
System::Call UxTheme::SetWindowTheme(ir0,w"",w"")
SendMessage $0 ${PBM_SETBARCOLOR} 0 0x11aaee
FunctionEnd
于 2012-09-27T16:39:29.233 に答える
0

私はあなたがこれを行うことができないことを恐れています: PBM_SETBARCOLOR のドキュメントでは、MSDN は述べています

visual スタイルが有効になっている場合、このメッセージは無効です。

ところで、あなたのRefreshWindowマクロでは、ID からコントロール ハンドルを誤って取得しています。NSISのドキュメントは言う

内部ダイアログのコントロールのハンドルを取得する場合は、最初に を使用FindWindow user_var(output) "#32770" "" $HWNDPARENTして内部ダイアログのハンドルを取得します。

したがって、次のように書くことができます:

FindWindow $R1 "#32770" "" $HWNDPARENT ;$R1 = handle of the inner dialog
GetDlgItem $R0 $R1 ${IDC} ;get the handle of control from its ID
ShowWindow $R0 ${SW_HIDE}
ShowWindow $R0 ${SW_SHOW}
于 2012-09-27T08:38:32.363 に答える