Архив | Заявка в команду | Календарь | Справка | Гарант-сервис | Руководство форума | Правила форума | Обратная связь/контакты |
|
Операционные системы и программы Mac OS, Windows, Linux, Android, iOS и другие. |
|
Опции темы | Опции просмотра |
15.08.2020, 23:26 | #21 |
«Герой форума WM-Forum»
|
Как вариант: двойное нажатие на левый Alt тоже может переключать раскладку:
Код:
~Alt:: if (A_PriorHotkey <> "~Alt" or A_TimeSincePriorHotkey > 300) { KeyWait, Alt Return ; закончить обработку горячей клавиши после отжатия клавиши } KeyWait, Alt { PostMessage 0x50, 2,,, A ; WM_INPUTLANGCHANGEREQUEST } Return |
|
Пользователь сказал cпасибо: |
Johnny Cash (17.08.2020)
|
20.12.2020, 01:46 | #22 |
«Герой форума WM-Forum»
|
Ciao a tutti!
Задумал я тут замутить кликер. Потому что мне нужен управляемый и стабильный кликер, а все, что я находил и пробовал - не устраивает - почему-то сразу работают, а потом перестают. Для того, чтобы сильно не заморачиваться, решил попробовать функцию Ahk - ImageSearch(). Она непонятно как-то работает: может стабильно находить картинку и вдруг может внезапно перестать это делать. Находила и вдруг не находит. В условиях, когда абсолютно ничего не изменилось! Я решил ее заменить другой реализацией. И вот что получилось: Идем по адресу [Только зарегистрированные и активированные пользователи могут видеть ссылки] и копипастим себе библиотеку в файлик gdip_all.ahk. Теперь, как пример, пишем вот что: Код:
#include gdip_all.ahk CoordMode, Mouse, Screen imageSearch(byRef out1,byRef out2,x1,y1,x2,y2,image,vari=0,trans="",direction=5,debug=1){ static ptok:= gdip_startup() imageB:=gdip_createBitmapFromFile(image) scrn:=gdip_bitmapfromscreen(x1 . "|" . y1 . "|" . x2 - x1 . "|" . y2 - y1) if(debug) gdip_saveBitmapToFile(scrn,a_now . ".png") errorlev:=gdip_imageSearch(scrn,imageB,tempxy,0,0,0,0,vari,trans,direction) gdip_disposeImage(scrn) gdip_disposeImage(imageB) if(errorlev){ out:=strSplit(tempxy,"`,") out1:=out[1] + x1 out2:=out[2] + y1 return % errorlev } return 0 } imageSearch(a1,a2, 0,0,2000,2000, "b:\123.png") ;MsgBox, %a1%, %a2% a1 := a1 + 40 a2 := a2 + 40 MouseMove, a1, a2 Sleep, 2000 imageSearch(a1,a2, 0,0,2000,2000, "b:\124.png") ;MsgBox, %a1%, %a2% a1 := a1 + 40 a2 := a2 + 40 MouseMove, a1, a2 Sleep, 2000 imageSearch(a1,a2, 0,0,2000,2000, "b:\125.png") ;MsgBox, %a1%, %a2% a1 := a1 + 40 a2 := a2 + 40 MouseMove, a1, a2 Sleep, 2000 imageSearch(a1,a2, 0,0,2000,2000, "b:\126.png") ;MsgBox, %a1%, %a2% a1 := a1 + 40 a2 := a2 + 40 MouseMove, a1, a2 Программа должна найти по картинкам 4 места: Для их поиска я сделал скрины в файлики (123.png, 124.png, 125.png, 126.png) соответствующие области на рабочем столе. И запустил программу для теста. Сначала программа уверенно находила все 4 области. Как только я начал захватывать видео, область (2) почему-то перестала находиться. Хотя остальные области находятся без проблем. Что-то на экране меняется в пикселях, из-за чего перестают работать поиски по картинке. С этим, видимо, придется еще разбираться и разбираться... Мне кликер не помешает, если он выйдет толковый, выложу его на форуме... PS: захват экрна здесь не при чем: я обновил скрин 124.png и он снова начал находиться (гифка, мышка бегает): Последний раз редактировалось SeaMan75; 20.12.2020 в 01:57. |
|
Пользователь сказал cпасибо: |
Johnny Cash (24.12.2020)
|
01.01.2021, 16:20 | #23 |
«Герой форума WM-Forum»
|
Беда с поиском по картинке! Мешает сглаживание граней виндовое! Надо придумать, как это победить и тогда жизнь наладится!
|
|
22.06.2021, 23:38 | #24 |
«Герой форума WM-Forum»
|
Ciao a tutti.
Нашел редактор скриптов интересный. Вот [Только зарегистрированные и активированные пользователи могут видеть ссылки] Adventure IDE. Есть исходники. Прога основана на Scite. Можно посмотреть и многому научиться по исходникам. Исходники на AHK. Прога позволяет дебажить AHK-скрипты и просто редактировать с подсветкой синтаксиса исходники на лавине других языков программирования... Последний раз редактировалось SeaMan75; 23.06.2021 в 11:14. |
|
06.01.2023, 21:37 | #25 |
«Герой форума WM-Forum»
|
Ciao a tutti!
Нашел на просторах интернета - переключалка виртуальных рабочих столов -Win+<НОМЕР_ВИРТУАЛЬНОГО_РАБОЧЕГО_СТОЛА> Нажмите здесь для просмотра, чтобы развернуть и увидеть полный текст!Код:
;#NoTrayIcon #SingleInstance Force ; Globals DesktopCount = 2 ; Windows starts with 2 desktops at boot CurrentDesktop = 1 ; Desktop count is 1-indexed (Microsoft numbers them this way) ; ; This function examines the registry to build an accurate list of the current virtual desktops and which one we're currently on. ; Current desktop UUID appears to be in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\1\VirtualDesktops ; List of desktops appears to be in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops ; mapDesktopsFromRegistry() { global CurrentDesktop, DesktopCount ; Get the current desktop UUID. Length should be 32 always, but there's no guarantee this couldn't change in a later Windows release so we check. IdLength := 32 SessionId := getSessionId() if (SessionId) { RegRead, CurrentDesktopId, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\%SessionId%\VirtualDesktops, CurrentVirtualDesktop if (CurrentDesktopId) { IdLength := StrLen(CurrentDesktopId) } } ; Get a list of the UUIDs for all virtual desktops on the system RegRead, DesktopList, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops, VirtualDesktopIDs if (DesktopList) { DesktopListLength := StrLen(DesktopList) ; Figure out how many virtual desktops there are DesktopCount := DesktopListLength / IdLength } else { DesktopCount := 1 } ; Parse the REG_DATA string that stores the array of UUID's for virtual desktops in the registry. i := 0 while (CurrentDesktopId and i < DesktopCount) { StartPos := (i * IdLength) + 1 DesktopIter := SubStr(DesktopList, StartPos, IdLength) OutputDebug, The iterator is pointing at %DesktopIter% and count is %i%. ; Break out if we find a match in the list. If we didn't find anything, keep the ; old guess and pray we're still correct :-D. if (DesktopIter = CurrentDesktopId) { CurrentDesktop := i + 1 OutputDebug, Current desktop number is %CurrentDesktop% with an ID of %DesktopIter%. break } i++ } } ; ; This functions finds out ID of current session. ; getSessionId() { ProcessId := DllCall("GetCurrentProcessId", "UInt") if ErrorLevel { OutputDebug, Error getting current process id: %ErrorLevel% return } OutputDebug, Current Process Id: %ProcessId% DllCall("ProcessIdToSessionId", "UInt", ProcessId, "UInt*", SessionId) if ErrorLevel { OutputDebug, Error getting session id: %ErrorLevel% return } OutputDebug, Current Session Id: %SessionId% return SessionId } ; ; This function switches to the desktop number provided. ; switchDesktopByNumber(targetDesktop) { global CurrentDesktop, DesktopCount ; Re-generate the list of desktops and where we fit in that. We do this because ; the user may have switched desktops via some other means than the script. mapDesktopsFromRegistry() ; Don't attempt to switch to an invalid desktop if (targetDesktop > DesktopCount || targetDesktop < 1) { OutputDebug, [invalid] target: %targetDesktop% current: %CurrentDesktop% return } ; Go right until we reach the desktop we want while(CurrentDesktop < targetDesktop) { Send ^#{Right} CurrentDesktop++ OutputDebug, [right] target: %targetDesktop% current: %CurrentDesktop% } ; Go left until we reach the desktop we want while(CurrentDesktop > targetDesktop) { Send ^#{Left} CurrentDesktop-- OutputDebug, [left] target: %targetDesktop% current: %CurrentDesktop% } } ; ; This function creates a new virtual desktop and switches to it ; createVirtualDesktop() { global CurrentDesktop, DesktopCount Send, #^d DesktopCount++ CurrentDesktop = %DesktopCount% OutputDebug, [create] desktops: %DesktopCount% current: %CurrentDesktop% } ; ; This function deletes the current virtual desktop ; deleteVirtualDesktop() { global CurrentDesktop, DesktopCount Send, #^{F4} DesktopCount-- CurrentDesktop-- OutputDebug, [delete] desktops: %DesktopCount% current: %CurrentDesktop% } ; Main SetKeyDelay, 75 mapDesktopsFromRegistry() OutputDebug, [loading] desktops: %DesktopCount% current: %CurrentDesktop% ; User config! ; This section binds the key combo to the switch/create/delete actions LWin & 1::switchDesktopByNumber(1) LWin & 2::switchDesktopByNumber(2) LWin & 3::switchDesktopByNumber(3) LWin & 4::switchDesktopByNumber(4) LWin & 5::switchDesktopByNumber(5) LWin & 6::switchDesktopByNumber(6) LWin & 7::switchDesktopByNumber(7) LWin & 8::switchDesktopByNumber(8) LWin & 9::switchDesktopByNumber(9) ;CapsLock & 1::switchDesktopByNumber(1) ;CapsLock & 2::switchDesktopByNumber(2) ;CapsLock & 3::switchDesktopByNumber(3) ;CapsLock & 4::switchDesktopByNumber(4) ;CapsLock & 5::switchDesktopByNumber(5) ;CapsLock & 6::switchDesktopByNumber(6) ;CapsLock & 7::switchDesktopByNumber(7) ;CapsLock & 8::switchDesktopByNumber(8) ;CapsLock & 9::switchDesktopByNumber(9) ;CapsLock & n::switchDesktopByNumber(CurrentDesktop + 1) ;CapsLock & p::switchDesktopByNumber(CurrentDesktop - 1) ;CapsLock & s::switchDesktopByNumber(CurrentDesktop + 1) ;CapsLock & a::switchDesktopByNumber(CurrentDesktop - 1) ;CapsLock & c::createVirtualDesktop() ;CapsLock & d::deleteVirtualDesktop() ; Alternate keys for this config. Adding these because DragonFly (python) doesn't send CapsLock correctly. ;^!1::switchDesktopByNumber(1) ;^!2::switchDesktopByNumber(2) ;^!3::switchDesktopByNumber(3) ;^!4::switchDesktopByNumber(4) ;^!5::switchDesktopByNumber(5) ;^!6::switchDesktopByNumber(6) ;^!7::switchDesktopByNumber(7) ;^!8::switchDesktopByNumber(8) ;^!9::switchDesktopByNumber(9) ;^!n::switchDesktopByNumber(CurrentDesktop + 1) ;^!p::switchDesktopByNumber(CurrentDesktop - 1) ;^!s::switchDesktopByNumber(CurrentDesktop + 1) ;^!a::switchDesktopByNumber(CurrentDesktop - 1) ;^!c::createVirtualDesktop() ;^!d::deleteVirtualDesktop() [свернуть] Последний раз редактировалось SeaMan75; 06.01.2023 в 21:38. |
|
Метки |
ahk , autocomplete |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|