[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Ответить
 • Просмотры: 28
Аватара пользователя
Lodoss

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Lodoss »

А вот вариант куда более примитивный (для Fat):





Код:

Код: Выделить всё

HotKeySet("{ESC}", "Quit")
;Global $sBlock_Password = "Pass"
Global $sBlockFiles_List = "C:\Temp\Readme.txt|C:\Temp\Web.doc|C:\Temp\DXSETUP.exe"
Global $aBlockFiles_List = StringSplit($sBlockFiles_List, "|")
While 1
    Sleep(1000)
    $aProcess_Info = _ProcessesGetInfo()
    For $i = 1 To UBound($aProcess_Info)-1
        For $j = 1 To $aBlockFiles_List[0]
            If StringInStr($aProcess_Info[$i][1], $aBlockFiles_List[$j]) Or $aProcess_Info[$i][7] = $aBlockFiles_List[$j] Then
                _BlockFile_Proc($aBlockFiles_List[$j], $aProcess_Info[$i][26])
                ExitLoop
            EndIf
        Next
    Next
WEnd
Func _BlockFile_Proc($sFile, $iProc)
    ;_ProcessSuspendSwitch($iProc, True)
    Local $hBlockedFile_Win = _ProcessGetWindow($iProc)
;~  Local $s_Password = InputBox(StringFormat("File Blocked (%s) - Attention!", StringRegExpReplace($sFile, "^.*\\", "")), _
;~      "Blocked File Execution attempt. Please insert password to unlock it:", "", "*", 300, 120, -1, -1, 0, $hBlockedFile_Win[1])
    MsgBox(262144+48, "File Blocker - Attention!", _
        StringFormat("You are not allowed to open this File (%s)", _
            StringRegExpReplace($sFile, "^.*\\", "")), 0, $hBlockedFile_Win[1])
    ;If $s_Password = $sBlock_Password Then Return _ProcessSuspendSwitch($iProc, False)
    Return ProcessClose($iProc)
EndFunc
Func _ProcessesGetInfo()
    Local $oColItems, $objWMIService, $objItem, $cI_Compname = @ComputerName
    Local $aProcessInfo[1000][42], $i = 1
    $objWMIService = ObjGet("winmgmts:\\" & $cI_Compname & "\root\CIMV2")
    $oColItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL")
    If Not IsObj($oColItems) Then Return SetError(1, 2, 0)
    For $objItem In $oColItems
        $aProcessInfo[$i][0]  = $objItem.Name
        $aProcessInfo[$i][1]  = $objItem.CommandLine
        $aProcessInfo[$i][2]  = $objItem.CreationClassName
        $aProcessInfo[$i][3]  = $objItem.CreationDate
        $aProcessInfo[$i][4]  = $objItem.Description
        $aProcessInfo[$i][5]  = $objItem.CSCreationClassName
        $aProcessInfo[$i][6]  = $objItem.CSName
        $aProcessInfo[$i][7]  = $objItem.ExecutablePath
        $aProcessInfo[$i][8]  = $objItem.ExecutionState
        $aProcessInfo[$i][9]  = $objItem.Handle
        $aProcessInfo[$i][10] = $objItem.HandleCount
        $aProcessInfo[$i][11] = $objItem.KernelModeTime
        $aProcessInfo[$i][12] = $objItem.MaximumWorkingSetSize
        $aProcessInfo[$i][13] = $objItem.MinimumWorkingSetSize
        $aProcessInfo[$i][14] = $objItem.OSCreationClassName
        $aProcessInfo[$i][15] = $objItem.OSName
        $aProcessInfo[$i][16] = $objItem.OtherOperationCount
        $aProcessInfo[$i][17] = $objItem.OtherTransferCount
        $aProcessInfo[$i][18] = $objItem.PageFaults
        $aProcessInfo[$i][19] = $objItem.PageFileUsage
        $aProcessInfo[$i][20] = $objItem.ParentProcessId
        $aProcessInfo[$i][21] = $objItem.PeakPageFileUsage
        $aProcessInfo[$i][22] = $objItem.PeakVirtualSize
        $aProcessInfo[$i][23] = $objItem.PeakWorkingSetSize
        $aProcessInfo[$i][24] = $objItem.Priority
        $aProcessInfo[$i][25] = $objItem.PrivatePageCount
        $aProcessInfo[$i][26] = $objItem.ProcessId
        $aProcessInfo[$i][27] = $objItem.QuotaNonPagedPoolUsage
        $aProcessInfo[$i][28] = $objItem.QuotaPagedPoolUsage
        $aProcessInfo[$i][29] = $objItem.QuotaPeakNonPagedPoolUsage
        $aProcessInfo[$i][30] = $objItem.QuotaPeakPagedPoolUsage
        $aProcessInfo[$i][31] = $objItem.ReadOperationCount
        $aProcessInfo[$i][32] = $objItem.ReadTransferCount
        $aProcessInfo[$i][33] = $objItem.SessionId
        $aProcessInfo[$i][34] = $objItem.Status
        $aProcessInfo[$i][35] = $objItem.ThreadCount
        $aProcessInfo[$i][36] = $objItem.UserModeTime
        $aProcessInfo[$i][37] = $objItem.VirtualSize
        $aProcessInfo[$i][38] = $objItem.WindowsVersion
        $aProcessInfo[$i][39] = $objItem.WorkingSetSize
        $aProcessInfo[$i][40] = $objItem.WriteOperationCount
        $aProcessInfo[$i][41] = $objItem.WriteTransferCount
        $i += 1
    Next
    $aProcessInfo[0][0] = $i-1
    ReDim $aProcessInfo[$i][42]
    If $aProcessInfo[0][0] < 1 Then Return SetError(1, 1, 0)
    Return $aProcessInfo
EndFunc
Func _ProcessGetWindow($iPID)
    Local $aWinList = WinList()
    Local $aRet[2]
    If IsString($iPID) Then $iPID = ProcessExists($iPID)
    For $i = 1 To UBound($aWinList)-1
        If WinGetProcess($aWinList[$i][1]) = $iPID Then
            $aRet[0] = $aWinList[$i][0] ;Title
            $aRet[1] = $aWinList[$i][1] ;WinHandle
            Return $aRet
        EndIf
    Next
    Return SetError(1, 0, $aRet)
EndFunc
Func _ProcessSuspendSwitch($iPIDOrName, $iSuspend = True)
    If IsString($iPIDOrName) Then $iPIDOrName = ProcessExists($iPIDOrName)
    If Not $iPIDOrName Then Return SetError(1, 0, 0)
    Local $aNtSuspResumProc
    Local $ah_OpProcess = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', False, 'int', $iPIDOrName)
    If $iSuspend Then
        $aNtSuspResumProc = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $ah_OpProcess[0])
    Else
        $aNtSuspResumProc = DllCall("ntdll.dll", "int", "NtResumeProcess", "int", $ah_OpProcess[0])
    EndIf
    DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ah_OpProcess)
    If IsArray($aNtSuspResumProc) Then Return 1
    Return SetError(2, 0, 0)
EndFunc
Func Quit()
    Exit
EndFunc

Изображение



Работает не для всех файлов, зависит от приложения сопоставленного с типом файла.




Цитата Maza Faka:



Тестировалось на:

WinXP SP3 FS:NTFS
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Работает и в «WinXP SP2 FS:FAT» Изображение
Аватара пользователя
Lodoss

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Lodoss »

Этот вариант мне больше понравился:





Код:

Код: Выделить всё

$sFile = FileOpenDialog("Select a file", "", "All files (*.*)")
If @error Then Exit
Global $sPass = InputBox("File security", "Please set a password", "", "*")
If @error Then Exit
Global $hFile = _CreateFile($sFile)
If $hFile = -1 Then Exit MsgBox(16, "Error", "Unable to open file")
HotKeySet("^d", "_Decrypt") ;Ctrl + d
While 1
    Sleep(100)
WEnd
Func _CreateFile($sFile)
    Local Const $GENERIC_READ  = 0x80000000
    Local Const $GENERIC_WRITE = 0x40000000
    Local Const $OPEN_EXISTING = 3
    $sFile = "\\.\" & $sFile
    Local $aRet = DllCall("kernel32.dll", "hwnd", "CreateFile", _
                                          "str", $sFile, _
                                          "int", BitOR($GENERIC_READ, $GENERIC_WRITE), _
                                          "int", 0, _
                                          "ptr", 0, _
                                          "int", $OPEN_EXISTING, _
                                          "int", 0, _
                                          "int", 0)
    Return $aRet[0]
EndFunc   ;==>_CreateFile
Func _Decrypt()
    Local $sCurPass = InputBox("File security", "Please enter a password", "", "*")
    If @error Then Return 0
    If $sCurPass == $sPass Then
        DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
        MsgBox(64, "Success", "File decrypted")
        Exit
    Else
        MsgBox(16, "Error", "Access denied")
    EndIf
EndFunc   ;==>_Decrypt

Только вот здесь нельзя выбрать несколько файлов и нельзя выбрать целую папку, в отличии от кода предложенного Creat0R-ом. А в коде Creat0R-а не совсем всё работает. Допустим если закрыть доступ к файлу и открыть его вордом то он без проблем откроется или музыкальный файл с таким же успехом открывается в любом плеере.



МОжет кто подправит?
Аватара пользователя
Dump

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Dump »

Помогите плиз в написании скрипта. Приветствуется скрипт именно на AutoIT, так как там можно всё в exe файл засунуть, и не светить пароли.



Алгоритм примерно такой!

1 скрипт:

Проверить наличие новых файлов на FTP(с использованием определённой учётки) сравнивая с c:\update

Если обновлений нет - закончить работу!

Если обновления есть скопировать их в c:\update и удалить старые файлы.

Файлы имеют вид lpt$vpn.* расширение меняется с каждым новым файлом Изображение



2 скрипт:

Проверить доступность сетевого ресурса \\ip\update (с использованием определённой учётки)

Если ресурс не доступен перейти к проверке следующего ресурса

если ресурс доступен скопировать файлы из c:\update в \\ip\update

перейти к проверке следующего сетевого ресурса

Проверить доступность сетевого ресурса \\ip1\update (с использованием определённой учётки)

Если ресурс не доступен перейти к проверке следующего ресурса

если ресурс доступен скопировать файлы из c:\update в \\ip1\update

и т.д.

Закончить работу!



Всё это дело логировать!
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

morgan1991,
Цитата morgan1991:



МОжет кто подправит?
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Другой вариант -
(почти) Утилита BlockIt
. Основана на идее от Maza Faka Изображение
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

Цитата morgan1991:



нельзя выбрать целую папку
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Можно Изображение



Код:

Код: Выделить всё

$sFile = FileSelectFolder("Select the folder", "")
If @error Then Exit
Global $sPass = InputBox("File security", "Please set a password", "", "*")
If @error Then Exit
Global $hFile = _CreateFile($sFile)
If $hFile = -1 Then Exit MsgBox(16, "Error", "Unable to open file")
HotKeySet("^d", "_Decrypt") ;Ctrl + d
While 1
    Sleep(100)
WEnd
Func _CreateFile($sFile)
    Local Const $GENERIC_READ  = 0x80000000
    Local Const $GENERIC_WRITE = 0x40000000
    Local Const $FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
    Local Const $OPEN_EXISTING = 3
    $sFile = "\\.\" & $sFile
    Local $aRet = DllCall("kernel32.dll", "hwnd", "CreateFile", _
                                          "str", $sFile, _
                                          "int", BitOR($GENERIC_READ, $GENERIC_WRITE), _
                                          "int", 0, _
                                          "ptr", 0, _
                                          "int", $OPEN_EXISTING, _
                                          "int", $FILE_FLAG_BACKUP_SEMANTICS, _ ;Что бы получить дескриптор каталога, установите флажок FILE_FLAG_BACKUP_SEMANTICS
                                          "int", 0)
    Return $aRet[0]
EndFunc   ;==>_CreateFile
Func _Decrypt()
    Local $sCurPass = InputBox("File security", "Please enter a password", "", "*")
    If @error Then Return 0
    If $sCurPass == $sPass Then
        DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
        MsgBox(64, "Success", "File decrypted")
        Exit
    Else
        MsgBox(16, "Error", "Access denied")
    EndIf
EndFunc   ;==>_Decrypt

А если ещё кто-нибудь знает как отловить обращение к файлу/папке, то можно написать неплохую программку Изображение
Аватара пользователя
ganselo

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение ganselo »

Подскажите пожалуйста как скрыть ранее созданный элемент с формы (т.е я создал например какой нибуть Edit на форме, мне нужно по нажатию определённого Buttona скрыть этот объект (Edit например) с формы). На C++ Builder'e это выглядит так: Edit1->Vidible = false;, как осуществить аналогичное на Auto IT?
Аватара пользователя
Creat0R

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Creat0R »

AutoIt3\Include\WindowsConstants.au3

Global Const $WS_POPUP = 0x80000000



Та же фигня была. Потом пропало. Не знаю, почему.

М. б. из-за того что установил полный
SciTE4AutoIt3
. Не знаю точно.
Аватара пользователя
ganselo

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение ganselo »

Цитата Maza Faka:



А если ещё кто-нибудь знает как отловить обращение к файлу/папке, то можно написать неплохую программку
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Пока придумал только отлов системного сообщения, утилиту
запаковал сюда
, если найдутся тестеры, можно дальше развивать Изображение.
Аватара пользователя
Creat0R

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Creat0R »

помогите

написал тут код ,Но есть проблема

Я могу закрит иконку ,толко нажав ESC или Enter что надо даписат что бы иконка закривалас при нажатии мышки на нее?

TEMP = дорожка к *.png($temp = "E:\VBA\AutoIt\GUI\1.png" )

Код: Выделить всё

#NoTrayIcon
#include <GDIPlus.au3>; this is where the magic happens, people
#include <GuiComboBox.au3>
#include <File.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>
Global Const $AC_SRC_ALPHA = 1, $ULW_ALPHA = 2
Global $launchDir = @DesktopDir, $GUI
;~ Dim $temp1
$temp = "E:\VBA\AutoIt\GUI\1.png"
Transp_PNG($temp)
Func Transp_PNG($temp, $iOpacity = 255, $EnableFade = True)
	If $iOpacity < 0 Then $iOpacity = 0
	If $iOpacity > 255 Then $iOpacity = 255
	; Load PNG file as GDI bitmap
	_GDIPlus_Startup()
	$pngSrc = $temp
	$hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
	; Extract image width and height from PNG
	$width = _GDIPlus_ImageGetWidth($hImage)
	$height = _GDIPlus_ImageGetHeight($hImage)
	; Create layered window
    $GUI = GUICreate("lod3n launcher", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
	GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
	GUISetState()
	WinSetOnTop($GUI, "", 1)
	If $EnableFade Then
		;fade in png background
		For $i = 0 To $iOpacity Step 1
			SetBitmap($GUI, $hImage, $i)
		Next
	Else
		SetBitmap($GUI, $hImage, $iOpacity)
	EndIf
	; set default button for Enter key activation - renders outside GUI window
	$BtnExit = GUICtrlCreateButton("Exit", $width, $height, 10, 10, $BS_DEFPUSHBUTTON)
	While 1
		Switch GUIGetMsg()
		    Case $GUI_EVENT_CLOSE,  $BtnExit
			ExitLoop
		EndSwitch
	WEnd
	If $EnableFade Then
		;fade out png background
		For $i = $iOpacity To 0 Step -1
			SetBitmap($GUI, $hImage, $i)
		Next
	Else
		SetBitmap($GUI, $hImage, 0)
	EndIf
EndFunc   ;==>Transp_PNG
Func CancelPressed()
	 Exit
EndFunc
; ====================================================================================================
; Handle the WM_NCHITTEST for the layered window so it can be dragged by clicking anywhere on the image.
; ====================================================================================================
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
	If ($hWnd = $GUI) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc   ;==>WM_NCHITTEST
; ====================================================================================================
; SetBitMap
; ====================================================================================================
Func SetBitmap($hGUI, $hImage, $iOpacity)
	Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
	$hScrDC = _WinAPI_GetDC(0)
	$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
	$tSize = DllStructCreate($tagSIZE)
	$pSize = DllStructGetPtr($tSize)
	DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
	DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
	$tSource = DllStructCreate($tagPOINT)
	$pSource = DllStructGetPtr($tSource)
	$tBlend = DllStructCreate($tagBLENDFUNCTION)
	$pBlend = DllStructGetPtr($tBlend)
	DllStructSetData($tBlend, "Alpha", $iOpacity)
	DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
	_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
	_WinAPI_ReleaseDC(0, $hScrDC)
	_WinAPI_SelectObject($hMemDC, $hOld)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteDC($hMemDC)
EndFunc   ;==>SetBitmap
Аватара пользователя
ganselo

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение ganselo »

Цитата Creat0R:



Пока придумал только отлов системного сообщения, утилиту запаковал сюда, если найдутся тестеры, можно дальше развивать .
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.




Если закрыть доступ к текстовому файлу с расширением .php (на других не пробовал) тогда документ открывается с помощью notepad.
Ответить

Вернуться в «AutoIt»