在cs游戏里面有开门的声音,我已经找到了这个开门声音文件(假如在d:\doormove.wav),怎样编写一个程序来时时监控这个声音文件被cs调用,如果被调用就提示“门被打开了”,否则一直在后台监视。
这个问题我已经请教很多高手了,但一直没有解决。

解决方案 »

  1.   

    这个需要精通windows进程处理,内存分析
      

  2.   

    function  IsFileInUse(fName  :  string  )  :  boolean;    
    var    
       HFileRes  :  HFILE;    
    begin    
       Result  :=  false;    
       if  not  FileExists(fName)  then    
           exit;    
       HFileRes  :=  CreateFile(pchar(fName),  GENERIC_READ  or  GENERIC_WRITE,0,  nil,  OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,  0);    
       Result  :=  (HFileRes  =  INVALID_HANDLE_VALUE);    
       if  not  Result  then    
           CloseHandle(HFileRes);    
    end;    
     
    procedure  TForm1.Timer1Timer(Sender:  TObject);  
    begin  
       if  IsFileInUse('c:\a.txt')  then  
           ShowMessage('文件正在使用');  
    end;  //這是飯桶的方法,不過態浪費系統資源,在此貼中也有另一個辦法。
    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=200034
      

  3.   

    这种方法我估计不可靠, 因为.wav可以作被装载到内存中播放n次, 如果你监视那可能只会只得到一次装载使用. 不过当然这和CS的实现有关. 好一点的方法是应该是Hook API call尤其是DirectX的.