.: NSIS - все вопросы :. часть 2.
-
wolkow70
Re: .: NSIS - все вопросы :. часть 2.
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.
Все заработало.
Вот эта строка
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.
Добрый день. Есть ли возможность получить в переменную командную строку запущенного процесса GetCommandLine?
-
kotkovets
Re: .: NSIS - все вопросы :. часть 2.
Цитата Salmo:
Есть ли возможность получить в переменную командную строку запущенного процесса GetCommandLine
Есть, для себя, делал такой макрос:
Код:
использование макроса:
Код:
Как найти пид запущенного процесса читаем в справочнике: » Работа с процессами с помощью NSIS..
$var - переменная, где находится командная строка запущенного процесса
Есть ли возможность получить в переменную командную строку запущенного процесса 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.
В примере лог конструкций Справки сказано " для
${Case5} и далее пять значений :
Цитата:
Здесь макрос ${Case} может срабатывать до пяти значений переменной $0
Почему 5 (4,3,2) - вроде как логично и понятно... Но почему, когда указываешь, к примеру : ${Case6} и далее шесть значений - ошибка ?
Или 5 - это и есть ограничение для макроса ? (а где про это вообще сказано ? ) Тогда в вышеприведённой цитате хорошо бы указывать - "не более пяти значений". Так было бы более конкретно и понятно... Вроде бы мелочь, но...
А если надо выбирать из 25 значений ?
${Case5} и далее пять значений :
Цитата:
Здесь макрос ${Case} может срабатывать до пяти значений переменной $0
Почему 5 (4,3,2) - вроде как логично и понятно... Но почему, когда указываешь, к примеру : ${Case6} и далее шесть значений - ошибка ?
Или 5 - это и есть ограничение для макроса ? (а где про это вообще сказано ? ) Тогда в вышеприведённой цитате хорошо бы указывать - "не более пяти значений". Так было бы более конкретно и понятно... Вроде бы мелочь, но...
А если надо выбирать из 25 значений ?
-
wolkow70
Re: .: NSIS - все вопросы :. часть 2.
Цитата MKN:
с помощью функции GetCommandLine
и вообще то, для этого есть переменная:
Код:
с помощью функции GetCommandLine
.: NSIS - все вопросы :. часть 2.
и вообще то, для этого есть переменная:
Код:
Код: Выделить всё
MessageBox MB_OK "$CMDLINE"-
kotkovets
Re: .: NSIS - все вопросы :. часть 2.
MKN, а правкой хидера можно и больше...
Ну добавь в логику ещё
{case5} и уже 10...
И так далее...
Ну добавь в логику ещё
{case5} и уже 10...
И так далее...
-
Aster
Re: .: NSIS - все вопросы :. часть 2.
Цитата Salmo:
kotkovets, Добрый день. Позволю себе в третий раз задать тот же вопрос. Видимо, вы не видели предыдущие...
Цитата Salmo:
Хотелось бы кликать на объекты формы по координатам
это не просто... здесь строго индивидуально.. нет здесь универсального решения.. чтоб взял, да и все работало на все...
как то так..
kotkovets, Добрый день. Позволю себе в третий раз задать тот же вопрос. Видимо, вы не видели предыдущие...
.: NSIS - все вопросы :. часть 2.
Цитата Salmo:
Хотелось бы кликать на объекты формы по координатам
.: NSIS - все вопросы :. часть 2.
это не просто... здесь строго индивидуально.. нет здесь универсального решения.. чтоб взял, да и все работало на все...
как то так..
-
K.A.V.
Re: .: NSIS - все вопросы :. часть 2.
Цитата kotkovets:
и вообще то, для этого есть переменная:
Код:
MessageBox MB_OK "$CMDLINE"
Действительно, куда уж проще
Хотя $CMDLINE я в доке не обнаружил... Есть $EXEPATH
А зачем тогда в справочнике пример с GetModuleFileNameA ? Если для общего развития, то понятно. Тогда и GetCommandLine сгодится.
Хотя получается, что место им в разделе : "А здесь не ищут лёгких путей"
И ещё о получении пути запущенного процесса, как альтернатива твоего замечательного ProcessFunc.nsh. Есть ещё хедер некоего Erik Pilsits - Process Functions Header. Делает вроде как то же самое, только с маленьким огрехом, упомянутым неким poofeg в своём блоге :
Цитата:
Но оказалось у него есть одна проблема, он завершает процесс “по доброму” только один раз. Следующие вызовы функции ${CloseProcess} делают ничего. Пришлось его немного исправить, вот исправленный вариант: [download#16]. Проблема была в сравнении $4 == “callback1″, когда при следующем вызове уже callback2 и т.д.
Скачать исправленный вариант не получается и стОит ли оно того, раз уже есть ProcessFunc.nsh ?
По поводу кликанья по объектам... Меня давно интересует функция GetCapture, которая извлекает дескриптор окна , который захватила мышь. А также как регистрировать слик мыши для управления событиями ? Но не знаю как это приспособить в NSIS. Не приведёшь пример ?
и вообще то, для этого есть переменная:
Код:
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.
Цитата MKN:
"А здесь не ищут лёгких путей"
это давно ясно...
Цитата MKN:
Делает вроде как то же самое, только с маленьким огрехом
Цитата MKN:
Но оказалось у него есть одна проблема, он завершает процесс “по доброму” только один раз. Следующие вызовы функции ${CloseProcess} делают ничего. Пришлось его немного исправить, вот исправленный вариант: [download#16]. Проблема была в сравнении $4 == “callback1″, когда при следующем вызове уже callback2 и т.д.
Скачать исправленный вариант не получается и стОит ли оно того, раз уже есть ProcessFunc.nsh ?
у меня этого нет, потому что в NSIS кривая реализация обратных функций (калбэков)
Цитата MKN:
По поводу кликанья по объектам... Меня давно интересует функция GetCapture, которая извлекает дескриптор окна , который захватила мышь. А также как регистрировать слик мыши для управления событиями ? Но не знаю как это приспособить в NSIS. Не приведёшь пример ?
не а, по выше причине, может и есть пример - но он кривой будет...
"А здесь не ищут лёгких путей"
.: 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.
Цитата kotkovets:
кривая реализация обратных функций (калбэков)
Ох уж эти калбаки... Неужели нет никаких способов это исправитть ? А как же тогда автору ButtonEvent плагина удалось реализовать калбак кнопок ? Хотя никакими силами обычным образом этого не сделать... ( имею ввиду, управление кнопкой созданной на стандартной странице, о чём уже как то говорили)
кривая реализация обратных функций (калбэков)
.: NSIS - все вопросы :. часть 2.
Ох уж эти калбаки... Неужели нет никаких способов это исправитть ? А как же тогда автору ButtonEvent плагина удалось реализовать калбак кнопок ? Хотя никакими силами обычным образом этого не сделать... ( имею ввиду, управление кнопкой созданной на стандартной странице, о чём уже как то говорили)