Jump to content
СофтФорум - всё о компьютерах и не только

AutoHotKey - скриптовый язык программирования


Recommended Posts

Не большой скрипт который может упростить жизнь тем кто использует антивирус McAfee VSE ASE 8.8

; Отключить иконку в трее

#NoTrayIcon
; Скрипт не выгружается
#Persistent
; Запрет повторного запуска
#SingleInstance

mcVSE := "C:\Program Files (x86)\McAfee\VirusScan Enterprise\"
mcCFW := "C:\Program Files (x86)\McAfee\VirusScan Enterprise\Common Framework\"
WinMcAfee := "Консоль VirusScan"
mcConsol := "mcconsol.exe"
mcKey1 := "/NOSPLAS"

Hotkey, ^+F12, VseKeyOnOff, On ; Ctrl+Shift+F12 - On/Off клавиш
Hotkey, ^#F12, VseKeyExit, On ; Ctrl+Win+F12 - завершить/выгрузить скрипт
gosub lVseKeyON
fKeysVSE:=true
vMsgOptionsDg :=4+4096+32 ;Yes/No button + System Modal (always on top) + Icon Question
vMsgOptionsInfo :=0+4096+64 ;only an OK button + System Modal (always on top) + Icon Asterisk (info)
msgbox, % vMsgOptionsInfo, Switching McAfee VSE Keys, Скрипт клавиатурных вызовов `n`n Старотвал и работает, 2
return

VseKeyExit:
msgbox, % vMsgOptionsInfo, Switching McAfee VSE Keys, Скрипт клавиатурных вызовов `n`n Завершил работу, 3
ExitApp

VseKeyOnOff:
gosub lQuery
if (fKeysVSE)
Gosub lVseKeyON
else
Gosub lVseKeyOFF
return

lQuery:
if (!fKeysVSE)
{
msgbox, % vMsgOptionsDg, Switching McAfee VSE Keys, McAfee VSE клавиши = OFF `n `n ВКЛючить McAfee VSE клавиши? ,15
IfMsgBox, No
return
else
fKeysVSE := true
}
else
{
msgbox, % vMsgOptionsDg, Switching McAfee VSE Keys, McAfee VSE клавиши = ON `n `n ВЫКЛючить McAfee VSE клавиши? ,15
IfMsgBox, No
return
else
fKeysVSE := false
}
return

lVseKeyON:
Hotkey, LWin & F5, vseOpenCon, On
Hotkey, LCtrl & F5, vseStopScan, On
Hotkey, LWin & F6, vseOnAccessScanLog, On
Hotkey, LCtrl & F6, vseAccessProtectionLog, On
Hotkey, LWin & F7, vseScanANDProtectON, On
Hotkey, LCtrl & F7, vseScanANDProtectOFF, On
return

lVseKeyOFF:
Hotkey, LWin & F5, vseOpenCon, Off
Hotkey, LCtrl & F5, vseStopScan, Off
Hotkey, LWin & F6, vseOnAccessScanLog, Off
Hotkey, LCtrl & F6, vseAccessProtectionLog, Off
Hotkey, LWin & F7, vseScanANDProtectON, Off
Hotkey, LCtrl & F7, vseScanANDProtectOFF, Off
return

;==========McAfee==============
;-----Открыть/Закрыть консоль
vseOpenCon:
if (fnWinClose(WinMcAfee))
return
Run, %mcConsol% %mcKey1%, %mcVSE%
return

;-----Остановить целевое сканирование
vseStopScan:
while (fnWinClose(WinMcAfee))
sleep 500
sleep 500
Run, %mcConsol% %mcKey1%, %mcVSE%
WinWait, %WinMcAfee%
WinShow
sleep 50
SendPlay {End}
sleep 50
SendPlay {Up}
sleep 50
SendPlay {F4}
sleep 50
WinClose
return

;-----Показать журнал сканирования при обращении к файлу
vseOnAccessScanLog:
while (fnWinClose(WinMcAfee))
sleep 500
sleep 500
Run, %mcConsol% %mcKey1%, %mcVSE%
WinWait, %WinMcAfee%
WinShow
sleep 50
SendPlay {Home}
sleep 50
SendPlay {Down 3}
sleep 50
SendPlay !af
sleep 50
WinClose
sleep 50
SendPlay ^{End} ; в конец журнала
sleep 50
return

;-----Показать журнал защиты доступа
vseAccessProtectionLog:
while (fnWinClose(WinMcAfee))
sleep 500
sleep 500
Run, %mcConsol% %mcKey1%, %mcVSE%
WinWait, %WinMcAfee%
WinShow
sleep 50
SendPlay {Home}
sleep 50
SendPlay !ae
sleep 50
WinClose
sleep 50
SendPlay ^{End} ; в конец журнала
sleep 50
return

;-----Включить Защиту длоступа и Сканирование при обращении к файлу
vseScanANDProtectON:
while (fnWinClose(WinMcAfee))
sleep 500
sleep 500
Run, %mcConsol% %mcKey1%, %mcVSE%
WinWait, %WinMcAfee%
WinShow
;vseProtectON
sleep 50
SendPlay {Home}
SendPlay {F7}
sleep 500
;vseScanON
SendPlay {Down 3}
sleep 50
SendPlay {F7}
sleep 50
WinClose
sleep 500
return


;-----Выключить Защиту длоступа и Сканирование при обращении к файлу
;Ctrl+F7::
vseScanANDProtectOFF:
while (fnWinClose(WinMcAfee))
sleep 500
sleep 500
Run, %mcConsol% %mcKey1%, %mcVSE%
WinWait, %WinMcAfee%
WinShow
;vseProtectON
sleep 50
SendPlay {Home}
SendPlay {F4}
sleep 500
;vseScanOFF
SendPlay {Down 3}
sleep 50
SendPlay {F4}
sleep 50
WinClose
sleep 500
return
;==========McAfee==============

;--- Закрытие окна приложения, если оно существует
fnWinClose(vWin)
{
SetTitleMatchMode, 2
IfWinExist, %vWin%
{
WinClose
return true
}
return false

}

 

И откомпилированный вариант, который работает автономно -   McAfeeHotKeys_32_64.zip

Описание и подробности описаны в  http://softboard.ru/topic/34736-mcafee/page-4#entry598478

McAfeeHotKeys_32_64.zip

Edited by Indomito
Link to comment
Share on other sites

Скрипт для отключения/подключения к интернету или локальной сети, он использует команду netsh она актуальна для тех у кого подключение через модем-роутер в режиме Router, а не в режиме Bridge.

;-----Инициализация

; Скрипт не выгружается

#Persistent

; Запрет повторного запуска

#SingleInstance

;--Escape-последовательности как константы для MsgBox, %

cEscCR := "`r"

cEscLF := "`n"

cEscTab := "`t"

cEscSps := " "

cEscPrc := "`%"

cEscQts := """"

;+++++++++++++++++Константы функций вывода окна MsgBox+++++++++++++++++++++++++++++++++++++++++

сMsgOptionsEr :=0+8192+16 ;only an OK button + Task Modal + Icon Hand (stop/error)

сMsgOptionsOK :=0+8192+48 ;only an OK button + Task Modal + Icon Exclamation

сMsgOptionsDg :=4+8192+32 ;Yes/No button + Task Modal + Icon Question

сMsgOptionsInfo :=4+8192+64 ;Yes/No button + Task Modal + Icon Asterisk (info)

;+++++++++++++++++Переменные и константы для вызова консоли в контексте NetSh+++++++

cConsole := "cmd.exe"

cNameNet := "Internet"

cNetsh := "netsh interface ipv4 set address" " " """"cEscQts cNameNet cEscQts cEscSps

cNetON := cNetsh "dhcp"

cNetOFF := cNetsh "static 1.0.0.0"

vInternetPID := false

arOut:=arInternet:=Object()

NetName :=1, NetDHCP :=2, NetIP :=3, NetGate :=4, NetState:=5, NetST:=1, FindKey :=2

Internet := [["","интерфейса"], ["" ,"включен:"], ["" ,"IP-адрес"], ["" ,"шлюз:"], [false,false]]

Hotkey LCtrl & ESC, lInternet

return

;=========Вкючить/Отключить доступ в Интернет

lInternet:

CmdLine := "netsh interface ipv4 show addresses"

RunCon(CmdLine, 0, Output)

if (fnInternetState(fnParseStdIn(Output)))

{

RunCon(cNetOFF, 0, Output)

sleep 250

msgbox % сMsgOptionsEr, Сеть и Интернет, Доступ в Интернет = OFF, 3

}

else

{

RunCon(cNetON, 0, Output)

sleep 2500

msgbox % сMsgOptionsOK, Сеть и Интернет, Доступ в Интернет = ON, 3

}

return

; ======= Определение параметров и статуса Интернета ======

fnInternetState(arOut)

{

global Internet, NetName, NetDHCP, NetIP, NetGate, NetState, NetST, FindKey

k:=1

for i, j in arOut

{

while(Internet[k,FindKey])

{

vFindKey:=Internet[k,FindKey]

l := StrLen(vFindKey)

vPos:=InStr(j, vFindKey)

if (vPos)

Internet[k,NetName]:=vStr0:=SubStr(j, vPos+l), k++

Break

}

}

Internet[NetState,NetST]:= false

if (Internet[NetDHCP,NetST]="Да")

Internet[NetState,NetST]:= true

return Internet[NetState,NetST]

}

; ======= Постпарсер RunCon ===============================

fnParseStdIn(StdIn)

{

Arr := [], i := 0

Loop, parse, StdIn, `r`n

{

Row := RegExReplace(A_LoopField, """| |" A_Tab)

If Row is space

Continue

Arr[++i] := Row

}

Return Arr

}

; ======= Функция RunCon ==================================

RunCon(CmdLine, Input, ByRef Output)

{

static BufSizeChar := 1024, hParent := 0

static Show := 0, Flags := 0x101 ; STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW

static Buf, BufSizeByte, ProcessInfo, StartupInfo, PipeAttribs

static piSize, siSize, paSize, flOffset, shOffset, ihOffset

static inOffset, outOffset, errOffset, thrOffset

If (!hParent) {

BufSizeByte := A_IsUnicode ? BufSizeChar * 2 : BufSizeChar

If (A_PtrSize = 8) {

piSize := 24, siSize := 104, paSize = 24

flOffset := 60, shOffset := 64, ihOffset := 16

inOffset := 80, outOffset := 88, errOffset := 96

thrOffset := 8

}

Else {

piSize := 16, siSize := 68, paSize = 12

flOffset := 44, shOffset := 48, ihOffset := 8

inOffset := 56, outOffset := 60, errOffset := 64

thrOffset := 4

}

VarSetCapacity(Buf, BufSizeByte, 0), VarSetCapacity(ProcessInfo, piSize, 0)

VarSetCapacity(StartupInfo, siSize, 0), VarSetCapacity(PipeAttribs, paSize, 0)

NumPut(siSize, StartupInfo, 0, "uint"), NumPut(Flags, StartupInfo, flOffset, "uint")

NumPut(Show, StartupInfo, shOffset, "ushort")

NumPut(paSize, PipeAttribs, 0, "uint"), NumPut(1, PipeAttribs, ihOffset, "int")

hParent := DllCall("GetCurrentProcess", "ptr")

}

DllCall("CreatePipe", "ptr *", hRead1_tmp, "ptr *", hWrite2

, "ptr", &PipeAttribs, "uint", 0)

DllCall("CreatePipe", "ptr *", hRead2, "ptr *", hWrite1_tmp

, "ptr", &PipeAttribs, "uint", 0)

NumPut(hRead2, StartupInfo, inOffset, "ptr")

NumPut(hWrite2, StartupInfo, outOffset, "ptr")

NumPut(hWrite2, StartupInfo, errOffset, "ptr")

DllCall("DuplicateHandle", "ptr", hParent, "ptr", hRead1_tmp

, "ptr", hParent, "ptr *", hRead1

, "uint", 0, "uint", 0

, "uint", 2) ; DUPLICATE_SAME_ACCESS

DllCall("CloseHandle", "ptr", hRead1_tmp)

DllCall("DuplicateHandle", "ptr", hParent, "ptr", hWrite1_tmp

, "ptr", hParent, "ptr *", hWrite1

, "uint", 0, "uint", 0

, "uint", 2)

DllCall("CloseHandle", "ptr", hWrite1_tmp)

DllCall("ExpandEnvironmentStrings", "str", CmdLine, "str", Buf, "uint", BufSizeChar)

CmdLine := Buf

Ret := DllCall("CreateProcess", "ptr", 0, "str", CmdLine, "ptr", 0, "ptr", 0

, "uint", 1, "uint", 0, "ptr", 0, "ptr", 0

, "ptr", &StartupInfo, "ptr", &ProcessInfo)

If (!Ret) {

MsgBox,, %A_ThisFunc%, Не удалось создать процесс.

Output := ""

Return 1

}

hChild := NumGet(ProcessInfo, 0, "ptr")

DllCall("CloseHandle", "ptr", NumGet(ProcessInfo, thrOffset, "ptr"))

DllCall("CloseHandle", "ptr", hRead2)

DllCall("CloseHandle", "ptr", hWrite2)

If (Input) {

InLen := StrLen(Input) + 2

VarSetCapacity(InBuf, InLen, 0)

StrPut(Input . "`r`n", &InBuf, "cp866")

DllCall("WriteFile", "ptr", hWrite1, "ptr", &InBuf, "uint", InLen

, "uint *", BytesWritten, "uint", 0)

}

DllCall("CloseHandle", "ptr", hWrite1)

Output := ""

Loop {

If not DllCall("ReadFile", "ptr", hRead1, "ptr", &Buf, "uint", BufSizeByte

, "uint *", BytesRead, "uint", 0)

Break

NumPut(0, Buf, BytesRead, "Char")

Output .= StrGet(&Buf, "cp866")

}

DllCall("CloseHandle", "ptr", hRead1)

DllCall("GetExitCodeProcess", "ptr", hChild, "int *", ExitCode)

DllCall("CloseHandle", "ptr", hChild)

Return ExitCode

}

Edited by Indomito
Link to comment
Share on other sites

 Indomito привет спс что ответил .В этих скриптах не силен) конечно очень буду рад если поможешь.А задачи такие закинуть удочку, ждать поклевки ,чтобы сома подсекла и вытащила потом опять закинула)))если ты про эти задачи . а про пилот пишу проста я его про него только слышал.

Link to comment
Share on other sites

@Леха Н,  не за что :)

Я могу написать, но мне нужна точная постановка задачи, т.к. придётся имитировать все твои действия с клавиатурой и мышкой.

Edited by Indomito
Link to comment
Share on other sites

извини не так написал без пробела и с маленькой буквы))  [censored]

i

Уведомление:
форум создан для общения, а подобные контакты запрещены правилами

Пишите хотя бы свои просьбы в личку.

THE OLD VERMIN

Link to comment
Share on other sites

Хорошо, контакт есть, минут через 10-20 позвоню, а ты пока подумай.

По сути это же просто - повтор/автоматизация твоих действий и не более того.

Edited by Indomito
Link to comment
Share on other sites

  • 1 month later...

Исправленный и улучшенный скрипт из поста #27

Текст скрипта

;!!!!!---Только для интерфейса DHCP---!!!!
; Константа cNameNet должна содержать имя сетевого интерфейса!!!!
; Остальное лучше не менять, кроме путей.

;==========Общие пути===========
ProgSysPath32 := "C:\Program Files (x86)\"
ProgSysPath64 := "C:\Program Files\"
WindowsDir := "C:\Windows\"

;--Пути к AHK
PathAhkProg := ProgSysPath64 "AutoHotkey\"
PathAhk := "C:\AHK\"
PathAhkInclude := PathAhk "Include\"
PathAhkIcon := PathAhk "Icon\"

;--Escape-последовательности как константы для MsgBox, %
cEscCR := "`r"
cEscLF := "`n"
cEscTab := "`t"
cEscSps := " "
cEscPrc := "`%"
cEscQts := """"

cAscCR := Asc(cEscCR)
cAscLF := Asc(cEscLF)
cAscTab := Asc(cEscTab)
cAscSps := Asc(cEscSps)
cAscPrc := Asc(cEscPrc)
cAscQts := Asc(cEscQts)

cEsc2LF := cEscLF cEscLF
cEscCRLF := cEscCR cEscLF

;+++++++++++++++++Константы функций вывода окна MsgBox+++++++++++++++++++++++++++++++++++++++++
сMsgOptionsEr :=0+8192+16 ;only an OK button + Task Modal + Icon Hand (stop/error)
сMsgOptionsOK :=0+8192+48 ;only an OK button + Task Modal + Icon Exclamation
сMsgOptionsDg :=4+8192+32 ;Yes/No button + Task Modal + Icon Question
сMsgOptionsInfo :=4+8192+64 ;Yes/No button + Task Modal + Icon Asterisk (info)
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;+++++++++++++++++Переменные и константы для вызова консоли в контексте NetSh+++++++
cConsole := "cmd.exe"
cNameNet := "Internet"
cNetsh := "netsh interface ipv4 set address" cEscSps cEscQts cNameNet cEscQts cEscSps
cNetON := cNetsh "dhcp"
cNetOFF := cNetsh "static 1.0.0.0"
vNetOnOffHlp := "ON"
vInternetPID := false
arOut:=arInternet:=Object()
NetName :=1, NetDHCP :=2, NetIP :=3, NetGate :=4, NetState:=5, NetST:=1, FindKey :=2
Internet := [["","интерфейса" cNameNet], ["" ,"включен:"], ["" ,"IP-адрес"], ["" ,"шлюз:"], [false,false]]
;+++++++++++++++++

Gosub lInternet
return

;=========Вкючить/Отключить доступ в Интернет
lInternet:
CmdLine := "netsh interface ipv4 show addresses"
RunCon(CmdLine, 0, Output)
;ret := RunCon(CmdLine, 0, Output)
if (fnInternetState(fnParseStdIn(Output)))
{
RunCon(cNetOFF, 0, Output)
;Run, %cNetOFF% ,, Hide, %vInternetPID% ;netsh interface ipv4 set address "Internet" static 1.0.0.0
sleep 2500
msgbox % сMsgOptionsEr, Сеть и Интернет, Доступ в Интернет = OFF, 3
;vNetOnOffHlp := cOffHK
}
else
{
RunCon(cNetON, 0, Output)
;Run, %cNetON% ,, Hide, %vInternetPID% ;netsh interface ipv4 set address "Internet" dhcp
sleep 2500
msgbox % сMsgOptionsOK, Сеть и Интернет, Доступ в Интернет = ON, 3
;vNetOnOffHlp := cOnHK
}
return
;=============================================

; ======= Определение параметров и статуса Интернета ======
fnInternetState(arOut)
{
;global Internet, NetName :=1, NetDHCP :=2, NetIP :=3, NetGate :=4, NetState:=5, NetST:=1, FindKey :=2
global Internet, NetName, NetDHCP, NetIP, NetGate, NetState, NetST, FindKey
k:=1
for i, j in arOut
{
while(Internet[k,FindKey])
{
vFindKey:=Internet[k,FindKey]
l := StrLen(vFindKey)
vPos:=InStr(j, vFindKey)
if (vPos)
Internet[k,NetName]:=vStr0:=SubStr(j, vPos+l), k++
Break
}
}
Internet[NetState,NetST]:= false
if (Internet[NetDHCP,NetST]="Да")
Internet[NetState,NetST]:= true
return Internet[NetState,NetST]
}


; ======= Постпарсер RunCon ===============================
fnParseStdIn(StdIn)
{
Arr := [], i := 0
Loop, parse, StdIn, `r`n
{
Row := RegExReplace(A_LoopField, """| |" A_Tab)
If Row is space
Continue
Arr[++i] := Row
}
Return Arr
}

; ======= Функция RunCon ==================================

RunCon(CmdLine, Input, ByRef Output)
{
static BufSizeChar := 1024, hParent := 0
static Show := 0, Flags := 0x101 ; STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW
static Buf, BufSizeByte, ProcessInfo, StartupInfo, PipeAttribs
static piSize, siSize, paSize, flOffset, shOffset, ihOffset
static inOffset, outOffset, errOffset, thrOffset
If (!hParent) {
BufSizeByte := A_IsUnicode ? BufSizeChar * 2 : BufSizeChar
If (A_PtrSize = 8) {
piSize := 24, siSize := 104, paSize = 24
flOffset := 60, shOffset := 64, ihOffset := 16
inOffset := 80, outOffset := 88, errOffset := 96
thrOffset := 8
}
Else {
piSize := 16, siSize := 68, paSize = 12
flOffset := 44, shOffset := 48, ihOffset := 8
inOffset := 56, outOffset := 60, errOffset := 64
thrOffset := 4
}
VarSetCapacity(Buf, BufSizeByte, 0), VarSetCapacity(ProcessInfo, piSize, 0)
VarSetCapacity(StartupInfo, siSize, 0), VarSetCapacity(PipeAttribs, paSize, 0)
NumPut(siSize, StartupInfo, 0, "uint"), NumPut(Flags, StartupInfo, flOffset, "uint")
NumPut(Show, StartupInfo, shOffset, "ushort")
NumPut(paSize, PipeAttribs, 0, "uint"), NumPut(1, PipeAttribs, ihOffset, "int")
hParent := DllCall("GetCurrentProcess", "ptr")
}
DllCall("CreatePipe", "ptr *", hRead1_tmp, "ptr *", hWrite2
, "ptr", &PipeAttribs, "uint", 0)
DllCall("CreatePipe", "ptr *", hRead2, "ptr *", hWrite1_tmp
, "ptr", &PipeAttribs, "uint", 0)

NumPut(hRead2, StartupInfo, inOffset, "ptr")
NumPut(hWrite2, StartupInfo, outOffset, "ptr")
NumPut(hWrite2, StartupInfo, errOffset, "ptr")

DllCall("DuplicateHandle", "ptr", hParent, "ptr", hRead1_tmp
, "ptr", hParent, "ptr *", hRead1
, "uint", 0, "uint", 0
, "uint", 2) ; DUPLICATE_SAME_ACCESS
DllCall("CloseHandle", "ptr", hRead1_tmp)
DllCall("DuplicateHandle", "ptr", hParent, "ptr", hWrite1_tmp
, "ptr", hParent, "ptr *", hWrite1
, "uint", 0, "uint", 0
, "uint", 2)
DllCall("CloseHandle", "ptr", hWrite1_tmp)

DllCall("ExpandEnvironmentStrings", "str", CmdLine, "str", Buf, "uint", BufSizeChar)
CmdLine := Buf
Ret := DllCall("CreateProcess", "ptr", 0, "str", CmdLine, "ptr", 0, "ptr", 0
, "uint", 1, "uint", 0, "ptr", 0, "ptr", 0
, "ptr", &StartupInfo, "ptr", &ProcessInfo)
If (!Ret) {
MsgBox,, %A_ThisFunc%, Не удалось создать процесс.
Output := ""
Return 1
}
hChild := NumGet(ProcessInfo, 0, "ptr")
DllCall("CloseHandle", "ptr", NumGet(ProcessInfo, thrOffset, "ptr"))
DllCall("CloseHandle", "ptr", hRead2)
DllCall("CloseHandle", "ptr", hWrite2)
If (Input) {
InLen := StrLen(Input) + 2
VarSetCapacity(InBuf, InLen, 0)
StrPut(Input . "`r`n", &InBuf, "cp866")
DllCall("WriteFile", "ptr", hWrite1, "ptr", &InBuf, "uint", InLen
, "uint *", BytesWritten, "uint", 0)
}
DllCall("CloseHandle", "ptr", hWrite1)
Output := ""
Loop {
If not DllCall("ReadFile", "ptr", hRead1, "ptr", &Buf, "uint", BufSizeByte
, "uint *", BytesRead, "uint", 0)
Break
NumPut(0, Buf, BytesRead, "Char")
Output .= StrGet(&Buf, "cp866")
}
DllCall("CloseHandle", "ptr", hRead1)
DllCall("GetExitCodeProcess", "ptr", hChild, "int *", ExitCode)
DllCall("CloseHandle", "ptr", hChild)
Return ExitCode
}

Работает в режимах x32 и x64

 

Все его действия сводятся к выполнению двух BAT-файлов

№1 Включение - netsh interface ipv4 set address "Internet" dhcp

№2 Выключение - netsh interface ipv4 set address "Internet"  static 1.0.0.0

 

Но скрипт выполняет проверку и не требуется проверять текущий статус подключения, он сам его переключит в противоположное состояние, а если имя подключения не совпадает, т.е. не Internet то он будет его только включать, т.е. эквивалент первого BAT-файла

 

В архиве две версии x32 и x64 exe, два батника и исходник, иконка не прилагается - она стандартная, т.е. из Windows. pack.zip

pack.zip

Link to comment
Share on other sites

Доброго времени суток уважаемые! Нужен скрипт который автоматически нажимает клавиши с определенной последовательностью  и определенными промежутками времени после их нажатия. Как это должно выглядеть примерно:  после нажатия сочетания клавиш Rctrl + Tab запускался скрипт, нажимается кнопка 2 с значением 2 после ожидания  2х секунд действие повторяется пять раз, после чего нужно что бы на жалась кнопка F2  , после клавиша тильда(обычно отвечает за открытие консоли в играх)  нужно что бы она на жалась 7 раз с промежутками времени в пол секунды после чего  весь скрипт нужно повторять до тех пор пока не нажимаеться повторно Rctrl+Tab (сочетание отвечающие за отключение скрипта) + еще нужно что бы на протяжении всего скрипта нажималась кнопка F1 с периодичностью 3 минуты. 

Жду ваших вопросов по этому поводу если что то будет не понятно постараюсь уточнить ;3 P.S. это мой первый вопрос не судите строго) :angel_innocent:

Link to comment
Share on other sites

@xepomag, прочту вдумчиво что ты написал и сделаю скрипт, только один вопрос - Какие именно клавиши, так если они скажем NumPad-овски или бувенно-цифровые, то напиши конкретно какие именно, если они имеются в скрипте, то нужно использовать скан-коды.

И вот ещё не очень понятно -

 

нажимается кнопка 2 с значением 2...

что имеется ввиду посылка клавиши "2" или что то иное.

 

P.S. А так вроде всё просто, если сана игра согласится это сделать, т.к. она сетевая - вчерашний скрипт(переключение звука) не перехватывал клавиатуру.

Edited by Indomito
Link to comment
Share on other sites

Имеется ввиду просто цифра 2 то есть не собака и не кавычки) все кнопки в этом скрипте не нумпадовские) еще бы хотел что бы в самом коде были комментарии к основным действиям)  для того что бы я смог самостоятельно его изменять и под другие нужды)

Link to comment
Share on other sites

@xepomag, поясняю

1. Нажатие зависит от статуса клавиатуры - про это я говорил

2. Посылка не зависит, т.е. посылается клавиша как есть.

3. Комментарии будут, но самостаятельная правка, думаю - не получится, т.к. требуется знание AHK

Link to comment
Share on other sites

Дополняю - уточняю.

Скрипт смогу написать только после всех НГ-праздников... "перезруз" на работе(сдача/приёмка/доделка/правка).

Link to comment
Share on other sites

Спасибо;3 за ответ желаю хорошо встретить НГ) после спишимся у меня сейчас нету интернета пока что) ростелеком чет с подключением тянет.

Link to comment
Share on other sites

  • 3 weeks later...

Добавь плиз в скайп: [censored]

 

Хотел посоветоваться насчет одного скрипта - связанно с ImageSearch, а так же с переменными.

 

i

Уведомление:
Внимательно прочитайте первый пост и повторите свою просьбу Александру в личку или на e-mail.

Поверьте, так оно дойдет быстрее.

Edited by THE OLD VERMIN
Link to comment
Share on other sites

  • 1 month later...
  • 9 months later...

Давненько я тут не писал, хотя сам пишу скрипты на AHK.... забыл  - каюсь.

 

Итак

Самое простое но весьма нужное, это очистка рабочего стола

;-----------------------------------------------; "Зачистка" Рабочего Стола от мусора - пишется.;-----------------------------------------------; Отключить иконку в трее - она то по сути не нужна#NoTrayIcon ; Запрет повторного запуска - что бы случайно два раза не кликнуть по иконке/ярлыку#SingleInstance ignore Loop, %A_Desktop%\*.*,, 1   if (A_LoopFileExt <> "lnk")      FileDelete %A_LoopFileFullPath%

Можно чистить не только Рабочий Стол, но и любые папки, правда тогда надо

  1. Заменить переменную %A_Desktop% на конкретный адрес
  2. Изменить условия удаления, т.е. я про эту строчку if (A_LoopFileExt <> "lnk") которая запрещает удалять ярлыки

 

Удачи.

Link to comment
Share on other sites

Чистить какие-то (специфические) папки - это понятно, а что можно вычистить с Рабочего стола? Что там кроме ярлыков-то может быть?

Link to comment
Share on other sites

Теперь более сложное - убиение процессов которые сложно убиваются :mrgreen: (сорри за тавтологию) или же требуют много манипуляций.
 
Вот приблизительный скрипт, т.е. который я использую - ваш может выглядеть иначе.

; Запрет повторного запуска#SingleInstance#Include C:\AHK\AllSystemOS\              ; Устанавливаем путь к файлам скрипта#Include RunCon.ahk                       ; Запуск с консоли сMsg_OkTaskModalInfo  := 4+8192+64 ;Function Yes/No button  + Task Modal + Icon Asterisk(info) сMsg_OkOnLy_TaskModal_Info   :=0+8192+64 ;only an OK button + Task Modal + Icon Asterisk(info) ; Завершаем процессы  titul := "Результат закрытия процессов"   arMain := [["taskkill /F /IM pidgin.exe",""]            ,["taskkill /F /IM uTorrent.exe",""]            ,["taskkill /F /IM thunderbird.exe",""]            ,["taskkill /F /IM Skype.exe",""]                        ,["",""]]              res := "`n`n"  i := 1  While (arMain[i,1])    {      CmdLine := arMain[i,1]      RunCon(CmdLine, 0, Output)      arMain[i,2] := Output  "`n"      res := res  arMain[i,2]      i++    }  MsgBox, % сMsg_OkOnLy_TaskModal_Info, % titul, % res, 5  IfMsgBox, OK    goto lExtlExt:    ExitApp 

По сути он сводится к запуску через консоль taskkill /F /IM Имя_Процесса... но как всегда есть НО ;)
 
Вам потребуется мной же написанный скрипт RunCon.ahk  и его требуется подключить, вот две обязательные строчки

#Include C:\AHK\AllSystemOS\              ; Устанавливаем путь к файлам скрипта#Include RunCon.ahk                       ; Запуск с консоли

Файл RunCon.ahk должен располагаться в пути указанным выше, т.е. C:\AHK\AllSystemOS\ путь может быть любой, но файл должен быть там, иначе ничего не сработает.

 

Файлы в аттаче CloseNetApps.ahk и RunCon.ahk.rar

 

Успехов и с наступающим НГ.

 


P.S. Для любителей посмотреть, я лично не советую - скрипт сложный, даю RunCon.ahk под спойлером

goto leave_RunCon; ======= Определение параметров и статуса Интернета ======fnInternetState(arOut)  {  ;global  Internet, NetName :=1, NetDHCP :=2, NetIP :=3, NetGate :=4, NetState:=5, NetST:=1, FindKey :=2  global  Internet, NetName, NetDHCP, NetIP, NetGate, NetState, NetST, FindKey  k:=1  for i, j in arOut     {     while(Internet[k,FindKey])       {         vFindKey:=Internet[k,FindKey]         l := StrLen(vFindKey)         vPos:=InStr(j, vFindKey)         if (vPos)             Internet[k,NetName]:=vStr0:=SubStr(j, vPos+l), k++         Break       }    }  Internet[NetState,NetST]:= false    if (Internet[NetDHCP,NetST]="Да")         Internet[NetState,NetST]:= true return Internet[NetState,NetST]}; ======= Постпарсер RunCon ===============================fnParseStdIn(StdIn)  {    Arr := [], i := 0    Loop, parse, StdIn, `r`n        {         Row := RegExReplace(A_LoopField, """| |" A_Tab)        If Row is space             Continue        Arr[++i] := Row       }  Return Arr  }; ======= Функция RunCon ==================================RunCon(CmdLine, Input, ByRef Output){    static BufSizeChar := 1024, hParent := 0    static Show := 0, Flags := 0x101  ; STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW    static Buf, BufSizeByte, ProcessInfo, StartupInfo, PipeAttribs    static piSize, siSize, paSize, flOffset, shOffset, ihOffset    static inOffset, outOffset, errOffset, thrOffset    If (!hParent) {        BufSizeByte := A_IsUnicode ? BufSizeChar * 2 : BufSizeChar        If (A_PtrSize = 8) {            piSize := 24, siSize := 104, paSize = 24            flOffset := 60, shOffset := 64, ihOffset := 16            inOffset := 80, outOffset := 88, errOffset := 96            thrOffset := 8        }        Else {            piSize := 16, siSize := 68, paSize = 12            flOffset := 44, shOffset := 48, ihOffset := 8            inOffset := 56, outOffset := 60, errOffset := 64            thrOffset := 4        }        VarSetCapacity(Buf, BufSizeByte, 0),    VarSetCapacity(ProcessInfo, piSize, 0)        VarSetCapacity(StartupInfo, siSize, 0), VarSetCapacity(PipeAttribs, paSize, 0)        NumPut(siSize, StartupInfo, 0, "uint"), NumPut(Flags, StartupInfo, flOffset, "uint")        NumPut(Show, StartupInfo, shOffset, "ushort")        NumPut(paSize, PipeAttribs, 0, "uint"), NumPut(1, PipeAttribs, ihOffset, "int")        hParent := DllCall("GetCurrentProcess", "ptr")    }    DllCall("CreatePipe", "ptr *", hRead1_tmp, "ptr *", hWrite2                        , "ptr", &PipeAttribs, "uint", 0)    DllCall("CreatePipe", "ptr *", hRead2, "ptr *", hWrite1_tmp                        , "ptr", &PipeAttribs, "uint", 0)    NumPut(hRead2,  StartupInfo, inOffset, "ptr")     NumPut(hWrite2, StartupInfo, outOffset, "ptr")    NumPut(hWrite2, StartupInfo, errOffset, "ptr")        DllCall("DuplicateHandle", "ptr", hParent, "ptr", hRead1_tmp                             , "ptr", hParent, "ptr *", hRead1                             , "uint", 0, "uint", 0                             , "uint", 2)    ; DUPLICATE_SAME_ACCESS    DllCall("CloseHandle", "ptr", hRead1_tmp)    DllCall("DuplicateHandle", "ptr", hParent, "ptr", hWrite1_tmp                             , "ptr", hParent, "ptr *", hWrite1                             , "uint", 0, "uint", 0                             , "uint", 2)    DllCall("CloseHandle", "ptr", hWrite1_tmp)        DllCall("ExpandEnvironmentStrings", "str", CmdLine, "str", Buf, "uint", BufSizeChar)    CmdLine := Buf    Ret := DllCall("CreateProcess", "ptr", 0, "str", CmdLine, "ptr", 0, "ptr", 0                                  , "uint", 1, "uint", 0, "ptr", 0, "ptr", 0                                  , "ptr", &StartupInfo, "ptr", &ProcessInfo)    If (!Ret) {        MsgBox,, %A_ThisFunc%, Не удалось создать процесс.        Output := ""        Return 1    }    hChild := NumGet(ProcessInfo, 0, "ptr")    DllCall("CloseHandle", "ptr", NumGet(ProcessInfo, thrOffset, "ptr"))    DllCall("CloseHandle", "ptr", hRead2)    DllCall("CloseHandle", "ptr", hWrite2)    If (Input) {        InLen := StrLen(Input) + 2        VarSetCapacity(InBuf, InLen, 0)        StrPut(Input . "`r`n", &InBuf, "cp866")        DllCall("WriteFile", "ptr", hWrite1, "ptr", &InBuf, "uint", InLen                           , "uint *", BytesWritten, "uint", 0)    }    DllCall("CloseHandle", "ptr", hWrite1)    Output := ""    Loop {        If not DllCall("ReadFile", "ptr", hRead1, "ptr", &Buf, "uint", BufSizeByte                                 , "uint *", BytesRead, "uint", 0)            Break        NumPut(0, Buf, BytesRead, "Char")        Output .= StrGet(&Buf, "cp866")    }    DllCall("CloseHandle", "ptr", hRead1)    DllCall("GetExitCodeProcess", "ptr", hChild, "int *", ExitCode)    DllCall("CloseHandle", "ptr", hChild)    Return ExitCode}leave_RunCon:

 

CloseNetApps.ahk и RunCon.ahk.rar

Edited by Форматцевт
  • Upvote 1
Link to comment
Share on other sites

а что можно вычистить с Рабочего стола? Что там кроме ярлыков-то может быть?

ты не поверишь сколько барахла валяется на WP... да у моей жены, по сути для этого и был написан этот скрипт :mrgreen:
Link to comment
Share on other sites

Поскольку "с младых ногтей" приучен (рассказом о том, почему) не держать на РС ничего, кроме ярлыков - удивляюсь всегда чьему-нибудь захламленному и, натурально, тормозящей машинке... А уж как люди удивляются, когда всё сносится на локальный диск и машинка начинает шустрить...

Link to comment
Share on other sites

  • 3 weeks later...

Приветствую господа,я в ahk составил маленький скрипт

код:
 
 
mbutton::
WinActivate, Такси-ангел SIP телефония
MouseClick, left, 245, 148
return
 
Мне нужно чтоб он кликал туда автоматически без клика,когда на кнопку идёт сигнал(звонок).

Можете мне помочь с скриптом????
Link to comment
Share on other sites

 

Приветствую господа,я в ahk составил маленький скрипт

код:
 
 
mbutton::
WinActivate, Такси-ангел SIP телефония
MouseClick, left, 245, 148
return
 
Мне нужно чтоб он кликал туда автоматически без клика,когда на кнопку идёт сигнал(звонок).

Можете мне помочь с скриптом????

 

Если кому-то нужно объяснить поподробней то можно созвониться в Skype

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.



×
×
  • Create New...