by vmech » 14 Nov 2023, 15:34
marusa122 wrote: ↑14 Nov 2023, 14:51
@vmech, до того, как я полезла менять названия переменных, скрипт работал нормально, только горячие клавиши невозможно было сохранить через GUI.
Я у себя поменял в точности, как ты у себя сделала - всё работает. Вообще никаких проблем.
marusa122 wrote: ↑14 Nov 2023, 14:51
А сейчас, получается, скрипт не может перехватить управление клавишами у системы?..
Не у СИСТЕМЫ ! Windows сама по себе никогда никаких клавиш не блокирует.
Это какая то программа, постоянно запущенная, или драйвер, блокируют доступ к этим клавишам.
marusa122 wrote: ↑14 Nov 2023, 14:51
Поставила клавиши F1 и F2 - так они вместо того, чтобы выполнять сценарий по скрипту, выключают и включают звук.
Так у тебя ноутбук что ли ?
Если так, то с очень высокой вероятностью проблемы вызывает ноутбучный софт, «любезно» предустановленный производителем ноутбука.
Если ты не переустанавливала Windows на нём.
А если переустанавливала, тогда это какой то из драйверов, вероятно клавиатуры, которые были установлены вручную.
По сути, он нужен чтобы расширить функционал куцей ноутбучной клавиатуры до функционала полноразмерной настольной клавиатуры. Ну и плюс всякие доп.плюшки - вроде управления громкостью на
F1/
F2.
marusa122 wrote: ↑14 Nov 2023, 14:51
Я только недавно из Блокнота в Notepad++ перешла.
Ну с одной стороны - если устраивает, то и менять нет большого смысла.
Но с другой стороны - именно так и находится идеал. Постоянный поиск.
Код/Кодиум, как просто редактор, как минимум не уступают Notepad++.
А именно как среда разработки программ - на 2 головы выше любых нотепадов. Уж поверь мне на слово
marusa122 wrote: ↑14 Nov 2023, 14:51
Да и в моем случае никакая среда разработки не поможет, если руки растут
из жо... из неожиданного с точки зрения физиологии места))
Ну не стоит так безапеляционно принижать свои способности. Да и руки тут совсем ни при чём.
Недостаток знаний и опыта - в это я куда охотнее поверю. А решается этот недочёт постоянной практикой.
Никто из посетителей этого форума, или любого другого, не родился программистом. Никто.
Всё решают талант и усердие.
marusa122 wrote: ↑14 Nov 2023, 14:51
Сейчас скрипт полностью выглядит так:
Может, я оттуда удалила что-то важное, отчего скрипт теперь гордо игнорирует F1-F12 в качестве горячих клавиш?
Да всё нормально со скриптом. Загрузил, запустил - всё работает. Проверил все кнопки от
F1 до
F12 - всё пучком, никаких проблем.
Но у меня
норма обычный комп, с обычной настольной клавиатурой.
Из резидентных перехватчиков нажатий - только ShareX. Но она только кнопку
PrintScreen перехватывает.
А, ещё foobar2000. Он задействует
Win и
цифры на нампаде. Больше ничего.
Ну на, попробуй мой скрипт. Я больше чем уверен, что результат будет точно такой же.
Code: Select all
#Requires Autohotkey v1.1
ProgramName := "Awesome Script"
iniFilename := A_ScriptDir "\AppLauncher.ini"
GoSub ReadSettingsFromIni
Loop
{
If (A_Index < 5)
Continue
If (A_Index > 49)
Break
HotString(":?*X:-" . A_Index, "SubtractNum")
}
MsgBox, 4, % ProgramName, % "Вы хотите изменить настройки запуска?`n" ProgramName " пропустит этот шаг через несколько секунд...", 5
IfMsgBox Yes
{
GoSub ShowSettingsWindow
Return
}
Else ; Тут или прошло пять секунд, или пользователь нажал Нет.
{
GoTo OnButtonRun
Return
}
; >>>>>>>>>> ЗДЕСЬ заканчивается секция автозапуска
; >>>>>>>>>> и скрипт переходит в режим ожидания действий пользователя
; код пользовательской формы для настройки скрипта и сохранения настроек с помощью IniWrite
ShowSettingsWindow:
; {
Gui, New
Gui, Add, Text, % "Xm+20 Ym W175 R1", % "Шаг 2. Выбор суммы"
Gui, Add, Edit, % "X+10 Yp W40 R1 vEd_CordSumX", % Ed_CordSumX
Gui, Add, Edit, % "X+10 Yp W40 R1 vEd_CordSumY", % Ed_CordSumY
Gui, Add, Text, % "Xm+20 Y+m W100 R1", % "Обновление (Р)"
Gui, Add, Edit, % "X+10 Yp W165 R1 vHotKey_Refresh", % HotKey_Refresh
Gui, Add, Text, % "Xm+20 Y+m W100 R1", % "Скриншоты"
Gui, Add, Edit, % "X+10 Yp W165 R1 vHotKey_Screen", % HotKey_Screen
Gui, Add, Text, % "Xm+20 Y+m W100 R1", % "Браузер"
Gui, Add, Edit , % "X+10 Yp W115 R1 vEd_AppS", % Ed_AppS
Gui, Add, Button, % "X+0 Yp W20 R1 gOnButtonAppS", ...
Gui, Add, Text, % "Xm+20 Y+m W100 R1", % "Информация"
Gui, Add, Edit, % "X+10 Yp W40 R1 vEd_CordInfoX", % Ed_CordInfoX
Gui, Add, Edit, % "X+10 Yp W40 R1 vEd_CordInfoY", % Ed_CordInfoY
Gui, Add, Text , % "Xm+20 Y+m W100 R1", % "Имена файлов"
Gui, Add, Edit , % "X+10 Yp W135 R1 vEd_Names", % Ed_Names
Gui, Add, Text , % "Xm+20 Y+m W100 R1", % "Рабочая папка"
Gui, Add, Edit , % "X+10 Yp W115 R1 vEd_Folder", % Ed_Folder
Gui, Add, Button, % "X+0 Yp W20 R1 gOnButtonFolder", ...
Gui, Add, Button, % "Xm Y+20 W305 R3 gOnButtonRun", % "Начать работу"
Gui, Add, Button, % "Xm Y+m W150 R1 gOnButtonSave", % "Сохранить"
Gui, Add, Button, % "X+5 Yp W150 R1 gOnButtonExit", % "Выйти"
Gui, Show
Return
; }
; Кнопка выбора папки для сохранения скриншотов
OnButtonFolder:
{
FileSelectFolder, vOutFolder,, 3, % "Выберите папку для сохранения рабочих скриншотов..."
If (ErrorLevel == 0)
GuiControl, Text, Ed_Folder, % vOutFolder
Return
}
; Кнопка выбора расположения браузера для запуска
OnButtonAppS:
{
FileSelectFile, vOutFile, % 1|2|32, % A_ScriptDir, % "Выберите расположение рабочего браузера...", % "Application (*.exe)"
If (ErrorLevel == 0)
GuiControl, Text, Ed_AppS, % vOutFile
Return
}
; Кнопка запуска
OnButtonRun:
; {
GoSub DisableCustomHotkeys ; Отключаем старые горячие клавиши
Gui, Submit
GoSub EnableCustomHotkeys ; Назначаем новые горячие клавиши
Run, % Ed_AppS
Return
TrayTip, % "Запуск " ProgramName, % "Программа " ProgramName " запущена!`nДля остановки щелкните ПКМ по значку " ProgramName " и выберите «Exit»"
Return
; }
; Кнопка сохранения настроек
OnButtonSave:
; {
GoSub DisableCustomHotkeys ; Отключаем старые горячие клавиши
Gui, Submit, NoHide
GoSub EnableCustomHotkeys ; Включаем новые горячие клавиши
IniWrite, % Ed_CordSumx, % iniFilename, % "Settings", % "CordSumX"
IniWrite, % Ed_CordSumy, % iniFilename, % "Settings", % "CordSumY"
IniWrite, % Ed_CordRefx, % iniFilename, % "Settings", % "CordRefX"
IniWrite, % Ed_CordRefy, % iniFilename, % "Settings", % "CordRefY"
IniWrite, % Ed_CordInfox, % iniFilename, % "Settings", % "CordInfoX"
IniWrite, % Ed_CordInfoy, % iniFilename, % "Settings", % "CordInfoY"
IniWrite, % Ed_Names, % iniFilename, % "Settings", % "Names"
IniWrite, % Ed_Folder, % iniFilename, % "Settings", % "Folder"
IniWrite, % Ed_AppS, % iniFilename, % "Settings", % "AppStart"
IniWrite, % HotKey_Refresh, % iniFilename, % "Settings", % "KeyRefresh"
IniWrite, % HotKey_Screen, % iniFilename, % "Settings", % "KeyScreen"
FileSetAttrib, % "+H", % iniFilename
Sleep 100
Msgbox, , % ProgramName, % "Настройки успешно сохранены!", 3
Return
; }
ReadSettingsFromIni:
; {
IniRead, Ed_CordSumX, % iniFilename, % "Settings", % "CordSumX", 1280
IniRead, Ed_CordSumY, % iniFilename, % "Settings", % "CordSumY", 650
IniRead, Ed_CordRefX, % iniFilename, % "Settings", % "CordRefX", 1135
IniRead, Ed_CordRefY, % iniFilename, % "Settings", % "CordRefY", 95
IniRead, Ed_CordInfoX, % iniFilename, % "Settings", % "CordInfoX", 210
IniRead, Ed_CordInfoY, % iniFilename, % "Settings", % "CordInfoY", 125
IniRead, Ed_Names, % iniFilename, % "Settings", % "Names", % "Screenshot"
IniRead, Ed_Folder, % iniFilename, % "Settings", % "Folder", % A_Space
IniRead, Ed_AppS, % iniFilename, % "Settings", % "AppStart", % A_Space
IniRead, HotKey_Refresh, % iniFilename, % "Settings", % "KeyRefresh", % "F5"
IniRead, HotKey_Screen, % iniFilename, % "Settings", % "KeyScreen", % "LWin"
Return
; }
DisableCustomHotkeys:
; {
; Прячем ошибки в случае, если была задана некорректная клавиша.
Try
{
HotKey, % HotKey_Refresh, % "Off"
HotKey, % HotKey_Screen, % "Off"
}
Return
; }
EnableCustomHotkeys:
; {
Try
{
HotKey, % HotKey_Refresh, % "OnKey_Refresh", % "On"
HotKey, % HotKey_Screen, % "OnKey_Screen", % "On"
}
Catch err
{
GoSub DisableCustomHotkeys
errorMessage := err.Message
MsgBox, 48, % ProgramName, % "Не удалось создать горячие клавиши!`nСовет: воспользуйтесь документацией по ссылке «Правописание»`n`n" errorMessage, 5
}
Return
; }
; Автозамены
:*:а1::автозамена 1
:*:а2::автозамена 2
:*:а3::автозамена 3
:*:да::
{
FormatTime, CurrentDateTime,, % "dd.MM H:mm"
SetKeyDelay, 0
Send, % CurrentDateTime " выполнено"
Return
}
OnKey_Refresh:
; {
Click, %Ed_CordRefX% %Ed_CordRefY%
Return
; }
OnKey_Screen:
; Original by SKAN on D293 @ bit.ly/2krOIc9
{
; На случай, если пользователь ввёл что-то не то:
If (Ed_Folder == "") ; Если папка не задана
Ed_Folder := A_ScriptDir . "\Рабочие скриншоты" ; будем класть снимки в папку со скриптом
If (InStr(FileExist(Ed_Folder), "D") == 0) ; или такой папки не существует,
FileCreateDir, % Ed_Folder ; создадим её сами
If (Ed_Names == "") ; Если имя файла не задано
|| (InStr(Ed_Names, "<") != 0) ; или в имени файла есть недопустимые символы...
|| (InStr(Ed_Names, ">") != 0)
|| (InStr(Ed_Names, "?") != 0)
|| (InStr(Ed_Names, "*") != 0)
|| (InStr(Ed_Names, ":") != 0)
|| (InStr(Ed_Names, "\") != 0)
|| (InStr(Ed_Names, "/") != 0)
|| (InStr(Ed_Names, """") != 0)
{
Ed_Names := "Screenshot" ; ...будем называть файлы по умолчанию
}
; Отыскиваем подходящее имя файла
Loop
{
filename := Format("{1}\{2} ({3}).png", Ed_Folder, Ed_Names, A_Index)
If !FileExist(filename)
Break
}
; Делаем снимок экрана
MouseMove, % Ed_CordInfoX, % Ed_CordInfoY
Sleep, 1000
MakeScreenshot( filename )
Msgbox,, % ProgramName, % "Скриншот сохранен!", 1
Return
}
SubtractNum()
{
Global
ClipSave := ClipboardAll
Clipboard := ""
RegexMatch(A_ThisHotkey, "(?<=-)\d+", vNumber)
MouseMove, % Ed_CordSumX, % Ed_CordSumY
Click, 2
Send, % "^{c}"
ClipWait, 2
Result := Round(Clipboard - vNumber, 2)
MsgBox, 0, % "Итоговая сумма", % Result
Clipboard := ClipSave
}
; Функции для создания скриншота
MakeScreenshot(filename := "")
{
If (filename == "")
Return
X := 0, Y := 0, W := A_ScreenWidth, H := A_ScreenHeight
VarSetCapacity(BITMAPINFO, 40, 0)
NumPut(32, NumPut(1, NumPut(H, NumPut(W, NumPut(40, BITMAPINFO, "Int"), "Int"), "Int"), "Short"), "Short")
hBM := DllCall("Gdi32.dll\CreateDIBSection", "Ptr",0, "Ptr",&BITMAPINFO, "Int",0, "PtrP",pBits:=0, "Ptr",0, "Int",0, "Ptr")
sDC := DllCall("User32.dll\GetDC", "Ptr",0, "Ptr")
mDC := DllCall("Gdi32.dll\CreateCompatibleDC", "Ptr",0, "Ptr")
DllCall("Gdi32.dll\SelectObject", "Ptr",mDC, "Ptr",hBM)
DllCall("Gdi32.dll\BitBlt", "Ptr",mDC, "Int",0, "Int",0, "Int",W, "Int",H, "Ptr",sDC, "Int",X, "Int",Y, "Int",0x40CC0020)
GDIP("Startup")
SavePicture(hBM, filename)
GDIP("Shutdown")
DllCall("Gdi32.dll\DeleteDC", "Ptr",mDC)
DllCall("User32.dll\ReleaseDC", "Ptr",0, "Ptr",sDC)
DllCall("Gdi32.dll\DeleteObject", "Ptr",hBM)
}
GDIP(C := "Startup")
{
Static SI := Chr(!(VarSetCapacity(Si,24,0)>>16)), pToken := 0, hMod := 0, Res := 0, AOK := 0
If (AOK := (C = "Startup" and pToken = 0) or (C != "Startup" and pToken != 0))
{
If (C = "Startup")
{
hMod := DllCall("LoadLibrary", "Str","gdiplus.dll", "Ptr")
Res := DllCall("gdiplus\GdiplusStartup", "PtrP",pToken, "Ptr",&SI, "UInt",0)
} Else {
Res := DllCall("gdiplus\GdiplusShutdown", "Ptr",pToken)
DllCall("FreeLibrary", "Ptr",hMod), hMod := 0, pToken := 0
}
}
Return (AOK ? !Res : Res := 0)
}
SavePicture(hBM, sFile) {
Local V, pBM := VarSetCapacity(V,16,0)>>8, Ext := LTrim(SubStr(sFile,-3),"."), E := [0,0,0,0]
Local Enc := 0x557CF400 | Round({"bmp":0, "jpg":1, "jpeg":1, "gif":2, "tif":5, "tiff":5, "png":6}[Ext])
E[1] := DllCall("gdi32\GetObjectType", "Ptr",hBM ) <> 7
E[2] := E[1] ? 0 : DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "Ptr",hBM, "UInt",0, "PtrP",pBM)
NumPut(0x2EF31EF8, NumPut(0x0000739A, NumPut(0x11D31A04, NumPut(Enc + 0, V, "UInt"), "UInt"), "UInt"), "UInt")
E[3] := pBM ? DllCall("gdiplus\GdipSaveImageToFile", "Ptr",pBM, "WStr",sFile, "Ptr",&V, "UInt",0) : 1
E[4] := pBM ? DllCall("gdiplus\GdipDisposeImage", "Ptr",pBM) : 1
Return E[1] ? 0 : E[2] ? -1 : E[3] ? -2 : E[4] ? -3 : 1
}
; При нажатии Esc, закрытии окна или нажатии кнопки Exit скрипт завершается.
GuiClose:
GuiEscape:
OnButtonExit:
ExitApp
[quote=marusa122 post_id=547071 time=1699991518 user_id=157643]
@vmech, до того, как я полезла менять названия переменных, скрипт работал нормально, только горячие клавиши невозможно было сохранить через GUI.
[/quote]
Я у себя поменял в точности, как ты у себя сделала - всё работает. Вообще никаких проблем.
[quote=marusa122 post_id=547071 time=1699991518 user_id=157643]
А сейчас, получается, скрипт не может перехватить управление клавишами у системы?..
[/quote]
Не у СИСТЕМЫ ! Windows сама по себе никогда никаких клавиш не блокирует.
Это какая то программа, постоянно запущенная, или драйвер, блокируют доступ к этим клавишам.
[quote=marusa122 post_id=547071 time=1699991518 user_id=157643]
Поставила клавиши F1 и F2 - так они вместо того, чтобы выполнять сценарий по скрипту, выключают и включают звук.
[/quote]
Так у тебя ноутбук что ли ?
Если так, то с очень высокой вероятностью проблемы вызывает ноутбучный софт, «любезно» предустановленный производителем ноутбука.
Если ты не переустанавливала Windows на нём.
А если переустанавливала, тогда это какой то из драйверов, вероятно клавиатуры, которые были установлены вручную.
По сути, он нужен чтобы расширить функционал куцей ноутбучной клавиатуры до функционала полноразмерной настольной клавиатуры. Ну и плюс всякие доп.плюшки - вроде управления громкостью на [kbd]F1[/kbd]/[kbd]F2[/kbd].
[quote=marusa122 post_id=547071 time=1699991518 user_id=157643]
Я только недавно из Блокнота в Notepad++ перешла. :D
[/quote]
Ну с одной стороны - если устраивает, то и менять нет большого смысла.
Но с другой стороны - именно так и находится идеал. Постоянный поиск.
Код/Кодиум, как просто редактор, как минимум не уступают Notepad++.
А именно как среда разработки программ - на 2 головы выше любых нотепадов. Уж поверь мне на слово ;)
[quote=marusa122 post_id=547071 time=1699991518 user_id=157643]
Да и в моем случае никакая среда разработки не поможет, если руки растут [s]из жо...[/s] из неожиданного с точки зрения физиологии места))
[/quote]
Ну не стоит так безапеляционно принижать свои способности. Да и руки тут совсем ни при чём.
Недостаток знаний и опыта - в это я куда охотнее поверю. А решается этот недочёт постоянной практикой.
Никто из посетителей этого форума, или любого другого, не родился программистом. Никто.
Всё решают талант и усердие.
[quote=marusa122 post_id=547071 time=1699991518 user_id=157643]
Сейчас скрипт полностью выглядит так:
Может, я оттуда удалила что-то важное, отчего скрипт теперь гордо игнорирует F1-F12 в качестве горячих клавиш?
[/quote]
Да всё нормально со скриптом. Загрузил, запустил - всё работает. Проверил все кнопки от [kbd]F1[/kbd] до [kbd]F12[/kbd] - всё пучком, никаких проблем.
Но у меня [strike]норма[/strike] обычный комп, с обычной настольной клавиатурой.
Из резидентных перехватчиков нажатий - только ShareX. Но она только кнопку [kbd]PrintScreen[/kbd] перехватывает.
А, ещё foobar2000. Он задействует [kbd]Win[/kbd] и [kbd]цифры на нампаде[/kbd]. Больше ничего.
Ну на, попробуй мой скрипт. Я больше чем уверен, что результат будет точно такой же.
[Codebox=autohotkey file=Hotstrings_on_Coords_Calc_w_ReadWriteIni_03.ahk]
#Requires Autohotkey v1.1
ProgramName := "Awesome Script"
iniFilename := A_ScriptDir "\AppLauncher.ini"
GoSub ReadSettingsFromIni
Loop
{
If (A_Index < 5)
Continue
If (A_Index > 49)
Break
HotString(":?*X:-" . A_Index, "SubtractNum")
}
MsgBox, 4, % ProgramName, % "Вы хотите изменить настройки запуска?`n" ProgramName " пропустит этот шаг через несколько секунд...", 5
IfMsgBox Yes
{
GoSub ShowSettingsWindow
Return
}
Else ; Тут или прошло пять секунд, или пользователь нажал Нет.
{
GoTo OnButtonRun
Return
}
; >>>>>>>>>> ЗДЕСЬ заканчивается секция автозапуска
; >>>>>>>>>> и скрипт переходит в режим ожидания действий пользователя
; код пользовательской формы для настройки скрипта и сохранения настроек с помощью IniWrite
ShowSettingsWindow:
; {
Gui, New
Gui, Add, Text, % "Xm+20 Ym W175 R1", % "Шаг 2. Выбор суммы"
Gui, Add, Edit, % "X+10 Yp W40 R1 vEd_CordSumX", % Ed_CordSumX
Gui, Add, Edit, % "X+10 Yp W40 R1 vEd_CordSumY", % Ed_CordSumY
Gui, Add, Text, % "Xm+20 Y+m W100 R1", % "Обновление (Р)"
Gui, Add, Edit, % "X+10 Yp W165 R1 vHotKey_Refresh", % HotKey_Refresh
Gui, Add, Text, % "Xm+20 Y+m W100 R1", % "Скриншоты"
Gui, Add, Edit, % "X+10 Yp W165 R1 vHotKey_Screen", % HotKey_Screen
Gui, Add, Text, % "Xm+20 Y+m W100 R1", % "Браузер"
Gui, Add, Edit , % "X+10 Yp W115 R1 vEd_AppS", % Ed_AppS
Gui, Add, Button, % "X+0 Yp W20 R1 gOnButtonAppS", ...
Gui, Add, Text, % "Xm+20 Y+m W100 R1", % "Информация"
Gui, Add, Edit, % "X+10 Yp W40 R1 vEd_CordInfoX", % Ed_CordInfoX
Gui, Add, Edit, % "X+10 Yp W40 R1 vEd_CordInfoY", % Ed_CordInfoY
Gui, Add, Text , % "Xm+20 Y+m W100 R1", % "Имена файлов"
Gui, Add, Edit , % "X+10 Yp W135 R1 vEd_Names", % Ed_Names
Gui, Add, Text , % "Xm+20 Y+m W100 R1", % "Рабочая папка"
Gui, Add, Edit , % "X+10 Yp W115 R1 vEd_Folder", % Ed_Folder
Gui, Add, Button, % "X+0 Yp W20 R1 gOnButtonFolder", ...
Gui, Add, Button, % "Xm Y+20 W305 R3 gOnButtonRun", % "Начать работу"
Gui, Add, Button, % "Xm Y+m W150 R1 gOnButtonSave", % "Сохранить"
Gui, Add, Button, % "X+5 Yp W150 R1 gOnButtonExit", % "Выйти"
Gui, Show
Return
; }
; Кнопка выбора папки для сохранения скриншотов
OnButtonFolder:
{
FileSelectFolder, vOutFolder,, 3, % "Выберите папку для сохранения рабочих скриншотов..."
If (ErrorLevel == 0)
GuiControl, Text, Ed_Folder, % vOutFolder
Return
}
; Кнопка выбора расположения браузера для запуска
OnButtonAppS:
{
FileSelectFile, vOutFile, % 1|2|32, % A_ScriptDir, % "Выберите расположение рабочего браузера...", % "Application (*.exe)"
If (ErrorLevel == 0)
GuiControl, Text, Ed_AppS, % vOutFile
Return
}
; Кнопка запуска
OnButtonRun:
; {
GoSub DisableCustomHotkeys ; Отключаем старые горячие клавиши
Gui, Submit
GoSub EnableCustomHotkeys ; Назначаем новые горячие клавиши
Run, % Ed_AppS
Return
TrayTip, % "Запуск " ProgramName, % "Программа " ProgramName " запущена!`nДля остановки щелкните ПКМ по значку " ProgramName " и выберите «Exit»"
Return
; }
; Кнопка сохранения настроек
OnButtonSave:
; {
GoSub DisableCustomHotkeys ; Отключаем старые горячие клавиши
Gui, Submit, NoHide
GoSub EnableCustomHotkeys ; Включаем новые горячие клавиши
IniWrite, % Ed_CordSumx, % iniFilename, % "Settings", % "CordSumX"
IniWrite, % Ed_CordSumy, % iniFilename, % "Settings", % "CordSumY"
IniWrite, % Ed_CordRefx, % iniFilename, % "Settings", % "CordRefX"
IniWrite, % Ed_CordRefy, % iniFilename, % "Settings", % "CordRefY"
IniWrite, % Ed_CordInfox, % iniFilename, % "Settings", % "CordInfoX"
IniWrite, % Ed_CordInfoy, % iniFilename, % "Settings", % "CordInfoY"
IniWrite, % Ed_Names, % iniFilename, % "Settings", % "Names"
IniWrite, % Ed_Folder, % iniFilename, % "Settings", % "Folder"
IniWrite, % Ed_AppS, % iniFilename, % "Settings", % "AppStart"
IniWrite, % HotKey_Refresh, % iniFilename, % "Settings", % "KeyRefresh"
IniWrite, % HotKey_Screen, % iniFilename, % "Settings", % "KeyScreen"
FileSetAttrib, % "+H", % iniFilename
Sleep 100
Msgbox, , % ProgramName, % "Настройки успешно сохранены!", 3
Return
; }
ReadSettingsFromIni:
; {
IniRead, Ed_CordSumX, % iniFilename, % "Settings", % "CordSumX", 1280
IniRead, Ed_CordSumY, % iniFilename, % "Settings", % "CordSumY", 650
IniRead, Ed_CordRefX, % iniFilename, % "Settings", % "CordRefX", 1135
IniRead, Ed_CordRefY, % iniFilename, % "Settings", % "CordRefY", 95
IniRead, Ed_CordInfoX, % iniFilename, % "Settings", % "CordInfoX", 210
IniRead, Ed_CordInfoY, % iniFilename, % "Settings", % "CordInfoY", 125
IniRead, Ed_Names, % iniFilename, % "Settings", % "Names", % "Screenshot"
IniRead, Ed_Folder, % iniFilename, % "Settings", % "Folder", % A_Space
IniRead, Ed_AppS, % iniFilename, % "Settings", % "AppStart", % A_Space
IniRead, HotKey_Refresh, % iniFilename, % "Settings", % "KeyRefresh", % "F5"
IniRead, HotKey_Screen, % iniFilename, % "Settings", % "KeyScreen", % "LWin"
Return
; }
DisableCustomHotkeys:
; {
; Прячем ошибки в случае, если была задана некорректная клавиша.
Try
{
HotKey, % HotKey_Refresh, % "Off"
HotKey, % HotKey_Screen, % "Off"
}
Return
; }
EnableCustomHotkeys:
; {
Try
{
HotKey, % HotKey_Refresh, % "OnKey_Refresh", % "On"
HotKey, % HotKey_Screen, % "OnKey_Screen", % "On"
}
Catch err
{
GoSub DisableCustomHotkeys
errorMessage := err.Message
MsgBox, 48, % ProgramName, % "Не удалось создать горячие клавиши!`nСовет: воспользуйтесь документацией по ссылке «Правописание»`n`n" errorMessage, 5
}
Return
; }
; Автозамены
:*:а1::автозамена 1
:*:а2::автозамена 2
:*:а3::автозамена 3
:*:да::
{
FormatTime, CurrentDateTime,, % "dd.MM H:mm"
SetKeyDelay, 0
Send, % CurrentDateTime " выполнено"
Return
}
OnKey_Refresh:
; {
Click, %Ed_CordRefX% %Ed_CordRefY%
Return
; }
OnKey_Screen:
; Original by SKAN on D293 @ bit.ly/2krOIc9
{
; На случай, если пользователь ввёл что-то не то:
If (Ed_Folder == "") ; Если папка не задана
Ed_Folder := A_ScriptDir . "\Рабочие скриншоты" ; будем класть снимки в папку со скриптом
If (InStr(FileExist(Ed_Folder), "D") == 0) ; или такой папки не существует,
FileCreateDir, % Ed_Folder ; создадим её сами
If (Ed_Names == "") ; Если имя файла не задано
|| (InStr(Ed_Names, "<") != 0) ; или в имени файла есть недопустимые символы...
|| (InStr(Ed_Names, ">") != 0)
|| (InStr(Ed_Names, "?") != 0)
|| (InStr(Ed_Names, "*") != 0)
|| (InStr(Ed_Names, ":") != 0)
|| (InStr(Ed_Names, "\") != 0)
|| (InStr(Ed_Names, "/") != 0)
|| (InStr(Ed_Names, """") != 0)
{
Ed_Names := "Screenshot" ; ...будем называть файлы по умолчанию
}
; Отыскиваем подходящее имя файла
Loop
{
filename := Format("{1}\{2} ({3}).png", Ed_Folder, Ed_Names, A_Index)
If !FileExist(filename)
Break
}
; Делаем снимок экрана
MouseMove, % Ed_CordInfoX, % Ed_CordInfoY
Sleep, 1000
MakeScreenshot( filename )
Msgbox,, % ProgramName, % "Скриншот сохранен!", 1
Return
}
SubtractNum()
{
Global
ClipSave := ClipboardAll
Clipboard := ""
RegexMatch(A_ThisHotkey, "(?<=-)\d+", vNumber)
MouseMove, % Ed_CordSumX, % Ed_CordSumY
Click, 2
Send, % "^{c}"
ClipWait, 2
Result := Round(Clipboard - vNumber, 2)
MsgBox, 0, % "Итоговая сумма", % Result
Clipboard := ClipSave
}
; Функции для создания скриншота
MakeScreenshot(filename := "")
{
If (filename == "")
Return
X := 0, Y := 0, W := A_ScreenWidth, H := A_ScreenHeight
VarSetCapacity(BITMAPINFO, 40, 0)
NumPut(32, NumPut(1, NumPut(H, NumPut(W, NumPut(40, BITMAPINFO, "Int"), "Int"), "Int"), "Short"), "Short")
hBM := DllCall("Gdi32.dll\CreateDIBSection", "Ptr",0, "Ptr",&BITMAPINFO, "Int",0, "PtrP",pBits:=0, "Ptr",0, "Int",0, "Ptr")
sDC := DllCall("User32.dll\GetDC", "Ptr",0, "Ptr")
mDC := DllCall("Gdi32.dll\CreateCompatibleDC", "Ptr",0, "Ptr")
DllCall("Gdi32.dll\SelectObject", "Ptr",mDC, "Ptr",hBM)
DllCall("Gdi32.dll\BitBlt", "Ptr",mDC, "Int",0, "Int",0, "Int",W, "Int",H, "Ptr",sDC, "Int",X, "Int",Y, "Int",0x40CC0020)
GDIP("Startup")
SavePicture(hBM, filename)
GDIP("Shutdown")
DllCall("Gdi32.dll\DeleteDC", "Ptr",mDC)
DllCall("User32.dll\ReleaseDC", "Ptr",0, "Ptr",sDC)
DllCall("Gdi32.dll\DeleteObject", "Ptr",hBM)
}
GDIP(C := "Startup")
{
Static SI := Chr(!(VarSetCapacity(Si,24,0)>>16)), pToken := 0, hMod := 0, Res := 0, AOK := 0
If (AOK := (C = "Startup" and pToken = 0) or (C != "Startup" and pToken != 0))
{
If (C = "Startup")
{
hMod := DllCall("LoadLibrary", "Str","gdiplus.dll", "Ptr")
Res := DllCall("gdiplus\GdiplusStartup", "PtrP",pToken, "Ptr",&SI, "UInt",0)
} Else {
Res := DllCall("gdiplus\GdiplusShutdown", "Ptr",pToken)
DllCall("FreeLibrary", "Ptr",hMod), hMod := 0, pToken := 0
}
}
Return (AOK ? !Res : Res := 0)
}
SavePicture(hBM, sFile) {
Local V, pBM := VarSetCapacity(V,16,0)>>8, Ext := LTrim(SubStr(sFile,-3),"."), E := [0,0,0,0]
Local Enc := 0x557CF400 | Round({"bmp":0, "jpg":1, "jpeg":1, "gif":2, "tif":5, "tiff":5, "png":6}[Ext])
E[1] := DllCall("gdi32\GetObjectType", "Ptr",hBM ) <> 7
E[2] := E[1] ? 0 : DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "Ptr",hBM, "UInt",0, "PtrP",pBM)
NumPut(0x2EF31EF8, NumPut(0x0000739A, NumPut(0x11D31A04, NumPut(Enc + 0, V, "UInt"), "UInt"), "UInt"), "UInt")
E[3] := pBM ? DllCall("gdiplus\GdipSaveImageToFile", "Ptr",pBM, "WStr",sFile, "Ptr",&V, "UInt",0) : 1
E[4] := pBM ? DllCall("gdiplus\GdipDisposeImage", "Ptr",pBM) : 1
Return E[1] ? 0 : E[2] ? -1 : E[3] ? -2 : E[4] ? -3 : 1
}
; При нажатии Esc, закрытии окна или нажатии кнопки Exit скрипт завершается.
GuiClose:
GuiEscape:
OnButtonExit:
ExitApp
[/Codebox]