思路:
用WebBrowse打开一个文件,此文件如果是doc,将自然用word打开了。我的需求是要独点这个文件,不能给其它进程打开。如何是好我现在的做法是用WebBrowse打开之后,用openfile api再以独占方式打开,但不成功,因为这个文件已被WebBrowse调用word打开了。如果先用openfile api以独占方式打开,WebBrowse调用word又打不开了。经过几天的调试,试过几种办法,都不成功,那位兄弟还有什么招???听过hook,但不知怎么搞
有没有办法取到WebBrowse调用word打开这个doc文件的句柄,再用CloseHandle来关掉,再用openfile以独占方式打开

解决方案 »

  1.   

    一下代码可以在文件被打开的情况下,锁定文件,你可以将文件打开,然后锁定文件,当要向文件里写东西时,解锁,当写完后在加锁。'填加两个按钮cmdlock、cmdunlock,一个文本框Text1,然后填加以下代码:
    Option Explicit
    Private Const FILE_LIST_DIRECTORY = &H1
    Private Const FILE_SHARE_READ = &H1&
    Private Const FILE_SHARE_DELETE = &H4&
    Private Const OPEN_EXISTING = 3
    Private Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000
    Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal PassZero As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal PassZero As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongDim File_Share_Flag As Long
    Dim hDir As Long
    Private Sub cmdlock_Click()
        Dim PathDir As String
        PathDir = Text1.Text
        hDir = CreateFile(PathDir, FILE_LIST_DIRECTORY, File_Share_Flag, _
                          ByVal 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, ByVal 0&)
        cmdlock.Enabled = False
        cmdunlock.Enabled = True
    End Sub
    Private Sub cmdunlock_Click()
        CloseHandle hDir
        cmdlock.Enabled = True
        cmdunlock.Enabled = False
    End Sub
    Private Sub Form_Load()
        File_Share_Flag = 0 'if =FILE_SHARE_READ then read only (for example)
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        Call cmdunlock_Click
    End Sub
      

  2.   

    verywzm(寒江雪) 谢你
    你这种办法只能控制还没打开的文件,一当打开了这个文件,再使用CreateFile ()
    CreateFile()将会失败!!!,我现在是要先打开这个文件,再要想办法去控制它