1

Тема: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

День добрый, форумчане. В текстовом редакторе очень уместной была бы функция Ctrl+WheelDown/WheelUp, по которой изменялся бы размер шрифта (как в проводнике, опере).
Будьте столь любезны - напишите пожалуйста такой скриптик. Уж сколько я их написал - ни одного не написано с обращением к системным меню (или как это правильно сказать).
Спасибо, если напишите.

2

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Или даже это может быть Ctrl+1 Ctrl+2 Ctrl+3 с заведомо задаными размерами шрифта.

3

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

yarrroslav
А зачем для стандартного редактора костыли придумывать, когда существует уйма многоопциональных и быстрых редакторов, где требуемое только одна из сотен частных возможностей?

4

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Flasher, причина проста - нежелание устанавливать 999000 программ разного рода происхождения. Пользуюсь стандартным блокнотом и предостаточно. За исключением настройки размера шрифта.

5

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

yarrroslav
Никто не заставляет устанавливать. Есть портабл-варианты в архивах. Попробуйте AkelPad. Уникален тем, что может быть и совершенно простым и неимоверно навороченным.

6

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Почитайте про эти комманды:
SetWinDelay, WinMenuSelectItem, WinWaitActive, ControlSetText, ControlClick.

7

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev пишет:

WinMenuSelectItem, WinWaitActive,

Вот об этом костыле я сперва и подумал. Для адекватной работы в редакторе сиё не лезет ни в какие ворота.

8

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Не вижу ничего криминального.

#if WinActive("ahk_class Notepad")
f1::
FontSize(100)
return
f2::
FontSize(14)
return
#if

FontSize(size)
{
   SetWinDelay -1
   WinMenuSelectItem, A,, Format, Font...
   WinWaitActive, Font ahk_class #32770
   ControlSetText, Edit3, %size%
   SetControlDelay -1
   ControlClick, Button5,,,,, NA
   return
}

9

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Для меня, например, криминалище ещё какой, особенно если рассматривать исходный вариант с Ctrl+WheelDown/WheelUp.
Кстати. Руссо туристо облико морале:

   WinMenuSelectItem, A,, Фор&мат, &Шрифт...
   WinWaitActive, Шрифт ahk_class #32770

10

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Так не мелькает:

Setbatchlines -1
EVENT := 0x0010 ; EVENT_SYSTEM_DIALOGSTART 

SetWinEventHook(EVENT, EVENT, 0, RegisterCallback("HookProc", "F"), 0, 0, 0) 
 
HookProc(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime)
{   
   if Start
      WinHide, Font ahk_class #32770
}

SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags)
{
   return DllCall("SetWinEventHook" , UInt, eventMin
                                    , UInt, eventMax
                                    , Ptr, hmodWinEventProc
                                    , Ptr, lpfnWinEventProc
                                    , UInt, idProcess
                                    , UInt, idThread
                                    , UInt, dwFlags)
}
return

#if WinActive("ahk_class Notepad")
f1::
Global Start := 1
FontSize(100)
Global Start := 0
return

f2::
Global Start := 1
FontSize(14)
Global Start := 0
return
#if


FontSize(size)
{
   DetectHiddenWindows, on
   SetWinDelay -1
   WinMenuSelectItem, A,, Format, Font...
   WinWaitActive, Font ahk_class #32770
   ControlSetText, Edit3, %size%
   SetControlDelay -1
   ControlClick, Button5,,,,, NA
   WinWaitClose
   return
}

11

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Мелькает. Лучше не стало. Win7x32.

12 (изменено: Malcev, 2016-11-04 08:32:28)

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

А эту строку изменили на русскоязычное название блокнота?

HookProc(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime)
{   
   if Start
      WinHide, Font ahk_class #32770
}

Можно еще таким топорным способом:


#if WinActive("ahk_class Notepad")
f1::
FontSize(100)
return
f2::
FontSize(14)
return
#if


FontSize(size)
{
   DetectHiddenWindows, on
   SetWinDelay -1
   WinMenuSelectItem, A,, Format, Font...
   loop 100
      WinHide, Font ahk_class #32770
   WinWaitActive, Font ahk_class #32770
   ControlSetText, Edit3, %size%
   SetControlDelay -1
   ControlClick, Button5,,,,, NA
   WinWaitClose
   return
}

13

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Ага, то место пропустил. Стало мелькать чуть быстрее. )
Топорный же способ с loop 100 ситуацию не улучшил.

14 (изменено: Malcev, 2016-11-04 18:57:30)

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Ну видно зависит от настроек компьютера.
Тогда можно такой вариант - перед появлением окна, делать снимок экрана, и засовывать его в полноэкранный гуи.
teadrinker примерно что-то подобное делал:
http://forum.script-coding.com/viewtopi … 630#p90630

15 (изменено: Malcev, 2016-11-05 21:16:17)

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

SetBatchLines -1

#if WinActive("ahk_class Notepad")
f1::
FontSize(100)
return
f2::
FontSize(14)
return
#if


FontSize(size)
{
   SetWinDelay -1
   WinExist("A")
   ScreenSaver(1)
   WinActivate
   WinWaitActive
   WinMenuSelectItem,,, 3&, 2&
   WinWaitActive, ahk_class #32770
   ControlSetText, Edit3, %size%
   SetControlDelay -1
   ControlClick, Button5,,,,, NA
   WinWaitClose
   ScreenSaver(0)
   return
}

ScreenSaver(toggle)
{
   if toggle
   {
      SS_BITMAP := 0xE
      pToken := Gdip_Startup()
      pBitmap := Gdip_BitmapFromScreen()
      hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
      Gdip_DisposeImage(pBitmap)
      Gui, -Caption +ToolWindow +AlwaysOnTop +Border -DPIScale
      Gui, Margin, 0, 0
      Gui, Add, Pic, hwndhPic %SS_BITMAP%
      SetImage(hPic, hBitmap)
      Gui, Show, x-1 y-1 w%A_ScreenWidth% h%A_ScreenHeight%
      Gdip_Shutdown(pToken)
      DllCall("DeleteObject", Ptr, hBitmap)
   }
   else
      Gui, Destroy
   return
}

Нужна библиотека GDI+:
https://www.dropbox.com/s/0e9gdfetbfa8v0o/Gdip_All.ahk

16 (изменено: yarrroslav, 2016-11-15 21:03:50)

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Первые 3 скрипта молчат совсем, даже не слышно что запускается окно шрифта. Закоментировал строку ; #if WinActive("ahk_class Notepad") и увидел что да - кнопки F1 F2 не вызывают справку и пр., но и окна со шрифтом тоже не вызывают. Все 3 первых.
4й скрипт отакое говорит

Язык по умолчанию русский, Win 7 x64,
AHK v 1.1.24.01

Post's attachments

Без имени-1.png 71.79 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

17

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Нужна библиотека GDI+:
https://www.dropbox.com/s/0e9gdfetbfa8v0o/Gdip_All.ahk

18 (изменено: yarrroslav, 2016-11-15 22:31:15)

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev, а где же её ложить? вон даже на скрине, - они у меня в папке со скриптом лежат...  или где их следует ложить? Может что-то не раскомментировал в GDI ?. Хотя это мы о 4м варианте скрипта. А вот почему первые три не работают - вот же интересно.

19 (изменено: Malcev, 2016-11-15 23:24:04)

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev, а где же её ложить?

https://autohotkey.com/docs/Functions.htm#include

почему первые три не работают

Наверное из-за русских названий окон.

20

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

У меня вот так вышло:

^WheelDown::
^WheelUp:: ChangeNotepadeFont(InStr(A_ThisHotkey, "Up"), true)  ; если второй параметр true, новый размер шрифта будет сохранён в реестре
   
ChangeNotepadeFont(UpDown, save)  {
   static LOGPIXELSY := 90, IsUnicode := 1, szLF := 28 + 32 * (IsUnicode ? 2 : 1)
        , WM_GETFONT := 0x31, WM_SETFONT := 0x30, ANTIALIASED_QUALITY := 4, DRAFT_QUALITY := 1
        , MEM_COMMIT := 0x1000, MEM_RELEASE := 0x8000, PAGE_READWRITE := 0x4, INFINITE := 0xFFFFFFFF
   Critical
   
   if !hProc := Verification()
      Return
   
   SendMessage, WM_GETFONT
   hCurrentFont := ErrorLevel
   
   VarSetCapacity(LOGFONT, szLF, 0)
   DllCall("GetObject", Ptr, hCurrentFont, Int, szLF, Ptr, &LOGFONT)
   
   height := NumGet(LOGFONT, "Int")
   hDC := DllCall("GetDC", Ptr, hwnd, Ptr)
   CurrentFontSize := -DllCall("MulDiv", Int, height, Int, 72, Int, DeviceCaps := DllCall("GetDeviceCaps", Ptr, hDC, Int, LOGPIXELSY))
   if UpDown
      NewFontSize := CurrentFontSize + (CurrentFontSize >= 14 ? 2 : 1)
   else
      NewFontSize := CurrentFontSize - (CurrentFontSize <= 14 ? 1 : 2)
   (NewFontSize < 2 && NewFontSize := 2)
   height := -DllCall("MulDiv", Int, NewFontSize, Int, DeviceCaps, Int, 72)
   DllCall("ReleaseDC", Ptr, hwnd, Ptr, hDC)
   NumPut(height, LOGFONT, "Int")
   NumPut(NewFontSize > 18 ? ANTIALIASED_QUALITY : DRAFT_QUALITY, &LOGFONT + 26, "Char")
   
   remotePtr := DllCall("VirtualAllocEx", UInt, hProc, UInt, 0, UInt, szLF, UInt, MEM_COMMIT, UInt, PAGE_READWRITE, Ptr)
   DllCall("WriteProcessMemory", Ptr, hProc, Ptr, remotePtr, Ptr, &LOGFONT, UInt, szLF, UInt, 0)
   
   pFunc := DllCall("GetProcAddress", Ptr, DllCall("GetModuleHandle", "str", "Gdi32.dll", Ptr), AStr, "CreateFontIndirectW", Ptr)
   hThrd := DllCall("CreateRemoteThread", Ptr, hProc, Ptr, 0, Ptr, 0, Ptr, pFunc, Ptr, remotePtr, UInt, 0, UInt, 0)
   DllCall("WaitForSingleObject", Ptr, hThrd, UInt, INFINITE)
   DllCall("GetExitCodeThread", Ptr, hThrd, UIntP, hFont)
   DllCall("CloseHandle", Ptr, hThrd)
   DllCall("VirtualFreeEx", Ptr, hProc, Ptr, remotePtr, UInt, 0, UInt, MEM_RELEASE)
   DllCall("CloseHandle", Ptr, hProc)
   
   SendMessage, WM_SETFONT, hFont, 1
   
   WinGetPos, X, Y
   CoordMode, ToolTip
   ToolTip, % NewFontSize, X, Y, 19
   SetTimer, DelToolTip, -1000
   if save
      RegWrite, REG_DWORD, HKCU\Software\Microsoft\Notepad, iPointSize, % NewFontSize * 10
}

DelToolTip()  {
   ToolTip,,,, 19
}

Verification()  {
   static SYNCHRONIZE := 0x100000, STANDARD_RIGHTS_REQUIRED := 0xF0000
        , PROCESS_ALL_ACCESS := (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
        
   WinGetClass, winClass, A
   if (winClass != "Notepad")
      Return
   
   ControlGet, hwnd, hwnd,, Edit1, A
   WinWait, ahk_id %hwnd%
   WinGet, PID, PID
   hProc := DllCall("OpenProcess", UInt, PROCESS_ALL_ACCESS, Int, 0, UInt, PID, Ptr)
   if A_Is64bitOS {
      DllCall("IsWow64Process", Ptr, hProc, UIntP, bool)
      if (bool) ^ (A_PtrSize = 4)  {
         MsgBox, Процессы скрипта и блокнота имеют разную разрядность, скрипт не будет работать!
         DllCall("CloseHandle", Ptr, hProc)
         Return
      }
   }
   Return hProc
}

Блокнот и скрипт должны быть одной и той же разрядности. Если используете 32-битный AHK на 64-битной системе, запускайте блокнот из C:\Windows\SysWOW64\notepad.exe.
Код экспериментальный, возможно, не очень корректный.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

yarrroslav пишет:

Flasher, причина проста - нежелание устанавливать 999000 программ разного рода происхождения. Пользуюсь стандартным блокнотом и предостаточно. За исключением настройки размера шрифта.

Овчинка выделки не стоит.

22

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Предпоследний скрипт (с пропиской #include) морозит всё окно и часто зависает. Последний же скрипт работает (без заморозок).

ypppu пишет:

Овчинка выделки не стоит.

Конечно. AkelPad поставил - и нечего ломать голову, заставляя других писать навороченные коды.

23

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Предпоследний скрипт (с пропиской #include) морозит всё окно и часто зависает

Ну он и должен морозить. Он делает снимок экрана и вставляет его в полноэкранный гуи.
А вот почему зависает я не знаю. Зависать-то там вроде нечему.
Может ControlClick не срабатывает?
У меня иногда в нем проскакивают серые вспышки.
Не знаю, что такой эффект даёт.

24

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev
У меня белыми вспышками моргает весь экран. Может, и клик не всегда срабатывает (сейчас ещё пощёлкал, вроде уже не сбоит). А ещё указатель мыши смещается в центр кнопки ОК, что тоже не есть хорошо.

25

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Кстати в стандартном WordPad размер шрифта изменяется Ctrl + колёсико.

26

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

указатель мыши смещается в центр кнопки ОК

Странно. Мышка вообще двигаться не должна. Там же простой ControlClick.
teadrinker, можешь объяснить, пожалуйста, почему в 15 коде идут вспышки?

27

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev пишет:

Странно.

>>

+ SnapToDefaultButton.reg
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Mouse]
"SnapToDefaultButton"="1"

28

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Понятно. Так мышка останется на месте:

SetBatchLines -1

#if WinActive("ahk_class Notepad")
f1::
FontSize(100)
return
f2::
FontSize(14)
return
#if


FontSize(size)
{
   SetWinDelay -1
   WinExist("A")
   ScreenSaver(1)
   DllCall( "SystemParametersInfo", UInt,95, UInt,0, UIntP,OSet, UInt,0 )    ; SPI_GETSNAPTODEFBUTTON
   DllCall( "SystemParametersInfo", UInt,96, UInt,False, UInt,0, UInt,0 )     ; SPI_SETSNAPTODEFBUTTON 
   WinActivate
   WinWaitActive
   WinMenuSelectItem,,, 3&, 2&
   WinWaitActive, ahk_class #32770
   ControlSetText, Edit3, %size%
   SetControlDelay -1
   ControlClick, Button5,,,,, NA
   WinWaitClose
   DllCall( "SystemParametersInfo", UInt,96, UInt,OSet, UInt,0, UInt,0 )     ; SPI_SETSNAPTODEFBUTTON
   ScreenSaver(0)
   return
}

ScreenSaver(toggle)
{
   if toggle
   {
      SS_BITMAP := 0xE
      pToken := Gdip_Startup()
      pBitmap := Gdip_BitmapFromScreen()
      hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
      Gdip_DisposeImage(pBitmap)
      Gui, -Caption +ToolWindow +AlwaysOnTop +Border -DPIScale
      Gui, Margin, 0, 0
      Gui, Add, Pic, hwndhPic %SS_BITMAP%
      SetImage(hPic, hBitmap)
      Gui, Show, x-1 y-1 w%A_ScreenWidth% h%A_ScreenHeight%
      Gdip_Shutdown(pToken)
      DllCall("DeleteObject", Ptr, hBitmap)
   }
   else
      Gui, Destroy
   return
}

29

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Так - да.

30

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

teadrinker
О, Боже. Работает!! Еще и как красиво то работает! Ровно то что я хотел!
Огроменное спасибо Вам. Ну прям ни пером описать, ни словом сказать. Спасибо-спасибо. Работает же! (уррааа)

31

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev пишет:

teadrinker, можешь объяснить, пожалуйста, почему в 15 коде идут вспышки?

У меня в последнем твоём варианте вспышек нет, но так как использую системную анимацию (тема оформления "Аэро") возникают всякие артефакты:

http://i.imgur.com/buPHbQ6.jpg

yarrroslav пишет:

Спасибо-спасибо. Работает же!

Ну, вариант ещё не окончательный (отъедает память в блокноте, не критично, но всё же), потом попытаюсь подправить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

32 (изменено: Malcev, 2016-11-17 05:54:47)

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Поставил Аэро, вспышек не наблюдаю, но и артефактов тоже не вижу.
А как думаешь, есть какие-то рабочие варианты для снятия снимка экрана и вставки его в полноэкранный гуи?
По типу, как это делает UAC, только без затемнения.

33

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Так а в чём проблема этого варианта? Мельканий, вроде, нет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

34

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Без аэро иногда мелькает.

35

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

А, ну можно использовать Layered Window, как в туториале по GDI+.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

36

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Что-то не получается:

f1::
SS_BITMAP := 0xE
pToken := Gdip_Startup()
pBitmap := Gdip_BitmapFromScreen()
hBitmap := Gdip_CreateHBITMAPFromBitmap(pBitmap)
Gdip_DisposeImage(pBitmap)
Gui, -Caption +ToolWindow +Owner +AlwaysOnTop +Border -DPIScale
;Gui, +E0x80000 
Gui, Margin, 0, 0
Gui, Add, Pic, hwndhPic %SS_BITMAP%
SetImage(hPic, hBitmap)
Gui, Show, x-1 y-1 w%A_ScreenWidth% h%A_ScreenHeight%
MsgBox,,,, 0.1
Gdip_Shutdown(pToken)
DllCall("DeleteObject", Ptr, hBitmap)
Gui, Destroy
return

Если зажать f1, то иногда появляются вспышки.
Если раскомментировать Gui, +E0x80000, то вспышек нет, но и msgbox видно.

37

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

pToken := Gdip_Startup()
Gui, -Caption +E0x80000 +AlwaysOnTop +ToolWindow +hwndhGui
Gui, Show, NA

hbm := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
pBitmap := Gdip_BitmapFromScreen()
Gdip_DrawImage(G, pBitmap)
UpdateLayeredWindow(hGui, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)

SelectObject(hdc, obm)
DeleteObject(hbm)
Gdip_DisposeImage(pBitmap)
DeleteDC(hdc)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)

; для наглядности (можно потаскать мышью)

OnMessage(0x201, "WM_LBUTTONDOWN")

WM_LBUTTONDOWN()
{
   PostMessage, 0xA1, 2
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

38

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

А куда тут вставить MsgBox,,,, 0.1 чтоб его не было видно?

39

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev пишет:

По типу, как это делает UAC, только без затемнения.

А как сделать такой же эффект как в посту 37 с затемнением?

40

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev, не понял вопроса. А какие варианты? В конец секции автовыполнения, конечно.

pToken := Gdip_Startup()
Gui, -Caption +E0x80000 +AlwaysOnTop +ToolWindow +hwndhGui
Gui, Show, NA

hbm := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
pBitmap := Gdip_BitmapFromScreen()
Gdip_DrawImage(G, pBitmap)
UpdateLayeredWindow(hGui, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)

SelectObject(hdc, obm)
DeleteObject(hbm)
Gdip_DisposeImage(pBitmap)
DeleteDC(hdc)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)

MsgBox,,, Меня не видно!, .1
Sleep, 200
ExitApp

Nikva, про затемнение ничего не знаю.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

41

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Что-то у меня или меня вчера переглючило и msgbox не убирался.
С затемнением можно так:

pToken := Gdip_Startup()
Gui, -Caption +E0x80000 +AlwaysOnTop +ToolWindow +hwndhGui
Gui, Color, Black
Gui, Show, NA, overlay


hbm := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
pBitmap := Gdip_BitmapFromScreen()
Gdip_DrawImage(G, pBitmap)
UpdateLayeredWindow(hGui, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)

SelectObject(hdc, obm)
DeleteObject(hbm)
Gdip_DisposeImage(pBitmap)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)
WinSet, Transparent, 180, overlay


; для наглядности (можно потаскать мышью)

OnMessage(0x201, "WM_LBUTTONDOWN")

WM_LBUTTONDOWN()
{
   PostMessage, 0xA1, 2
}

42

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Проще:

pToken := Gdip_Startup()
Gui, -Caption +E0x80000 +AlwaysOnTop +ToolWindow +hwndhGui +LastFound
Gui, Color, Black
Gui, Show, NA


hbm := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
UpdateLayeredWindow(hGui, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)

SelectObject(hdc, obm)
DeleteObject(hbm)
DeleteDC(hdc)
Gdip_Shutdown(pToken)
WinSet, Transparent, 180

Sleep, 400
ExitApp
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

43

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Ещё в каждый код забыл DeleteDC(hdc) добавить, исправил.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

44

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Кстати, попап меню почему-то не скрывает:

pToken := Gdip_Startup()
Gui, -Caption +E0x80000 +AlwaysOnTop +ToolWindow +hwndhGui
Gui, Show, NA
hbm := CreateDIBSection(A_ScreenWidth, A_ScreenHeight)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
pBitmap := Gdip_BitmapFromScreen()
Gdip_DrawImage(G, pBitmap)
UpdateLayeredWindow(hGui, hdc, 0, 0, A_ScreenWidth, A_ScreenHeight)
SelectObject(hdc, obm)
DeleteObject(hbm)
Gdip_DisposeImage(pBitmap)
DeleteDC(hdc)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)

ControlClick,,ahk_class Button ahk_exe explorer.exe,,R,,NA
sleep 2000

Gui, Destroy
return

45

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Понятно, почему — меню тоже AlwaysOnTop, а запущено позже.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

46

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Тогда, получается, единственный вариант спрятать все действия - создать новый рабочий стол и им уже перекрыть?

47

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Не пробовал. Я бы вообще не стал идти этим путём.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

48

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

А каким стал бы, если приложение нельзя автоматизировать без посылания кликов мышью.
Устанавливал бы хуки на создание окон?

49

Re: AHK: изменить размер шрифта в блокноте по Ctrl+колесико

Malcev пишет:

Устанавливал бы хуки на создание окон?

И так тоже бы не стал. Если в результате моей автоматизации появляются какие-то нежелательные окна, просто счёл бы задачу нерешённой.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder