Ru-Board.club
← Вернуться в раздел «Программы»

» AutoHotkey

Автор: villa777
Дата сообщения: 28.02.2014 10:15
Есть скрипт по нажатию СКМ закрывающий программу, окно. Как сделать чтобы он срабатывал только после некоторого удержания СКМ(1-2секунды), а не сразу.

Код: ~MButton::
WinGetClass, Win_Class, A
If ( Win_Class = "Shell_TrayWnd" OR Win_Class = "ProgMan" OR Win_Class = "AltDesk1.x" )
Return
WinClose, ahk_class %Win_Class%
Sleep, 200
Send {TAB}
Sleep, 50
Send {ENTER}
Автор: creature_ws
Дата сообщения: 28.02.2014 11:50
KeyWait
Автор: villa777
Дата сообщения: 28.02.2014 12:21
creature_ws
Для меня это тёмный лес, мне бы знающий сделал что бы работало, а изучать программирование с нуля, уже возраст не тот.
Автор: vadim3sh
Дата сообщения: 01.03.2014 03:45

Код: +^!3::menu, tray, Icon
+^!8::menu, tray, Noicon

MButton::
TimeButtonDown = %A_TickCount%
; Wait for it to be released
Loop
{
Sleep 10
GetKeyState, MButtonState, MButton, P
if MButtonState = U ; Button has been released.
    
{
Send !^{vk56} ; Здесь любая команда на короткое нажатие
exit
}
elapsed = %A_TickCount%
elapsed -= %TimeButtonDown%
if elapsed > 600 ; Настройка задержки
{
WinGetClass, Win_Class, A
If ( Win_Class = "Shell_TrayWnd" OR Win_Class = "ProgMan" OR Win_Class = "AltDesk1.x" )
Return
WinClose, ahk_class %Win_Class%
exit
}
}
return
Автор: villa777
Дата сообщения: 01.03.2014 16:17
vadim3sh
Спасибо за помощь.
Автор: Cryzer
Дата сообщения: 01.03.2014 17:01
Пожалуй, задам ещё один немаловажный вопрос, всё по той же теме. :)
Можно ли определить, что файл(папка) не просто выделен, а находится в режиме переименования?

Зачем нужно: при отключённой автоматической сортировке выделенный ([more=код]
Код: ~LButton::
KeyWait, LButton
MouseGetPos,,,, classNN
`(`(hWnd:=WinActive("ahk_class CabinetWClass"))
And classNN~="DirectUIHWND3|SysListView321")
And WinExp(hWnd)
Return

ShowTip(p1, p2:=700)
{
TrayTip,, % p1
Sleep, p2
TrayTip
}

WinExp(p)
{
Static oShellWindows:=ComObjCreate("Shell.Application").windows

Loop, % oShellWindows.count
If (item:=oShellWindows.item(A_Index-1)).hwnd=p
If (cnt:=(selItems:=item.document.selectedItems).count)=1
ShowTip("selected "((isExist:=FileExist(selItems.item(0).path))~="D"
? "folder":(isExist<>"") ? "file":"other")" ("selItems.item(0).type ")")
Else ShowTip((cnt>1 ? "use single":"no")" selection")
}
Автор: creature_ws
Дата сообщения: 05.03.2014 14:13
villa777,

Код: ~MButton::
KeyWait MButton, T1
if ErrorLevel {
WinGetClass, Win_Class, A
If ( Win_Class = "Shell_TrayWnd" OR Win_Class = "ProgMan" OR Win_Class = "AltDesk1.x" )
Return
WinClose, ahk_class %Win_Class%
Sleep, 200
Send {TAB}
Sleep, 50
Send {ENTER}
}
return
Автор: Cryzer
Дата сообщения: 05.03.2014 18:35
creature_ws, спасибо! Вроде то, что надо!)
Автор: creature_ws
Дата сообщения: 25.03.2014 12:26
источник

Цитата:
Здравствуйте. Хочу прогу написать, не знаю как. Нужно перехватывать слова с клавиатуры(от пробела до пробела) и переставлять буквы в слове, кроме первой и последней.



Код: SetBatchLines -1
#NoEnv

loop {
Input word, v, %A_Space%
wordLen := StrLen(word)
if wordLen <= 3
continue
SendInput % "{bs " (wordLen + 1) "}" ShakeTheWord(word) " "
}

ShakeTheWord(byref word) {
return SubStr(word, 1, 1)
. DllCall("msvcrt\_wcsrev", "Str", SubStr(word, 2, -1), "Str")
. SubStr(word, 0, 1)
}
Автор: dfkfljhy
Дата сообщения: 25.03.2014 13:11
creature_ws
ошибка в 4 строке, компилировать не дает
Автор: creature_ws
Дата сообщения: 25.03.2014 13:18
Вы наверно не разобрались, код приведенный - код для autohotkey, не для autoit. Это две большие разницы.
Автор: dfkfljhy
Дата сообщения: 25.03.2014 13:42
creature_ws
Работает, правда, с небольшими ошибками, когда в конец слова вставить % или ) , он считает это за цифру и из 146% делает 164%, в некоторых случаях почему-то меняет первую или последнюю букву
Автор: creature_ws
Дата сообщения: 25.03.2014 14:21

Цитата:
когда в конец слова вставить % или ) , он считает это за цифру и из 146% делает 164%


Цитата:
Нужно перехватывать слова с клавиатуры(от пробела до пробела)

Слова перехватываются от пробела до пробела, % и ) ничем не отличаются от иных символов не являющихся пробелом.

Цитата:
в некоторых случаях почему-то меняет первую или последнюю букву

без конкретизации "в каких случаях" ничем не помогу.
Автор: oshizelly
Дата сообщения: 26.03.2014 01:13
creature_ws

Цитата:
перехватывать слова с клавиатуры(от пробела до пробела) и переставлять буквы в слове, кроме первой и последней.

О, как интересно. Никогда не приходило в голову, что такое можно сделать при помощи сабжа.
А может моя давняя "мечта" тоже реализуема (иногда очень полезно при работе с документами): надо сделать инверсию 3-х выделенных слов. Допустим, в тексте имеем "Маша ела кашу". Нажимаем волшебную кнопку - и получаем на выходе "кашу ела Маша". Так не получится?
Автор: creature_ws
Дата сообщения: 26.03.2014 12:50
Инвертировать три слова можно так:

Код: MsgBox % RegExReplace("Маша ела кашу", "(*UCP)(\w+)(\s+\w+\s+)(\w+)", "$3$2$1")
Автор: oshizelly
Дата сообщения: 30.03.2014 01:43
Уважаемые, подскажите, нет ли возможности при помощи AHK получить полное имя (то есть, включая путь) файла, открытого в активном в данный момент окне (например, в Notepad, MS Word, Acrobat и т.д.)

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

creature_ws
Спасибо за скрипт.
Автор: OnMyDSeeAtAll
Дата сообщения: 30.03.2014 18:21

Код: #NoEnv
#KeyHistory
, 0
ListLines,
Off
sPattern:="i)(?:"".+"" {1,}""?)\b(\w:.+)\b"
TrayTip,,
% "выбираем целевое окно, жмём XButton2"
KeyWait, XButton2,
% "D"
ListLines,
On

DllCall
("GetWindowThreadProcessId", "UPtr", WinActive("A"), "UIntP", lpdwProcessId:=0)
sCmdLine:=ComObjGet("winmgmts:\\.\root\cimv2:Win32_Process.Handle='"lpdwProcessId "'").CommandLine
MsgBox, 262144, % "fullpath:", % RegExMatch(sCmdLine, sPattern, m) ? m1:"n\a"
Автор: oshizelly
Дата сообщения: 30.03.2014 18:35
OnMyDSeeAtAll
О, спасибо! Значит, это всё-таки возможно, хотя столь сложного скрипта я бы в жизни не сумел изваять.

Вот только непонятно, в какое место скрипту сувать строку, назначающую хоткей. Выше строки #NoEnv? Или где-то в середине?
И что подразумевается под XButton2?

Цитата:
TrayTip,, % "выбираем целевое окно, жмём XButton2
KeyWait, XButton2,
% "D"
Автор: OnMyDSeeAtAll
Дата сообщения: 30.03.2014 20:27
Пример был рассчитан на одноразовое использование, если Вам нужно повесить функционал на клавишу, тогда это может выглядеть [more=так.]
Код: #NoEnv
#KeyHistory
, 0
ListLines,
Off
sPattern:="i)(?:"".+"" {1,}""?)\b(\w:.+)\b"
ListLines,
On

XButton2:: ; выбираем целевое окно, жмём эту клавишу
KeyWait, % A_ThisHotkey
DllCall
("GetWindowThreadProcessId", "UPtr", WinActive("A"), "UIntP", lpdwProcessId:=0)
sCmdLine:=ComObjGet("winmgmts:\\.\root\cimv2:Win32_Process.Handle='"lpdwProcessId "'").CommandLine
MsgBox, 262144, % "fullpath:", % RegExMatch(sCmdLine, sPattern, m) ? m1:"n\a", 1
Return
Автор: creature_ws
Дата сообщения: 30.03.2014 21:06
Кстати,

Цитата:
WinGet lpdwProcessId, PID, A
Автор: OnMyDSeeAtAll
Дата сообщения: 30.03.2014 23:16
Спасибо, в курсе, просто всегда хочется альтернативы (+, это можно использовать в режиме inline как выражение в отличии от полноценной команды которая требует отдельной строки в коде).
Автор: funcMYXOMOP
Дата сообщения: 31.03.2014 11:00
Здравствуйте. Пишу сюда уже в состоянии отчаяния сделать что-то самостоятельно.
Передо мной стоит задача: сделать Paste&Enter по нажатию Ctrl+Shift+V. Я написал эти строки, которые работают только в английской раскладке:

^+v:: ; Ctrl + Shift + V
{
send ^v
send {Enter}
}
return

Я понимаю, что чтобы это работало в обоих раскладках, надо вместо v написать сканкод этой клавиши, но как его узнать, я не знаю. Кейхуком пользоваться не умею (Да и нет у меня его по ходу), гуглёж выдаёт сканкоды чего угодно, только не буквенных клавиш. Halp.
Автор: creature_ws
Дата сообщения: 31.03.2014 12:52
Virtual-Key Codes

Код: ^+vk56::Send ^{vk56}{Enter}
Автор: funcMYXOMOP
Дата сообщения: 31.03.2014 13:14
creature_ws, спасибо!
Автор: creature_ws
Дата сообщения: 31.03.2014 13:52
--здесь была вызывающе неверная информация--
Автор: funcMYXOMOP
Дата сообщения: 31.03.2014 14:06
Send ^{v}

А вот не работало, кстати. Отправляло "v" и Enter.
(Вообще у этой программы странная логика)
Автор: amigosxxx
Дата сообщения: 07.04.2014 13:33
Здравствуйте!
Подскажет по двум вопросам!
Как должен выглядеть скрипт, который при нажатии кнопки R и дальнейшем ее отпускании, нажимался и удерживался LShift. А при повторном нажатии кнопки R, Lshift отжимался.
Написал вот так, но где-то ошибка.
Делал Для игры Руст, потому проверка на активность этого окна. В остальном просто правил скрипт другого человека (у него было все сведено на колесико).


Код:
sc013::
IfWinActive, PlayRust
{
SendInput, {LShift Down}
return
}
return

sc013::
IfWinActive, PlayRust
{
SendInput, {LShift Up}
return
}
return
Автор: vadim3sh
Дата сообщения: 08.04.2014 04:14
amigosxxx

Цитата:
условие по нажатию 4 кнопки мыши по команде MouseClick, X1 и последующим нажатием ЛКМ

я туплю, или как-то невнятно задача поставлена?

по первому скрипту.. можно предположить, что стОит где-то в такой плоскости поискать:

Код: toggle = 0
#MaxThreadsPerHotkey 2

n::
Toggle := !Toggle
While Toggle{
Click
Send a
sleep 100
}
return

start this script, open notepad and press 'n' you'll see what i mean
Автор: amigosxxx
Дата сообщения: 08.04.2014 06:07
vadim3sh

Спасибо!
По нажатию 4 кнопки имеется в виду. Что если я нажал 4 кнопку, то при нажатии уже потом ЛКМ, нужно будет выполнить очередь задач - будет сдвиг, задержка.
Как пример. При нажатии на 4 кнопку, выбираю оружие, а при нажатии ЛКМ, я стреляю, при этом происходят выстрелы и снижение уровня отдачи с помощью сдвига курсора и задержек. Примерно так.
Вот в этот скрипт хочу включить это условие:


Код: #NoEnv
SendMode Input

_auto := true ;Toggle for the anti-recoil being on or off. default is on

~LButton::autofire() ; When the LButton is pressed run the autofire() function
!LButton::_auto := ! _auto ;Alt + LButton used to toggle the anti-recoil on and off
F1::ExitApp ; F1 used to exit the ahk script file

; autofire() function, name is misleading could easily be antiRecoil()
autofire()
{
global _auto
if _auto ; if _auto == true. i.e. is anti-recoil on?
{ ; anti-recoil on? If yes do this
Loop ; Continuously loop until a 'break' command
{
if GetKeyState("LButton", "P") ; If LButton is pressed
{ ; LButton pressed? If yes do this
Sleep 75 ; sleep for 85 milliseconds
mouseXY(0, 70) ;Call the mouseXY() function which moves the mouse the specified distance. mouseXY( X, Y,)
Sleep 45 ; sleep for 45milliseconds
}
else ;LButton pressed? If no do this, i.e. exit the loop
break ;will stop the loop
} ;; loop
} ;; if
} ;; autofire() ; anti-recoil on? If no do nothing

mouseXY(x,y)
{
DllCall("mouse_event",uint,1,int,x,int,y,uint,0,int,0) ; moves the mouse could easily be the built in autohotkey MouseMove, X, Y
}
Автор: creature_ws
Дата сообщения: 08.04.2014 15:49
Я бы посоветовал не пытаться собрать из кусочков чужого скрипта свой. Это как взять текст на неизвестном языке, перемешать в нём предложения и ожидать, что текст сохранит свой первоначальный смысл.

Справка Autohotkey содержит ответы на все вопросы которые могут возникнуть относительно синтаксиса языка.

Если читать справку нет желания — опишите «что нужно» без чужого, непонятного вам кода — тогда по каждому пункту «задания» можно будет привести конкретный пример реализации решения.

———————


Код: M4()
{
~^LButton::auto_fire()
~LButton::autofire() ; When the LButton is pressed run the autofire() function
!LButton::_auto := ! _auto ;Alt + LButton used to toggle the anti-recoil on and off
F1::ExitApp ; F1 used to exit the ahk script file
}

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: как добавить ивритские шрифты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.