.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 42
Аватара пользователя
wolkow70

Re: .: NSIS - все вопросы :. часть 2.

Сообщение wolkow70 »

K.A.V.,

Все заработало.

Вот эта строка

SendMessage $mui.StartMenuPage.Text ${WM_SETTEXT} 0 "STR:Handle этого элемента с текстом теперь в переменной mui.StartMenuPage.Text"

оказалось не нужна.

Работает так:



var /global mui.StartMenuPage.Text

GetDlgItem $mui.StartMenuPage.Text $mui.StartMenuPage 1003

${NSD_SetText} $mui.StartMenuPage.Text \

"Выберите папку в меню $\"Пуск$\ ...."



Странно, но Au3Info.exe показывает ID 1006, но правильно работает с 1003.
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Добрый день. Есть ли возможность получить в переменную командную строку запущенного процесса GetCommandLine?
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Цитата Salmo:



Есть ли возможность получить в переменную командную строку запущенного процесса GetCommandLine
.: NSIS - все вопросы :. часть 2.




Есть, для себя, делал такой макрос:


CmdProsess




Код:

Код: Выделить всё

!define CmdProsess "!insertmacro CallCmdProsess"
!macro CallCmdProsess `PID` `OUT`
    !ifndef VAR_CMDPROSESS
    ;объявление структур
       !define VAR_STRUCT
       !define stPROCESS_PARAMETERS "(i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i.s,i,i,i,i,i,i,i,i,i,i)"
       !define stPROCESS_BASIC_INFORMATION "(i,i.s,i,i,i,i)"
       !define stPEB "(i,i,i,i,i.s,i,i)"
    ;;;;;;;;;;;;;
    !endif
    System::Store S
    System::Call "kernel32::OpenProcess(i0x1F0FFF,i0,i${PID})i.R2"
    System::Alloc 24
    Pop $R0
    System::Call "ntdll::NtQueryInformationProcess(iR2, i0, iR0, i24, in)i.R1"
    ${If} $R1 == 0
        System::Alloc 28
        Pop $R1
        System::Call "*$R0${stPROCESS_BASIC_INFORMATION}" ;PebBaseAddress
        System::Free $R0
        System::Call "kernel32::ReadProcessMemory(iR2, is, iR1, i28, *in)"
        System::Alloc 144
        Pop $R0
        System::Call "*$R1${stPEB}" ;ProcessParameters
        System::Free $R1
        System::Call "kernel32::ReadProcessMemory(iR2, is, iR0, i144, *in)"
        System::Call "*$R0${stPROCESS_PARAMETERS}" ;CommandLine
        System::Free $R0
        System::Call "kernel32::ReadProcessMemory(iR2, is, w.s, i536, *in)"
        System::Call "kernel32::CloseHandle(iR2)"
     ${Else}
        System::Free $R0
        System::Call "kernel32::CloseHandle(iR2)"
        Push error
    ${EndIf}
    System::Store L
    Pop `${OUT}`
!macroend






использование макроса:



Код:

Код: Выделить всё

${CmdProsess} "пид процесса" "$var"

Как найти пид запущенного процесса читаем в справочнике: » Работа с процессами с помощью NSIS..

$var - переменная, где находится командная строка запущенного процесса
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

В примере лог конструкций Справки сказано " для



${Case5} и далее пять значений :


Цитата:



Здесь макрос ${Case} может срабатывать до пяти значений переменной $0



Почему 5 (4,3,2) - вроде как логично и понятно... Но почему, когда указываешь, к примеру : ${Case6} и далее шесть значений - ошибка ?

Или 5 - это и есть ограничение для макроса ? (а где про это вообще сказано ? ) Тогда в вышеприведённой цитате хорошо бы указывать - "не более пяти значений". Так было бы более конкретно и понятно... Вроде бы мелочь, но...

А если надо выбирать из 25 значений ?
Аватара пользователя
wolkow70

Re: .: NSIS - все вопросы :. часть 2.

Сообщение wolkow70 »

Цитата MKN:



с помощью функции GetCommandLine
.: NSIS - все вопросы :. часть 2.




и вообще то, для этого есть переменная:



Код:

Код: Выделить всё

MessageBox MB_OK "$CMDLINE"
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

MKN, а правкой хидера можно и больше...

Ну добавь в логику ещё

{case5} и уже 10...

И так далее...
Аватара пользователя
Aster

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Aster »

Цитата Salmo:



kotkovets, Добрый день. Позволю себе в третий раз задать тот же вопрос. Видимо, вы не видели предыдущие...
.: NSIS - все вопросы :. часть 2.





Цитата Salmo:



Хотелось бы кликать на объекты формы по координатам
.: NSIS - все вопросы :. часть 2.




это не просто... здесь строго индивидуально.. нет здесь универсального решения.. чтоб взял, да и все работало на все...

как то так..
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата kotkovets:



и вообще то, для этого есть переменная:

Код:

MessageBox MB_OK "$CMDLINE"
.: NSIS - все вопросы :. часть 2.




Действительно, куда уж проще Изображение Хотя $CMDLINE я в доке не обнаружил... Есть $EXEPATH

А зачем тогда в справочнике пример с GetModuleFileNameA ? Если для общего развития, то понятно. Тогда и GetCommandLine сгодится.

Хотя получается, что место им в разделе : "А здесь не ищут лёгких путей" Изображение



И ещё о получении пути запущенного процесса, как альтернатива твоего замечательного ProcessFunc.nsh. Есть ещё хедер некоего Erik Pilsits - Process Functions Header. Делает вроде как то же самое, только с маленьким огрехом, упомянутым неким poofeg в своём блоге :


Цитата:



Но оказалось у него есть одна проблема, он завершает процесс “по доброму” только один раз. Следующие вызовы функции ${CloseProcess} делают ничего. Пришлось его немного исправить, вот исправленный вариант: [download#16]. Проблема была в сравнении $4 == “callback1″, когда при следующем вызове уже callback2 и т.д.



Скачать исправленный вариант не получается и стОит ли оно того, раз уже есть ProcessFunc.nsh ?



По поводу кликанья по объектам... Меня давно интересует функция GetCapture, которая извлекает дескриптор окна , который захватила мышь. А также как регистрировать слик мыши для управления событиями ? Но не знаю как это приспособить в NSIS. Не приведёшь пример ?
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Цитата MKN:



"А здесь не ищут лёгких путей"
.: NSIS - все вопросы :. часть 2.




это давно ясно...


Цитата MKN:



Делает вроде как то же самое, только с маленьким огрехом
.: NSIS - все вопросы :. часть 2.





Цитата MKN:



Но оказалось у него есть одна проблема, он завершает процесс “по доброму” только один раз. Следующие вызовы функции ${CloseProcess} делают ничего. Пришлось его немного исправить, вот исправленный вариант: [download#16]. Проблема была в сравнении $4 == “callback1″, когда при следующем вызове уже callback2 и т.д.

Скачать исправленный вариант не получается и стОит ли оно того, раз уже есть ProcessFunc.nsh ?
.: NSIS - все вопросы :. часть 2.




у меня этого нет, потому что в NSIS кривая реализация обратных функций (калбэков)


Цитата MKN:



По поводу кликанья по объектам... Меня давно интересует функция GetCapture, которая извлекает дескриптор окна , который захватила мышь. А также как регистрировать слик мыши для управления событиями ? Но не знаю как это приспособить в NSIS. Не приведёшь пример ?
.: NSIS - все вопросы :. часть 2.




не а, по выше причине, может и есть пример - но он кривой будет...
Аватара пользователя
Aster

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Aster »

Цитата kotkovets:



кривая реализация обратных функций (калбэков)
.: NSIS - все вопросы :. часть 2.




Ох уж эти калбаки... Неужели нет никаких способов это исправитть ? А как же тогда автору ButtonEvent плагина удалось реализовать калбак кнопок ? Хотя никакими силами обычным образом этого не сделать... ( имею ввиду, управление кнопкой созданной на стандартной странице, о чём уже как то говорили)
Ответить

Вернуться в «Автоматическая установка приложений»