<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7572</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7572&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..».]]></description>
		<lastBuildDate>Tue, 30 May 2017 14:29:38 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116246#p116246</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Спасибо!!! Работает! При клике на Пуск появляется на доли секунды стандартная кнопка и восстанавливается окошко GUI с раскладкой:<br /><span class="postimg"><img src="http://s1.bild.me/bilder/110417/4239106screenshot_2017-05-30_001.jpg" alt="http://s1.bild.me/bilder/110417/4239106screenshot_2017-05-30_001.jpg" /></span></p>]]></description>
			<author><![CDATA[null@example.com (monsoon)]]></author>
			<pubDate>Tue, 30 May 2017 14:29:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116246#p116246</guid>
		</item>
		<item>
			<title><![CDATA[Re: АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116245#p116245</link>
			<description><![CDATA[<p>Попробуйте так:<br /></p><div class="codebox"><pre><code>
#Persistent
SetBatchLines, -1
StringCaseSense, On

SWP_NOSIZE := 1, GW_HWNDNEXT := SWP_NOMOVE := 2

Gui, +ToolWindow +AlwaysOnTop -Caption +hwndhGui  
Gui, +Lastfound                      

PrevInputLocale:=&quot;xx&quot;  ; переменная введена для того, чтобы не мерцало изображение с раскладкой 
PrevKeysState:=&quot;---&quot;   ; переменная введена для того, чтобы не мерцал текст состояния клавиш

Gui, Margin, 0, 0
Gui, Add, Picture, x2 y3 w16 h16 gStartP vStartP, xx_s.bmp
Gui, Font, s8 bold, Courier New
Gui, Add, Text, x24 y4 w26 h16  gStartT vStartT, %PrevKeysState%

WinGetPos, X, Y,,, % &quot;ahk_id&quot; hButton := WinExist(&quot;ahk_class Button&quot;)
Gui, Show, x%X% y%Y% , Start Button

SetTimer, Start, 200  ; настройте второй параметр, чтобы изменить интервал реагирования
Return

Start:
    ButtonAbove := false
    Loop
        hWnd := A_Index = 1 ? DllCall(&quot;GetTopWindow&quot;, Ptr, 0, Ptr) : DllCall(&quot;GetWindow&quot;, Ptr, hWnd, UInt, GW_HWNDNEXT, Ptr)
    until (hWnd = hButton &amp;&amp; ButtonAbove := true) || hWnd = hGui
    if ButtonAbove
        DllCall(&quot;SetWindowPos&quot;, Ptr, hGui, Ptr, 0, Int, 0, Int, 0, Int, 0, Int, 0, UInt, SWP_NOSIZE|SWP_NOMOVE)
        
    StartButtonText = %NumToggle%%ScrollToggle%%InsToggle%

    GetKeyState, NumToggle, Numlock, T
    If NumToggle = U
        NumToggle = -
    Else
        NumToggle = N

    GetKeyState, ScrollToggle, ScrollLock, T
    If ScrollToggle = U
        ScrollToggle = -
    Else
        ScrollToggle = S

    GetKeyState,InsToggle, Insert, T
    If InsToggle = U
        InsToggle = -
    Else
        InsToggle = I

    GetKeyState, CapsToggle, CapsLock, T ; проверяем, включен ли Capslock

    InputLocale:= GetInputLangName(GetInputLangID(&quot;A&quot;))

    StringLeft, InputLocale, InputLocale, 2
    If CapsToggle = U
      StringLower, InputLocale, InputLocale
    Else
      StringUpper, InputLocale, InputLocale


    IF (InputLocale &lt;&gt; PrevInputLocale)
      {
       IF InputLocale = en
         GuiControl,, Static1, en_s.bmp
       Else If InputLocale = EN
         GuiControl,, Static1, EN.bmp
       Else If InputLocale = ru
         GuiControl,, Static1, ru_s.bmp
       Else If InputLocale = RU
         GuiControl,, Static1, RU.bmp
       ELSE
         {
          If CapsToggle = U
            GuiControl,, Static1, xx_s.bmp
          Else
            GuiControl,, Static1, XX.bmp
         }
       PrevInputLocale := InputLocale
       sleep, 100
      }

    IF (StartButtonText &lt;&gt; PrevKeysState)
      {
       GuiControl,, Static2, %StartButtonText%
       PrevKeysState := StartButtonText
      }

Return


GetInputLangID(window)
{
    If !(hWnd := WinExist(window))
        return
 
    WinGetClass, Class
 
    if (Class == &quot;ConsoleWindowClass&quot;)
    {
        WinGet, consolePID, PID
        DllCall(&quot;AttachConsole&quot;, Ptr, consolePID)
        VarSetCapacity(buff, 16)
        DllCall(&quot;GetConsoleKeyboardLayoutName&quot;, Str, buff)
        DllCall(&quot;FreeConsole&quot;)
        langID := &quot;0x&quot; . SubStr(buff, -3)
    }
    Else
        langID := DllCall(&quot;GetKeyboardLayout&quot;, Ptr, DllCall(&quot;GetWindowThreadProcessId&quot;, Ptr, hWnd, UInt, 0, Ptr), Ptr) &amp; 0xFFFF
 
    return langID
}
 
GetInputLangName(langId)
{
    Size := (DllCall(&quot;GetLocaleInfo&quot;, UInt, langId, UInt, 0x1001, UInt, 0, UInt, 0) * 2)   ; LOCALE_SENGLANGUAGE := 0x1001
    VarSetCapacity(localeSig, Size, 0)
    DllCall(&quot;GetLocaleInfo&quot;, UInt, langId, UInt, 0x1001, Str, localeSig, UInt, Size)
    return localeSig
}

StartP: 
StartT: 
Send ^{Esc}
return 
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 30 May 2017 13:56:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116245#p116245</guid>
		</item>
		<item>
			<title><![CDATA[Re: АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116243#p116243</link>
			<description><![CDATA[<p><strong>teadrinker</strong><br />Когда скрипт только запущен все отображается прекрасно. Клик-то как раз проходит, но после него, возвращается показ стандартной кнопки и требуется перезапустить скрипт. Тоже самое происходит, если например подвести курсор мыши к какой-либо программе на панели задач и дождаться появления тултипа.<br />Т.е. хотелось бы, чтобы перекрытие с раскладкой было всегда над кнопкой.</p>]]></description>
			<author><![CDATA[null@example.com (monsoon)]]></author>
			<pubDate>Tue, 30 May 2017 13:17:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116243#p116243</guid>
		</item>
		<item>
			<title><![CDATA[Re: АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116241#p116241</link>
			<description><![CDATA[<p>Не совсем понял вопрос. В коде кнопка Пуск никак не меняется, она просто перекрывается окном скрипта. Что именно нужно-то, чтобы клик проходил сквозь него?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Tue, 30 May 2017 12:30:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116241#p116241</guid>
		</item>
		<item>
			<title><![CDATA[Re: АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116240#p116240</link>
			<description><![CDATA[<p>После поиска информации по крупицам кое-что получилось:<br /></p><div class="codebox"><pre><code>
#Persistent
SetBatchLines, -1
StringCaseSense, On

Gui, +ToolWindow +AlwaysOnTop -Caption            
Gui, +Lastfound                      

PrevInputLocale:=&quot;xx&quot;  ; переменная введена для того, чтобы не мерцало изображение с раскладкой 
PrevKeysState:=&quot;---&quot;   ; переменная введена для того, чтобы не мерцал текст состояния клавиш

Gui, Margin, 0, 0
Gui, Add, Picture, x2 y3 w16 h16 gStartP vStartP, xx_s.bmp
Gui, Font, s8 bold, Courier New
Gui, Add, Text, x24 y4 w26 h16  gStartT vStartT, %PrevKeysState%
Gui, Show, x2 y744 , Start Button

SetTimer, Start, 200  ; настройте второй параметр, чтобы изменить интервал реагирования
Return

Start:
    StartButtonText = %NumToggle%%ScrollToggle%%InsToggle%

    GetKeyState, NumToggle, Numlock, T
    If NumToggle = U
        NumToggle = -
    Else
        NumToggle = N

    GetKeyState, ScrollToggle, ScrollLock, T
    If ScrollToggle = U
        ScrollToggle = -
    Else
        ScrollToggle = S

    GetKeyState,InsToggle, Insert, T
    If InsToggle = U
        InsToggle = -
    Else
        InsToggle = I

    GetKeyState, CapsToggle, CapsLock, T ; проверяем, включен ли Capslock

    InputLocale:= GetInputLangName(GetInputLangID(&quot;A&quot;))

    StringLeft, InputLocale, InputLocale, 2
    If CapsToggle = U
      StringLower, InputLocale, InputLocale
    Else
      StringUpper, InputLocale, InputLocale


    IF (InputLocale &lt;&gt; PrevInputLocale)
      {
       IF InputLocale = en
         GuiControl,, Static1, en_s.bmp
       Else If InputLocale = EN
         GuiControl,, Static1, EN.bmp
       Else If InputLocale = ru
         GuiControl,, Static1, ru_s.bmp
       Else If InputLocale = RU
         GuiControl,, Static1, RU.bmp
       ELSE
         {
          If CapsToggle = U
            GuiControl,, Static1, xx_s.bmp
          Else
            GuiControl,, Static1, XX.bmp
         }
       PrevInputLocale := InputLocale
       sleep, 100
      }

    IF (StartButtonText &lt;&gt; PrevKeysState)
      {
       GuiControl,, Static2, %StartButtonText%
       PrevKeysState := StartButtonText
      }

Return


GetInputLangID(window)
{
    If !(hWnd := WinExist(window))
        return
 
    WinGetClass, Class
 
    if (Class == &quot;ConsoleWindowClass&quot;)
    {
        WinGet, consolePID, PID
        DllCall(&quot;AttachConsole&quot;, Ptr, consolePID)
        VarSetCapacity(buff, 16)
        DllCall(&quot;GetConsoleKeyboardLayoutName&quot;, Str, buff)
        DllCall(&quot;FreeConsole&quot;)
        langID := &quot;0x&quot; . SubStr(buff, -3)
    }
    Else
        langID := DllCall(&quot;GetKeyboardLayout&quot;, Ptr, DllCall(&quot;GetWindowThreadProcessId&quot;, Ptr, hWnd, UInt, 0, Ptr), Ptr) &amp; 0xFFFF
 
    return langID
}
 
GetInputLangName(langId)
{
    Size := (DllCall(&quot;GetLocaleInfo&quot;, UInt, langId, UInt, 0x1001, UInt, 0, UInt, 0) * 2)   ; LOCALE_SENGLANGUAGE := 0x1001
    VarSetCapacity(localeSig, Size, 0)
    DllCall(&quot;GetLocaleInfo&quot;, UInt, langId, UInt, 0x1001, Str, localeSig, UInt, Size)
    return localeSig
}

StartP: 
StartT: 
Send ^{Esc}
return 
</code></pre></div><p>Скрипт настроен под разрешение 768 по высоте. Можно было бы определять разрешение и определять координаты относительно него.<br />Но основной вопрос: как сделать так, чтобы измененная кнопка Пуск восстанавливалась после нажатия на нее или после клика на свободном месте панели задач и т.п., на winXP этого не требовалось.</p>]]></description>
			<author><![CDATA[null@example.com (monsoon)]]></author>
			<pubDate>Tue, 30 May 2017 12:10:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116240#p116240</guid>
		</item>
		<item>
			<title><![CDATA[Re: АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116022#p116022</link>
			<description><![CDATA[<p>Вижу, что в этом скрипте меняется текст кнопки «Пуск». В Windows 7 это сделать не получится, так что никак.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Thu, 25 May 2017 16:57:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116022#p116022</guid>
		</item>
		<item>
			<title><![CDATA[Re: АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=116010#p116010</link>
			<description><![CDATA[<p>Привык к этому скрипту.<br />Как его подправить, чтобы заработал в win7 в классической теме?<br />На всякий случай используемые изображения: <a href="http://rgho.st/6cdhMb4gW">icons.zip</a></p><p>Вот так выглядела кнопка Пуск в winXP для русской раскладки в нижнем регистре с включенными NumLock и Insert (&quot;-&quot; - отключен ScrollLock):<br /><span class="postimg"><img src="http://s1.bild.me/bilder/110417/1586406indicStart_.JPG" alt="http://s1.bild.me/bilder/110417/1586406indicStart_.JPG" /></span></p>]]></description>
			<author><![CDATA[null@example.com (monsoon)]]></author>
			<pubDate>Wed, 24 May 2017 14:34:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=116010#p116010</guid>
		</item>
		<item>
			<title><![CDATA[АНК: (из Коллекции) скрипт-индикатор для NumLock CapsLock ScrollLock..]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=63861#p63861</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?id=401">ссылка на коллекцию</a></p><p>На работе беспроводная клавиатура, но идея скрипта понравилась, использую дома и на проводной.</p><p>Решил, что будет удобнее, если и текущая раскладка будет отображаться на кнопке &quot;Пуск&quot;, а стандартную можно убрать.<br />Благодаря <a href="http://forum.script-coding.com/viewtopic.php?id=189">решениям</a> <strong>teadrinker</strong> и <strong>creature.ws</strong> раскладка отображается и в консольных приложениях.<br />В какой-то теме подсмотрел как расширить кнопку, объединил, в итоге получился скрипт:</p><div class="codebox"><pre><code>#persistent ; необходимо, только если используется в качестве отдельного скрипта
; или встраивается в скрипт без строк автозамены, горячих клавиш или команд GUI.
SetTimer, Start, 100 ; настройте второй параметр, чтобы изменить интервал реагирования
Start:
    StartButtonText = %NumToggle%%ScrollToggle%%InsToggle% %CapsLang%

    GetKeyState, NumToggle, Numlock, T
    If NumToggle = U
        NumToggle = -
    Else
        NumToggle = N

    GetKeyState, ScrollToggle, ScrollLock, T
    If ScrollToggle = U
        ScrollToggle = -
    Else
        ScrollToggle = S

    GetKeyState,InsToggle, Insert, T
    If InsToggle = U
        InsToggle = -
    Else
        InsToggle = I

    GetKeyState, CapsToggle, CapsLock, T ; проверяем, включен ли Capslock

    InputLocale:= GetInputLangName(GetInputLangID(&quot;A&quot;))
    StringLeft, InputLocale, InputLocale, 2
    StringUpper, InputLocale, InputLocale

    If CapsToggle = U
      StringLower, InputLocale, InputLocale
    CapsLang := InputLocale

    ControlMove, Button1, 0,, 62,, ahk_class Shell_TrayWnd  ; увеличение размера кнопки &quot;Пуск&quot;

    ControlSetText,Button1,%StartButtonText%,ahk_class Shell_TrayWnd  ;изменение текста на кнопке &quot;Пуск&quot;

Return


GetInputLangID(window)
{
    If !(hWnd := WinExist(window))
        return
 
    WinGetClass, Class
 
    if (Class == &quot;ConsoleWindowClass&quot;)
    {
        WinGet, consolePID, PID
        DllCall(&quot;AttachConsole&quot;, Ptr, consolePID)
        VarSetCapacity(buff, 16)
        DllCall(&quot;GetConsoleKeyboardLayoutName&quot;, Str, buff)
        DllCall(&quot;FreeConsole&quot;)
        langID := &quot;0x&quot; . SubStr(buff, -3)
    }
    Else
        langID := DllCall(&quot;GetKeyboardLayout&quot;, Ptr, DllCall(&quot;GetWindowThreadProcessId&quot;, Ptr, hWnd, UInt, 0, Ptr), Ptr) &amp; 0xFFFF
 
    return langID
}
 
GetInputLangName(langId)
{
    Size := (DllCall(&quot;GetLocaleInfo&quot;, UInt, langId, UInt, 0x1001, UInt, 0, UInt, 0) * 2)   ; LOCALE_SENGLANGUAGE := 0x1001
    VarSetCapacity(localeSig, Size, 0)
    DllCall(&quot;GetLocaleInfo&quot;, UInt, langId, UInt, 0x1001, Str, localeSig, UInt, Size)
    return localeSig
}</code></pre></div><p>Отображение CapsLock отдельной буквой убрал. Вместо этого верхний или нижний регистр отображается в названии раскладки.<br />Вопросы по этому скрипту:<br />Можно ли раскладку выводить цветным шрифтом на цветном фоне? Можно ли вывести на месте картинки?<br />Т.е. хотелось бы получить отображение, как у оригинальной: белым шрифтом на синем фоне.</p><p>В <a href="http://www.autohotkey.com/community/viewtopic.php?p=216313">теме</a>&nbsp; &nbsp;подсмотрел как можно изменить изображение у кнопки &quot;Пуск&quot;.<br />Второй вариант скрипта с изображениями:<br /></p><div class="codebox"><pre><code>#persistent ; необходимо, только если используется в качестве отдельного скрипта
; или встраивается в скрипт без строк автозамены, горячих клавиш или команд GUI.
;SetBatchLines, -1
StringCaseSense, On

Gui, +ToolWindow -Caption            
Gui, +Lastfound                      
GUI_ID := WinExist()                
WinGet, TaskBar_ID, ID, ahk_class Shell_TrayWnd 
DllCall(&quot;SetParent&quot;, &quot;uint&quot;, GUI_ID, &quot;uint&quot;, Taskbar_ID) 
Gui, Margin, 0, 0
Gui, Add, Picture, x2 y3 w16 h16 gStartM vStartM, xx_s.bmp
Gui, Show, x0 y0 , Start Button

PrevInputLocale:=&quot;xx&quot;  ; переменная введена для того, чтобы не мерцало изображение с раскладкой 

SetTimer, Start, 100 ; настройте второй параметр, чтобы изменить интервал реагирования
Return

Start:
    StartButtonText = %NumToggle%%ScrollToggle%%InsToggle%

    GetKeyState, NumToggle, Numlock, T
    If NumToggle = U
        NumToggle = -
    Else
        NumToggle = N

    GetKeyState, ScrollToggle, ScrollLock, T
    If ScrollToggle = U
        ScrollToggle = -
    Else
        ScrollToggle = S

    GetKeyState,InsToggle, Insert, T
    If InsToggle = U
        InsToggle = -
    Else
        InsToggle = I

    GetKeyState, CapsToggle, CapsLock, T ; проверяем, включен ли Capslock

    InputLocale:= GetInputLangName(GetInputLangID(&quot;A&quot;))

    StringLeft, InputLocale, InputLocale, 2
    If CapsToggle = U
      StringLower, InputLocale, InputLocale
    Else
      StringUpper, InputLocale, InputLocale


    IF (InputLocale &lt;&gt; PrevInputLocale)
      {
       IF InputLocale = en
         GuiControl,, Static1, en_s.bmp
       Else If InputLocale = EN
         GuiControl,, Static1, EN.bmp
       Else If InputLocale = ru
         GuiControl,, Static1, ru_s.bmp
       Else If InputLocale = RU
         GuiControl,, Static1, RU.bmp
       ELSE
         {
          If CapsToggle = U
            GuiControl,, Static1, xx_s.bmp
          Else
            GuiControl,, Static1, XX.bmp
         }
       PrevInputLocale := InputLocale
      }

    ControlSetText,Button1,%A_Space%%StartButtonText%,ahk_class Shell_TrayWnd  ;изменение текста на кнопке &quot;Пуск&quot;

Return


GetInputLangID(window)
{
    If !(hWnd := WinExist(window))
        return
 
    WinGetClass, Class
 
    if (Class == &quot;ConsoleWindowClass&quot;)
    {
        WinGet, consolePID, PID
        DllCall(&quot;AttachConsole&quot;, Ptr, consolePID)
        VarSetCapacity(buff, 16)
        DllCall(&quot;GetConsoleKeyboardLayoutName&quot;, Str, buff)
        DllCall(&quot;FreeConsole&quot;)
        langID := &quot;0x&quot; . SubStr(buff, -3)
    }
    Else
        langID := DllCall(&quot;GetKeyboardLayout&quot;, Ptr, DllCall(&quot;GetWindowThreadProcessId&quot;, Ptr, hWnd, UInt, 0, Ptr), Ptr) &amp; 0xFFFF
 
    return langID
}
 
GetInputLangName(langId)
{
    Size := (DllCall(&quot;GetLocaleInfo&quot;, UInt, langId, UInt, 0x1001, UInt, 0, UInt, 0) * 2)   ; LOCALE_SENGLANGUAGE := 0x1001
    VarSetCapacity(localeSig, Size, 0)
    DllCall(&quot;GetLocaleInfo&quot;, UInt, langId, UInt, 0x1001, Str, localeSig, UInt, Size)
    return localeSig
}

StartM: 
Send ^{Esc}
return</code></pre></div><p>Недостатки. <br />На каждый язык нужно свое изображение. Если состояние CapsLock показывать в раскладке как в этом скрипте, требуется по дополнительному изображению на каждый язык.<br />Можно ли каким-то образом менять текст изображения прямо в скрипте, т.е. использовать одно изображение?<br />Хотя большинство использует 2-4 языка и дорисовать иконки - небольшая проблема.<br />Решение этого вопроса - лишь заявка на универсальность.</p><p><a href="http://rghost.ru/40358188">icons.zip</a></p>]]></description>
			<author><![CDATA[null@example.com (monsoon)]]></author>
			<pubDate>Fri, 14 Sep 2012 12:28:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=63861#p63861</guid>
		</item>
	</channel>
</rss>
