Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата 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

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:05, 11-02-2015 | #1485