王新年吧 关注:13贴子:314
  • 4回复贴,共1

如何编写一个后台进程,实现动态拦截某一个程序的运行?

只看楼主收藏回复

我想做一个程序,在他运行时,可以获知操作者打开了什么程序,并可以有选择的允许运行,或禁止运行。   
  如果是类似work或excel等多文档界面的软件,如果excel已经执行,并打开了一个文档,我能否用程序控制(允许或禁止)其它操作者打开另一个文档? 

-----
问题1.注册表中有个   H_C_R\exefile\shell\open\command\   的键值,将其改成你的程序的路径.将拦截exe   文件的调用.   
  问题2.可能要用到宏,不会. 


IP属地:湖北1楼2008-04-08 22:38回复
    说出来带有一点恶作剧的味道,我们那儿每天中午都有小孩来玩游戏,大吵大闹的影响别人休息。你说把程序删除了吧,他会重装,密码保护吧,他追着你要密码,一点办法都没有——最重要的是,他们都是领导家的公子,惹不得。 
     
     我也不想别的,就是想给他们来个下马威,写给程序,只要你的游戏一运行,程序立即跳出来拦截,并且再能给出点诸如感染病毒之类的警告,呵呵,有点黑客的味道。 
     
     这里的关键就是如何拦截,请大家一定赐教。 
     多谢。


    IP属地:湖北2楼2008-04-08 22:38
    回复
      其实你是知道他们要启动什么游戏的,那就等于首先找到游戏的进程是什么,然后把它杀死。 
       用这样的思路去解决可以吗


      IP属地:湖北3楼2008-04-08 22:39
      回复
        探测当前的系统中进程有那些,如进程中包含某个游戏(即找到到游戏,要摸关闭,要摸警告,弹出一窗口) 
         代码如下: 
         unit Unit1; 
         
         interface 
         
         uses 
         Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
         Dialogs, StdCtrls,tlhelp32; 
         
         type 
         tprocinfo=record 
         files:string; 
         procid:dword;end; 
         procinfo=^tprocinfo; 
         TForm1 = class(TForm) 
         ListBox1: TListBox; 
         Button1: TButton; 
         procedure FormCreate(Sender: TObject); 
         procedure Button1Click(Sender: TObject); 
         private 
         { Private declarations } 
         public 
         cur:tlist; 
         procedure proclist(var penum:tlist); 
         { Public declarations } 
         end; 
         
         var 
         Form1: TForm1; 
         
         implementation 
         
         {$R *.dfm} 
         
         procedure TForm1.proclist(var penum: tlist); 
         var//找到目前所有的执行程序,同时得到其路径,进程ID 
         proc:procinfo; 
         getproc:bool; 
         proclisthandle:thandle; 
         procstruct:tprocessentry32; 
         begin 
         
         proclisthandle:=createtoolhelp32snapshot( 
         th32cs_snapprocess,0); 
         procstruct.dwSize:=sizeof(procstruct); 
         getproc:=process32first(proclisthandle,procstruct); 
         while integer(getproc)<>0 do 
         begin 
         new(proc); 
         proc.files:=extractfilename(procstruct.szExeFile); 
         
         proc.procid:=procstruct.th32ProcessID; 
         penum.Add(proc); 
         getproc:=process32next(proclisthandle,procstruct); 
         end; 
         end; 
         
         
         procedure TForm1.FormCreate(Sender: TObject); 
         var 
         i:integer; 
         pinfo:procinfo; 
         begin 
         cur:=tlist.Create; 
         cur.Clear; 
         listbox1.Clear; 
         proclist(cur); 
         for i:=0 to cur.Count-1 do 
         begin 
         new(pinfo); 
         pinfo:=cur.Items[i]; 
         listbox1.Items.add(pinfo.files); 
         end; 
         end; 
         
         
         procedure TForm1.Button1Click(Sender: TObject);//关闭所选的进程, 
         var h:thandle; 
         a:dword; 
         p:procinfo; 
         begin 
         if listbox1.ItemIndex>=0 then 
         begin 
         p:=cur.Items[listbox1.itemindex]; 
         h:=openprocess(process_all_access,true,p.procid); 
         getexitcodeprocess(h,a); 
         if integer(terminateprocess(h,a))<>0 then 
         begin 
         listbox1.Clear; 
         formcreate(self); 
         end; 
         end; 
         end; 
         end. 
         当然,你可以在BUTTON1CLICK中随意改为你想要的代码。比如弹出一警告窗口,


        IP属地:湖北4楼2008-04-08 22:39
        回复
          • 60.3.139.*
          做个计划任务

          taskkill /im aaa.exe /f


          5楼2008-12-30 22:30
          回复