Снегопат

Обсуждение Снегопата
Текущее время: 16 май 2024, 08:41

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 10 авг 2012, 14:21 
Не в сети

Зарегистрирован: 24 авг 2011, 15:57
Сообщения: 388
В трассировке команду нашел:

cmd: groupid={EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}, num=0, param=0, object=0x00000000

Первый вопрос, как вызвать ее? И второй вопрос, выйдет стандартная форма, как в ней то поля заполнить и ОК нажать?

_________________
ИТ учет http://tunesoft.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 авг 2012, 14:36 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Команду послать:
Код:
sendCommand("{EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}", 0)

Для работы с диалогами сделай поиск по папке csripts фразы
Код:
events.connect(windows, "onDoModal"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 авг 2012, 17:08 
Не в сети

Зарегистрирован: 24 авг 2011, 15:57
Сообщения: 388
Команда работает спасибо.
А вот с диалогом не разобрался. Мне нужно только в рамках действия данного скрипта диалог гасить.

То есть по сути мне не нужно событие перехватывать. Но возникает странная ситуация, если перехватываю событие, то вот эта строка отрабатывает 2 раза и в форме установки пароля и уже после выхода из формы в модуле

new ActiveXObject("WScript.Shell").SendKeys("pass{TAB}pass{TAB}{ENTER}")

а если просто после sendCommand("{EF6D156B-12FB-4CE7-A0E9-7F0C2EDC7D06}", 0)

то только 1 раз. как быть?

_________________
ИТ учет http://tunesoft.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 авг 2012, 17:18 
Не в сети

Зарегистрирован: 20 дек 2011, 10:31
Сообщения: 588
Откуда: Украина, Запорожье
Проверяй состояние модального диалога, их вроде три "перед", "открыто модальное окно", "после"
Код:
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) { }
            }
        }
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 авг 2012, 17:24 
Не в сети

Зарегистрирован: 24 авг 2011, 15:57
Сообщения: 388
попробую спасибо, сразу не понял что это за условия )

_________________
ИТ учет http://tunesoft.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 авг 2012, 17:41 
Не в сети

Зарегистрирован: 24 авг 2011, 15:57
Сообщения: 388
в общем так сделал

Код:
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}");
    }
}


Только проблема не исчезла, все равно не туда клавиши улетают. Причем если вызов не из макроса, то убрать условие что вызов только от туда то клавиши улетают нормально ( так же нормально если на модуле уже стоит пароль, после ввода старого пароля, клавиши улетают туда куда нужно ...

_________________
ИТ учет http://tunesoft.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 авг 2012, 20:25 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Код:
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.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 авг 2012, 10:19 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
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)
      }
   }


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 17:55 
Не в сети

Зарегистрирован: 24 авг 2011, 15:57
Сообщения: 388
Александр, спасибо огромное за наводку в нужную сторону, понятно что так намного правильнее сделать.
Перебор тоже кстати пригодился )

Да вопрос на будущее, а как на кнопку нажать без того чтобы посылать клавиши, ведь по сути контрол то мы можем получить...

А да все модуль доделан, это было последняя фишечка ради которой я пользовался 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
   }
}

_________________
ИТ учет http://tunesoft.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 авг 2012, 09:32 
Не в сети

Зарегистрирован: 20 дек 2011, 10:31
Сообщения: 588
Откуда: Украина, Запорожье
А оформить скриптом и вики?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB