无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4500|回复: 29
打印 上一主题 下一主题

[求助] PECMD2012可不可以开个子进程监控内存出现某个程序则执行命令?

[复制链接]
跳转到指定楼层
1#
发表于 2016-11-14 14:57:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
比如发现进程中有cmd.exe,然后去执行某一个命令?长期后台监控的那种。
2#
发表于 2016-11-14 17:08:41 | 只看该作者
用批处理可以实现,至于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

点评

title arpofiuxje tasklist /v /fi "Windowtitle ne arpofiuxje" /fi "imagename eq cmd.exe"  详情 回复 发表于 2016-11-14 22:30
哈哈,你用批处理监控cmd.exe自己了  详情 回复 发表于 2016-11-14 17:13
回复

使用道具 举报

3#
 楼主| 发表于 2016-11-14 17:13:08 | 只看该作者
不知 发表于 2016-11-14 17:08
用批处理可以实现,至于pecmd,如果有进程枚举,也可以用类似的方法实现。

批处理内容:

哈哈,你用批处理监控cmd.exe自己了

点评

此监控批处理设置下title,代码里面的tasklist过滤title就行了  发表于 2016-11-14 18:46
确实如此  详情 回复 发表于 2016-11-14 18:02
回复

使用道具 举报

4#
发表于 2016-11-14 17:42:46 | 只看该作者
红毛樱木 发表于 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 18:03
thanks  详情 回复 发表于 2016-11-14 17:59
回复

使用道具 举报

5#
 楼主| 发表于 2016-11-14 17:59:49 | 只看该作者

点评

学习了  详情 回复 发表于 2016-11-14 18:02
回复

使用道具 举报

6#
发表于 2016-11-14 18:02:10 | 只看该作者
回复

使用道具 举报

7#
发表于 2016-11-14 18:02:54 | 只看该作者
红毛樱木 发表于 2016-11-14 17:13
哈哈,你用批处理监控cmd.exe自己了

确实如此
回复

使用道具 举报

8#
 楼主| 发表于 2016-11-14 18:03:18 | 只看该作者

这样子不是开一个子进程后台监控,会阻塞了。

点评

用EXEC @pecmd.exe load *.ini不就可以了。只是多一个进程而已。  详情 回复 发表于 2016-11-14 18:08
回复

使用道具 举报

9#
发表于 2016-11-14 18:08:30 | 只看该作者
红毛樱木 发表于 2016-11-14 18:03
这样子不是开一个子进程后台监控,会阻塞了。

用EXEC @pecmd.exe load *.ini不就可以了。只是多一个进程而已。

点评

看来只能这样子了,办法很多 哈哈  详情 回复 发表于 2016-11-14 18:12
回复

使用道具 举报

10#
 楼主| 发表于 2016-11-14 18:12:55 | 只看该作者
不知 发表于 2016-11-14 18:08
用EXEC @pecmd.exe load *.ini不就可以了。只是多一个进程而已。

看来只能这样子了,办法很多  哈哈
回复

使用道具 举报

11#
发表于 2016-11-14 18:50:09 | 只看该作者
红毛樱木 发表于 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
复制代码

点评

我把上面代码存为 D:\TEST.INI 然后 EXEC -pid:pid %MyName% load E:\TEST.TXT结果发现%pid%变量不能传递过去。。。  详情 回复 发表于 2016-11-14 20:54
我把上面代码存为 D:\TEST.INI 然后 EXEC -pid:pid %MyName% load E:\TEST.TXT结果发现%pid%变量不能传递过去。。。  详情 回复 发表于 2016-11-14 20:54
貌似不对,不对。。。。和需求不一样 THREAD* CALL @WIN1 THREAD* CALL OtherCommand CALL @WIN2 这里是CALL @WIN2达到常住内存的需求,是主线程常驻内存了,不是子线程了。。。  详情 回复 发表于 2016-11-14 19:55
不是M大吧,借问一下 想使用多线程,我用THREAD LOAD来代替EXEC PECMD.EXE,似乎不行,加-link参数又好一点,但有的也没执行,似乎随主程序结束其生命也没有了。没办法只能多开PECMD,不过代码很难看不高级。  详情 回复 发表于 2016-11-14 19:40
原来亮点在这里。。。这招狠。。。 _SUB WIN2, //长生不老大法,常驻内存,永保青春 _END  详情 回复 发表于 2016-11-14 19:05
回复

使用道具 举报

12#
 楼主| 发表于 2016-11-14 18:59:37 | 只看该作者

高人都喜欢穿个马甲
回复

使用道具 举报

13#
 楼主| 发表于 2016-11-14 19:05:00 | 只看该作者

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


_SUB WIN2,
        //长生不老大法,常驻内存,永保青春
_END
回复

使用道具 举报

14#
发表于 2016-11-14 19:40:41 | 只看该作者
本帖最后由 hhh333 于 2016-11-14 19:44 编辑


不是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,不过代码很难看不高级。

点评

这样呢? 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*$ CAL  详情 回复 发表于 2016-11-14 20:48
回复

使用道具 举报

15#
 楼主| 发表于 2016-11-14 19:55:27 | 只看该作者

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


THREAD* CALL @WIN1
THREAD* CALL OtherCommand
CALL @WIN2
这里是CALL @WIN2达到常住内存的需求,是主线程常驻内存了,不是子线程了。。。

点评

完全符合你的要求啊,主进程到CALL @WIN2前面就结束了,CALL @WIN2 只是守护子进程。  详情 回复 发表于 2016-11-14 20:45
常驻内存靠的是定时器(TIME), win2是只执行一次。  详情 回复 发表于 2016-11-14 20:37
回复

使用道具 举报

16#
发表于 2016-11-14 20:37:18 | 只看该作者
本帖最后由 不知 于 2016-11-14 21:14 编辑
红毛樱木 发表于 2016-11-14 19:55
貌似不对,不对。。。。和需求不一样

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


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

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

1.PNG
回复

使用道具 举报

17#
发表于 2016-11-14 20:45:32 | 只看该作者
红毛樱木 发表于 2016-11-14 19:55
貌似不对,不对。。。。和需求不一样

完全符合你的要求啊,主进程到CALL @WIN2前面就结束了,CALL @WIN2 只是守护子进程。
回复

使用道具 举报

18#
发表于 2016-11-14 20:48:23 | 只看该作者
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 21:32
回复

使用道具 举报

19#
 楼主| 发表于 2016-11-14 20:54:35 | 只看该作者
本帖最后由 红毛樱木 于 2016-11-14 20:59 编辑
  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%变量不能传递过去。。。
回复

使用道具 举报

20#
 楼主| 发表于 2016-11-14 20:54:35 | 只看该作者
本帖最后由 红毛樱木 于 2016-11-14 21:00 编辑

重复了。。
回复

使用道具 举报

21#
发表于 2016-11-14 21:32:14 | 只看该作者
489432757 发表于 2016-11-14 20:48
这样呢?
IFEX $%CM_SND%>0, THREAD*$ CALL INSSND
IFEX $%CM_DSP%>0, THREAD*$ CALL INSDSP

不行,没执行就出来了
回复

使用道具 举报

22#
发表于 2016-11-14 22:30:58 | 只看该作者
不知 发表于 2016-11-14 17:08
用批处理可以实现,至于pecmd,如果有进程枚举,也可以用类似的方法实现。

批处理内容:


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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-1 18:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表