使用 NSIS,自定义第二页问题。列表视图/NSISList 文本

Using NSIS, Custom Page Two Question. ListView / NSISList Text

谢谢:]

  1. 使用ListView时,韩语不表达,但显示奇怪的字符。 (附照片)并且有些字符很好地包含在列表(NSISList)中,但有些字符没有。我尝试在下面添加源代码,但文本没有正确显示。我需要添加哪些来源才能使文本看起来正确? 我正在使用 NSIS 3.x 版本。

    !ifndef LVM_GETITEMTEXT

    !define /math LVM_GETITEMTEXTA ${LVM_FIRST} + 45

    !define /math LVM_GETITEMTEXTW ${LVM_FIRST} + 115

    ${_NSIS_DEFAW}LVM_GETITEMTEXT

    !endif

enter image description here

  1. 我会用韩语表达。通过将任何字符添加到列表中来使用它。在添加之前,如果显示为MessageBox,结果很好,将字符添加到List中。但是当我尝试添加它并再次使用它时,字符被截断了,甚至当我将它打印到TextBox时,它也没有出来。基于“대”,其后的字符不存储在List中。

ex) 서대문 = "서", 대구 = ""

Function ListTest
 ${List.Create} Aerch
 ${List.Add} Serch "서대문구"
 ${List.Get} [=10=] Serch 0
 
 MessageBox MB_OK [=10=]
FunctionEnd
; Return [=10=] = 서

您是否尝试过在脚本顶部添加命令“unicode True”?

  • 确保您的脚本开头有 Unicode True
  • 确保将脚本保存为 UTF-8 BOM 或 UTF-16LE BOM。
  • !在 commctrl.nsh
  • 之前包含 nsDialogs
  • 确保您使用的是所有插件的 Unicode 版本。

“看起来像中文”的字符是将 ASCII 视为 UTF-16 的症状。字符串在第一个字符后被截断是将 UTF-16 视为 ASCII 的症状(不是 Unicode 插件?)。

这对我有用:

Unicode True
RequestExecutionLevel user

!include nsDialogs.nsh
!define _COMMCTRL_NSH_VERBOSE 3
!include commctrl.nsh

Section
SectionEnd
Page custom nsDialogsPage
Var lv


Function msgboxtext
Pop [=10=]
SendMessage $lv ${LVM_GETSELECTIONMARK} 0 0 
StrCpy  1
${If}  = -1 
Return
${EndIf}

System::Call '*(&t${NSIS_MAX_STRLEN})p.r3'
System::Call "*(i, i, i, i, i, p, i, i, i) p  (0, 0, , 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1"
System::Call "User32::SendMessage(p, i, p, p) p ($lv, ${LVM_GETITEMTEXT}, , r1)"
System::Call "*(&t${NSIS_MAX_STRLEN} .r4)"
System::Free 
System::Free 
MessageBox mb_ok 
FunctionEnd

Function nsDialogsPage
nsDialogs::Create 1018
Pop [=10=]

${NSD_CreateButton} 0 0 100% 12u "Get text"
Pop 
${NSD_OnClick}  msgboxtext

nsDialogs::CreateControl /NOUNLOAD ${WC_LISTVIEW} ${__NSD_ListView_STYLE}|${WS_TABSTOP} ${__NSD_ListView_EXSTYLE}  0 13u 100% -13u ""
Pop $lv
${NSD_LV_InsertColumn} $lv 0 100 "column 0"
${NSD_LV_InsertColumn} $lv 1 70 "서대문"

${NSD_LV_InsertItem} $lv 0 '서대문'
${NSD_LV_SetItemText} $lv 0 1 '서대문 서대문'

${NSD_LV_InsertItem} $lv 1 '2 서대문'
${NSD_LV_SetItemText} $lv 1 1 '2.2 서대문 서대문'


nsDialogs::Show
FunctionEnd