<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Загрузка сочетаний из ini файла]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6511</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6511&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Загрузка сочетаний из ini файла».]]></description>
		<lastBuildDate>Fri, 02 Dec 2011 16:09:52 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54156#p54156</link>
			<description><![CDATA[<p>Окно контрола msctls_hotkey321 отображает KeyName при использовании vk, в GetKeyName(Key) нет необходимости.<br />GetKeyVK(Key) не определит vk клавиши отсутствующей в текущей раскладке.<br />При изменении содержимого hotkey box&#039;а в %info% всё равно содержится&nbsp; хоткей в английской раскладке.</p><p>В таком виде в ini будет сохранён vk клавиши:<br /></p><div class="codebox"><pre><code>
; Сперва читаем сохранённые настройки
IniRead, InfoCheck, Refresher.ini, InfoSettings, enable, 1  ; по умолчанию 1
IniRead, Info,      Refresher.ini, InfoSettings, Info, vk4C ; по умолчанию L=vk4C
; Включем хоткей используя прочтённые (или принятые по умолчанию) значения переменных
Hotkey, ~%Info%, RefreshInfo, On
prevInfo := Info
; Создаём элементы GUI
Gui, Add, CheckBox, vInfoCheck checked%InfoCheck% x26 y217 w80 h20 gInfoCheckChk, by button
Gui, Add, Hotkey, vInfo x106 y217 w80 h20 gInfoChk, %Info%
Gui, Show, x821 y86 h280 w427, AutoTableMove v 1.0
; Конец секции автовыполения
Return
; Метка запускаемая при внесении изменений в hotkey box
InfoChk:
   Hotkey, ~%prevInfo%, off
   prevInfo := Key2VK(Info)
   Hotkey, ~%prevInfo%, RefreshInfo, On                    ; Включем новый хоткей
   IniWrite, %prevInfo%, Refresher.ini, InfoSettings, Info ; Записываем внесённые изменения в файл настроек
Return
; Метка запускаемая при активации check box
InfoCheckChk:
   IniWrite, %InfoCheckVar%, Refresher.ini, InfoSettings, enable ; Пишем
Return
 
RefreshInfo:
if (InfoCheckVar=0) {
   return
} else {
   IfWinNotExist, ahk_class TableFrameClass
       return
   WinActivate
   WinGetPos, , , WidthInfo, HeightInfo, ahk_class TableFrameClass
   MouseGetPos, OutputVarX, OutputVarY
   SetFormat, float, 0.0
   x1 := (WidthInfo * 0.295)
   y1 := (HeightInfo * 0.866) 
   y2 := (HeightInfo * 0.898) 
   SetDefaultMouseSpeed, 0
   SetMouseDelay, -1
   SendInput, {Click %x1%, %y1%}
   SendInput, {Click %x1%, %y2%}
   SendInput, {Click %OutputVarX%, %OutputVarY%, 0}
}
return
 
GuiClose:
ExitApp

Key2VK(HotkeyStr)
{
   SetFormat, Integer, H
   Loop, Parse, HotkeyStr
      If A_LoopField Not Contains +,^,!
      {
         Pos := A_Index
         Break
      }
   Return SubStr(HotkeyStr,1,Pos-1) &quot;vk&quot; GetKeyVK(SubStr(HotkeyStr,Pos))
}</code></pre></div><p>//add</p><p>В общем, при использовании gui, add, hotkey требуется менять раскладку для окна скрипта на eng.<br />Если очень хочется использовать editbox для изменения настроек — придётся создать подобие сего контрола корректно работающего в любой раскладке.</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Fri, 02 Dec 2011 16:09:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54156#p54156</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54155#p54155</link>
			<description><![CDATA[<p>Почему не решат? Можно записывать, прогнав через <em>GetKeyVK(Key)</em>, а читать для отображения в окне контрола через <em>GetKeyName(Key)</em>.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 02 Dec 2011 15:22:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54155#p54155</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54150#p54150</link>
			<description><![CDATA[<p>Проверка «правильности» хоткея производится при вводе, до тех пор пока ahk не станет работать исключительно с vk проблемы с «клавиша отсутствует в текущей раскладке» сохранятся.<br />Для определения vk/sc клавиши есть:<br /></p><div class="quotebox"><blockquote><p>GetKeyName(Key), GetKeyVK(Key), GetKeySC(Key) [v1.1.01+]: Retrieves the name/text, virtual key code or scan code of a key. Key can be a VK or SC code, such as &quot;vkA2&quot; or &quot;sc01D&quot;, a combination of both, or a key name.</p></blockquote></div><p>Но проблему эти функции не решат.</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Fri, 02 Dec 2011 13:47:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54150#p54150</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54145#p54145</link>
			<description><![CDATA[<p>Думаю дело не в раскладке, правильней всего было бы сохранение настроек в виде виртуальных клавиш. Не подскажите, как правильней организовать?</p>]]></description>
			<author><![CDATA[null@example.com (mj)]]></author>
			<pubDate>Fri, 02 Dec 2011 12:46:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54145#p54145</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54130#p54130</link>
			<description><![CDATA[<p>Так на основной вопрос я отвечать и не брался <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />В коллекции имеются примеры&nbsp; и переключения и определения текущей раскладки.</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Fri, 02 Dec 2011 02:45:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54130#p54130</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54128#p54128</link>
			<description><![CDATA[<div class="quotebox"><cite>creature.ws пишет:</cite><blockquote><p>Ну да <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> «та же» проблема может решаться принудительным переключением раскладки для окна скрипта.</p></blockquote></div><p>Как бы это и был основной вопрос топика <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Есть ли простой способ проверить раскладку и переключить ее? Нашел только простыню на хабре.</p>]]></description>
			<author><![CDATA[null@example.com (mj)]]></author>
			<pubDate>Fri, 02 Dec 2011 02:37:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54128#p54128</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54127#p54127</link>
			<description><![CDATA[<p>Ну да <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> «та же» проблема может решаться принудительным переключением раскладки для окна скрипта.</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Fri, 02 Dec 2011 02:30:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54127#p54127</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54126#p54126</link>
			<description><![CDATA[<div class="quotebox"><cite>creature.ws пишет:</cite><blockquote><p>«Это» можно использовать так же как и с кнопкой Save_and_Run.</p></blockquote></div><p>Да, я так и сделал. <br />Проблема в том, что при сохранении настроек L записывается не как vk4C, а как L, отсюда вся та же проблема:</p><p><span class="postimg"><img src="http://pix.am/EKWU.png" alt="http://pix.am/EKWU.png" /></span></p>]]></description>
			<author><![CDATA[null@example.com (mj)]]></author>
			<pubDate>Fri, 02 Dec 2011 02:12:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54126#p54126</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54124#p54124</link>
			<description><![CDATA[<p>«В тело скрипта» это слишком туманно.<br />Если требуется что бы хоткей работал сразу после запуска – активацию хоткея необходимо поместить в секцию автовыполнения (до первого Return или метки хоткея)</p><p>«Это» можно использовать так же как и с кнопкой Save_and_Run.</p><p>Например:<br /></p><div class="codebox"><pre><code>
; Сперва читаем сохранённые настройки
IniRead, InfoCheck, Refresher.ini, InfoSettings, enable, 1  ; по умолчанию 1
IniRead, Info,      Refresher.ini, InfoSettings, Info, vk4C ; по умолчанию L=vk4C
; Включем хоткей используя прочтённые (или принятые по умолчанию) значения переменных
Hotkey, ~%Info%, RefreshInfo, On
; Создаём элементы GUI
Gui, Add, CheckBox, vInfoCheck checked%InfoCheck% x26 y217 w80 h20 gInfoCheckChk, by button
Gui, Add, Hotkey, vInfo x106 y217 w80 h20 gInfoChk, %Info%
Gui, Show, x821 y86 h280 w427, AutoTableMove v 1.0
prevInfo := Info
; Конец секции автовыполения
Return
; Метка запускаемая при внесении изменений в hotkey box
InfoChk:
   Hotkey, ~%prevInfo%, off
   prevInfo := Info
   Hotkey, ~%Info%, RefreshInfo, On                    ; Включем новый хоткей
   IniWrite, %Info%, Refresher.ini, InfoSettings, Info ; Записываем внесённые изменения в файл настроек
Return
; Метка запускаемая при активации check box
InfoCheckChk:
   IniWrite, %InfoCheckVar%, Refresher.ini, InfoSettings, enable ; Пишем
Return

RefreshInfo:
if (InfoCheckVar=0) {
   return
} else {
   IfWinNotExist, ahk_class TableFrameClass
       return
   WinActivate
   WinGetPos, , , WidthInfo, HeightInfo, ahk_class TableFrameClass
   MouseGetPos, OutputVarX, OutputVarY
   SetFormat, float, 0.0
   x1 := (WidthInfo * 0.295)
   y1 := (HeightInfo * 0.866) 
   y2 := (HeightInfo * 0.898) 
   SetDefaultMouseSpeed, 0
   SetMouseDelay, -1
   SendInput, {Click %x1%, %y1%}
   SendInput, {Click %x1%, %y2%}
   SendInput, {Click %OutputVarX%, %OutputVarY%, 0}
}
return

GuiClose:
ExitApp</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Thu, 01 Dec 2011 20:24:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54124#p54124</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54120#p54120</link>
			<description><![CDATA[<div class="quotebox"><cite>creature.ws пишет:</cite><blockquote><p>Скрипт работает после нажатия Save_and_Run потому как включение горячей клавиши, запускающей «работу» скрипта, происходит после нажатия Save_and_Run.</p></blockquote></div><p>Попробовал вынести &quot;Hotkey, %Info%, Sample, On&quot; просто в тело скрипта - не работает, как именно надо написать?</p><br /><div class="quotebox"><cite>creature.ws пишет:</cite><blockquote><p>«Секцию сохранения настроек» можно привязать к g-label hotkey box&#039;а</p></blockquote></div><p>Немного не понял, как это можно использовать? Вот так?<br /></p><div class="codebox"><pre><code>
Gui, Add, Hotkey, vInfo gInfoChk x106 y217 w80 h20 , %InfoSave%
Return

InfoChk:
	IniWrite, %Info%, Refresher.ini, InfoSettings, Info
	return</code></pre></div><p>Или как сохранять значение %Info% без ini-файла?</p>]]></description>
			<author><![CDATA[null@example.com (mj)]]></author>
			<pubDate>Thu, 01 Dec 2011 19:03:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54120#p54120</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54119#p54119</link>
			<description><![CDATA[<p>Теперь понял <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Скрипт работает после нажатия Save_and_Run потому как включение горячей клавиши, запускающей «работу» скрипта, происходит после нажатия Save_and_Run.<br />«Секцию сохранения настроек» можно привязать к g-label hotkey box&#039;а<br /></p><div class="quotebox"><blockquote><p>A g-label such as gMySubroutine may be listed in the control&#039;s options. This would cause the MySubroutine label to be launched automatically whenever the user changes the hotkey.</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Thu, 01 Dec 2011 17:12:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54119#p54119</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54118#p54118</link>
			<description><![CDATA[<div class="quotebox"><cite>creature.ws пишет:</cite><blockquote><p>Не нашел кнопки &quot;Save&quot;</p></blockquote></div><p>Это кнопка Save_and_Run, она одна, исправил пост чтобы было ясно.</p><div class="quotebox"><cite>creature.ws пишет:</cite><blockquote><p>Не понял предназначение:<br /></p><div class="codebox"><pre><code>IniRead, InfoSave, Refresher.ini, InfoSettings, Info , %A_Space%
Gui, Add, Hotkey, vInfo x106 y217 w80 h20 , %InfoSave%</code></pre></div></blockquote></div><p>Первая строчка читает значение из файла &quot;Refresher.ini&quot;, из категории &quot;InfoSettings&quot; параметра &quot;Info&quot; и посылает его в переменную &quot;InfoSave&quot;.<br />Вторая строчка создает окошко хоткея под ID &quot;Info&quot;, с координатами, в себе при создании имеет сочетание из переменной &quot;InfoSave&quot;. </p><p>Так у меня реализована загрузка сохраненных настроек.</p>]]></description>
			<author><![CDATA[null@example.com (mj)]]></author>
			<pubDate>Thu, 01 Dec 2011 16:51:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54118#p54118</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54117#p54117</link>
			<description><![CDATA[<p>Не нашел кнопки &quot;Save&quot;<br />Не понял предназначение:<br /></p><div class="quotebox"><blockquote><p>IniRead, InfoSave, Refresher.ini, InfoSettings, Info , %A_Space%<br />Gui, Add, Hotkey, vInfo x106 y217 w80 h20 , %InfoSave%</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Thu, 01 Dec 2011 16:44:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54117#p54117</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Загрузка сочетаний из ini файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54116#p54116</link>
			<description><![CDATA[<p>Скрипт имеет несколько функций, для каждой можно в настройках задать сочетание клавиш, которое сохраняется в ini-файл по нажатию кнопки &quot;Save_and_Run&quot;.<br />При запуске скрипта из ini-файла загружаются сохраненные сочетания:</p><div class="codebox"><pre><code>IniRead, InfoCheckVar, Refresher.ini, InfoSettings, enable
Gui, Add, CheckBox, vInfoCheck checked%InfoCheckVar% x26 y217 w80 h20 , by button
IniRead, InfoSave, Refresher.ini, InfoSettings, Info , %A_Space%
Gui, Add, Hotkey, vInfo x106 y217 w80 h20 , %InfoSave%
Gui, Add, Button, x326 y247 w90 h20 , Save_and_Run
Gui, Show, x821 y86 h280 w427, AutoTableMove v 1.0
Return

GuiClose:
ExitApp

ButtonSave_and_Run:
	GuiControlGet, InfoCheckVar,, InfoCheck
    IniWrite, %InfoCheckVar%, Refresher.ini, InfoSettings, enable
	GuiControlGet, Info,, Info
	Hotkey, %Info%, RefreshInfo, On
	IniWrite, %Info%, Refresher.ini, InfoSettings, Info
Return

RefreshInfo:
if (InfoCheckVar=0) {
return
} else{
IfWinNotExist, ahk_class TableFrameClass
	return
WinActivate
WinGetPos, , , WidthInfo, HeightInfo, ahk_class TableFrameClass
MouseGetPos, OutputVarX, OutputVarY
SetFormat, float, 0.0
x1 := (WidthInfo * 0.295)
y1 := (HeightInfo * 0.866) 
y2 := (HeightInfo * 0.898) 
SetDefaultMouseSpeed, 0
SetMouseDelay, -1
SendInput, {Click %x1%, %y1%}
SendInput, {Click %x1%, %y2%}
SendInput, {Click %OutputVarX%, %OutputVarY%, 0}
}return</code></pre></div><p>INI-файл соответственно содержит:<br /></p><div class="codebox"><pre><code>[InfoSettings]
enable=1
Info=L</code></pre></div><p>При дефолтном английском языке системы все работает правильно, но если дефолтный русский, то при запуске скрипта поле, содержащее латинские символы, обращается в ноль и при нажатии &quot;Save_and_Run&quot; сообщает об этом:</p><p><span class="postimg"><img src="http://pix.am/G4C5.png" alt="http://pix.am/G4C5.png" /></span></p><p>Если переключить на английский, снова назначить на латинском клавишу - все работает, до перезапуска скрипта.</p><p>Как лучше всего решить эту проблему? На ум приходит только проверка раскладки на момент запуска скрипта и смена ее.</p><p>Попутно пара вопросов:<br />1) Скрипт не работает, пока не нажмешь клавишу &quot;Save_and_Run&quot;, как это обойти?<br />2) Можно ли сделать сохранение настроек без кнопки, т.е. автоматически при изменении параметров?</p><p>Замечания по скрипту приветствуются, опыта в программировании нет.</p>]]></description>
			<author><![CDATA[null@example.com (mj)]]></author>
			<pubDate>Thu, 01 Dec 2011 16:26:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54116#p54116</guid>
		</item>
	</channel>
</rss>
