wuliao2014 发表于 2019-4-22 20:32:33

AS3关闭EXE的方法?

我们知道AS3可以打开其他EXE应用程序,但是不知道有没有方法可以把打开的EXE关闭掉?

xxdmx712 发表于 2019-4-22 20:32:34

本帖最后由 xxdmx712 于 2019-4-23 10:18 编辑

有个swc,“AirUtils.swc”,安排的明明白白;
导swc不用讲了,自己搞;
用法很简单:
import com.plter.air.windows.utils.NativeCommand;
import com.plter.air.windows.utils.ShowCmdWindow;

killJingCheng("WinFormPPTServer");

private function killJingCheng(name:String):void
{
      var args:Vector.<String>=new Vector.<String>;
      var str:String = "taskkill /im "+ name+".exe" +" /f";
      args.push(str);
      try
      {
                var _cmdNa:NativeCommand = new NativeCommand();
                _cmdNa.runCmd(args,ShowCmdWindow.HIDE);
      }
      catch(error:Error)
      {
                              
      }
}
该swc上传到网盘了,自己下。
并且这个swc还有别的好多西,你也可以看看。
链接:https://pan.baidu.com/s/1iEsEPG6Twzxij8RGAtd-dQ
提取码:zaxe

补充:同楼上general_clarke大神补充。

TKCB 发表于 2019-4-22 22:13:36

cmd 应该可以,不过找到对应的进程编号是个麻烦的事情。

当然如果进程比较特殊,估计比较好识别!

https://jingyan.baidu.com/article/215817f7b477e61edb142377.html

general_clarke 发表于 2019-4-23 05:01:43

只能关闭自己通过NativeProcess打开的exe程序。
无法关闭通过openWithDefaultApplication间接打开的
或者其他应用程序

具体办法

var process:NativeProcess = new NativeProcess;
process.start(info);//开启一个exe进程,地址在info中
.........
process.exit();//退出


上述调用exit时,被调用exe可能积极拒绝导致无法关闭,这种现象对多数应用不存在。
另AIR程序被关闭时AIR启动的NativeProcess也会被关闭

如果写过start后下一行就是exit,
刚start的进程可能无法立刻被exit,需要完全初始化

general_clarke 发表于 2019-4-23 05:22:44

本帖最后由 general_clarke 于 2019-4-23 05:27 编辑

就T大提供资料实际测试,发现是可行思路。

具体代码

var info:NativeProcessStartupInfo = new NativeProcessStartupInfo();
                        info.executable = new File("C:/Windows/system32/cmd.exe");
info.arguments = new <String>["/c", "tasklist"]
var nativeProcess:NativeProcess = new NativeProcess();
nativeProcess.addEventListener(NativeProcessExitEvent.EXIT, onExit);
nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutput);
nativeProcess.start(info);

public var buffer:ByteArray = new ByteArray;
protected function onOutput(event:ProgressEvent):void
{
      var pro:NativeProcess = event.target as NativeProcess;
      pro.standardOutput.readBytes(buffer, 0, pro.standardOutput.bytesAvailable)
}               
               
public function onExit(e:*):void{
      var str:String = buffer.readMultiByte(buffer.length, "ANSI");
      trace(str);
}


使用上文代码,
最后得到的str就是本机所有进程列表
类似下文形式

360se.exe                     3792 Console                   10   50,920 K

360se.exe                     6556 Console                   10    112,404 K

360se.exe                     8488 Console                   10   29,568 K

audiodg.exe                   4980 Services                   0   20,208 K

SearchProtocolHost.exe       14124 Services                   0   11,412 K

wpscenter.exe                12968 Console                   10      2,628 K

explorer.exe                  9452 Console                   10   73,296 K


根据这个列表字符串稍加处理可以得到进程名字和对应PID

参考2楼链接的命令,
用和上面相同的办法再调用一次cmd即可消灭进程

general_clarke 发表于 2019-4-23 05:24:52

补充,
使用上述代码,
必须在app-xml内设置下面参数

<supportedProfiles>extendedDesktop</supportedProfiles>

以及编译器参数的-swf-version适当调高

最后一批aser 发表于 2019-4-23 09:16:47

既然是exe,就可以藉助其他語言來實現開啟和關閉exe
页: [1]
查看完整版本: AS3关闭EXE的方法?

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)