无忧启动论坛

标题: PECMD2012可不可以开个子进程监控内存出现某个程序则执行命令? [打印本页]

作者: 红毛樱木    时间: 2016-11-14 14:57
标题: PECMD2012可不可以开个子进程监控内存出现某个程序则执行命令?
比如发现进程中有cmd.exe,然后去执行某一个命令?长期后台监控的那种。
作者: 不知    时间: 2016-11-14 17:08
用批处理可以实现,至于pecmd,如果有进程枚举,也可以用类似的方法实现。

批处理内容:
@echo off

rem 设置要监视的进程名
set program=cmd.exe
rem 设定出现该进程的动作。
set cmdA=echo %program% is running
rem 设定未出现该进程的动作。
set cmdB=echo %program% is not running

rem 程序监视循环
if /I ""=="%cmdA%" set cmdA=echo %program% is running
if /I ""=="%cmdB%" set cmdB=echo %program% is not running

:loop
tasklist.exe | find /C /I "%program%"

set result=%errorlevel%

if %result%==0 %cmdA%
if %result%==1 %cmdB%

call :loop
作者: 红毛樱木    时间: 2016-11-14 17:13
不知 发表于 2016-11-14 17:08
用批处理可以实现,至于pecmd,如果有进程枚举,也可以用类似的方法实现。

批处理内容:

哈哈,你用批处理监控cmd.exe自己了
作者: 489432757    时间: 2016-11-14 17:42
红毛樱木 发表于 2016-11-14 17:13
哈哈,你用批处理监控cmd.exe自己了

so easy


  1. #code=936T950
  2. CALL WIN1

  3. _SUB WIN1,
  4.         TIME &TIME,1000, CALL Process
  5. _END

  6. _SUB Process
  7.         ENVI @&TIME=0
  8.         FIND cmd.exe,CALL DoSomeThing
  9.         ENVI @&TIME=1000
  10. _END

  11. _SUB DoSomeThing
  12.         MESS 哈哈,抓到你了!
  13. _END
复制代码

作者: 红毛樱木    时间: 2016-11-14 17:59
489432757 发表于 2016-11-14 17:42
so easy

thanks
作者: 不知    时间: 2016-11-14 18:02
红毛樱木 发表于 2016-11-14 17:59
thanks

学习了
作者: 不知    时间: 2016-11-14 18:02
红毛樱木 发表于 2016-11-14 17:13
哈哈,你用批处理监控cmd.exe自己了

确实如此
作者: 红毛樱木    时间: 2016-11-14 18:03
489432757 发表于 2016-11-14 17:42
so easy

这样子不是开一个子进程后台监控,会阻塞了。
作者: 不知    时间: 2016-11-14 18:08
红毛樱木 发表于 2016-11-14 18:03
这样子不是开一个子进程后台监控,会阻塞了。

用EXEC @pecmd.exe load *.ini不就可以了。只是多一个进程而已。
作者: 红毛樱木    时间: 2016-11-14 18:12
不知 发表于 2016-11-14 18:08
用EXEC @pecmd.exe load *.ini不就可以了。只是多一个进程而已。

看来只能这样子了,办法很多  哈哈
作者: 489432757    时间: 2016-11-14 18:50
红毛樱木 发表于 2016-11-14 18:03
这样子不是开一个子进程后台监控,会阻塞了。

so easy too !


  1. #code=936T950
  2. THREAD* CALL @WIN1
  3. THREAD* CALL OtherCommand
  4. CALL @WIN2

  5. _SUB WIN2,
  6.         //长生不老大法,常驻内存,永保青春
  7. _END

  8. _SUB WIN1,
  9.         TIME &TIME,1000, CALL Process
  10. _END

  11. _SUB Process
  12.         ENVI @&TIME=0
  13.         FIND cmd.exe,CALL DoSomeThing
  14.         ENVI @&TIME=1000
  15. _END

  16. _SUB DoSomeThing
  17.         MESS 哈哈,抓到你了!
  18. _END

  19. _SUB OtherCommand
  20.         MESS 该干嘛干嘛!!
  21. _END
复制代码

作者: 红毛樱木    时间: 2016-11-14 18:59
489432757 发表于 2016-11-14 18:50
so easy too !

高人都喜欢穿个马甲
作者: 红毛樱木    时间: 2016-11-14 19:05
489432757 发表于 2016-11-14 18:50
so easy too !

原来亮点在这里。。。这招狠。。。


_SUB WIN2,
        //长生不老大法,常驻内存,永保青春
_END
作者: hhh333    时间: 2016-11-14 19:40
本帖最后由 hhh333 于 2016-11-14 19:44 编辑
489432757 发表于 2016-11-14 18:50
so easy too !


不是M大吧,借问一下
  1. _SUB INSDX9
  2.         TEAM TEXT 正在安装DX支持....|WAIT 500
  3.         EXEC PECMD.EXE %CurDir%\DX9\INSDX9.INI
  4.         EXEC PECMD.EXE %CurDir%\DX9\INSCHM.INI
  5. _END

  6. _SUB INSDSP
  7.         TEAM TEXT 正在驱动显卡....|WAIT 500
  8.         EXEC PECMD.EXE %CurDir%\Display\START_VGA.INI
  9. _END

  10. _SUB INSSND
  11.         TEAM TEXT 正在驱动声卡....|WAIT 500
  12.         LOAD %CurDir%\Sound\Start_Sound.INI
  13. _END

  14. _SUB INSPRT
  15.         TEAM TEXT 正在驱动打印机....|WAIT 500
  16.         EXEC PECMD.EXE %CurDir%\Printer\INSPRINT.INI
  17. _END

  18. _SUB INSNET
  19.         TEAM TEXT 正在驱动网卡....|WAIT 500       
  20.         IFEX $%CM_PRT%>0,LOAD %CurDir%\Ethernet\START_NET.INI!EXEC PECMD.EXE %CurDir%\Ethernet\START_NET.INI
  21.         `在桌面显示网上邻居
  22.         IFEX %Windir%\System32\PENETCFG.EXE,REGI HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu\{208D2C60-3AEA-1069-A2D7-08002B30309D}=#0       
  23. _END

  24. IFEX $%CM_SND%>0,CALL INSSND
  25. IFEX $%CM_DSP%>0,CALL INSDSP
  26. IFEX $%CM_NET%>0,CALL INSNET
  27. IFEX $%CM_PRT%>0,CALL INSPRT
  28. IFEX $%CM_DX9%>0,CALL INSDX9
复制代码


想使用多线程并发安装驱动,我用THREAD LOAD来代替EXEC PECMD.EXE,似乎不行,加-link参数又好一点,但有的也没执行,似乎随主程序结束其生命也没有了。没办法只能多开PECMD,不过代码很难看不高级。
作者: 红毛樱木    时间: 2016-11-14 19:55
489432757 发表于 2016-11-14 18:50
so easy too !

貌似不对,不对。。。。和需求不一样


THREAD* CALL @WIN1
THREAD* CALL OtherCommand
CALL @WIN2
这里是CALL @WIN2达到常住内存的需求,是主线程常驻内存了,不是子线程了。。。
作者: 不知    时间: 2016-11-14 20:37
本帖最后由 不知 于 2016-11-14 21:14 编辑
红毛樱木 发表于 2016-11-14 19:55
貌似不对,不对。。。。和需求不一样

常驻内存靠的是定时器(TIME),
win2是只执行一次。


以下是测试效果,能不能发下pecmd.exe 2012感觉版本有问题?
————————————————————————————————————————————————
将CALL 后的@去掉,就没有窗口了,也一直在内存常驻,不过,感觉没反应。

1.PNG (22.36 KB, 下载次数: 27)

1.PNG

作者: 489432757    时间: 2016-11-14 20:45
红毛樱木 发表于 2016-11-14 19:55
貌似不对,不对。。。。和需求不一样

完全符合你的要求啊,主进程到CALL @WIN2前面就结束了,CALL @WIN2 只是守护子进程。
作者: 489432757    时间: 2016-11-14 20:48
hhh333 发表于 2016-11-14 19:40
不是M大吧,借问一下

这样呢?
IFEX $%CM_SND%>0, THREAD*$ CALL INSSND
IFEX $%CM_DSP%>0, THREAD*$ CALL INSDSP
IFEX $%CM_NET%>0, THREAD*$ CALL INSNET
IFEX $%CM_PRT%>0, THREAD*$ CALL INSPRT
IFEX $%CM_DX9%>0, THREAD*$ CALL INSDX9

将EXEC PECMD.EXE 改为LOAD
作者: 红毛樱木    时间: 2016-11-14 20:54
本帖最后由 红毛樱木 于 2016-11-14 20:59 编辑
489432757 发表于 2016-11-14 18:50
so easy too !
  1. #code=936T950
  2. THREAD* CALL @WIN1
  3. THREAD* CALL OtherCommand
  4. CALL @WIN2

  5. _SUB WIN2,
  6.         //长生不老大法,常驻内存,永保青春
  7. _END

  8. _SUB WIN1,
  9.         TIME &TIME,1000, CALL Process
  10. _END

  11. _SUB Process
  12.         ENVI @&TIME=0
  13.         FIND regedit.exe,CALL DoSomeThing
  14.         ENVI @&TIME=1000
  15. _END

  16. _SUB DoSomeThing
  17.         MESS 哈哈,抓到你了!
  18.         KILL *%Pid%
  19. _END

  20. _SUB OtherCommand
  21.         MESS 该干嘛干嘛!!
  22. _END
复制代码




我把上面代码存为 D:\TEST.INI
然后
EXEC -pid:pid %MyName% load D:\TEST.TXT结果发现%pid%变量不能传递过去。。。

作者: 红毛樱木    时间: 2016-11-14 20:54
本帖最后由 红毛樱木 于 2016-11-14 21:00 编辑

重复了。。
作者: hhh333    时间: 2016-11-14 21:32
489432757 发表于 2016-11-14 20:48
这样呢?
IFEX $%CM_SND%>0, THREAD*$ CALL INSSND
IFEX $%CM_DSP%>0, THREAD*$ CALL INSDSP

不行,没执行就出来了
作者: nttwqz    时间: 2016-11-14 22:30
不知 发表于 2016-11-14 17:08
用批处理可以实现,至于pecmd,如果有进程枚举,也可以用类似的方法实现。

批处理内容:


title arpofiuxje
tasklist /fi "windowtitle ne arpofiuxje" /fi "imagename eq cmd.exe"




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3