Цитата MKN:
Очень не хотелось бы связываться с IO »
|
Цитата MKN:
Даже если пересилить себя и связаться допотопным IO »
|
Ты вообще читал моё сообщение или глазами по нему пробежался? Я тебе ни слова не говорил про то, чтобы использовать IO, перечитай моё сообщение ещё раз.
Цитата MKN:
Но оказалось есть интересный способ получить данные из ListBox_а»
|
Ты смотрел пример моего диалога в файле справки? Видимо, нет
В том примере показано, как нужно использовать
ExecDos,
когда тебе нужно сделать что-то с данными из консольного приложения, а не просто запихнуть весь текст в какой-то элемент
И там показано, что команду
OemToChar использовать можно только для преобразования строки, но никак не для смены кодировки элемента управления, как ты пытался сделать...
ЗАМЕЧАНИЕ ДЛЯ ВСЕХ
Возьмите на заметку, если вы пользуетесь плагином
ExecDos просто для вывода данных консольного приложения в элемент управления - используйте ключ
/TOWINDOW или
/DETAILED в зависимости от сиуации, НО, если же вам необходимо
произвести какую-то манипуляция с теми данными, которые консольное приложение вам выдаёт - используйте ключ
/TOSTACK или
/TOFUNC, опять же, в зависимости от ситуации
Цитата MKN:
Я имел ввиду, что из консоли мне насыпится куча строк, а надо использовать только конкретные номера строк, а остальные ессно игнорировать... »
|
Мой пример в моём примере
Цитата MKN:
Но с LB_GETCURSEL наверное может удастся это реализовать... Как - пока не придумал... »
|
Я тебе ещё раз повторяю про элемент ListView, почему ты такой упёртый?
Ладно, дам тебе задание: после того, как ты свой код напишешь, всё сделаешь так, как нужно, попробуй добавить в свой любимый ListBox горизонтальную прокрутку
Хочу потом написать здесь "я же говорил" после того, как ты возьмёшься переписывать код под элемент ListView
всё готовенькое, как вы любите
Код:
OutFile ExecDos_TOWINDOW.exe
!include nsDialogs.nsh
Var Dialog
Var hcli
Var ListBox
Page custom MyPage leave
Function MyPage
nsDialogs::Create 1018
Pop $Dialog
${NSD_CreateListBox} 0 20 100% 100u "$ListBox"
Pop $ListBox
GetFunctionAddress $0 MyFunction
ExecDos::exec /NOUNLOAD /ASYNC /TOFUNC `cmd /?` "" $0
Pop $hcli
nsDialogs::Show
FunctionEnd
Function leave
ExecDos::wait $hcli
FunctionEnd
Function MyFunction
Pop $2
; в эту переменную кидается по-отдельности каждая строка, которую конс. приложение выдаёт
; можешь пропустить и не добавлять данные в элемент (как ты хотел, можно заюзать IntOp+StrCmp, например обнуляя переменную IntOp через каждые 3 прохода)
; что-то типа такого...
;IntOp $R0 $R0 + 1
;StrCmp $R0 4 0 noAddString
;StrCpy $R0 0
System::Call "user32::OemToChar(tr2, t.r2)"
SendMessage $ListBox ${LB_ADDSTRING} 0 "STR:$2"
#MessageBox MB_OK|MB_ICONINFORMATION "Добавляется строка:$\n$2"
; noAddString:
FunctionEnd
Section
SectionEnd
Цитата MKN:
ps В доке сказано, что можно посылать данные с помощью /TOWINDOW не только в чёртов ListView : »
|
Да лааадно? Кто-то наконец-то открыл документацию к плагину?
Цитата MKN:
А как бы это сделать на практике ? Например, отправить инфу в окно Edit »
|
Может, заглянешь там ещё в папку
Examples? Ходят слухи, что там что-то интересное и ты будешь рад это увидеть
Я могу понять некоторых личностей, но чтобы ты ленился, MKN, стыдно должно быть
Там же в примерах всё есть, ну не сложно же открыть этот чертов
ToWindow.nsi, который лежит в архиве с плагином и посмотреть, как там всё устроено, ты же не первый день с NSIS работаешь...
В этих примерах я взял стандартный блокнот (закройте копии блокнота перед запуском скомпилированного скрипта, чтобы не записало куда попало), после его запуска скрипт закидывает данные прямо в область редактирования текста (элемент Edit)
всё готовенькое (2): /TOWINDOW с иероглифами
Код:
!addincludedir "."
!addplugindir "."
!include "WinMessages.nsh"
OutFile "!TEST.exe"
Function .onInit
exec "notepad"
stget:
Sleep 1000
FindWindow $0 "notepad" ""
StrCmp $0 "0" stget 0
FindWindow $1 "Edit" "" $0
StrCmp $1 "0" stget 0
ExecDos::exec /TOWINDOW "cmd /?" "" $1
quit
FunctionEnd
Section -post
SetAutoClose false
SectionEnd
всё готовенькое (3): /TOFUNC с обработкой строк и без иероглифов
Код:
!addincludedir "."
!addplugindir "."
!include "WinMessages.nsh"
OutFile "!TEST.exe"
Function .onInit
exec "notepad"
stget:
Sleep 1000
FindWindow $0 "notepad" ""
StrCmp $0 "0" stget 0
FindWindow $1 "Edit" "" $0
StrCmp $1 "0" stget 0
GetFunctionAddress $0 MyFunction
ExecDos::exec /NOUNLOAD /ASYNC /TOFUNC `cmd /?` "" $0
pop $0
ExecDos::wait $0
quit
FunctionEnd
Function MyFunction
Pop $2
System::Call "user32::OemToChar(tr2, t.r2)"
SendMessage $1 ${EM_REPLACESEL} 0 "STR:$\r$\n$2"
FunctionEnd
Section -post
SetAutoClose false
SectionEnd