Hallo wie kann ich prüfen ob eine Datei noch von Irgend einer Anwendung geöffnet ist.
Prüfen ob eine Datei geöffnet ist
-
- [ gelöst ]
-
Tigger1975 -
12. Mai 2011 um 14:02 -
Geschlossen -
Erledigt
-
-
Hi Tiger,
ich hätte gesagt
[autoit]FileOpen("$File")
[/autoit]und auf den Error abfragen
Gruß
-
Evtl dashier:
[autoit]ProcessExists()
[/autoit] -
Hallo Danke,
muss ich dann versuchen die Datei zu Schreiben?
Aus der Hilfe geht nichts dazu hervor?1
FileOpen("$File")
-
So wie ich es verstanden hab möchtest du testen ob etwas bereits läuft, dafür solltest du dir
[autoit]ProcessExists()
[/autoit]anschauen. Mit dem was Prajoss gesagt hat, kannst du überprüfen ob du ein Programm erfolgreich geöffnet hast (also mit dem Script), aber nicht ob es bereits läuft.
-
Spoiler anzeigen
[autoit];===============================================================================
[/autoit]
;
; Function Name: _FileInUse()
; Description: Checks if file is in use
; Syntax.........: _FileInUse($sFilename, $iAccess = 1)
; Parameter(s): $sFilename = File name
; Parameter(s): $iAccess = 0 = GENERIC_READ - other apps can have file open in readonly mode
; $iAccess = 1 = GENERIC_READ|GENERIC_WRITE - exclusive access to file,
; fails if file open in readonly mode by app
; Return Value(s): 1 - file in use (@error contains system error code)
; 0 - file not in use
; -1 dllcall error (@error contains dllcall error code)
; Author: Siao
; Modified rover - added some additional error handling, access mode
; Remarks _WinAPI_CreateFile() WinAPI.au3
;===============================================================================
Func _FileInUse($sFilename, $iAccess = 0)
Local $aRet, $hFile, $iError, $iDA
Local Const $GENERIC_WRITE = 0x40000000
Local Const $GENERIC_READ = 0x80000000
Local Const $FILE_ATTRIBUTE_NORMAL = 0x80
Local Const $OPEN_EXISTING = 3
$iDA = $GENERIC_READ
If BitAND($iAccess, 1) <> 0 Then $iDA = BitOR($GENERIC_READ, $GENERIC_WRITE)
$aRet = DllCall("Kernel32.dll", "hwnd", "CreateFile", _
"str", $sFilename, _ ;lpFileName
"dword", $iDA, _ ;dwDesiredAccess
"dword", 0x00000000, _ ;dwShareMode = DO NOT SHARE
"dword", 0x00000000, _ ;lpSecurityAttributes = NULL
"dword", $OPEN_EXISTING, _ ;dwCreationDisposition = OPEN_EXISTING
"dword", $FILE_ATTRIBUTE_NORMAL, _ ;dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL
"hwnd", 0) ;hTemplateFile = NULL
$iError = @error
If @error Or IsArray($aRet) = 0 Then Return SetError($iError, 0, -1)
$hFile = $aRet[0]
If $hFile = -1 Then ;INVALID_HANDLE_VALUE = -1
$aRet = DllCall("Kernel32.dll", "int", "GetLastError")
;ERROR_SHARING_VIOLATION = 32 0x20
;The process cannot access the file because it is being used by another process.
If @error Or IsArray($aRet) = 0 Then Return SetError($iError, 0, 1)
Return SetError($aRet[0], 0, 1)
Else
;close file handle
DllCall("Kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
Return SetError(@error, 0, 0)
EndIf
EndFunc -
i2c Sie wurden Assimiliert, Ihre technologischen Eigenschaften wurden den unseren hinzugefügt.
Danke
-
Geöffnete Dateien werden ja unter Computer Verwaltung (Freigaben/Geöffnete Dateien) gelistet,
ich weiß nur nicht wo das in der Registry o.ä. zu finden ist.
Obwohl das meine ich nur remote geöffnete zeigt?