Уважаемые знатоки AHK! Не могли бы вы помочь мне с реализацией такой задачи: необходимо чтоб после нажатия на англ.клавишу "е" происходило её залипание и шёл бесконечный повтор, т.е. как будто она зажата, до повторного нажатия на эту же кнопку. Ну и чтоб включение-выключение этой функции можно было повторять бесконечное кол-во раз. Заранее благодарен за помощь!
» AutoHotkey
[more=Так]
Код: ; SetKeyDelay, 250, 50
bMode:=bState:=False
Tab & vk45:: ; включение функционала кнопки "e/у" на "tab+e/у"
KeyWait, vk45`
Loop, % (bMode^=1) ? 1:2
SoundBeep, 15000
Return
#If bMode
$vk45:: ; e/у
KeyWait, vk45`
SetTimer, % "Label", % (bState^=1) ? 50:"Off" ; тут можно "поиграться" со значением частоты (сейчас 50мс.)
Return
Label:
Send, % "{vk45}"
Return
Код: ; SetKeyDelay, 250, 50
bMode:=bState:=False
Tab & vk45:: ; включение функционала кнопки "e/у" на "tab+e/у"
KeyWait, vk45`
Loop, % (bMode^=1) ? 1:2
SoundBeep, 15000
Return
#If bMode
$vk45:: ; e/у
KeyWait, vk45`
SetTimer, % "Label", % (bState^=1) ? 50:"Off" ; тут можно "поиграться" со значением частоты (сейчас 50мс.)
Return
Label:
Send, % "{vk45}"
Return
OnMyDSeeAtAll
Спасибо огромное!! Даже более чем просто подходит. Вы добавили ещё и горячие кнопки для переключения режима функционирования клавиши "е/у".. Ещё раз огромное спасибо!!
Спасибо огромное!! Даже более чем просто подходит. Вы добавили ещё и горячие кнопки для переключения режима функционирования клавиши "е/у".. Ещё раз огромное спасибо!!
простая вещь - уже час ищу ничего не пойму...
как забиндить тильду в скрипте?????
ну т.е. хочу чтоб при нажатии Cntrl + ~
^~::
ничё не работает, ничё не найти...
p.s. раньше вроде какой-то InstallKeybdHook был, счас и он ничерта не показывает... или где вообще все списки vkXX и тому подобного?
+ ещё мелкий вопрос...
может есть какой универсальный и несложный способ реализовать в скрипте следующее: в форме, в которой находится курсор в момент срабатывания скрипта выделять всё содержимое (ну к примеру вот сейчас то, что я тут^ пишу одним нажатием выделить, вне зависимости от положения этого самого курсора)
как забиндить тильду в скрипте?????
ну т.е. хочу чтоб при нажатии Cntrl + ~
^~::
ничё не работает, ничё не найти...
p.s. раньше вроде какой-то InstallKeybdHook был, счас и он ничерта не показывает... или где вообще все списки vkXX и тому подобного?
+ ещё мелкий вопрос...
может есть какой универсальный и несложный способ реализовать в скрипте следующее: в форме, в которой находится курсор в момент срабатывания скрипта выделять всё содержимое (ну к примеру вот сейчас то, что я тут^ пишу одним нажатием выделить, вне зависимости от положения этого самого курсора)
[more] Привет ahk знатокам !
как правильно допилить из вот такого:
Run, C:\Program Files\ASUS Xonar Essence STX Audio\Customapp\AsusAudioCenter.exe
Sleep, 50
если ComboBox5(узнал название внутреннее бокса с выпадающим списком переключений между наушниками колонками и т.п. с помощью SPY утилиты) текст = "2 колонки"
то выполняется - SendInput, {up} или выбор параметра (если это реально) с надписью - Наушники.
и далее
если (ComboBox5 текст = "Наушники")
то выполняется - SendInput, {down} или выбор параметра (если это реально) с текстом - 2 колонки.
закрываем открывшееся окошко
WinClose Xonar Essence STX Audio Center
Sleep, 50
Return
в нормальный скрипт. хочу по итогу на кнопку переключать на наушники звук и обратно. =) возможно подход к реализации не верен, но других в голову не пришло [/more]
как правильно допилить из вот такого:
Run, C:\Program Files\ASUS Xonar Essence STX Audio\Customapp\AsusAudioCenter.exe
Sleep, 50
если ComboBox5(узнал название внутреннее бокса с выпадающим списком переключений между наушниками колонками и т.п. с помощью SPY утилиты) текст = "2 колонки"
то выполняется - SendInput, {up} или выбор параметра (если это реально) с надписью - Наушники.
и далее
если (ComboBox5 текст = "Наушники")
то выполняется - SendInput, {down} или выбор параметра (если это реально) с текстом - 2 колонки.
закрываем открывшееся окошко
WinClose Xonar Essence STX Audio Center
Sleep, 50
Return
в нормальный скрипт. хочу по итогу на кнопку переключать на наушники звук и обратно. =) возможно подход к реализации не верен, но других в голову не пришло [/more]
HeT BonpocoB
Выделения делаются с помощью стандартных хоткеев: посылаешь сначала End, затем Shift+Home.
Клавиши именуются по своему нижнему, без шифта значению, т.е это не тильда, а акцент.
Вот примочка для определения виртуальных кодов - зажимаешь Esc и печатаешь
[more=Скрипт]
Код:
#SingleInstance, force
Menu Tray, Icon, shell32.dll, 29
$Esc::Send {Esc Up}
Esc & vk30::Send vk30
Esc & vk31::Send vk31
Esc & vk32::Send vk32
Esc & vk33::Send vk33
Esc & vk34::Send vk34
Esc & vk35::Send vk35
Esc & vk36::Send vk36
Esc & vk37::Send vk37
Esc & vk38::Send vk38
Esc & vk39::Send vk39
Esc & vk41::Send vk41
Esc & vk42::Send vk42
Esc & vk43::Send vk43
Esc & vk44::Send vk44
Esc & vk45::Send vk45
Esc & vk46::Send vk46
Esc & vk47::Send vk47
Esc & vk48::Send vk48
Esc & vk49::Send vk49
Esc & vk4A::Send vk4A
Esc & vk4B::Send vk4B
Esc & vk4C::Send vk4C
Esc & vk4D::Send vk4D
Esc & vk4E::Send vk4E
Esc & vk4F::Send vk4F
Esc & vk50::Send vk50
Esc & vk51::Send vk51
Esc & vk52::Send vk52
Esc & vk53::Send vk53
Esc & vk54::Send vk54
Esc & vk55::Send vk55
Esc & vk56::Send vk56
Esc & vk57::Send vk57
Esc & vk58::Send vk58
Esc & vk59::Send vk59
Esc & vk5A::Send vk5A
Esc & vkBA::Send vkBA
Esc & vkBB::Send vkBB
Esc & vkBC::Send vkBC
Esc & vkBD::Send vkBD
Esc & vkBE::Send vkBE
Esc & vkBF::Send vkBF
Esc & vkC0::Send vkC0
Esc & vkDB::Send vkDB
Esc & vkDC::Send vkDC
Esc & vkDD::Send vkDD
Esc & vkDE::Send vkDE
Esc & vkDF::Send vkDF
Esc & vkE2::Send vkE2
Esc & sc135::Send sc135
Esc & sc37::Send sc37
Esc & sc47::Send sc47
Esc & sc48::Send sc48
Esc & sc49::Send sc49
Esc & sc4B::Send sc4B
Esc & sc4C::Send sc4C
Esc & sc4D::Send sc4D
Esc & sc4F::Send sc4F
Esc & sc50::Send sc50
Esc & sc51::Send sc51
Esc & sc52::Send sc52
Выделения делаются с помощью стандартных хоткеев: посылаешь сначала End, затем Shift+Home.
Клавиши именуются по своему нижнему, без шифта значению, т.е это не тильда, а акцент.
Вот примочка для определения виртуальных кодов - зажимаешь Esc и печатаешь
[more=Скрипт]
Код:
#SingleInstance, force
Menu Tray, Icon, shell32.dll, 29
$Esc::Send {Esc Up}
Esc & vk30::Send vk30
Esc & vk31::Send vk31
Esc & vk32::Send vk32
Esc & vk33::Send vk33
Esc & vk34::Send vk34
Esc & vk35::Send vk35
Esc & vk36::Send vk36
Esc & vk37::Send vk37
Esc & vk38::Send vk38
Esc & vk39::Send vk39
Esc & vk41::Send vk41
Esc & vk42::Send vk42
Esc & vk43::Send vk43
Esc & vk44::Send vk44
Esc & vk45::Send vk45
Esc & vk46::Send vk46
Esc & vk47::Send vk47
Esc & vk48::Send vk48
Esc & vk49::Send vk49
Esc & vk4A::Send vk4A
Esc & vk4B::Send vk4B
Esc & vk4C::Send vk4C
Esc & vk4D::Send vk4D
Esc & vk4E::Send vk4E
Esc & vk4F::Send vk4F
Esc & vk50::Send vk50
Esc & vk51::Send vk51
Esc & vk52::Send vk52
Esc & vk53::Send vk53
Esc & vk54::Send vk54
Esc & vk55::Send vk55
Esc & vk56::Send vk56
Esc & vk57::Send vk57
Esc & vk58::Send vk58
Esc & vk59::Send vk59
Esc & vk5A::Send vk5A
Esc & vkBA::Send vkBA
Esc & vkBB::Send vkBB
Esc & vkBC::Send vkBC
Esc & vkBD::Send vkBD
Esc & vkBE::Send vkBE
Esc & vkBF::Send vkBF
Esc & vkC0::Send vkC0
Esc & vkDB::Send vkDB
Esc & vkDC::Send vkDC
Esc & vkDD::Send vkDD
Esc & vkDE::Send vkDE
Esc & vkDF::Send vkDF
Esc & vkE2::Send vkE2
Esc & sc135::Send sc135
Esc & sc37::Send sc37
Esc & sc47::Send sc47
Esc & sc48::Send sc48
Esc & sc49::Send sc49
Esc & sc4B::Send sc4B
Esc & sc4C::Send sc4C
Esc & sc4D::Send sc4D
Esc & sc4F::Send sc4F
Esc & sc50::Send sc50
Esc & sc51::Send sc51
Esc & sc52::Send sc52
Цитата:
т.е это не тильда, а акцент.дыкёп... как это синтаксически то пишется? чтоб отзывалось
(Cntr + `) надо
OnMyDSeeAtAll
во, наконец-то заработало
я то уже давно "кодил" в ahk, но большинство биндов было на самодельную панель с доп. кнопками (они же Joy1:: - Joy20:: ) и как-то упустил как правильно обычные кнопки прописывать.
Цитата:
+вопрос
как правильней в скрипте переключение раскладки сделать RU-EN? вставил Send, ^{sc02A} (ctrl+shift у меня) но что-т не срабатывает зараза...
[добавлено]
OnMyDSeeAtAll - благодарю, работает
во, наконец-то заработало
я то уже давно "кодил" в ahk, но большинство биндов было на самодельную панель с доп. кнопками (они же Joy1:: - Joy20:: ) и как-то упустил как правильно обычные кнопки прописывать.
Цитата:
К примеру тут.в шапку!
+вопрос
как правильней в скрипте переключение раскладки сделать RU-EN? вставил Send, ^{sc02A} (ctrl+shift у меня) но что-т не срабатывает зараза...
[добавлено]
OnMyDSeeAtAll - благодарю, работает
Чтобы переключить раскладку правильней будет [more=послать]
Код: PostMessage, 0x0050, 0x0002,,, A ; WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD
Код: PostMessage, 0x0050, 0x0002,,, A ; WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD
Krot66, оригинал был мой. там всё банально и просто. при открытии окошка проги(драйвера звуковой карты asus) автоматически в фокусе тот самый бокс. в котором выбираешь наушники, колонки или другие входы для звука. окошко называется xonar audio center. скрипт делал такой:
Run, C:\Program Files\ASUS Xonar Essence STX Audio\Customapp\AsusAudioCenter.exe (тут открывает окно)
Sleep, 50
SendInput, {down} посылает команду вниз - так как бокс с выбором источника активен, то просто выбирает что ниже из списка из звуковых выходов)
WinClose Xonar Essence STX Audio Center (тут закрывает окно)
Sleep, 50
Return
и второй скрипт, точно такой, же который посылал команду - вверх.
хочу переделать, что бы скрипт сам определял, что написано в боксе выбора выхода написано и исходя из этого делал команду вниз или вверх. это реально ?
Run, C:\Program Files\ASUS Xonar Essence STX Audio\Customapp\AsusAudioCenter.exe (тут открывает окно)
Sleep, 50
SendInput, {down} посылает команду вниз - так как бокс с выбором источника активен, то просто выбирает что ниже из списка из звуковых выходов)
WinClose Xonar Essence STX Audio Center (тут закрывает окно)
Sleep, 50
Return
и второй скрипт, точно такой, же который посылал команду - вверх.
хочу переделать, что бы скрипт сам определял, что написано в боксе выбора выхода написано и исходя из этого делал команду вниз или вверх. это реально ?
Что-то вроде
Код:
^+F11::
ControlGetText t, ComboBox5, Xonar Essence STX Audio Center
MsgBox % t
return
Код:
^+F11::
ControlGetText t, ComboBox5, Xonar Essence STX Audio Center
MsgBox % t
return
[more] Добрый день.
Вопрос мой скорее всего уже был, но я искал, и именно на свой вопрос не нашел ответ.
У меня все просто, но не пойму как сделать.
Задача.
Будет Gui меню, где последовательно сверху вниз, человек заполняет данные.
Приложу код,
Запуск, в блокноте на русс языке набрать лояяя, откроется меню
http://pixs.ru/showimage/Screenshot_7302361_21331018.jpg
Нужно чтобы поля появлялись когда это нужно.
Например в вашем варианте.
Если выбрал валюту Руб. снизу открывается поле№1 с другим выбором, если в поле №1 выбрать что-то еще, открывается поле№2, если выбрать в поле №2 что-то, открывается после №3 и тд.
И в зависимости от того, что выбирает человек в прошлом поле, подгружается нужное следующее поле, это может быть и не одно подгруженное поле. может быть одно поле где человек что то запишет, а в втором поле, опять что то выберет.
Изначально поля скрыты, так как не понятно сколько полей надо. может 1 подгрузить, может 10.
И по факту, не нужно создавать окно по верх рабочего, чтобы параметр указать туда.
Пример в картинке.
Например человек выбрал 2 пункт, открылось 2 формы, он ввел в 1 что то, и в 2 форме выбрал параметр.
Подгрузилась 2 форма, он там так же что то сделал и выбрал еще параметр.
Подгрузилась 3 форма и тд.
И тем самым человек сделал так, финальный скрин в следующем ответе
http://pixs.ru/showimage/Screenshot_8149868_21331022.jpg
код:
:c*:лояяя::
{
Gui, Font,s11, Verdana;
;Gui, Add, Text, C5A528D, Окончание карты (9134):
;Gui, Add, Edit, w150 vKtFin
Gui, Add, Text, C5A528D, Дата в форматеГГГГММДД)(20160327):
Gui, Add, Edit, w150 vDtOper
Gui, Add, Text, C5A528D, Сумма операции (10000 = 100р. 00к):
Gui, Add, DropDownList, w150 vSumPay , |10000|15000|20000
Gui, Add, Text, C5A528D, Валюта (RUB,$,E,BYR,BBD,KPW):
Gui, Add, DropDownList, w150 vValuta , |810|840|978
if Valuta = 840
{
Gui, Add, Text, C5A528D, Парент (ib):
Gui, Add, DropDownList, w150 vPar , |1|2|3|
}
if Valuta = 810
{
Gui, Add, Text, C5A528D, Парент (ib):
Gui, Add, DropDownList, w150 vPar , |4|5|6|
}
Gui, Color, F5BFA7, B8DDF0
Gui, Add, Button, default, OK
Gui, Show, w250, Лояльность v1.0
return
ButtonOK:
Gui, Submit
Gui, Destroy
GuiClose:
Exit
}
[/more]
Вопрос мой скорее всего уже был, но я искал, и именно на свой вопрос не нашел ответ.
У меня все просто, но не пойму как сделать.
Задача.
Будет Gui меню, где последовательно сверху вниз, человек заполняет данные.
Приложу код,
Запуск, в блокноте на русс языке набрать лояяя, откроется меню
http://pixs.ru/showimage/Screenshot_7302361_21331018.jpg
Нужно чтобы поля появлялись когда это нужно.
Например в вашем варианте.
Если выбрал валюту Руб. снизу открывается поле№1 с другим выбором, если в поле №1 выбрать что-то еще, открывается поле№2, если выбрать в поле №2 что-то, открывается после №3 и тд.
И в зависимости от того, что выбирает человек в прошлом поле, подгружается нужное следующее поле, это может быть и не одно подгруженное поле. может быть одно поле где человек что то запишет, а в втором поле, опять что то выберет.
Изначально поля скрыты, так как не понятно сколько полей надо. может 1 подгрузить, может 10.
И по факту, не нужно создавать окно по верх рабочего, чтобы параметр указать туда.
Пример в картинке.
Например человек выбрал 2 пункт, открылось 2 формы, он ввел в 1 что то, и в 2 форме выбрал параметр.
Подгрузилась 2 форма, он там так же что то сделал и выбрал еще параметр.
Подгрузилась 3 форма и тд.
И тем самым человек сделал так, финальный скрин в следующем ответе
http://pixs.ru/showimage/Screenshot_8149868_21331022.jpg
код:
:c*:лояяя::
{
Gui, Font,s11, Verdana;
;Gui, Add, Text, C5A528D, Окончание карты (9134):
;Gui, Add, Edit, w150 vKtFin
Gui, Add, Text, C5A528D, Дата в форматеГГГГММДД)(20160327):
Gui, Add, Edit, w150 vDtOper
Gui, Add, Text, C5A528D, Сумма операции (10000 = 100р. 00к):
Gui, Add, DropDownList, w150 vSumPay , |10000|15000|20000
Gui, Add, Text, C5A528D, Валюта (RUB,$,E,BYR,BBD,KPW):
Gui, Add, DropDownList, w150 vValuta , |810|840|978
if Valuta = 840
{
Gui, Add, Text, C5A528D, Парент (ib):
Gui, Add, DropDownList, w150 vPar , |1|2|3|
}
if Valuta = 810
{
Gui, Add, Text, C5A528D, Парент (ib):
Gui, Add, DropDownList, w150 vPar , |4|5|6|
}
Gui, Color, F5BFA7, B8DDF0
Gui, Add, Button, default, OK
Gui, Show, w250, Лояльность v1.0
return
ButtonOK:
Gui, Submit
Gui, Destroy
GuiClose:
Exit
}
[/more]
Помогите побороть проблему с AutoHotkey
Попытался переназначить Win+E (повесить на него total commander). Написал простейший скрипт:
#e::run totalcmd64.exe
Проблема заключается в следующем: если total commander запускается не в полноэкранном режиме, то периодически (точнее очень часто) у меня как будто дополнительно срабатывает клавиша win. Т.е. происходит следующе: жму Win+E - открывается total commander, затем каким-то образом срабатывает еще один вызов клавиши win, в результате открывается окно Пуск (а Total Commander теряет при этом фокус). Получается полная фигня... вместо простого вызова программы по Win+E мне приходиться еще раз жать на Win, чтобы убрать окно Пуск, а затем через Atl+Tab переключаться на потерявший фокус тотал.. Как победить, подскажите?
Попытался переназначить Win+E (повесить на него total commander). Написал простейший скрипт:
#e::run totalcmd64.exe
Проблема заключается в следующем: если total commander запускается не в полноэкранном режиме, то периодически (точнее очень часто) у меня как будто дополнительно срабатывает клавиша win. Т.е. происходит следующе: жму Win+E - открывается total commander, затем каким-то образом срабатывает еще один вызов клавиши win, в результате открывается окно Пуск (а Total Commander теряет при этом фокус). Получается полная фигня... вместо простого вызова программы по Win+E мне приходиться еще раз жать на Win, чтобы убрать окно Пуск, а затем через Atl+Tab переключаться на потерявший фокус тотал.. Как победить, подскажите?
suvolod
Попробуй
Код:
$#vk45::
KeyWait LWin
run totalcmd64.exe
return
Попробуй
Код:
$#vk45::
KeyWait LWin
run totalcmd64.exe
return
Привет!
Возникла задача с числом с шагом "40". Например, если дано число 44 — составить список:
Код:
===0
===40
Возникла задача с числом с шагом "40". Например, если дано число 44 — составить список:
Код:
===0
===40
Код: n := 1378
step := 40
loop % 1 + n // step
list .= "===" (A_index - 1) * step "`n"
MsgBox % list
FileAppend, %list%, E:\Рабочий стол\===.txt
creature_ws, спасибо! Вот ведь искусство: несколько значков и готово))
Помогите, пожалуйста, со скриптом.
Есть текст, часть текста выделена. Потом выделенный фрагмент удаляется (удаляет не Autohotkey).
Что мне надо.
Если нажата ЛКМ + Ctrl:
— проверить есть ли выделение
— скопировать выделение (если можно, не задействуя системный буфер обмена)
Когда я отпущу ЛКМ + Ctrl - к тому времени выделенный текст уже будет удален:
— через 50-100 мсек вставить скопированное точно на то место, где оно было до удаления.
Все.
Есть текст, часть текста выделена. Потом выделенный фрагмент удаляется (удаляет не Autohotkey).
Что мне надо.
Если нажата ЛКМ + Ctrl:
— проверить есть ли выделение
— скопировать выделение (если можно, не задействуя системный буфер обмена)
Когда я отпущу ЛКМ + Ctrl - к тому времени выделенный текст уже будет удален:
— через 50-100 мсек вставить скопированное точно на то место, где оно было до удаления.
Все.
[more=Так]
Код: ^LButton::
MouseGetPos,,, hWnd, sCtrl
SetEnv, clipContent, % ClipboardAll
SetEnv, Clipboard
; Send, {CtrlDown}{Ins}{CtrlUp}
SendMessage, 0x0300,,, % sCtrl, % "ahk_id"hWnd ; WM_CUT
ClipWait, .005
bErrLvl:=ErrorLevel
KeyWait, LButton
IfEqual, bErrLvl, % False, SetTimer, % "Label", -100
Else Clipboard:=clipContent, clipContent:=""
Return
Label:
; Send, {ShiftDown}{Ins}{ShiftUp}
SendMessage, 0x0302,,, % sCtrl, % "ahk_id"hWnd ; WM_PASTE
Exit, Clipboard:=clipContent, clipContent:=""
Код: ^LButton::
MouseGetPos,,, hWnd, sCtrl
SetEnv, clipContent, % ClipboardAll
SetEnv, Clipboard
; Send, {CtrlDown}{Ins}{CtrlUp}
SendMessage, 0x0300,,, % sCtrl, % "ahk_id"hWnd ; WM_CUT
ClipWait, .005
bErrLvl:=ErrorLevel
KeyWait, LButton
IfEqual, bErrLvl, % False, SetTimer, % "Label", -100
Else Clipboard:=clipContent, clipContent:=""
Return
Label:
; Send, {ShiftDown}{Ins}{ShiftUp}
SendMessage, 0x0302,,, % sCtrl, % "ahk_id"hWnd ; WM_PASTE
Exit, Clipboard:=clipContent, clipContent:=""
Цитата:
Так пробуем.
Что то оно у меня не работает...
Сначала просто ничего не происходило, а после нескольких перезапусков скрипт и вовсе перестал запускаться. Запускается и тут же вылетает.
И еще я хотел попросить. Нельзя ли как то обойтись не задействуя клавишу Инсерт?
У меня она используется для других целей, в другом скрипте.
Понятно, что на время тестов я тот скрипт отключал, поэтому не работало не из за этого.
Вместо Insert можно использовать известный аналог — Ctrl+V.
Цитата:
Что то оно у меня не работает...Стоит проверить на наличие одинаковых прав у скрипта и целевого приложения.
Цитата:
Нельзя ли как то обойтись не задействуя клавишу Инсерт?Поправил код.
Тестировал в блокноте (стандартный Edit Control), моделируя похожее условие, не факт что в целевом приложении код будет работать.
Как правильно перекодировать вывод функции UnHTM() (в UTF-8 варианте неверно отображающей числовые символы HTML) на AHK_L, в UTF-8?
Код:
HTM =
(
§ § параграф
© © знак охраны авторского права (copyright)
® ® символ зарегистрированного товарного знака
™ ™ символ товарного знака
° ° знак градуса
« « левая кавычка (левая ёлочка)
» » правая кавычка (правая ёлочка)
… … многоточие
’ апостроф
„ „ открывающая лапка
“ “ закрывающая лапка
“ “ открывающая английская лапка
” ” закрывающая английская лапка
• • жирная точка
– – короткое тире (см. одноименный § 158)
− − минус
± ± плюс-минус
— — тире
№ № знак номера
)
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
t := UnHTM(UnSlashUnicode(HTM))
; split long line to smaller lines about 40-50 symbols length
;t := RegExReplace(t,".{40,50}(\s)","$0`n")
;MsgBox, % t
MsgBox, % ComUnHTML( HTM )
MsgBox, % UnHTM( HTM )
ComUnHTML(html) {
oHTML := ComObjCreate("HtmlFile")
oHTML.write(html)
return oHTML.documentElement.innerText
}
UnHTM( HTM ) { ; Remove HTML formatting / Convert to ordinary text by SKAN 19-Nov-2009
Static HT ; Forum Topic: www.autohotkey.com/forum/topic51342.html
IfEqual,HT,, SetEnv,HT, % "ááââ´´ææàà&ååãã&au"
. "mlä&bdquo„¦¦&bull•ç縸¢¢&circˆ©©¤¤&dagger†&dagger‡°"
. "°÷÷ééêêèèððëë&euro€&fnofƒ½½¼¼¾¾>>&h"
. "ellip…ííîî¡¡ìì¿¿ïï««&ldquo“&lsaquo‹&lsquo‘<<&m"
. "acr¯&mdash—µµ··  &ndash–¬¬ññóóôô&oeligœòò&or"
. "dfªººøøõõöö¶¶&permil‰±±££"""»»&rdquo”®"
. "®&rsaquo›&rsquo&sbquo‚&scaronš§§­¹¹²²³³ßßþþ&tilde˜&tim"
. "es×&trade™úúûûùù¨¨üüýý¥¥ÿÿ"
;HTM := RegExReplace( HTM,"&(\w+;)", "&$1" ) ;!! для обработки &lt;
;HTM := RegExReplace( HTM,"&(#\d+;)", "&$1" ) ;!! для обработки &#60;
TXT := RegExReplace( HTM,"<[^>]+>", " " ) ; Remove all tags between "<" and ">"
Loop, Parse, TXT, &`; ; Create a list of special characters
L := "&" A_LoopField ";", R .= (!(A_Index&1)) ? ( (!InStr(R,L,1)) ? L:"" ) : ""
StringTrimRight, R, R, 1
Loop, Parse, R , `; ; Parse Special Characters
If F := InStr( HT, A_LoopField ) ; Lookup HT Data
StringReplace, TXT,TXT, %A_LoopField%`;, % SubStr( HT,F+StrLen(A_LoopField), 1 ), All
Else If ( SubStr( A_LoopField,2,1)="#" )
StringReplace, TXT, TXT, %A_LoopField%`;, % Chr(SubStr(A_LoopField,3)), All
;TXT := RegExReplace(TXT, " +", " ") ;!! множественные пробелы на один
Return RegExReplace( TXT, "(^\s*|\s*$)") ; Remove leading/trailing white spaces
}
;---------------------------------------
; Convert strings
;---------------------------------------
/*
CP_ACP = 0
CP_OEMCP = 1
CP_MACCP = 2
CP_UTF7 = 65000
CP_UTF8 = 65001
*/
Ansi2Oem(sString)
{
Ansi2Unicode(sString, wString, 0)
Unicode2Ansi(wString, zString, 1)
Return zString
}
Oem2Ansi(zString)
{
Ansi2Unicode(zString, wString, 1)
Unicode2Ansi(wString, sString, 0)
Return sString
}
Ansi2UTF8(sString)
{
Ansi2Unicode(sString, wString, 0)
Unicode2Ansi(wString, zString, 65001)
Return zString
}
UTF82Ansi(zString)
{
Ansi2Unicode(zString, wString, 65001)
Unicode2Ansi(wString, sString, 0)
Return sString
}
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)
}
;-------------------------------------------------
; HTML encode/decode
;------------------------------------------------
UriEncode(str)
{ ; v 0.3 / (w) 24.06.2008 by derRaphael / zLib-Style release
b_Format := A_FormatInteger
data := ""
SetFormat,Integer,H
Loop,Parse,str
if ((Asc(A_LoopField)>0x7f) || (Asc(A_LoopField)<0x30) || (asc(A_LoopField)=0x3d))
data .= "%" . ((StrLen(c:=SubStr(ASC(A_LoopField),3))<2) ? "0" . c : c)
Else
data .= A_LoopField
SetFormat,Integer,%b_format%
return data
}
UriDecode(str)
{ ; v 0.1 / (w) 28.06.2008 by derRaphael / zLib-Style release
Loop,Parse,str,`%
txt := (A_Index=1) ? A_LoopField : txt chr("0x" substr(A_LoopField,1,2)) SubStr(A_LoopField,3)
return txt
}
UnSlashUnicode(s)
{
; unslash unicode sequences like \u0026
; by Mikhail Kuropyatnikov 2009 (micdelt@mail.ru)
rx = \\u([0-9a-fA-F]{4})
pos = 0
loop
{
pos := RegExMatch(s,rx,m,pos+1)
if (pos = 0)
break
StringReplace, s, s, %m%, % Chr("0x" . SubStr(m,3,4))
}
return s
}
Код:
HTM =
(
§ § параграф
© © знак охраны авторского права (copyright)
® ® символ зарегистрированного товарного знака
™ ™ символ товарного знака
° ° знак градуса
« « левая кавычка (левая ёлочка)
» » правая кавычка (правая ёлочка)
… … многоточие
’ апостроф
„ „ открывающая лапка
“ “ закрывающая лапка
“ “ открывающая английская лапка
” ” закрывающая английская лапка
• • жирная точка
– – короткое тире (см. одноименный § 158)
− − минус
± ± плюс-минус
— — тире
№ № знак номера
)
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
t := UnHTM(UnSlashUnicode(HTM))
; split long line to smaller lines about 40-50 symbols length
;t := RegExReplace(t,".{40,50}(\s)","$0`n")
;MsgBox, % t
MsgBox, % ComUnHTML( HTM )
MsgBox, % UnHTM( HTM )
ComUnHTML(html) {
oHTML := ComObjCreate("HtmlFile")
oHTML.write(html)
return oHTML.documentElement.innerText
}
UnHTM( HTM ) { ; Remove HTML formatting / Convert to ordinary text by SKAN 19-Nov-2009
Static HT ; Forum Topic: www.autohotkey.com/forum/topic51342.html
IfEqual,HT,, SetEnv,HT, % "ááââ´´ææàà&ååãã&au"
. "mlä&bdquo„¦¦&bull•ç縸¢¢&circˆ©©¤¤&dagger†&dagger‡°"
. "°÷÷ééêêèèððëë&euro€&fnofƒ½½¼¼¾¾>>&h"
. "ellip…ííîî¡¡ìì¿¿ïï««&ldquo“&lsaquo‹&lsquo‘<<&m"
. "acr¯&mdash—µµ··  &ndash–¬¬ññóóôô&oeligœòò&or"
. "dfªººøøõõöö¶¶&permil‰±±££"""»»&rdquo”®"
. "®&rsaquo›&rsquo&sbquo‚&scaronš§§­¹¹²²³³ßßþþ&tilde˜&tim"
. "es×&trade™úúûûùù¨¨üüýý¥¥ÿÿ"
;HTM := RegExReplace( HTM,"&(\w+;)", "&$1" ) ;!! для обработки &lt;
;HTM := RegExReplace( HTM,"&(#\d+;)", "&$1" ) ;!! для обработки &#60;
TXT := RegExReplace( HTM,"<[^>]+>", " " ) ; Remove all tags between "<" and ">"
Loop, Parse, TXT, &`; ; Create a list of special characters
L := "&" A_LoopField ";", R .= (!(A_Index&1)) ? ( (!InStr(R,L,1)) ? L:"" ) : ""
StringTrimRight, R, R, 1
Loop, Parse, R , `; ; Parse Special Characters
If F := InStr( HT, A_LoopField ) ; Lookup HT Data
StringReplace, TXT,TXT, %A_LoopField%`;, % SubStr( HT,F+StrLen(A_LoopField), 1 ), All
Else If ( SubStr( A_LoopField,2,1)="#" )
StringReplace, TXT, TXT, %A_LoopField%`;, % Chr(SubStr(A_LoopField,3)), All
;TXT := RegExReplace(TXT, " +", " ") ;!! множественные пробелы на один
Return RegExReplace( TXT, "(^\s*|\s*$)") ; Remove leading/trailing white spaces
}
;---------------------------------------
; Convert strings
;---------------------------------------
/*
CP_ACP = 0
CP_OEMCP = 1
CP_MACCP = 2
CP_UTF7 = 65000
CP_UTF8 = 65001
*/
Ansi2Oem(sString)
{
Ansi2Unicode(sString, wString, 0)
Unicode2Ansi(wString, zString, 1)
Return zString
}
Oem2Ansi(zString)
{
Ansi2Unicode(zString, wString, 1)
Unicode2Ansi(wString, sString, 0)
Return sString
}
Ansi2UTF8(sString)
{
Ansi2Unicode(sString, wString, 0)
Unicode2Ansi(wString, zString, 65001)
Return zString
}
UTF82Ansi(zString)
{
Ansi2Unicode(zString, wString, 65001)
Unicode2Ansi(wString, sString, 0)
Return sString
}
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)
}
;-------------------------------------------------
; HTML encode/decode
;------------------------------------------------
UriEncode(str)
{ ; v 0.3 / (w) 24.06.2008 by derRaphael / zLib-Style release
b_Format := A_FormatInteger
data := ""
SetFormat,Integer,H
Loop,Parse,str
if ((Asc(A_LoopField)>0x7f) || (Asc(A_LoopField)<0x30) || (asc(A_LoopField)=0x3d))
data .= "%" . ((StrLen(c:=SubStr(ASC(A_LoopField),3))<2) ? "0" . c : c)
Else
data .= A_LoopField
SetFormat,Integer,%b_format%
return data
}
UriDecode(str)
{ ; v 0.1 / (w) 28.06.2008 by derRaphael / zLib-Style release
Loop,Parse,str,`%
txt := (A_Index=1) ? A_LoopField : txt chr("0x" substr(A_LoopField,1,2)) SubStr(A_LoopField,3)
return txt
}
UnSlashUnicode(s)
{
; unslash unicode sequences like \u0026
; by Mikhail Kuropyatnikov 2009 (micdelt@mail.ru)
rx = \\u([0-9a-fA-F]{4})
pos = 0
loop
{
pos := RegExMatch(s,rx,m,pos+1)
if (pos = 0)
break
StringReplace, s, s, %m%, % Chr("0x" . SubStr(m,3,4))
}
return s
}
У меня все отображается нормально. Сохраняй скрипт в UTF-8 с BOM и будет тебе счастье (версия AHK должна быть тоже юникодной, и не AHK_L, а последняя с офсайта)
Krot66
Ну то есть да, версия у меня последняя — AutoHotkey_L v1.1.23.05 (Unicode 32-bit), запускаю из файла в UTF-8 с BOM. Тем не менее, вывод из функции ComUnHTML кажет как надо, а второй MsgBox, отображающий работу функции UnHTM, вместо числовых символов выдает символы квадратов.
Добавлено:
Собственно, функцию UnHTM — функции ComUnHTML предпочёл из-за возможности настройки отдельных моментов.
Ну то есть да, версия у меня последняя — AutoHotkey_L v1.1.23.05 (Unicode 32-bit), запускаю из файла в UTF-8 с BOM. Тем не менее, вывод из функции ComUnHTML кажет как надо, а второй MsgBox, отображающий работу функции UnHTM, вместо числовых символов выдает символы квадратов.
Добавлено:
Собственно, функцию UnHTM — функции ComUnHTML предпочёл из-за возможности настройки отдельных моментов.
D1D1D1D
Хм, у меня 64-битная 1.1.23.03, и никаких квадратов в обоих случаях. Если она дает квадраты даже на месте невычисленных строк, значит не читает скрипт как должно. Попробуй в качестве чисто религиозного жеста прописать в начале скрипта
FileEncoding UTF-8
Хм, у меня 64-битная 1.1.23.03, и никаких квадратов в обоих случаях. Если она дает квадраты даже на месте невычисленных строк, значит не читает скрипт как должно. Попробуй в качестве чисто религиозного жеста прописать в начале скрипта
FileEncoding UTF-8
Не, не прокатывает. Там что-то с кодировкой, а в базовой версии 1.0.48.5 канает.
OnMyDSeeAtAll
После правки код работает, но не так как я ожидал.
Объясню, для чего мне это.
Есть редактор кода Орион. В нем отсутствует фича, когда при перетаскивании текста с зажатым Ctrl текст копируется. А мне этого очень не хватает.
Получется что: если перетаскиваешь текст - хоть с любой зажатой клавишей, хоть без - текст просто перемещается.
Вот я хотел, чтобы перетаскиваемый текст был скопирован в буфер а потом вставлен на то место, откуда я его вытащил.
Получится этот фрагмент текста я перетащил на новое место, но и на старом месте он есть. Хоть какая то замена недостающей фиче.
Можно ли это реализовать?
После правки код работает, но не так как я ожидал.
Объясню, для чего мне это.
Есть редактор кода Орион. В нем отсутствует фича, когда при перетаскивании текста с зажатым Ctrl текст копируется. А мне этого очень не хватает.
Получется что: если перетаскиваешь текст - хоть с любой зажатой клавишей, хоть без - текст просто перемещается.
Вот я хотел, чтобы перетаскиваемый текст был скопирован в буфер а потом вставлен на то место, откуда я его вытащил.
Получится этот фрагмент текста я перетащил на новое место, но и на старом месте он есть. Хоть какая то замена недостающей фиче.
Можно ли это реализовать?
Цитата:
Есть редактор кода Орион...Если [more=это] [/more] он, то реализовать посредством AHK не получится.
Страницы: 12345678910111213141516171819202122232425262728293031323334
Предыдущая тема: как добавить ивритские шрифты
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.