首页 > 解决方案 > Wscript.exe 任务堆栈并强调 CPU

问题描述

解决了:

我意识到,如果你让它休眠,进程'wscript.exe'对于保持程序运行并不是必需的,所以我只是在 ActiveXObject 启动后用脚本中的批处理文件杀死它。

我已经安装了 Realterm,它对我来说充当 RS485 客户端。像魅力一样工作,但不允许将设置保存为预设。所以每次你启动它时,你都必须一次又一次地输入你的设置,这对我来说很痛苦。

他们有一种“简单”的方法来处理这个问题,让你编写一个脚本,实例化 ActiveXObject(是的,很老的哈......)并预定义一些设置,如 COM 端口、波特率等。

这是他们提供的脚本应该是什么样子的演示:

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() ”方法并正确关闭窗口。

这是我当前的代码和解决不便的方法。

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;
    }
}

现在的问题:如果您要通过放置一段时间(真)来强制它打开 - 循环并且使用弹出方式来处理它,当您通过单击表单上的红色 X 关闭窗口时,窗口会关闭,但' wscript.exe ' 任务保持打开状态并使您的 CPU 保持忙碌。如果您要关闭并重新打开程序,该任务也会堆叠。

我的问题是:

我对 WScript 没有太多经验,因此我不知道你是否可以处理这样的事件。对我来说,这通常更像是一个练习/噱头,而不是一个真正的问题,因为我正在学习编码并且想要了解更多并且对事物有更多的了解,所以我很感激这个问题的实际答案。

提前感谢大家!

标签: javascriptactivexwsh

解决方案


推荐阅读