Вы должны войти, чтобы создавать сообщения и темы.

Переключение иконки в AutoHotkey v1

Страница 1 из 2►

Добрый вечер. Подскажите, пожалуйста, как сделать так, чтобы иконки AutoHotkey переключались в трее в зависимости от состояния скрипта (запущен/остановлен). 

Скачать

AutoHotkey.ini:

Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Default, Отключить скрипт
Menu, Tray, Icon, Shell32.dll, 131

scriptEnabled := true

$RButton::
KeyWait, RButton, T0.5
If (ErrorLevel == 0)
Send {RButton}
Else 
{
Send ^{vk56sc02f}
}
return

ToggleScript:
scriptEnabled := !scriptEnabled
if scriptEnabled {
    Menu, Tray, Rename, Включить скрипт, Отключить скрипт
} else {
    Menu, Tray, Rename, Отключить скрипт, Включить скрипт
}
return

ExitScript:
ExitApp
return

 

Имир, Привет.
Исправленный код, так как твой не работал вообще, что включенный работал, что выключенный работал....
Иконки пропишешь свои и нужно будет изменить иконку самого exe файла, открыть в редакторе ресурсов, у меня это RisohEditor, ищешь иконку и заменяешь на свою, это главная иконка которая появляется в трее при запуске.

#SingleInstance force
Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Default, Отключить скрипт

scriptEnabled := true
Hotkey, $RButton, RButtonHandler, On
return

RButtonHandler:
KeyWait, RButton, T0.5
if (ErrorLevel == 0)
Send {RButton}
else
Send ^{vk56sc02f}
return

ToggleScript:
scriptEnabled := !scriptEnabled
if (scriptEnabled) {
Menu, Tray, Rename, Включить скрипт, Отключить скрипт
Menu, Tray, Icon, C:\Users\Admin\Desktop\2.ico
Hotkey, $RButton, On
} else {
Menu, Tray, Rename, Отключить скрипт, Включить скрипт
Menu, Tray, Icon, C:\Users\Admin\Desktop\1.ico
Hotkey, $RButton, Off
}
return

ExitScript:
ExitApp
return

 

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Извините за долгий ответ, были какие-то проблемы с доступом на сайт.
Спасибо огромнейшее! Добавил код для копирования и получилась классная утилита, для тех, кто постоянно что-то копипастит) Проверьте, пожалуйста, если не сложно! Возможно, что-то стоит переделать/улучшить/доработать

Цитата: Mikhail от 21.06.2025, 05:05

Имир, Привет.
Исправленный код, так как твой не работал вообще, что включенный работал, что выключенный работал....
Иконки пропишешь свои и нужно будет изменить иконку самого exe файла, открыть в редакторе ресурсов, у меня это RisohEditor, ищешь иконку и заменяешь на свою, это главная иконка которая появляется в трее при запуске.

 
 
 
 
#SingleInstance force
Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Default, Отключить скрипт
 
scriptEnabled := true
Hotkey, $RButton, RButtonHandler, On
return
 
RButtonHandler:
KeyWait, RButton, T0.5
if (ErrorLevel == 0)
Send {RButton}
else
Send ^{vk56sc02f}
return
 
ToggleScript:
scriptEnabled := !scriptEnabled
if (scriptEnabled) {
Menu, Tray, Rename, Включить скрипт, Отключить скрипт
Menu, Tray, Icon, C:\Users\Admin\Desktop\2.ico
Hotkey, $RButton, On
} else {
Menu, Tray, Rename, Отключить скрипт, Включить скрипт
Menu, Tray, Icon, C:\Users\Admin\Desktop\1.ico
Hotkey, $RButton, Off
}
return
 
ExitScript:
ExitApp
return
#SingleInstance force Menu, Tray, NoStandard Menu, Tray, Add, Отключить скрипт, ToggleScript Menu, Tray, Add, Выход, ExitScript Menu, Tray, Default, Отключить скрипт scriptEnabled := true Hotkey, $RButton, RButtonHandler, On return RButtonHandler: KeyWait, RButton, T0.5 if (ErrorLevel == 0) Send {RButton} else Send ^{vk56sc02f} return ToggleScript: scriptEnabled := !scriptEnabled if (scriptEnabled) { Menu, Tray, Rename, Включить скрипт, Отключить скрипт Menu, Tray, Icon, C:\Users\Admin\Desktop\2.ico Hotkey, $RButton, On } else { Menu, Tray, Rename, Отключить скрипт, Включить скрипт Menu, Tray, Icon, C:\Users\Admin\Desktop\1.ico Hotkey, $RButton, Off } return ExitScript: ExitApp return
 
#SingleInstance force
Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Default, Отключить скрипт

scriptEnabled := true
Hotkey, $RButton, RButtonHandler, On
return

RButtonHandler:
KeyWait, RButton, T0.5
if (ErrorLevel == 0)
Send {RButton}
else
Send ^{vk56sc02f}
return

ToggleScript:
scriptEnabled := !scriptEnabled
if (scriptEnabled) {
Menu, Tray, Rename, Включить скрипт, Отключить скрипт
Menu, Tray, Icon, C:\Users\Admin\Desktop\2.ico
Hotkey, $RButton, On
} else {
Menu, Tray, Rename, Отключить скрипт, Включить скрипт
Menu, Tray, Icon, C:\Users\Admin\Desktop\1.ico
Hotkey, $RButton, Off
}
return

ExitScript:
ExitApp
return

 

Mikhail, добрый день! Помогите, пожалуйста! Дописал скрипт, чтобы действие бесконечно повторялось пока удерживается кнопка. Задержка между действиями 1000 мс. Но мне нужно чтобы задержка была сперва однократно Скопировано1000 мс, а потом бесконечно Скопировано200 мс. Не знаю, как это реализовать(
P.S. Кстати, сделал, как вы мне и говорили, заменил иконку СкопированоAutoHotkey в СкопированоRisohEditor на свою. Спасибо большое! Получилась вот такая красота!

RButtonHandler:
KeyWait, RButton, T0.5
if (ErrorLevel == 0)
Send {RButton}
else
Loop
{
Send ^{vk56sc02f}
Sleep 1000
If !GetKeyState("RButton", "P")
break
}
return

 

Имир, Привет.

RButton::
    KeyWait, RButton, T0.5
    if (ErrorLevel == 0) {
        Send {RButton}
    } else {
        first := true
        Loop {
            Send ^{vk56sc02f}
            if (first) {
                Sleep 1000
                first := false
            } else {
                Sleep 200
            }
            if !GetKeyState("RButton", "P")
                break
        }
    }
return

 

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, почему-то выдаёт ошибку(

Mikhail, исправил СкопированоRButton:: на СкопированоRButtonHandler:, всё заработало! Огромное спасибо за помощь!

Mikhail, извините, а можно поместить в Скопированоexe-файл обе иконки? И как в таком случае должен выглядеть Скопированоini-файл? Сейчас Скопированоini-файл, за исключением самого скрипта, у меня выглядит вот так:

#SingleInstance force
Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Default, Отключить скрипт
Menu, Tray, Icon, 1.ico

scriptEnabled := true

--------------------------------------------------------

ToggleScript:
scriptEnabled := !scriptEnabled
if (scriptEnabled) {
Menu, Tray, Rename, Включить скрипт, Отключить скрипт
Menu, Tray, Icon, 1.ico
} else {
Menu, Tray, Rename, Отключить скрипт, Включить скрипт
Menu, Tray, Icon, 2.ico
}
return

ExitScript:
ExitApp
return

 

Имир, Да ничего можно не менять, просто в ResourceHacker отредактируй у exe(скомпилированного ahk) файла все иконки под себя и все.

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

А, я понял, ты про то, что ты собрал с иконками и exe файл который запускает ini файл, который на самом деле ahk😅, никак тогда не сделать, все что ты укажешь в ini файле, который на самом деле ahk, твой exe, будет запускать как ini файл, а ini файл не умеет шариться в exe за иконками), а так если это был бы ahk скомпилированный в exe, то, просто заменить на СкопированоMenu, Tray, Icon, %A_ScriptFullPath%, 1, цифра в конце, номер иконки в icongroup в exe файле, тогда он будет искать иконку у себя.

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, всё, понял теперь)) Спасибо! Ещё по поводу скрипта, заметил, что если быстро отпустить СкопированоПКМ после выполнения скрипта и снова нажать и удерживать, то скрипт не начнётся с начала, а как бы продолжится. То есть скрипт отработает до первой задержки в Скопировано1000 мс (Sleep 1000), а после отпускания СкопированоПКМ и второго нажатия он сразу начнёт выполняться с задержкой Скопировано200 мс (Sleep 200). Как бы это пофиксить?

Имир, Скрипт должен по идее работать как СкопированоRButton::, Gif записал, работает все как нужно.


Если мгновенно отпустить и нажать снова мгновенно, то да, продолжает, скрипт не успел еще завершиться.

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, добрый вечер! У меня именно так и работает! Спасибо огромное! Незаменимая вещь для тех, кто часто и очень много работает с текстом! По сути это полностью ваша программа) Весь скрипт сделан вами и вами же доработан) Осталось придумать название и иконку)
Вот, что получилось, если конечно я ничего не накосячил:

Спойлер

#SingleInstance force
Menu, Tray, NoStandard
Menu, Tray, Add, Отключить скрипт, ToggleScript
Menu, Tray, Add, Выход, ExitScript
Menu, Tray, Default, Отключить скрипт
Menu, Tray, Icon, 1.ico

scriptEnabled := true

RButton::
    KeyWait, RButton, T0.5
    if (ErrorLevel == 0) {
        Send {RButton}
    } else {
        first := true
        Loop {
            Send ^{vk56sc02f}
            if (first) {
                Sleep 1000
                first := false
            } else {
                Sleep 200
            }
            if !GetKeyState("RButton", "P")
                break
        }
    }
return

~LButton::
if scriptEnabled {
    TimeButtonDown = %A_TickCount%
    Loop
    {
        Sleep 10
        GetKeyState, LButtonState, LButton, P
        if LButtonState = U
            break
        elapsed = %A_TickCount%
        elapsed -= %TimeButtonDown%
        if elapsed > 200
        {
            clip0 := ClipBoardAll
            MouseGetPos x0, y0
            Loop
            {
                Sleep 20
                GetKeyState keystate, LButton
                IfEqual keystate, U, {
                    MouseGetPos x, y
                    break
                }
            }
            if (x-x0 > 5 or x-x0 < -5 or y-y0 > 5 или y-y0 < -5)
            {         
                Send ^{vk43sc02e}
                ClipWait 1, 1
                IfEqual ClipBoard,, SetEnv ClipBoard, %clip0%
            }
            return
        }
    }
}
return

ToggleScript:
scriptEnabled := !scriptEnabled
if (scriptEnabled) {
Menu, Tray, Rename, Включить скрипт, Отключить скрипт
Menu, Tray, Icon, 1.ico
} else {
Menu, Tray, Rename, Отключить скрипт, Включить скрипт
Menu, Tray, Icon, 2.ico
}
return

ExitScript:
ExitApp
return

 

Имир, Привет.
Что это у тебя тут за штука), "или", можно сдвиг мышки переделать на Скопированоif (Abs(x-x0) > 5 or Abs(y-y0) > 5) и копирование в буфер, через СкопированоSend ^c
В общем блок сдвига курсора и копирования, можно вот так сделать.

if (Abs(x-x0) > 5 or Abs(y-y0) > 5) {
                Send ^c
                ClipWait, 1, 1
                if (ClipBoard = "")
                    ClipBoard := clip0
            }
            return

 

Лайкнул Имир
Имир
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
Страница 1 из 2►