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

» AutoHotkey

Автор: OnMyDSeeAtAll
Дата сообщения: 27.09.2013 16:16
vadim3sh 01:31 18-09-2013
Цитата:
Oчень многим нравится переключать раскладку нажатием CapsLock. И всем не нравится, что индикатор CapsLock при этом перестает фунициклировать.
Сделал как и было оговорено, на клавишу CapsLock, код переключает раскладку по двойному нажатию на эту клавишу, и у меня всё работает за исключением Internet Explorer'овского контрола Internet Explorer_Server1 (сие обнаружил недавно, ещё не разбирался с этим).
Цитата:
...вроде как, команды "Hotkey" не содержится, она где-то создается через :: , но где...?

Код: ...
CapsLock::
...
Автор: vadim3sh
Дата сообщения: 27.09.2013 22:17
OnMyDSeeAtAll

Цитата:
переключает раскладку по двойному нажатию на эту клавишу

Слона-то я и не приметил...

1. Немножко оффтопа: а вот такое знание программы связано с профессиональной деятельностью, или это следствие любительского энтузазизма ?

2. У меня win 7. Работает, но почему-то не с 1 раза. Срабатывает со 2...4 го двойного нажатия. Без всякой системы. Но раскладку держит мертво: уж если включилась русская, то будет русская в любом окне.

3. И у меня не получается разобраться как работает этот блок:

Код:
CapsLock::
SendEvent, % "{"A_ThisHotkey "}"
If A_TimeSincePriorHotkey Between 0 And 300
{
SendWindowMessage()
KeyWait, % A_ThisHotkey
Notify("".Base.inputLocaleId:=CheckUpLayout())
Return
}
KeyWait, % A_ThisHotkey
Return
Автор: oshizelly
Дата сообщения: 29.09.2013 01:06
Опишу сначала проблему. На ноутбуке очень неудобно и непривычно расположены клавиши управления курсором. Решил переназначить PgUp и PgOn на Home и End и, соответственно, наоброт. До этого момента вроде бы всё просто.
А дальше возникла проблема: на внешней клавиатуре эти клавиши расположены "правильно", поэтому если просто их поменять местами, то будет постоянная путаница.

А теперь собственно вопрос: можно ли как-то исхитриться, чтобы переназначить эти клавиши только для встроенной клавиатуры, но не для внешней? Может быть, при загрузке системы автоматически запускать скрипт для работы со встроенной клавиатурой ноута, а при подключении внешней клавиатуры автоматически его приостанавливать (или наоборот)?
Вроде бы здравый смысл и опыт говорят, что так не получится. Но по мере чтение этого топика растёт вера в чудеса, что нерешаемых задач вообще не бывает

Спасибо!

vadim3sh

Цитата:
Но раскладку держит мертво: уж если включилась русская, то будет русская в любом окне.

Если не секрет, а для чего вообще это нужно. Напрягал фантазию, но так и не смог придумать ситуацию, в которой такая сквозная раскладка для всех приложений была бы удобнее, чем штатное решение: своя раскладка для каждого приложения. Я не говорю, что это не нужно, а просто интересно разобраться. Вдруг я сам тоже захочу так работать...
Автор: vadim3sh
Дата сообщения: 29.09.2013 04:04

Цитата:
для чего вообще это нужно


Ну, вот вся история:
Захотелось мне давным-давно сделать переключение по CapsLock. Проблемы тут никакой не было, реализуется кучей вариантов...
Однако при назначении горячей клавиши пропадает LED индикация. А было-бы так чудненько: лампочка горит - русская раскладка, не горит - английская (ну, к примеру).
Убил я на поиск кучу времени, но нашел решение. (на предыдущей странице). Да только когда переходишь на окно с другой раскладкой винда переключает раскладку, а лампочка-то остается как была! Все труды насмарку.
Счас вот пытаюсь разобраться, как скрипт уважаемого OnMyDSeeAtAll переделать под один клик. Но что-то боюсь не осилю.

Я вот чего не понял:

Цитата:
переназначить эти клавиши только для встроенной клавиатуры

не знаю, как насчет автоматического переключения, но после подключения внешней USB клавы, неуж-то на горячую клавишу ленно тыркнуть, которая скрипт приостановит?

Автор: oshizelly
Дата сообщения: 29.09.2013 12:26
vadim3sh

Цитата:
не знаю, как насчет автоматического переключения, но после подключения внешней USB клавы, неуж-то на горячую клавишу ленно тыркнуть, которая скрипт приостановит?

В теории, да, элементарно. На практике же юезр будет забывать переключаться - с более или менее неприятными последствиями, вплоть до потери ценной информации из-за нажатия не на ту клавишу. Поэтому очень хочется автоматизировать.



Цитата:
Да только когда переходишь на окно с другой раскладкой винда переключает раскладку, а лампочка-то остается как была! Все труды насмарку.

Понятно. Так, наверное, действительно удобнее, но IMHO слишком велика цена за это удобство: отказ от штатной фичи запоминаня текущей раскладки индвидуально для каждого приложения. Однако о чужих вкусах либо хорошо, либо ничего...
Кстати, на большинстве современных лаптопов вообще убрали физический индикатор CapsLock. На лампочках экономят
Вместо него при включении/отключении режима CapsLock на пару секунд всплыавет уведомление на экране.
Автор: vadim3sh
Дата сообщения: 29.09.2013 18:15
oshizelly

Цитата:
На практике же юезр будет забывать переключаться

Даааа...


Код: OnMessage(0x219, "notify_change")
Return

notify_change(wParam, lParam, msg, hwnd)
{
MsgBox, Запусти скрипт!! ; ну или сюда запуск скрипта
}
Автор: oshizelly
Дата сообщения: 30.09.2013 11:34
А нельзя ли сделать так, чтобы клавиша навигации курсора [PgUp] совместно с клавишей [Left] генерировала нажатие клавиши [Home] (и аналогично клавиша [PgOn] совместно с клавишей [Right] генерировала бы нажатие клавиши [End]). Это во многом решило бы мои проблемы с этой xxxxxxx-й клавиатурой.

Мне кажется, что это возможно, но трудность в правильном кодировании нажатий и отжатий. При том, что ведь и генерируемые коды [Home] и [End] должны использоваться не только поодиночке, но, в свою очередь, в комбинации с другими клавишами, например, [Home] + [Ctrl] + [Shift].

Спасибо!
Автор: OnMyDSeeAtAll
Дата сообщения: 01.10.2013 15:41
vadim3sh 23:17 27-09-2013
Цитата:
1. Немножко оффтопа:...
Энтузазизм.
Цитата:
2. У меня win 7. Работает, но почему-то не с 1 раза.
У меня нормально.
Цитата:
3. И у меня не получается разобраться как работает этот блок:
Примерно [more=так]
Код: CapsLock::
DbgNotify(A_ThisHotkey " down", "timeSincePriorHotkey: "A_TimeSincePriorHotkey)
If A_TimeSincePriorHotkey Between 0 And 300
{
DbgNotify("выполнение:", "по нажатию ("A_TimeSincePriorHotkey ")")
; SendWindowMessage()
KeyWait, CapsLock
; Notify("".Base.inputLocaleId:=CheckUpLayout())
DbgNotify("выполнение:", "по отжатию (значение не интересует)")
Return
}
KeyWait, CapsLock
DbgNotify(A_ThisHotkey " up", "timeSincePriorHotkey: значение не интересует")
Return

DbgNotify(param1, param2)
{
TrayTip,
% param1, % param2,, 1
; Sleep, 1000
; TrayTip
}
Автор: vadim3sh
Дата сообщения: 02.10.2013 05:08
OnMyDSeeAtAll

Цитата:
У меня нормально


Поменял на 1 нажатие... Спасибо, работает, но через 2 через 3 раза... Кстати, в этом окне работает безупречно (окно ввода сообщения в форум).
завтра пошлю файлик, если будет желание, запустите на Вашей машине, пожалуйста. Может, при копировании с web странички как-то кавычки неправильно передаются.. (как то раз была такая засада).
Пробовал обмануть проблемку по-другому: ну, думаю, раз так не хочешь, я тебе так вот (при наличии жесткой привязки к локали можно и команду для LED индикатора привязать):
Код от The gray Cardinal


Код: ~^Shift:: Exit
~+Ctrl:: Exit
Ctrl::
SetFormat, Integer, H
Locale1=0x4090409 ; Английский (американский).
Locale2=0x4190419 ; Русский.
WinGet, WinID,, A
ThreadID:=DllCall("GetWindowThreadProcessId", "Int", WinID, "Int", "0")
InputLocaleID:=DllCall("GetKeyboardLayout", "Int", ThreadID)
if(InputLocaleID=Locale1)
SendMessage, 0x50,, % Locale2,, A
else if(InputLocaleID=Locale2)
SendMessage, 0x50,, % Locale1,, A
Exit
Автор: vadim3sh
Дата сообщения: 12.10.2013 21:55
Привет
Напишу в новом посте (постУ ? ), чтобы немножко "омолодить" тему...

А вообще интересно, где собака зарыта:


Код: #1:: SendMessage, 0x50,, 0x8090809,, A ; английский (брит)
#2:: SendMessage, 0x50,, F0080419,, A ; русский (typewriter)
Автор: CrackeR
Дата сообщения: 25.10.2013 14:38
Интересует как заставить это работать в fullscreen с помощью GetForegroundWnd
И как правильно в PixelSearch осуществить поиск пикселя нужного цвета с задание погрешности цвета типу 0xBB161D 0x30

Код:
#include <WinAPIEx.au3>
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
Global $Paused, $counter = 0
HotKeySet("{F3}", "TogglePause")
HotKeySet("{F2}", "Terminate")
Shoot()
Func Shoot()
While 1
If _WinAPI_GetAsyncKeyState(0x02) = True Then
Local $coord = PixelSearch(629, 512, 649, 490,12191508,20) Погрешность цвета.
If Not @error Then
MouseClick("Left")
Sleep(150)
EndIf
EndIf
WEnd
EndFunc
While 1
$counter +=1
WEnd
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
;ToolTip('Script is "Paused"',0,0, $counter, 1)
WEnd
ToolTip("")
EndFunc
Func Terminate()
Exit 0
EndFunc
Автор: creature_ws
Дата сообщения: 25.10.2013 21:04
Восьмой параметр команды PixelSearch задаёт "погрешность цвета".

Какое отношение приведенный autoit скрипт имеет к данной теме форума? Причём GetForegroundWnd?
Автор: vadim3sh
Дата сообщения: 31.10.2013 01:14
Привет
win7 AHK_L
Переназначение кнопок мышки в играх не работает, или рботает не так, как должно.
Помню, что где-то в мануале читал, как можно пытаться с этим бороться, но убей не помню и не могу найти где... Подскажите, пожалуйста, если кто видел.
Спасибо.
Автор: neemestniii
Дата сообщения: 31.10.2013 21:39
Помогите пожалуйста, как сделать скрипт, который в вин хп нажимал бы кнопку далее (или другую выделенную) в окне установки драйверов, а то поменял часть оборудования и теперь винда не может установить дрова на мышь и клаву (тоже новые, старых нет совсем) до установки других драйверов. Вообщем получилось..

[more=Специально для дубов как я..]Установил прогу на другом компе, скопироваал ее папку на больную систему из под другой винды (лайв сиди, лайв флешка и т.п.)
Почистил у больного папку автозагрузки чтоб не лезло под руку.
Почистил раздел реестра Run подключив куст реестра software(файл реестра одноименный) к реестру другой винды, отредактировал и выгрузил куст, тоесть сохранил изменения.
В папку автохоткея поместил батник с текстом
Start AutoHotkey.exe Test.ahk
В туже папку поместил и сам файл Test.ahk с текстом
Send {Enter 1}
Sleep 15000
Send {Enter 1}
Sleep 5000
Send {Enter 1}
Sleep 5000
Send {Enter 1}
Sleep 15000
Send {tab 1}
Sleep 5000
Send {Enter 1}
Sleep 5000
Send {Enter 1}
Sleep 5000
Send {Enter 1}
Sleep 5000
Send {Enter 1}
Sleep 5000
Send {Enter 1}
Sleep 5000
Send {Enter 1}
Наверное очень не оптимально, но то что методом тыка получилось.
Ярлык батнику в папку автозагрузки[/more]

Автор: vadim3sh
Дата сообщения: 01.11.2013 04:04

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

т.е. скрипт нужен для того, чтобы нажимать кнопки, поскольку без драйверов нажимать нечем?
Простите за тупость, а скрипт как установить в такой ситуации?
Автор: neemestniii
Дата сообщения: 01.11.2013 11:04

Цитата:
т.е. скрипт нужен для того, чтобы нажимать кнопки, поскольку без драйверов нажимать нечем? Простите за тупость, а скрипт как установить в такой ситуации?  

Лайв сиди флешки, другая винда(подцепить жесткий к другому компу и из под его винды влезать на него) и тому подобное
Автор: oshizelly
Дата сообщения: 03.11.2013 14:03
Пытаюсь написать простой скрипт для переключения раскладок клавиатуры по нажатию одиночной клавиши Control (стандартный вариант из программы Punto Swither и аналогичных переключалок), чтобы по нажатию Control системе отсылалась комбинация {Alt+Shift+1}.

В мануале и на форумах AHK нашёл несколько способов ввода Control.

Код: Ctrl::Send, +!1
Автор: vadim3sh
Дата сообщения: 03.11.2013 23:26

Цитата:
Этот работает, но

Попробуйте

Код: RCtrl::Send, +!1
Автор: D1D1D1D
Дата сообщения: 11.11.2013 12:18
Приветствую!

Следующий скрипт извлекает содержимое тегов TITLE с определенной страницы CHM-файла:


Код:
URL := "mk:@MSITStore:" SubStr(A_AhkPath, 1, -3) "chm::/docs/AutoHotkey.htm"

req := ComObjCreate("Msxml2.XMLHTTP.6.0")
req.open("GET", URL, 0)
req.send
ResponseText := req.responseText
req := ""

MsgBox, % RegExReplace(ResponseText, "s).*?<title>(.*)?</title>.*", "$1")
Автор: oshizelly
Дата сообщения: 12.11.2013 01:50
vadim3sh
Спасибо за подсказку.
Однако всё равно остаётся актуальным вопрос, можно ли при помощи AHK настроить так, чтобы при нажатии одиночной клавиши-модификатора, например, Control или Alt, выполнялась заданная команда, а при использовании этой же клавиши-модификатора в сочетании с другими клавишами AHK никак не вмешивался. Например, повесить на нажатие одиночного Ctrl переключение раскладки клавиатуры, но чтобы это не мешало работе всевозможных системных хоткеев вроде Ctrl+S, Ctrl+Shift+A и т.д.
Автор: vadim3sh
Дата сообщения: 12.11.2013 03:35
Привет
Я тут вооще попробовал...


Код: Ctrl::
Send , {vk39}
return
Автор: D1D1D1D
Дата сообщения: 12.11.2013 11:47
oshizelly
Попробуйте поставить знак тильды перед хоткеем:


Код: ~Ctrl::
Автор: 1ANP
Дата сообщения: 15.11.2013 12:15
Подскажите можно ли создать скрипты под следующие действия:
1) двойной щелчок по рабочему столу ЛКМ - например для зщапуска нового окна explorer;
2) двойной щелчок ПКМ по рабочему столу - например для запуска Total commander;
3) двойной щелчок ЛКМ в свободном месте окна Explorer - для перехода в папку уровнем выше?
Автор: vadim3sh
Дата сообщения: 15.11.2013 21:25
Что-то есть здесь
Автор: 1ANP
Дата сообщения: 16.11.2013 05:14
vadim3sh
Да, там действительно много информации. Правда ссылки уже не все работают.
Например ссылка на вики: " в частности - для МышеКустомайза Script Listing (Eng), раздел Mouse Related" - не работает.
Впрочем, как я понял, задачу можно решить даже в более расширенном варианте чем я спрашивал. Попробую по англоязычным форумам поищу.
Автор: vadim3sh
Дата сообщения: 16.11.2013 05:20
Да тип.. я не про ссылки.. там же коды готовые.. я все время оттуда подворовываю

Цитата:

1.1 Банальное одиночное нажатие все же можно расширить, задав, допустим, разные действия в зависимости от того, в каком месте экрана произошло нажатие...............
1.2 Или в каком месте окна:...........................


А ссылки я ни разу и не открывал.
Автор: 1ANP
Дата сообщения: 16.11.2013 07:11

Цитата:
там же коды готовые

Видел - сижу разбираюсь.
Просто хотелось почитать еще и источники на которые автор ссылается, тема то очень интересная.
Этому вообще цены нет: меню своих команд по средней кнопке мыши на рабочем столе
Автор: OnMyDSeeAtAll
Дата сообщения: 16.11.2013 17:01
CrackeR 16:38 25-10-2013
Цитата:
...заставить это работать...
Функционал сего кода AutoIt на языке АХК выглядет примерно [more=так:]
Код: #SingleInstance, Ignore
iCounter:=0

While, True
{
If !A_IsSuspended And DllCall("GetKeyState", "Int", 2, "Short")<-126
{
PixelSearch,,, 629, 512, 649, 490, 12191508, 20
If !ErrorLevel
{
MouseClick
Sleep, 150
}
}
Else If A_IsSuspended
{
ToolTip,
% "counter: "++iCounter "`rscript is ""paused""", 0, 0
Sleep, 250
IfEqual, A_IsSuspended,
% False, ToolTip
}
IfEqual, A_IsSuspended,
% False, Sleep, 50
}

F3::
F2::
Suspend
KeyWait,
% A_ThisHotkey
IfEqual
, A_ThisHotkey, % "F3", Return
IfEqual
, A_ThisHotkey,
% "F2", ExitApp
Автор: D1D1D1D
Дата сообщения: 17.11.2013 12:18
OnMyDSeeAtAll

Цитата:
У меня работает такой вариант

А у меня он не идёт что-то -- выдаёт сообщение "Oops!, An error has occured!"

Скажите, а не достаточно перекодировать (если не путаю: из ANSI в UTF-16) содержимое переменной ResponseText (из приводимого мной выше кода) в кодировку, используемую программой? Вот как-то так:


Код: #SingleInstance Force

fPath = C:\WINDOWS\Help\clipbrd.chm ; Путь для XP

URL := "mk:@MSITStore:" fPath "::/whatis_intro_cb.htm"

req := ComObjCreate("Msxml2.XMLHTTP.6.0")
req.open("GET", URL, 0)
req.send
ResponseText := req.responseText
req := ""

ResponseText := Ansi2UTF8(ResponseText)

MsgBox, % RegExReplace(ResponseText, "s).*?<title>(.*)?</title>.*", "$1")


Ansi2UTF8(sString)
{
Ansi2Unicode(sString, wString, 0)
Unicode2Ansi(wString, zString, 65001)
Return zString
}

Ansi2Unicode(ByRef sString, ByRef wString, CP = 0)
{
nSize := DllCall("MultiByteToWideChar"
, "Uint", CP
, "Uint", 0
, "Uint", &sString
, "int", -1
, "Uint", 0
, "int", 0)

VarSetCapacity(wString, nSize * 2)

DllCall("MultiByteToWideChar"
, "Uint", CP
, "Uint", 0
, "Uint", &sString
, "int", -1
, "Uint", &wString
, "int", nSize)
}

Unicode2Ansi(ByRef wString, ByRef sString, CP = 0)
{
nSize := DllCall("WideCharToMultiByte"
, "Uint", CP
, "Uint", 0
, "Uint", &wString
, "int", -1
, "Uint", 0
, "int", 0
, "Uint", 0
, "Uint", 0)

VarSetCapacity(sString, nSize)

DllCall("WideCharToMultiByte"
, "Uint", CP
, "Uint", 0
, "Uint", &wString
, "int", -1
, "str", sString
, "int", nSize
, "Uint", 0
, "Uint", 0)
}
Автор: OnMyDSeeAtAll
Дата сообщения: 19.11.2013 01:14

Цитата:
...выдаёт сообщение...
Значение команды Sleep сделайте больше.
Цитата:
...а не достаточно перекодировать...
Да не прокатит такой вариант.

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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