一记事本“File.txt”,我想确定是不是已经被打开了,MFC里有这样的函数或方法吗?谢谢!

解决方案 »

  1.   

    你是啥意思?
    是想确定记事本这个程序打开了?还是说,想确定"File.txt"这个文件打开了,或则是记事本打开了这个"File.txt"这个文件啊?
      

  2.   

       想确定"File.txt"这个文件是不是打开了.....
      

  3.   

       另外我想知道,如何获得“File.txt”这个文件的句柄。
      

  4.   

    要是想确定纪事本是否打开这个比较好办,使用FIndWindow()就可以了要是想确定文件是否被打开了,这个我就不知道了
      

  5.   

    我用CFile.Open方法
    修改nOpenFlags参数,设置其为CFile::shareDenyRead | CFile::shareDenyWrite
    CFile f();
    if(f.open("d:\\File.txt",CFile::shareDenyRead | CFile::shareDenyWrite,NULL))
    {
      AfxMessageBox("打开成功");
    }
    else
    {
      AfxMessageBox("打开失败");
    }
    但我用记事本打开的时候,就没得到想要的结果。
    如果把File.txt编程一个Word文档,file.doc然后用WORD打开,那就可以。
    能说说你具体想做什么吗?需要确定文档是否已经打开?
      

  6.   

    CreateFile打开文件,就可以判断是否打开   
      HANDLE hFile;     
      hFile = CreateFile("C:\\x.txt",GENERIC_READ|GENERIC_WRITE,     
      FILE_SHARE_READ|FILE_SHARE_DELETE,NULL,OPEN_EXISTING,   FILE_FLAG_BACKUP_SEMANTICS,   NULL);     
      if ( hFile == INVALID_HANDLE_VALUE )     
      {   
          AfxMessage("该文件正在被使用或打开文件失败");   
          return ;                               
      }   
      CloseHandle(hFile);
      

  7.   

    FindWindows获取标题,找到名为x.txt的窗口
      

  8.   

    那是因为Word读取文档的时候,不关闭。
    而记事本读取文档的时候,读完就关闭。保存的时候再代开保存然后关闭。你读一些.txt的属性看有没有这方面相关的flag。
      

  9.   

    先枚举进程,看系统中有没有notepad.exe,有的话,提升进程权限到SE_DEBUG_NAME,读取notepad进程的命令行,命令行里有打开的文件名--C:\\x.txt
    如果系统没有notepad.exe,调用CreateFile以 排他方式+OPEN_EXISTING 打开C:\\x.txt,如果打开失败,则说明文件已被打开。
      

  10.   

    当然有一个简单的方法就是用CFile用CFile::shareExclusive独占的方式打开,如果打开出错,就证明它已经被打开了
    CFile f;if(f.open("",CFile::shareExclusive))
    {}else
    {
      //证明已经被打开了
    }