VermanVendetta13
Новичок
- Сообщения
- 147
- Репутация
- 0
Теперь такой вопрос. как сделать так, что бы программа расшифровывала файл m без его сохранения и отображала его только в открытом GUI
Вот пример кода с просмотром фотографий(Спасибо тому, кто составил основную часть) я добавил функцию выбора папки отображения
вот чистый код шифровки
Вот пример кода с просмотром фотографий(Спасибо тому, кто составил основную часть) я добавил функцию выбора папки отображения
Код:
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
; Пример 1
$hGui = GUICreate('Функция FileSelectFolder')
$iButton = GUICtrlCreateButton('-', 10, 10, 21, 21, $BS_ICON)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
GUISetState()
While 1
Switch GUIGetMsg()
Case $iButton
; пример с использованием GUI аналогичен для FileOpenDialog и FileSaveDialog
$sPath = FileSelectFolder('Выберите папку', '', 3, @DesktopDir, $hGui)
; продолжить цикл опроса от начала, если выбор отменён или объект не является папкой, например "Мой компьютер" или Корзина
If @error Or Not StringInStr(FileGetAttrib($sPath), "D") Then ContinueLoop
#include <GuiConstantsEx.au3>
#include <File.au3>
$Folder = $sPath
$Files = _FileListToArray($Folder, "*.jpg", 1, True)
If @error Then Exit
Global $Width = 960, $Height = 600, $i = 1, $Pic
$GUI = GUICreate("Example", $Width, $Height)
$Pic = GUICtrlCreatePic($Files[1], 0, 0, $Width, $Height)
GUISetState()
Do
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $GUI_EVENT_PRIMARYDOWN
$i += 1
If $i > $Files[0] Then $i = 1
GUICtrlDelete($Pic)
$Pic = GUICtrlCreatePic($Files[$i], 0, 0, $Width, $Height)
Case $GUI_EVENT_SECONDARYDOWN
$i -= 1
If $i < 1 Then $i = $Files[0]
GUICtrlDelete($Pic)
$Pic = GUICtrlCreatePic($Files[$i], 0, 0, $Width, $Height)
EndSwitch
Until 0
Case $GUI_EVENT_CLOSE
GUIDelete($hGui)
ExitLoop
EndSwitch
WEnd
вот чистый код шифровки
Код:
Opt('MustDeclareVars', 1)
Global $sFile = @ScriptDir & '\*.jpg', $sFileMixed = @ScriptDir & '\*.mxd'
ConsoleWrite(_File_Mix($sFile) & @LF)
ConsoleWrite(_File_Mix($sFileMixed) & @LF)
#cs
Если файл с "нормальным" именем, запишет перемешанное содержимое в файл с именем ИмяФайла_расширение.mxd в эту же папку
Если файл с именем ИмяФайла_расширение.mxd, запишет исходное содержимое в файл с именем ИмяФайла.расширение в эту же папку
Если все ОК, вернет True.
При ошибке вернет False.
!!!Функция не предназначена для перемешивания больших файлов!!!
#ce
Func _File_Mix($s_File)
Local Const $s_HexStr = '8C1006DBD60E18CC92AD18834F047F3C8D8F678ACE598CF0A95E747A5286D9778F85E427710363AC'
Local $i_Err = 1, $i_Size, $i_Mod, $i_Part, $a_Seq, $i_Mixed, $s_FileMixed, $h_File, $h_FileMixed, $h_FilePos, $b_Read
$i_Size = FileGetSize($s_File)
If Not $i_Size Then Return False
$i_Mod = Mod($i_Size, 10)
$i_Part = Int($i_Size / 10)
$a_Seq = StringSplit(Dec(StringMid($s_HexStr, $i_Mod * 8 + 1, 8), 2), '')
If $a_Seq[0] <> 10 Then Return False
If StringRight($s_File, 4) = '.mxd' Then
$i_Mixed = 1
$s_FileMixed = StringReplace(StringTrimRight($s_File, 4), '_', '.', -1)
Else
$s_FileMixed = StringReplace($s_File, '.', '_', -1) & '.mxd'
EndIf
Do
$h_File = FileOpen($s_File, 16)
If $h_File = -1 Then ExitLoop
$h_FileMixed = FileOpen($s_FileMixed, 18)
If $h_FileMixed = -1 Then ExitLoop
If $i_Mixed Then
$h_FilePos = $h_FileMixed
Else
$h_FilePos = $h_File
EndIf
For $i = 1 To 10
If Not FileSetPos($h_FilePos, $a_Seq[$i] * $i_Part, 0) Then ExitLoop 2;$FILE_BEGIN
$b_Read = FileRead($h_File, $i_Part)
If @error Then ExitLoop 2
If Not FileWrite($h_FileMixed, $b_Read) Then ExitLoop 2
Next
If $i_Mod Then
If Not FileSetPos($h_FilePos, $a_Seq[0] * $i_Part, 0) Then ExitLoop
$b_Read = FileRead($h_File, $i_Mod)
If @error Then ExitLoop
If Not FileWrite($h_FileMixed, $b_Read) Then ExitLoop
EndIf
FileClose($h_File)
FileClose($h_FileMixed)
$i_Err = 0
Until 1
If $i_Err Then
FileClose($h_File)
FileClose($h_FileMixed)
FileDelete($s_FileMixed)
EndIf
Return $i_Err = 0
EndFunc ;==>_File_Mix