1

ButtonEvent プラグインを試してみましたが、コンパイルされたサンプルを実行すると、メモリ アクセス エラーで失敗します。たぶん、Windows API などを介してシステム プラグインを使用することができますか? 誰でもそれができる方法を示すことができますか?

UPD: Unicode NSIS で非 Unicode ButtonEvent を使用しようとしたため、エラーが発生しました。これでサンプルはコンパイルされて正常に実行されますが、TryMe ボタンをクリックしてもコールバック関数が呼び出されず、何も起こりません。何が問題なのかを判断する方法は? 誰でも ButtonEventMUI.nsi をコンパイルして、TryMe ボタンをクリックできますか? 最新の ButtonEvent バージョンをダウンロードしました。NSIS 2.46 ユニコードの使用

4

1 に答える 1

3

システム プラグインは、ウィンドウをサブクラス化できないため、これを行うことができません。

ButtonEvent プラグインは問題なく動作します (NSIS 2.46):

Name BtnTest
Outfile test.exe
Installdir "$temp"
RequestExecutionLevel user
BrandingText " " ;Button covers this text
!include nsDialogs.nsh ;For WS_*

Function .onGuiInit
; You are supposed to use ChangeUI (or MUI_UI) and a modified ui file to add new buttons but this example adds the button at run-time...
GetDlgItem $0 $hwndparent 2 ; Find cancel button
System::Call *(i,i,i,i)i.r1
System::Call 'USER32::GetWindowRect(ir0,ir1)'
System::Call *$1(i.r2,i.r3,i.r4,i.r5)
IntOp $5 $5 - $3 ;height
IntOp $4 $4 - $2 ;width
System::Call 'USER32::ScreenToClient(i$hwndparent,ir1)'
System::Call *$1(i.r2,i.r3)
System::Free $1
IntOp $2 $2 + $4 ;x
IntOp $2 $2 + 8  ;x+padding
System::Call 'USER32::CreateWindowEx(i0,t "Button",t "Click Me",i${WS_CHILD}|${WS_VISIBLE}|${WS_TABSTOP},ir2,ir3,ir4,ir5,i $hwndparent,i 0x666,i0,i0)i.r0'
SendMessage $hwndparent ${WM_GETFONT} 0 0 $1
SendMessage $0 ${WM_SETFONT} $1 1

GetFunctionAddress $0 onmybtnclick
ButtonEvent::AddEventHandler 0x666 $0
FunctionEnd

Function onmybtnclick
MessageBox mb_ok "You clicked me!"
FunctionEnd

Page Directory
Page Instfiles

Section
SectionEnd

例

于 2012-07-12T01:29:16.380 に答える