Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Ошибка защиты от записи (http://forum.oszone.net/showthread.php?t=296851)

sLiDeR-X 13-03-2015 13:25 2482181

Ошибка защиты от записи
 
Программа работает с картами памяти и USB флешками. Нередко бывает, что у SD-карты переключатель сдвинут в положение "LOCK", и карта не работает на запись. Перед считыванием данных я сделал проверку на запись: кладу файл на карту. Если успешно удаляю и делаю отметку, что запись возможна, если же нет, то делаю отметку что невозможна. Но каждый раз появляется надоедливое окно. Как его убрать?


Creat0R 13-03-2015 17:35 2482273

Цитата:

Цитата sLiDeR-X
каждый раз появляется надоедливое окно. Как его убрать? »

Нужно предотвратить его появление.
Для этого нужно увидеть код программы, или её часть, но в рабочем состояний (та часть которая обращается к флешке).

Mike909 13-03-2015 17:53 2482280

Код:

$sDrive = "H:\"
$sTmpFileName = $sDrive & "test.tmp"
ConsoleWrite($sDrive & " " & DriveStatus($sDrive) & ' ' & DriveGetType($sDrive) & @LF)
$hFile = FileOpen ( $sTmpFileName ,1 )
If $hFile==-1 Then
  ConsoleWrite("Error open file in write mode."  & @LF)
Else
  ConsoleWrite("Ok."  & @LF)
  FileClose ($hFile)
  FileDelete ($sTmpFileName)
EndIf


Creat0R 13-03-2015 18:46 2482296

Код:

#include <WinAPIFiles.au3>

;...

$hFile = -1

If _WinAPI_IsWritableEx($sDrive) Then
    $hFile = FileOpen($sTmpFileName, 1)
EndIf

;...

Func _WinAPI_IsWritableEx($sDrive)
    Local $hFile = _WinAPI_CreateFileEx('\\.\' & $sDrive, $OPEN_EXISTING, 0, $FILE_SHARE_READWRITE)
    If @error Then Return SetError(@error + 20, @extended, False)

    Local $aRet = DllCall('kernel32.dll', 'bool', 'DeviceIoControl', 'handle', $hFile, 'dword', 0x00070024, 'ptr', 0, 'dword', 0, _
            'ptr', 0, 'dword', 0, 'dword*', 0, 'ptr', 0)
    Local Const $ERROR_WRITE_PROTECT = 19 ; The media is write protected.
    If __CheckErrorCloseHandle($aRet, $hFile, 1) <> 10 And @extended = $ERROR_WRITE_PROTECT Then Return SetError(@error, @extended, False)

    Return $aRet[0]
EndFunc


sLiDeR-X 13-03-2015 22:09 2482401

Mike909, это ничем не отличается от того, как сделано у меня. Окно появляется!

Creat0R, спасибо! Функция _WinAPI_IsWritableEx($sDrive) работает.


Время: 17:59.

Время: 17:59.
© OSzone.net 2001-