PDA

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


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [67] 68 69 70 71 72 73 74 75 76 77 78

shyra1976
21-12-2008, 08:58
#NoTrayIcon
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <File.au3>
#include <Misc.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
Global $hUser32DllOpen = DllOpen("User32.dll")
$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
If _IsPressed(01, $hUser32DllOpen) Then ExitLoop
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
CancelPressed()
EndFunc ;==>Transp_PNG
Func CancelPressed()
DllClose($hUser32DllOpen)
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)
Switch $iMsg
Case $WM_NCHITTEST
If $hWnd = $GUI Then Return $HTCAPTION
EndSwitch
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 »


Если чесно то не работает как надо ,Не важно куда я нажимаю мышкой на экране ,иконка закривается .А я хотел именно назимая на иконку ,закриват ее

SAOPP
21-12-2008, 11:54
Maza Faka, если рассказать в кратце, то что мне нужно сделать:
1. В авторане стоит soulseek
2. В свойствах его ярлыка стоит запускать во весь экран (это я так хочу сделать, дабы потом его в ручнуб не увеличивать)
3. Нужно после того, как он загрузится, свернуть его - тогда он попадёт в трей(!) Это и есть задача сама :)
4. И здесь уже после запуска скрипта задать время в секундах, после которого скрипт бы сработал - дав таким образом SoulSeek'у загрузиться полностью.

Поскольку, если в ярлыке указать сворачивать в значок, то он просто свернётся на панель задач, в отличии например от Total Commander'а, который нормально при таких действиях с ярлыком сворачивается в трей после запуска...

И кстати, из приведённого скрипта, я могу понять, что он с начала запускает приложение, а затем уже сворачивает его, верно?
Можно ли задать разворачивание на весь экран, либо сразу, либо после запуска?

Creat0R
21-12-2008, 12:15
не работает как надо ,Не важно куда я нажимаю мышкой на экране ,иконка закривается »
Я уже написал, что тестировать скрипт вслепую не умею (пока?). Выложите картинку с которой скрипт будет работать (хотябы отображаться на экране).

shyra1976
21-12-2008, 12:33
Dobavil

Creat0R
21-12-2008, 13:09
shyra1976,
У меня почему то удаётся это сделать только по двойному щелчку (можно конечно избавиться от перетаскивания иконки, но я так понял оно тоже нужно?)...

#NoTrayIcon
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>
;

Global Const $WM_LBUTTONDOWN = 0x0201
Global Const $AC_SRC_ALPHA = 1
Global $launchDir = @DesktopDir, $GUI

Global $iExitLoop = False

$temp = @ScriptDir & "\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)
WinSetOnTop($GUI, "", 1)

GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
GUIRegisterMsg($WM_LBUTTONUP, "WM_LBUTTONUP")
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED")

GUISetState()

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

If $iExitLoop Then ExitLoop
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

Exit
EndFunc ;==>Transp_PNG

Func CancelPressed()
Exit
EndFunc ;==>CancelPressed

; Handle the WM_LBUTTONDOWN for the layered window so it can be dragged by clicking anywhere on the image.
Func WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
If BitAND(WinGetState($hWnd), 32) Then Return $GUI_RUNDEFMSG
DllCall("user32.dll", "long", "SendMessage", "hwnd", $hWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0)
EndFunc ;==>WM_LBUTTONDOWN

Func WM_LBUTTONUP($hWnd, $iMsg, $wParam, $lParam)
$iExitLoop = True
EndFunc ;==>WM_LBUTTONUP

Func WM_WINDOWPOSCHANGED($hWnd, $iMsg, $wParam, $lParam)
$iExitLoop = False
EndFunc ;==>WM_WINDOWPOSCHANGED

; 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

shyra1976
21-12-2008, 13:54
SPASIBO, YRA zarabotalo
I eshe ,Kak ti pishesh kod v foryme ,Chto on tak krasivo polychaetsia?

ganselo
21-12-2008, 23:18
Можно ли как нибуть сделать так, чтобы откомпиленный скрипт не палился в Диспетчере задач? и если да, то как?

Maza Faka
22-12-2008, 06:49
Kak ti pishesh kod v foryme ,Chto on tak krasivo polychaetsia? »
Надеюсь что уважаемый Creat0R не будет возражать, если я выложу ссылку на его замечательный скрипт ;)
скачать Au3ToPost 1.8 (http://creator-lab.ucoz.ru/load/3-1-0-18)

shyra1976
22-12-2008, 09:18
;~ #include <GUIConstants.au3>
;~ -------------------------------------------------------
; Description :
; Written by : Alex Pougach
; Date : 22/12/2008
;
; With help of Igal Bravshtein and Creat0R
; --------------------------------------------------------

#include-once

; Transp_PNG( $temp , x , y),$temp = "E:\VBA\AutoIt\GUI\2.png"
; $temp- Doroga k file
; x - prozrachnost
; y- Plavnost poiavleniia

#NoTrayIcon
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>

Global Const $WM_LBUTTONDOWN = 0x0201
Global Const $WM_LBUTTONUP = 0x0202
Global Const $ULW_ALPHA = 2
Global Const $AC_SRC_ALPHA = 1
Global $launchDir = @DesktopDir, $GUI

Global $iExitLoop = False

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("", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
WinSetOnTop($GUI, "", 1)

GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
GUIRegisterMsg($WM_LBUTTONUP, "WM_LBUTTONUP")
GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED")

GUISetState()

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

If $iExitLoop Then ExitLoop
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

; Handle the WM_LBUTTONDOWN for the layered window so it can be dragged by clicking anywhere on the image.
Func WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
If BitAND(WinGetState($hWnd), 32) Then Return $GUI_RUNDEFMSG
DllCall("user32.dll", "long", "SendMessage", "hwnd", $hWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0)
EndFunc ;==>WM_LBUTTONDOWN

Func WM_LBUTTONUP($hWnd, $iMsg, $wParam, $lParam)
$iExitLoop = True
EndFunc ;==>WM_LBUTTONUP

Func WM_WINDOWPOSCHANGED($hWnd, $iMsg, $wParam, $lParam)
$iExitLoop = False
EndFunc ;==>WM_WINDOWPOSCHANGED

; 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





Мужыки спасибо
Получилось вот так :


$temp = @ScriptDir & "\1.png"
Transp_PNG($temp,x,y) ;-vizov

где :

$temp - дорога к file ($temp = @ScriptDir & "\1.png")
x - прозрачность
y - плавностьпоявления

DobroeZlo
22-12-2008, 15:11
Привет.
Подскажите как определить имя диска, в который вставлена флешка.

Creat0R
22-12-2008, 15:39
как определить имя диска, в который вставлена флешка »
Если скрипт находится на этой флэшке, тогда так:


$sDrive = StringLeft(@ScriptDir, 2) & "\"
ConsoleWrite($sDrive & @CRLF)

D_Master
22-12-2008, 17:55
Я как понял, здесь не только о скриптах для автоустановки приложений речь идет, можно я тоже поинтересуюсь? :)
Сразу предупреждаю, что в AutoIt'e полный нуб :)
Так вот, хотелось бы проверить значения ключей реестра и целого раздела. Но не получается сделать следующее:
1. Проверить, собственно, полностью раздел на наличие каких-либо ключей;
2. Отобразить все проверенные значения за раз.

Единственное, что сделал (по мануалу :)):
$key = RegRead ( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon", "Userinit" )
MsgBox(64, "Параметр Userinit:", $key)
$key2 = RegRead ( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon", "Shell" )
MsgBox(64, "Параметр Shell:", $key2)
$key3 = RegRead ( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon", "UIHost" )
MsgBox(64, "Параметр UIHost:", $key3)
Не ахти конечно... :)

Часто сталкиваюсь с завирусованными машинами, хотелось бы иметь скриптик, который будет отображать наиболее используемые вирусам ключи. Плюс всю автозагрузку (вот он - тот случай, где надо узнать все параметры раздела. Но только текущего раздела, без подразделов).
Если кто поможет, буду рад :)

Creat0R
22-12-2008, 19:03
D_Master, Я выкладывал библиотеку для работы с реестером (http://creator-lab.ucoz.ru/load/3-1-0-49), в ней вроде есть то что тебе нужно.

D_Master
22-12-2008, 19:10
Creat0R, было бы просто здорово, если бы вы примерно объяснили бы, как с ней работать :) А то я аж ужаснулся как код увидел :)

FlatX007
22-12-2008, 20:07
Это элемент массива.
Цитата FlatX007:если можно объясните с начала скрипта. »
Код:
;Получаем в массив все съёмные носители (USB-флэшки, Floppy-диски и т.п.)
...
;и показываем найденые устройства ($i тут это элемент в массиве, от 1-ого до найденного числа устройств -> $var[0])
For $i = 1 to $var[0]
MsgBox(4096,"Drive " & $i, $var[$i])
Next
EndIf »


Не до меня всё равно не доходит малец :) откуда берётся буква диска в окне сообщения MsgBox(4096,"Drive " & $i, $var[$i]) водит взаблуждение вот эта запись ... & $i, $var[$i], что она означает и откуда что берётся ??

p10k
22-12-2008, 21:31
Подскажите,как переделать питоновский скрипт отсылающий некоторые данные на некоторый УРЛ


#!/usr/bin/python
import sys
USER = 'login'
PASS = 'pass'
LOGIN_URL = "www.URL.com/login?..."

import urllib2
from urllib import urlencode
auth_data = {'username': USER, 'password': PASS}
bot = urllib2.build_opener()
answer = bot.open(LOGIN_URL, urlencode(auth_data))

Creat0R
22-12-2008, 21:50
как с ней работать »
Для чтения ветки реестра (автозапуск програм) можно так:

$aKeysListArr = _RegReadKeyValueToArray("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 1)

If Not @error Then
For $i = 1 To $aKeysListArr[0]
ConsoleWrite("Текущее имя ключа: " & $aKeysListArr[$i] & @CRLF)
Next
EndIf

откуда берётся буква диска в окне сообщения »
С массива, это элемент массива.

водит взаблуждение вот эта запись ... & $i, $var[$i], что она означает и откуда что берётся ?? »
$i это текущее число элемента (мы ведь в цикле проходим массив), а $var[$i] это значение в текущем элементе (массива). Т.е $Var это массив :)

Может ещё стоило бы заглянуть в справку (в русскую), там вроде понятно описывается работа с массивами.

FlatX007
22-12-2008, 23:10
я из русской справки это взял!

Я знаю что такое массив и цикл ... емаё :) откуда берётся буква в окне сообщения ... почему именно написание такое MsgBox(4096,"Drive " & $i, $var[$i]) .... а не вот такое MsgBox(4096,"Drive ", $var)
Ну подробно пожалуста именно эту строку ... я всю голову сломал...

Или проще подскажи как зделать раскрывающийся список [ GUICtrlCreateCombo ] в GUI окне
и чтоб в этом списке отображались Флешки , если флешки 2 то сопственно 2 пункта с буквой устройства.
Вот чего я хотел добится !

Creat0R
22-12-2008, 23:40
Я знаю что такое массив »
Из твоих слов далее, мне кажется что ты заблуждаешься.

почему именно написание такое MsgBox(4096,"Drive " & $i, $var[$i]) .... а не вот такое MsgBox(4096,"Drive ", $var) »
Потому что в первом случае в заголовке отображается текущий элемент (ячейка) массива, а само значение нужно считывать с этой ячейки ([$i] это и есть ячейка/элемент).

Я не знаю как подругому объяснить работу массивов :idontnow: .

как зделать раскрывающийся список [ GUICtrlCreateCombo ] в GUI окне
и чтоб в этом списке отображались Флешки »

$Gui = GUICreate("Removable Drives List", 350, 120)

GUICtrlCreateLabel("Removable Drives:", 20, 30)
$Combo = GUICtrlCreateCombo("", 20, 50, 310, 200)

$aDrivesArr = DriveGetDrive("Removable")
$sDrivesList = ""

For $i = 1 To UBound($aDrivesArr)-1
If $aDrivesArr[$i] = "a:" Then ContinueLoop

$sDrivesList &= StringUpper($aDrivesArr[$i]) & "\"
If $i < $aDrivesArr[0] Then $sDrivesList &= "|"
Next

GUICtrlSetData($Combo, $sDrivesList)

GUISetState()

While 1
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEnd

Maza Faka
23-12-2008, 07:11
Подскажите,как переделать питоновский скрипт отсылающий некоторые данные на некоторый УРЛ »
Смотри в справке _IE_* функции




© OSzone.net 2001-2012