<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Запись строки в память]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=12861</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=12861&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Запись строки в память».]]></description>
		<lastBuildDate>Sun, 10 May 2020 23:48:55 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=139433#p139433</link>
			<description><![CDATA[<p>Если, как я понял, нужен(ы) язык(и) интерфейса, то так:<br /></p><div class="codebox"><pre><code>pCallBack := RegisterCallback(&quot;UILANGUAGE_ENUMPROC&quot;, &quot;F&quot;, 2)
Langs := []
pLangs := Object(Langs)
DllCall(&quot;EnumUILanguages&quot;, &quot;Ptr&quot;, pCallBack, &quot;UInt&quot;, MUI_LANGUAGE_NAME := 0x8, &quot;Ptr&quot;, pLangs)
ObjRelease(pLangs)
res := &quot;&quot;
for k, v in Langs
   res .= (res = &quot;&quot; ? &quot;&quot; : &quot;`n&quot;) . v
MsgBox, % res

UILANGUAGE_ENUMPROC(pStr, pLangs) {
   Langs := Object(pLangs)
   Langs.Push( StrGet(pStr) )
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 10 May 2020 23:48:55 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=139433#p139433</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=139432#p139432</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Но даже если переименовать notepad.exe в notepad.txt, на Windows 10 ни первый способ, ни второй не работает.</p></blockquote></div><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Ну всё равно, на 10 не работает даже, если просто notepad.exe переместить в другую папку.</p></blockquote></div><p>Потому что не хватает файла *.mui. У меня работает, если дополнительно рядом с копией notepad.exe создать каталог ru-RU, в него скопировать файл %windir%\ru-RU\notepad.exe.mui под тем же именем, что и копию исполняемого файла, но с дополнительным расширением mui (notepad.txt.mui, notepad.unknown_extension.mui…)</p><p>Но возникает дополнительный вопрос: как в общем случае программно узнать, какой код языка на месте ru-RU использовать (к тому же, как я понимаю, их может быть установлено несколько), хотя бы, например, пройдясь по всем соседним каталогам и определив, являются ли их имена допустимыми обозначениями языков (локалей)?</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sun, 10 May 2020 22:46:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=139432#p139432</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123331#p123331</link>
			<description><![CDATA[<div class="quotebox"><cite>Vicoriyan пишет:</cite><blockquote><p>Так вот, поменять значение нельзя с базового адреса, а только с конечного. Вот мне и нужно узнать конечный адрес, зная смещения.</p></blockquote></div><p>К базовому адресу прибавьте смещение, вот и будет конечный адрес. Или вам и базовый не известен? Тогда кроме смещений нужно знать текущие значения членов структуры, чтобы найти эту структуру в памяти процесса поиском по этой памяти. Тут, правда, может найтись не одна такая последовательность чисел, и тогда встанет вопрос, которая из них является искомой структурой. Можно поискать их адреса в секции данных программы (её статической памяти) — адрес структуры где-то там может храниться. Если, конечно, он не хранится в какой-то другой динамической структуре, уже адрес которой хранится в секции данных.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 24 Jan 2018 16:15:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123331#p123331</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123326#p123326</link>
			<description><![CDATA[<p>Вы больше запутываете такой постановкой вопроса, чем объясняете, что в свою очередь указывает на то, что Вы сами плохо понимаете как &quot;оно&quot; устроено.</p><p>Если к этому относиться серьёзно, то хорошо бы почитать полезной литературы, или на крайний случай, статьи на Хабре, спросив у Гугля что-то вроде - <em>как устроено адресное пространство приложения</em>, а ещё лучше, полистать форумы, которые целенаправленно освящают функционал программ, вроде &quot;CheatEngine&quot;(&quot;CE&quot;) и их сферу применения. В общих же чертах, картина рисуется так:</p><p>У каждого, загруженного в оперативную память процесса, адресное пространство локально изнутри и начинается с 0x00000000(x32), но глобально, оно подразумевается как базовый адрес приложения, являющийся смещением в адресном пространстве оперативной памяти операционной системы(среды). Поэтому, когда производятся манипуляции в том же &quot;CE&quot;, все литеральные представления адресов начинаются с &quot;TargetProgrammName.exe&quot;. Иными словами и очень грубо говоря, понимаемый под базовым адресом программы &quot;TargetProgrammName.exe&quot; - это указатель на всю структуру приложения в оперативной памяти среды. Его значение может меняться.</p><p>Указатели же, которые интересны в нашем случае - константны в локальном пространстве адресов процесса. Они не меняются при перезагрузке самой программы и среды. Эти указатели нужны самой программе, чтобы &quot;знать&quot;, как она была распределена в памяти и содержат адреса, в которых начинаются её структуры(логика, данные, ... ). Меняются они только в случае изменения кода, происходящего, например, в результате апдейтов.</p><p>Такой указатель, &quot;как бы&quot; ссылается на начало структуры, от чего его можно было бы назвать и ссылкой и из-за характерного поведения, похожего на свойство объекта(когда манипуляции над ссылкой на объект, приводят к желаемым изменениям самого объекта), но это не так. Об этом тоже стоит почитать. Важной аналогией здесь является то, что смещения от указателя применяются к адресу содержащемуся в нём, который в свою очередь и меняется при перезагрузке.</p><p>Следуя по пути смещений от начала структуры получается доступ к её членам, расположенным хаотичным образом в адресном пространстве процесса.</p><p>Самые первые, поверхностные поиски для манипуляций над значениями в программах на подобие &quot;CE&quot;, всегда начинаются с поисков этих адресов, от которых последовательно находятся смещения к началу своей структуры, адрес которой обязательно хранится в указателе, являющемся конечной точкой такого поиска.</p><p>Неправильно описал это в 36 посте.</p><p>Поправьте пожалуйста, если я где-то опять не корректен.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 24 Jan 2018 13:51:08 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123326#p123326</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123325#p123325</link>
			<description><![CDATA[<p><strong>teadrinker</strong> Нужно найти конечный адрес зная смещение. Согласен, не сильно понятно написал.<br />По простому и как я это понимаю выглядит так. Конечный адрес всегда имеет базовый адрес. Базовый адрес меняется, но смещения никогда, они уникальны. Базовый адрес например 100, у нас 4 смещения.<br />Это например смещение 1 = 3; 2 = 7; 3 = 25; 4 = 8. Конечный адрес у нас получается 143. Это 100+3+7+25+8=143. С перезагрузкой процесса у нас базовый адрес меняется например на 120, то конечный адрес у нас получится уже не 143, а 163. Так вот, поменять значение нельзя с базового адреса, а только с конечного. Вот мне и нужно узнать конечный адрес, зная смещения. В CheatEngine это называется указателями. Как бы CheatEngine зная эти смещения, он находит базовый адрес. Вот и хочу узнать, можно ли средствами AHK такое проделывать.</p>]]></description>
			<author><![CDATA[null@example.com (Vicoriyan)]]></author>
			<pubDate>Wed, 24 Jan 2018 10:03:22 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123325#p123325</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123173#p123173</link>
			<description><![CDATA[<p>Ну, если известны значения членов структуры, тогда можно найти, конечно.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 18 Jan 2018 11:51:42 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123173#p123173</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123170#p123170</link>
			<description><![CDATA[<p>Как-то вы рассуждаете, не как программисты.<br />Если набор смещений уникален, он отождествляется одним адресом, если нет, некоторым количеством, а не со всеми сразу. Количество памяти выделенное процессу не в планетарных масштабах. Если было известно старое значение, область поиска можно сузить. Зная всё это и значение, которое расположено по пути смещений, тот же CheatEngine успешно совершает процедуру поиска. Значит - это возможно.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Thu, 18 Jan 2018 10:10:19 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123170#p123170</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123166#p123166</link>
			<description><![CDATA[<div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>наверное в этом и есть суть вопроса - зная смещения, найти базовый адрес.</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 (YMP)]]></author>
			<pubDate>Thu, 18 Jan 2018 04:42:44 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123166#p123166</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123161#p123161</link>
			<description><![CDATA[<p>Не, всё равно не понимаю, что именно нужно искать, и по каким признакам.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 17 Jan 2018 21:12:48 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123161#p123161</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123158#p123158</link>
			<description><![CDATA[<p><strong>Vicoriyan</strong>, указатели, как правило, содержат базовый адрес от которого начинается структура данных, а смещения от него, содержат адреса значений этой структуры, которые Вы ищете для манипуляций. Насколько могу судить по своей скромной практике, именно смещения последовательно находятся следуя от базового адреса, а не наоборот, так что если они вам известны, то Вы вероятнее всего знаете и базовый адрес. Исключением может быть ситуация, в которой адресное пространство было изменено очередным апдейтом софта, в котором происходит поиск, тогда новые данные вымещают начала структур старых данных, сдвигая их вверх или вниз и если последние не подвергались изменениям в ходе обновления, то часто бывает, что смещения остаются прежними.</p><p><strong>teadrinker</strong>, наверное в этом и есть суть вопроса - зная смещения, найти базовый адрес. И хотя в том же CheatEngine этот поиск не занимает больше минуты, возвращая за очень редким исключением больше одного результата, было бы интересно узнать альтернативу.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 17 Jan 2018 19:42:54 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123158#p123158</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123149#p123149</link>
			<description><![CDATA[<p>Ну вот, раньше были непонятные указатели, а теперь ещё показатели добавились. <img src="//forum.script-coding.com/img/smilies/lol.png" width="15" height="15" /><br />Думаю, что можно, но понимаю о чём идёт речь лишь примерно, с CheatEngine никогда не имел дела.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Wed, 17 Jan 2018 14:47:56 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123149#p123149</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123145#p123145</link>
			<description><![CDATA[<p>В программе CheatEngine чтоб не икать каждый раз новый адрес после перезагрузки процесса, существуют указатели. Они сохраняются в таблице программы. Этот указатель ищет новый адрес строки. Вот и хочу узнать, можно ли средствами AHK находить указатели, зная все показатели смещения.</p>]]></description>
			<author><![CDATA[null@example.com (Vicoriyan)]]></author>
			<pubDate>Wed, 17 Jan 2018 08:43:09 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123145#p123145</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123107#p123107</link>
			<description><![CDATA[<p>Не совсем понял вопрос. Какие указатели Вы имеете в виду?</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 15 Jan 2018 22:39:13 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123107#p123107</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123078#p123078</link>
			<description><![CDATA[<p><strong>teadrinker</strong> Для записи числа в память я использовал Ваш код. Он прекрасно работает для конкретного адреса, но после перезапуска процесса адрес меняется. Его можно узнать средствами AHK не используя CheatEngine, зная указатели?</p>]]></description>
			<author><![CDATA[null@example.com (Vicoriyan)]]></author>
			<pubDate>Mon, 15 Jan 2018 09:04:35 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123078#p123078</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Запись строки в память]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=117915#p117915</link>
			<description><![CDATA[<p>А вот скомпилированный AHK-файл с изменённым расширением запустился и первым, и вторым способом, с соответствующим названием процесса в диспетчере задач.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 06 Aug 2017 21:51:18 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=117915#p117915</guid>
		</item>
	</channel>
</rss>
