How to determine whether a particular file is open or not?


DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Results 1 to 3 of 3

Thread: How to determine whether a particular file is open or not?

Hybrid View

  1. #1
    Ani Guest

    How to determine whether a particular file is open or not?


    Hi there,

    I would like to know how to determine whether a particular file is open?
    (Any file *.*)

    Thanks in advance.
    Ani


  2. #2
    jeeter p.p.p Guest

    Re: How to determine whether a particular file is open or not?


    "Ani" <anirudhav@yahoo.com> wrote:
    >
    >Hi there,
    >
    >I would like to know how to determine whether a particular file is open?
    >(Any file *.*)
    >
    >Thanks in advance.
    >Ani
    >


    try this one...

    ' Constants used for various API calls. Refer to MSDN for detailed
    ' information about what these constants mean.

    Private Const TOKEN_ADJUST_PRIVILEGES = &H20
    Private Const TOKEN_QUERY = &H8
    Private Const ANYSIZE_ARRAY = 1
    Private Const PROCESS_ALL_ACCESS = &H1F0FFF
    Private Const SE_DEBUG_NAME = "SeDebugPrivilege"
    Private Const SE_PRIVILEGE_ENABLED = &H2

    ' Structures used with various API calls.
    ' Refer to MSDN for detailed information
    ' about what these structures are, and how they are used.

    Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
    End Type

    Private Type Luid
    lowpart As Long
    highpart As Long
    End Type

    Private Type LUID_AND_ATTRIBUTES
    pLuid As Luid
    Attributes As Long
    End Type

    Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End Type

    ' Refer to the MSDN for detailed information on
    ' all of these API calls.

    Private Declare Function CloseHandle Lib "kernel32" _
    (ByVal hObject As Long) As Long

    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

    Private Declare Function OpenProcessToken Lib "advapi32.dll" _
    (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _
    TokenHandle As Long) As Long

    Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA"
    (ByVal lpSystemName As String, _
    ByVal lpName As String, lpLuid As Luid) As Long

    Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll"
    (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long,
    NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As
    TOKEN_PRIVILEGES, ReturnLength As Long) As Long

    Private Declare Function OpenProcess Lib "kernel32" _
    (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long

    Private Declare Function TerminateProcess Lib "kernel32" _
    (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

    Private Declare Function Process32First Lib "kernel32" ( _
    ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

    Private Declare Function Process32Next Lib "kernel32" ( _
    ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long


    Private Declare Function EnumProcesses Lib "psapi.dll" _
    (ByRef lpidProcess As Long, ByVal cb As Long, _
    ByRef cbNeeded As Long) As Long

    Private Declare Function GetModuleFileNameExA Lib "psapi.dll" _
    (ByVal hProcess As Long, ByVal hModule As Long, _
    ByVal ModuleName As String, ByVal nSize As Long) As Long

    Private Declare Function EnumProcessModules Lib "psapi.dll" _
    (ByVal hProcess As Long, ByRef lphModule As Long, _
    ByVal cb As Long, ByRef cbNeeded As Long) As Long

    Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags
    As Long, ByVal th32ProcessID As Long) As Long

    Private Declare Function GetVersionExA Lib "kernel32" _
    (lpVersionInformation As OSVERSIONINFO) As Integer

    Private Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long ' This process
    th32DefaultHeapID As Long
    th32ModuleID As Long ' Associated exe
    cntThreads As Long
    th32ParentProcessID As Long ' This process's parent process
    pcPriClassBase As Long ' Base priority of process threads
    dwFlags As Long
    szExeFile As String * 260 ' MAX_PATH
    End Type

    Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long '1 = Windows 95.
    '2 = Windows NT

    szCSDVersion As String * 128
    End Type

    Private Const PROCESS_QUERY_INFORMATION = 1024
    Private Const PROCESS_VM_READ = 16
    Private Const MAX_PATH = 260
    Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Private Const SYNCHRONIZE = &H100000
    'STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
    Public Const TH32CS_SNAPPROCESS = &H2&
    Private Const hNull = 0

    Public Function GetProcess() As Long
    'this is a call to the win api's to get the process of our app so we can
    kill it
    Dim lngLoop As Long
    Dim strTemp As String

    Select Case getVersion()

    Case 1 'Windows 95/98

    Dim f As Long, sname As String
    Dim hSnap As Long, proc As PROCESSENTRY32

    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
    If hSnap = hNull Then Exit Function
    proc.dwSize = Len(proc)
    ' Iterate through the processes
    f = Process32First(hSnap, proc)
    Do While f
    sname = StrZToStr(proc.szExeFile)
    'this returns the square character after it so strip that
    For lngLoop = 1 To Len(sname)
    'start from the left and work our way over
    strTemp = Left$(sname, lngLoop)
    'now check to see if the last character is the square character
    Select Case Right$(strTemp, 1)
    'the squares represent unsupported characters so there are
    a
    'few
    Case Is = Chr(0), Chr(1), Chr(2), Chr(3), Chr(4), Chr(5),
    Chr(6) _
    + Chr(7), Chr(11), Chr(12), Chr(14), Chr(15), Chr(16), Chr(17),
    Chr(18) _
    + Chr(19), Chr(20), Chr(21), Chr(22), Chr(23), Chr(24), Chr(25),
    Chr(26) _
    + Chr(27), Chr(28), Chr(29), Chr(30), Chr(31), Chr(127),
    Chr(129), Chr(141) _
    + Chr(143), Chr(144), Chr(157)

    'if they get here then we have it so revamp sname
    sname = Left$(sname, (lngLoop - 1))
    Case Else
    'then keep going
    End Select
    Next lngLoop

    If UCase(sname) = UCase(FilePath) Then
    GetProcess = f
    'KillProcess (GetProcess)
    Exit Do
    Else
    f = Process32Next(hSnap, proc)
    End If
    Loop

    Case 2 'Windows NT

    Dim cb As Long
    Dim cbNeeded As Long
    Dim NumElements As Long
    Dim ProcessIDs() As Long
    Dim cbNeeded2 As Long
    Dim NumElements2 As Long
    Dim Modules(1 To 200) As Long
    Dim lRet As Long
    Dim ModuleName As String
    Dim nSize As Long
    Dim hProcess As Long
    Dim i As Long
    'Get the array containing the process id's for each process object
    cb = 8
    cbNeeded = 96
    Do While cb <= cbNeeded
    cb = cb * 2
    ReDim ProcessIDs(cb / 4) As Long
    lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
    Loop
    NumElements = cbNeeded / 4

    For i = 1 To NumElements
    'Get a handle to the Process
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION _
    Or PROCESS_VM_READ, 0, ProcessIDs(i))
    'Got a Process handle
    If hProcess <> 0 Then
    'Get an array of the module handles for the specified
    'process
    lRet = EnumProcessModules(hProcess, Modules(1), 200, _
    cbNeeded2)
    'If the Module Array is retrieved, Get the ModuleFileName
    If lRet <> 0 Then
    ModuleName = Space(MAX_PATH)
    nSize = 500
    lRet = GetModuleFileNameExA(hProcess, Modules(1), _
    ModuleName, nSize)
    End If
    End If
    'Close the handle to the process
    lRet = CloseHandle(hProcess)
    Next

    End Select
    End Function



  3. #3
    jeeter p.p.p Guest

    Re: How to determine whether a particular file is open or not?


    "Ani" <anirudhav@yahoo.com> wrote:
    >
    >Hi there,
    >
    >I would like to know how to determine whether a particular file is open?
    >(Any file *.*)
    >
    >Thanks in advance.
    >Ani
    >


    try this one...

    ' Constants used for various API calls. Refer to MSDN for detailed
    ' information about what these constants mean.

    Private Const TOKEN_ADJUST_PRIVILEGES = &H20
    Private Const TOKEN_QUERY = &H8
    Private Const ANYSIZE_ARRAY = 1
    Private Const PROCESS_ALL_ACCESS = &H1F0FFF
    Private Const SE_DEBUG_NAME = "SeDebugPrivilege"
    Private Const SE_PRIVILEGE_ENABLED = &H2

    ' Structures used with various API calls.
    ' Refer to MSDN for detailed information
    ' about what these structures are, and how they are used.

    Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
    End Type

    Private Type Luid
    lowpart As Long
    highpart As Long
    End Type

    Private Type LUID_AND_ATTRIBUTES
    pLuid As Luid
    Attributes As Long
    End Type

    Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End Type

    ' Refer to the MSDN for detailed information on
    ' all of these API calls.

    Private Declare Function CloseHandle Lib "kernel32" _
    (ByVal hObject As Long) As Long

    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

    Private Declare Function OpenProcessToken Lib "advapi32.dll" _
    (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _
    TokenHandle As Long) As Long

    Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA"
    (ByVal lpSystemName As String, _
    ByVal lpName As String, lpLuid As Luid) As Long

    Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll"
    (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long,
    NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As
    TOKEN_PRIVILEGES, ReturnLength As Long) As Long

    Private Declare Function OpenProcess Lib "kernel32" _
    (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long

    Private Declare Function TerminateProcess Lib "kernel32" _
    (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

    Private Declare Function Process32First Lib "kernel32" ( _
    ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

    Private Declare Function Process32Next Lib "kernel32" ( _
    ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long


    Private Declare Function EnumProcesses Lib "psapi.dll" _
    (ByRef lpidProcess As Long, ByVal cb As Long, _
    ByRef cbNeeded As Long) As Long

    Private Declare Function GetModuleFileNameExA Lib "psapi.dll" _
    (ByVal hProcess As Long, ByVal hModule As Long, _
    ByVal ModuleName As String, ByVal nSize As Long) As Long

    Private Declare Function EnumProcessModules Lib "psapi.dll" _
    (ByVal hProcess As Long, ByRef lphModule As Long, _
    ByVal cb As Long, ByRef cbNeeded As Long) As Long

    Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags
    As Long, ByVal th32ProcessID As Long) As Long

    Private Declare Function GetVersionExA Lib "kernel32" _
    (lpVersionInformation As OSVERSIONINFO) As Integer

    Private Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long ' This process
    th32DefaultHeapID As Long
    th32ModuleID As Long ' Associated exe
    cntThreads As Long
    th32ParentProcessID As Long ' This process's parent process
    pcPriClassBase As Long ' Base priority of process threads
    dwFlags As Long
    szExeFile As String * 260 ' MAX_PATH
    End Type

    Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long '1 = Windows 95.
    '2 = Windows NT

    szCSDVersion As String * 128
    End Type

    Private Const PROCESS_QUERY_INFORMATION = 1024
    Private Const PROCESS_VM_READ = 16
    Private Const MAX_PATH = 260
    Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Private Const SYNCHRONIZE = &H100000
    'STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
    Public Const TH32CS_SNAPPROCESS = &H2&
    Private Const hNull = 0

    Public Function GetProcess() As Long
    'this is a call to the win api's to get the process of our app so we can
    kill it
    Dim lngLoop As Long
    Dim strTemp As String

    Select Case getVersion()

    Case 1 'Windows 95/98

    Dim f As Long, sname As String
    Dim hSnap As Long, proc As PROCESSENTRY32

    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
    If hSnap = hNull Then Exit Function
    proc.dwSize = Len(proc)
    ' Iterate through the processes
    f = Process32First(hSnap, proc)
    Do While f
    sname = StrZToStr(proc.szExeFile)
    'this returns the square character after it so strip that
    For lngLoop = 1 To Len(sname)
    'start from the left and work our way over
    strTemp = Left$(sname, lngLoop)
    'now check to see if the last character is the square character
    Select Case Right$(strTemp, 1)
    'the squares represent unsupported characters so there are
    a
    'few
    Case Is = Chr(0), Chr(1), Chr(2), Chr(3), Chr(4), Chr(5),
    Chr(6) _
    + Chr(7), Chr(11), Chr(12), Chr(14), Chr(15), Chr(16), Chr(17),
    Chr(18) _
    + Chr(19), Chr(20), Chr(21), Chr(22), Chr(23), Chr(24), Chr(25),
    Chr(26) _
    + Chr(27), Chr(28), Chr(29), Chr(30), Chr(31), Chr(127),
    Chr(129), Chr(141) _
    + Chr(143), Chr(144), Chr(157)

    'if they get here then we have it so revamp sname
    sname = Left$(sname, (lngLoop - 1))
    Case Else
    'then keep going
    End Select
    Next lngLoop

    If UCase(sname) = UCase(FilePath) Then
    GetProcess = f
    'KillProcess (GetProcess)
    Exit Do
    Else
    f = Process32Next(hSnap, proc)
    End If
    Loop

    Case 2 'Windows NT

    Dim cb As Long
    Dim cbNeeded As Long
    Dim NumElements As Long
    Dim ProcessIDs() As Long
    Dim cbNeeded2 As Long
    Dim NumElements2 As Long
    Dim Modules(1 To 200) As Long
    Dim lRet As Long
    Dim ModuleName As String
    Dim nSize As Long
    Dim hProcess As Long
    Dim i As Long
    'Get the array containing the process id's for each process object
    cb = 8
    cbNeeded = 96
    Do While cb <= cbNeeded
    cb = cb * 2
    ReDim ProcessIDs(cb / 4) As Long
    lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
    Loop
    NumElements = cbNeeded / 4

    For i = 1 To NumElements
    'Get a handle to the Process
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION _
    Or PROCESS_VM_READ, 0, ProcessIDs(i))
    'Got a Process handle
    If hProcess <> 0 Then
    'Get an array of the module handles for the specified
    'process
    lRet = EnumProcessModules(hProcess, Modules(1), 200, _
    cbNeeded2)
    'If the Module Array is retrieved, Get the ModuleFileName
    If lRet <> 0 Then
    ModuleName = Space(MAX_PATH)
    nSize = 500
    lRet = GetModuleFileNameExA(hProcess, Modules(1), _
    ModuleName, nSize)
    End If
    End If
    'Close the handle to the process
    lRet = CloseHandle(hProcess)
    Next

    End Select
    End Function



Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center