РЕШЕНО:
Я понял, что процесс 'wscript.exe' не важен для поддержания работы программы, если вы дадите ей спать, поэтому я просто убиваю ее пакетом файл в сценарии после запуска ActiveXObject.
Я установил Realterm, который для меня действует как клиент RS485. Работает как шарм, но не позволяет сохранять настройки в качестве предустановки. Поэтому каждый раз, когда вы его запускаете, вам придется снова и снова вводить свои настройки, что для меня является головной болью.
У них есть несколько «легкий» способ справиться с этим, позволив вам напишите сценарий, который создает экземпляр ActiveXObject (да, довольно старый, да ...) и предопределяет некоторые настройки, такие как COM-порт, скорость передачи и т. д. c.
Это предоставленная ими демонстрация того, что сценарий должен выглядеть так:
var RT = new ActiveXObject("realterm.realtermintf");
RT.caption="Windows Scripting Host Demo";
RT.HalfDuplex=1;
RT.baud=57600;
RT.FlowControl=2; //2=RTS/CTS
RT.Port=1;
RT.PortOpen=1;
RT.LinefeedIsNewline=1;
RT.SelectTabSheet("I2C");
RT.PutString("G1");
RT.NewlineTerminal();
WScript.Sleep(500);
RT.PutString("SB20DP SB302P");
RT.NewlineTerminal();
WScript.Sleep(500);
RT.PutString("SB20DP SB302P");
//RT.PutChar(10); //LF
RT.NewlineTerminal();
WScript.Echo("Realterm will close when you click OK");
RT.Close();
Если вы нажмете «ОК» во всплывающем окне, которое будет
WScript.Echo («Realterm закроется, когда вы нажмете ОК»);
создает экземпляр, вызывается метод ' .Close () ' и окно закрывается правильно.
- Проблема / неудобство в том, что там будет всегда открытым всплывающим окном, если вы используете go демо. Я хотел бы иметь возможность просто закрыть окно и задачу, щелкнув красный X в форме окна.
Это мой текущий код и способ избавиться от неудобств.
var RT = new ActiveXObject("realterm.realtermintf");
RT.caption="Realterm Mod";
RT.HalfDuplex=1;
RT.baud=9600;
RT.FlowControl=0; //2=RTS/CTS
RT.Port=16;
RT.PortOpen=0;
RT.LinefeedIsNewline=1;
RT.SelectTabSheet("Send");
RT.NewlineTerminal();
while (true){
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
if(hours >= 16 && minutes >= 0){ //closes if certain time is met
WScript.Echo("Feierabend!")
RT.Close();
}
else{ // keeps the program from closing
continue;
}
}
Теперь проблема: если вы принудительно открыли его, вставив время (истина) - l oop и NOT , используйте всплывающий способ решения этой проблемы, когда вы закрываете При нажатии на красный крестик в форме окно закрывается , но задача wscript.exe ' остается открытой и загружает ваш процессор. Задача также складывается, если вы должны были закрыть и снова открыть программу.
Мой вопрос:
- Есть ли способ поймать закрытие окна до того, как это произойдет, или проверить если он был закрыт, а затем выполните ' .Close () ' на самом объекте или вызовите пакетный файл , который убивает задачу?
I у меня нет такого большого опыта работы с WScript, поэтому я понятия не имею, сможете ли вы вообще обрабатывать подобные события. Обычно это для меня больше упражнение / уловка, чем реальная проблема, потому что я учусь программировать и хочу больше понимать и иметь более глубокие знания, поэтому я был бы признателен за реальные ответы на проблему.
Заранее спасибо!