Снегопат https://snegopat.ru/forum/ |
|
Помогите макрос написать Установка пароля на модуль https://snegopat.ru/forum/viewtopic.php?f=3&t=237 |
Страница 1 из 2 |
Автор: | vladnet [ 10 авг 2012, 14:21 ] |
Заголовок сообщения: | Помогите макрос написать Установка пароля на модуль |
В трассировке команду нашел: cmd: groupid={EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}, num=0, param=0, object=0x00000000 Первый вопрос, как вызвать ее? И второй вопрос, выйдет стандартная форма, как в ней то поля заполнить и ОК нажать? |
Автор: | orefkov [ 10 авг 2012, 14:36 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
Команду послать: Код: sendCommand("{EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}", 0) Для работы с диалогами сделай поиск по папке csripts фразы Код: events.connect(windows, "onDoModal"
|
Автор: | vladnet [ 10 авг 2012, 17:08 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
Команда работает спасибо. А вот с диалогом не разобрался. Мне нужно только в рамках действия данного скрипта диалог гасить. То есть по сути мне не нужно событие перехватывать. Но возникает странная ситуация, если перехватываю событие, то вот эта строка отрабатывает 2 раза и в форме установки пароля и уже после выхода из формы в модуле new ActiveXObject("WScript.Shell").SendKeys("pass{TAB}pass{TAB}{ENTER}") а если просто после sendCommand("{EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}", 0) то только 1 раз. как быть? |
Автор: | sosnae [ 10 авг 2012, 17:18 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
Проверяй состояние модального диалога, их вроде три "перед", "открыто модальное окно", "после" Код: function onMessageBoxSaveToFileCF(dlgInfo) {
//Модальное окно открыто. if ((dlgInfo.stage == openModalWnd) && (dlgInfo.Caption=="Конфигуратор")) { // тут sendkey } else { if ((dlgInfo.stage == afterDoModal) && (dlgInfo.Caption=="Конфигуратор")) { //после модального окна, тут я отключаюсь от события. try { events.disconnect(windows, "onDoModal", SelfScript.self, "onMessageBoxSaveToFileCF"); } catch (e) { } } } } |
Автор: | vladnet [ 10 авг 2012, 17:24 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
попробую спасибо, сразу не понял что это за условия ) |
Автор: | vladnet [ 10 авг 2012, 17:41 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
в общем так сделал Код: var мВызовИзМакроса = false events.connect(windows, "onDoModal", SelfScript.self, "onMessageBoxSetPassword"); function macrosУстановитьПароль() { мВызовИзМакроса = true sendCommand("{EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}", 0) мВызовИзМакроса = false } function onMessageBoxSetPassword(dlgInfo) { if ((dlgInfo.stage==openModalWnd) && (dlgInfo.Caption=="Защита модуля") && (мВызовИзМакроса==true)){ new ActiveXObject("WScript.Shell").SendKeys("pass{TAB}pass{TAB}{ENTER}"); } } Только проблема не исчезла, все равно не туда клавиши улетают. Причем если вызов не из макроса, то убрать условие что вызов только от туда то клавиши улетают нормально ( так же нормально если на модуле уже стоит пароль, после ввода старого пароля, клавиши улетают туда куда нужно ... |
Автор: | orefkov [ 10 авг 2012, 20:25 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
Код: function macrosУстановитьПароль() { events.connect(windows, "onDoModal", SelfScript.self, "onMessageBoxSetPassword"); sendCommand("{EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}", 0) } function onMessageBoxSetPassword(dlgInfo) { if (dlgInfo.stage==openModalWnd && dlgInfo.Caption=="Защита модуля"){ events.disconnect(windows, "onDoModal", SelfScript.self, "onMessageBoxSetPassword"); // Вот тут надо узнать имена контролов и значения в них устанавливать вот так dlgInfo.form.getControl("ТутИмяКонтролаСПаролем").value="pass"; dlgInfo.form.getControl("ТутИмяДругогоКонтролаСПаролем").value="pass"; new ActiveXObject("WScript.Shell").SendKeys("^~"); // Ctrl+Enter } } Имя контролов можно получить, перебрав один раз все контролы, через form.getControl(i) для i от 0 до form.ControlsCount, у каждого есть свойство name. |
Автор: | artbear [ 11 авг 2012, 10:19 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
orefkov писал(а): Имя контролов можно получить, перебрав один раз все контролы, через form.getControl(i) для i от 0 до form.ControlsCount, у каждого есть свойство name. (0) В дополнение вот тебе готовый код для перебора (уже выкладывался ранее) Код: if(dlgInfo.stage == openModalWnd)
{ Message(dlgInfo.Caption); // Пример перебора контролов на форме //Message("HWND = 0x" + dlgInfo.form.hwnd.toString(16)); for(var c = 0; c < dlgInfo.form.controlsCount; c++) { var ctr = dlgInfo.form.getControl(c) Message(ctr.name + ", " + ctr.id + ", " + ctr.value) } } |
Автор: | vladnet [ 14 авг 2012, 17:55 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
Александр, спасибо огромное за наводку в нужную сторону, понятно что так намного правильнее сделать. Перебор тоже кстати пригодился ) Да вопрос на будущее, а как на кнопку нажать без того чтобы посылать клавиши, ведь по сути контрол то мы можем получить... А да все модуль доделан, это было последняя фишечка ради которой я пользовался Autohotkey теперь все перевел на снегопат, и очень доволен. Да кому надо выкладываю Код: $engine JScript
$uname my_macros $dname Мои макросы $addin global $addin stdcommands $addin stdlib var мВызовИзМакроса = false events.connect(windows, "onDoModal", SelfScript.self, "onMessageBoxSetPassword"); ////////////////////////////////////////////////////////////////////////////////////// ////{ Макросы //// function macrosОткрытьМодульОбъекта() { //debugger try { windows.getActiveView().mdObj.editProperty("МодульОбъекта"); return true }catch(e){} return false } function macrosОткрытьОсновнуюФорму() { try { var mdObj = windows.getActiveView().mdObj var mainForm = mdObj.container.findByUUID(stdlib.getUuidFomMDRef(mdObj.property("ОсновнаяФорма"))) mainForm.editProperty("Форма") return true }catch(e){} return false } function macrosУстановитьПароль() { мВызовИзМакроса = true sendCommand("{EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}", 0) мВызовИзМакроса = false } function onMessageBoxSetPassword(dlgInfo) { if ((dlgInfo.stage==openModalWnd) && (dlgInfo.Caption=="Защита модуля") && (мВызовИзМакроса==true)){ dlgInfo.form.getControl("Password").value="pass"; dlgInfo.form.getControl("ConfirmPassword").value="pass"; new ActiveXObject("WScript.Shell").SendKeys("^~"); // Ctrl+Enter } } |
Автор: | sosnae [ 15 авг 2012, 09:32 ] |
Заголовок сообщения: | Re: Помогите макрос написать Установка пароля на модуль |
А оформить скриптом и вики? |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |