Архив Заявка в команду Календарь Справка Гарант-сервис Руководство форума Правила форума Обратная связь/контакты
Вернуться   WM-FORUM.NET.RU > Форум вебмастеров про сайты, seo, операционные системы. > Операционные системы и программы

Важная информация!

Операционные системы и программы Mac OS, Windows, Linux, Android, iOS и другие.

Ответ
 
Опции темы Опции просмотра
Старый 15.08.2020, 23:26       #21
SeaMan75
«Герой форума WM-Forum»
 
Аватар для SeaMan75
Дополнительная информация
По умолчанию

Как вариант: двойное нажатие на левый Alt тоже может переключать раскладку:
Код:
~Alt:: 
if (A_PriorHotkey <> "~Alt" or A_TimeSincePriorHotkey > 300)
{
  KeyWait, Alt
  Return ; закончить обработку горячей клавиши после отжатия клавиши
}

KeyWait, Alt
{
  PostMessage 0x50, 2,,, A ; WM_INPUTLANGCHANGEREQUEST
}
Return
SeaMan75 вне форума  
Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Johnny Cash (17.08.2020)
Старый 20.12.2020, 01:46       #22
SeaMan75
«Герой форума WM-Forum»
 
Аватар для SeaMan75
Дополнительная информация
По умолчанию

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.
SeaMan75 вне форума  
Ответить с цитированием Вверх
Пользователь сказал cпасибо:
Johnny Cash (24.12.2020)
Старый 01.01.2021, 16:20       #23
SeaMan75
«Герой форума WM-Forum»
 
Аватар для SeaMan75
Дополнительная информация
По умолчанию

Беда с поиском по картинке! Мешает сглаживание граней виндовое! Надо придумать, как это победить и тогда жизнь наладится!
SeaMan75 вне форума  
Ответить с цитированием Вверх
Старый 22.06.2021, 23:38       #24
SeaMan75
«Герой форума WM-Forum»
 
Аватар для SeaMan75
Дополнительная информация
По умолчанию

Ciao a tutti.
Нашел редактор скриптов интересный. Вот [Только зарегистрированные и активированные пользователи могут видеть ссылки]
Adventure IDE.


Есть исходники. Прога основана на Scite. Можно посмотреть и многому научиться по исходникам. Исходники на AHK.
Прога позволяет дебажить AHK-скрипты и просто редактировать с подсветкой синтаксиса исходники на лавине других языков программирования...

Последний раз редактировалось SeaMan75; 23.06.2021 в 11:14.
SeaMan75 вне форума  
Ответить с цитированием Вверх
Старый 06.01.2023, 21:37       #25
SeaMan75
«Герой форума WM-Forum»
 
Аватар для SeaMan75
Дополнительная информация
По умолчанию

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.
SeaMan75 вне форума  
Ответить с цитированием Вверх
Ответ

Метки
ahk , autocomplete


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 19:07. Часовой пояс GMT +3.


Forum powered by vBulletin ®. 2000 - 2024 ©, vBulletin Solutions, Inc.

WM-FORUM.NET.RU © 2024 | WM-FORUM ®, Ltd. | Все права защищены.
391 Sutter Street, Office 302, San Francisco, CA 94108, USA.

По всем вопросам пишите на: info@wm-forum.net.ru
Все материалы добавляются пользователями. При копировании материалов форума активная ссылка на сайт обязательна.
Сайт может содержать контент не предназначенный для лиц младше 18-ти лет.
Контент 18+

digitalocean

Перевод: zCarot

Рейтинг@Mail.ru