Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Управление окнами прикладного ПО из javascript (https://javascript.ru/forum/events/78286-upravlenie-oknami-prikladnogo-po-iz-javascript.html)

serjloskut 21.08.2019 13:51

Управление окнами прикладного ПО из javascript
 
Доброго времени суток, уважаемые программисты.
На работе для автоматизации рабочих процессов начал изучать программирование, а именно javascript, т.к. программа поддерживает скрипты на этом языке программирования.
Ниже вырезка из скрипта как пример.
Сохраненный файл с расширением *htm мы [сотрудники компании] открываем в программе DatamineStudio3 (ПО моделирование для геологов, далее по тексту DM). И уже по ходу выполнения кода вызываются команды в программе DM.
Например:
строка 36 кода - исполняет команду "cancel-comand", которая отменяет все выполняемые команды, процессы.
строка 37 кода - вызывает команду "end-link", как называемое связывание линий.
В этих командах ничего сложного для нас нет, т.к. они выполняются без каких либо параметров.
сторка 39 кода - вызывает команду "wireframe-union", для исполнения которой необходимо заполнить всплывающее окно (скриншот после кода). В этом и вопрос, как заполнить выделенные поля ввода исходных данных? Подскажите, пожалуйста.
Пробовал уже сразу после команды следующей строкой прописывать исходные данные, в скобках ParseCommand пытался, между скобками и кавычками.. в общем перепробовал все варианты, которые пришли в голову, авось, получится. Но тут сложнее все.
<HEAD>
<META Name="DatamineScript" Content="Version3" />
<TITLE>Command Automatically recorded html script.</TITLE>
<SCRIPT TYPE="text/javascript">
// ----------------------------------------------------------------------
// Standard initialisation for Datamine Studio 3
//
var oDmApp= null;
var oScript = null;
function AutoConnect()
{
   try {
      oScript = new ActiveXObject("DatamineStudio.ScriptHelper");
      oScript.initialize(window);
      oDmApp = oScript.getApplication();
      if (oDmApp == null || oDmApp.ActiveProject == null)    //Attempt to Use the Active Datamine Session
      {
         alert("There are no active Studio3 projects open.\n Please open a Studio 3 project before continuing.");
         window.close();                                                     // Closes the script window
	     return false;
      }else
	      return true;
   } 
   catch(e) {
      alert("Failed\nReason: " + e.description);
      if ( oDmApp) oDmApp.Quit(); // release the session to close it down
   }	
   return false;		
}
function btnExecute_onclick()
{
	try	{
		
	
	;
	  oDmApp.ExecuteCommand("cancel-command");
	  oDmApp.ParseCommand("end-link");
	  oDmApp.ExecuteCommand("cancel-command");
	  oDmApp.ParseCommand("wireframe-union");

	}
	catch(e) {
		alert("Failed\nReason: " + e.description);
	}			
}
</SCRIPT>
</HEAD>


ksa 21.08.2019 13:57

Цитата:

Сообщение от serjloskut
как заполнить выделенные поля ввода исходных данных?

По картинке и твоему тексту программы не понятно что это за элемент... :blink:
Отсюда не понятно как он управляется и какой он предоставляет интерфейс к обмену данными...

serjloskut 21.08.2019 14:09

Спасибо, ksa, что откликнулись.
Цитата:

Сообщение от ksa (Сообщение 511965)
По картинке и твоему тексту программы не понятно что это за элемент... :blink:
Отсюда не понятно как он управляется и какой он предоставляет интерфейс к обмену данными...

Знал, что появится такой вопрос, т.к. у меня он тоже возник, после прочтения кучи статей о COM, DOM и т.п. Я бы с радостью предоставил тебе необходимую информацию, если бы знал, как ее узнать.
Я так понимаю, что речь идет не о самих исходных данных, а о всплывающем окне, называемым элементом (если где-то что-то путаю, буду рад и премного благодарен, если поправишь). Как узнать что это за элемент, как управляется и какой интерфейс предоставляет к обмену данными? И еще, дабы исключить возможность ненужных телодвижений, возможно ли такое, что элементом невозможно управлять и обмениваться данными?
P.S. Кстати, я уже и пытался даже эмитировать нажатия клавиш (буквы, Tab, Enter) но ни к чему это не привело, что мне показалось странным.

Dilettante_Pro 21.08.2019 14:24

serjloskut,
Вся проблема в том, что диалоговое окно вызывается не непосредственно из JS, а через метод oDmApp.ParseCommand(), который является методом приложения ActiveXObject("DatamineStudio.ScriptHelper").

Так что для автоматизации заполнения требуемых полей надо копать DatamineStudio.ScriptHelper

Вообще в принципе этот метод позволяет передавать вместе с командой некие параметры, например,
oDmApp.ParseCommand("sortx&IN=dhcollar&OUT=SortedCollars*KEY1=BHID@BINS=5@ORDER=1");

Но какие параметры вместе с какой-то командой могут быть переданы и как они будут использованы - ???

ksa 21.08.2019 14:42

Цитата:

Сообщение от serjloskut
Я так понимаю, что речь идет не о самих исходных данных, а о всплывающем окне, называемым элементом

Именно так. :yes:
Цитата:

Сообщение от serjloskut
Как узнать что это за элемент, как управляется и какой интерфейс предоставляет к обмену данными?

Обычно спрашивают у авторов...
Если это какая-то стандартная приблуда - читают в документации на нее...
Цитата:

Сообщение от serjloskut
возможно ли такое, что элементом невозможно управлять и обмениваться данными?

Так смотря как это все сделано...

Я сам таких элементов не делал. Но хоть бы и делал - х/з как аналогичную приблуду сделает другой человек. :)

serjloskut 21.08.2019 14:49

Цитата:

Сообщение от Dilettante_Pro (Сообщение 511968)
serjloskut,
Вообще в принципе этот метод позволяет передавать вместе с командой некие параметры, например,
oDmApp.ParseCommand("sortx&IN=dhcollar&OUT=SortedCollars*KEY1=BHID@BINS=5@ORDER=1");

Но какие параметры вместе с какой-то командой могут быть переданы и как они будут использованы - ???

Да такую команду (sortx) знаю и с ней проблем нет, т.к. все параметры имеют определенное (видимое моему неопытному глазу) имя (не знаю, честно, терминологию. В примере это IN, OUT, KEY1 и т.д.) и сами параметры (dhcollar, SortedCollars и т.д.). При вызове этой команды не из скрипта, появляется окно со всеми нужными данными в разных вкладках (на скриншоте одна из вкладок):

С командой же, которая в стартпосте, окно другого формата и нужных данных нет...

serjloskut 21.08.2019 14:56

Цитата:

Сообщение от Dilettante_Pro
Так что для автоматизации заполнения требуемых полей надо копать DatamineStudio.ScriptHelper

Сейчас через OLEVIEW попробую покопаться.
Цитата:

Сообщение от ksa
Обычно спрашивают у авторов...
Если это какая-то стандартная приблуда - читают в документации на нее...

Уже писали официальные письма от компании, но ответа так и не получили. В справке к программе об этом тоже ничего нет.


Часовой пояс GMT +3, время: 07:09.