<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Тип данных]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6669&amp;type=atom" />
	<updated>2013-12-29T11:28:27Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6669</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78621#p78621" />
			<content type="html"><![CDATA[<p>Так мало ли ему участков выделено. Тут один человек уже поднимал тему про карту памяти процесса. Я лично этим вопросом не занимался.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-12-29T11:28:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78621#p78621</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=78613#p78613" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Нет, у каждого процесса своё пространство адресов (виртуальных). Как они проецируются на реальные адреса, значения не имеет, т.к. приложения с реальными адресами не работают.</p></blockquote></div><p>&nbsp; А можно, также как и базовый адрес найти быстро и сразу границы выделенного приложению участка памяти, а заодно ещё и читаемые и не читаемые участки в этих границах?</p>]]></content>
			<author>
				<name><![CDATA[Next]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28517</uri>
			</author>
			<updated>2013-12-29T07:44:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=78613#p78613</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77610#p77610" />
			<content type="html"><![CDATA[<p>Меня сбило </p><div class="quotebox"><blockquote><p>В качестве DllName укажите имя самого процесса.</p></blockquote></div><p>&nbsp; Работает, спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Next]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28517</uri>
			</author>
			<updated>2013-11-27T14:09:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77610#p77610</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77607#p77607" />
			<content type="html"><![CDATA[<p>Вот этот код (целиком и безо всяких изменений) у вас работает?<br /></p><div class="codebox"><pre><code>SetFormat, Integer, Hex
ProcessName := &quot;opera.exe&quot;
addr := ProcGetDllBase(ProcessName, ProcessName)
MsgBox, % addr

ProcGetDllBase(Process, DllName)    ; Process = PID or Name.
{
    static StructSize, AddrOffset, NameOffset, MODULEENTRY32
    static FLAGS := 0x18        ; TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32
    static INVALID_HANDLE_VALUE := -1
    If (!StructSize) {
        If (A_PtrSize = 8)
            StructSize := 1080, AddrOffset := 24, NameOffset := 48
        Else
            StructSize := 1064, AddrOffset := 20, NameOffset := 32
        VarSetCapacity(MODULEENTRY32, StructSize, 0)
        NumPut(StructSize, MODULEENTRY32, 0, &quot;uint&quot;)
    }
    Process, Exist, %Process%
    If (ErrorLevel = 0)
        Return 0

    snapMod := DllCall(&quot;CreateToolhelp32Snapshot&quot;, &quot;uint&quot;, FLAGS
                                                 , &quot;uint&quot;, ErrorLevel
                                                 , &quot;ptr&quot;)
    If (snapMod = INVALID_HANDLE_VALUE) {
        Return 0
    }

    If DllCall(&quot;Module32FirstW&quot;, &quot;ptr&quot;, snapMod, &quot;ptr&quot;, &amp;MODULEENTRY32)
    {
        pszModule := &amp;MODULEENTRY32 + NameOffset
        If DllCall(&quot;lstrcmpiW&quot;, &quot;wstr&quot;, DllName, &quot;ptr&quot;, pszModule) = 0
        {
            DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
            Return NumGet(MODULEENTRY32, AddrOffset, &quot;ptr&quot;)
        }

        While DllCall(&quot;Module32NextW&quot;, &quot;ptr&quot;, snapMod, &quot;ptr&quot;, &amp;MODULEENTRY32)
        {
            If DllCall(&quot;lstrcmpiW&quot;, &quot;wstr&quot;, DllName, &quot;ptr&quot;, pszModule) = 0
            {
                DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
                Return NumGet(MODULEENTRY32, AddrOffset, &quot;ptr&quot;)
            }
        }
    }
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
    Return 0
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-11-27T12:48:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77607#p77607</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77606#p77606" />
			<content type="html"><![CDATA[<p>Не надо ничего менять в функции. Зачем вы это делаете? Имя второго параметра (DllName) используется в коде функции, а вы это имя меняете на что-то левое. Естественно, получается левый результат.</p><p>Примечание говорит о том, что параметр Process может быть именем процесса или его PID. Ко второму параметру это не относится. Там может быть только имя.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-11-27T12:41:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77606#p77606</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77605#p77605" />
			<content type="html"><![CDATA[<p>Изменил начало</p><div class="codebox"><pre><code>ProcessName := &quot;opera.exe&quot;
ProcGetDllBase(Process, ProcessName)    ; Process = PID or Name.</code></pre></div><p>&nbsp; Результат тот же. Какое имя вы имеете ввиду? И что тогда говорит примечание?</p>]]></content>
			<author>
				<name><![CDATA[Next]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28517</uri>
			</author>
			<updated>2013-11-27T12:23:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77605#p77605</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77604#p77604" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Next пишет:</cite><blockquote><p>&nbsp; &nbsp;Не понимаю. Приложений много, все грузятся на свободные места в памяти. Как может быть один адрес для нескольких при приложений?</p></blockquote></div><p>Нет, у каждого процесса своё пространство адресов (виртуальных). Как они проецируются на реальные адреса, значения не имеет, т.к. приложения с реальными адресами не работают.</p><div class="quotebox"><blockquote><p>Выдаёт &quot;30&quot;. В чём может быть ошибка?</p></blockquote></div><p>Наверно, в том, что вы меняете код, не понимая, что делаете. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Второй параметр функции — имя, а не PID.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-11-27T12:18:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77604#p77604</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77603#p77603" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Стандартный адрес 0x400000.</p></blockquote></div><p>&nbsp; &nbsp;Не понимаю. Приложений много, все грузятся на свободные места в памяти. Как может быть один адрес для нескольких при приложений?</p><div class="quotebox"><blockquote><p>Если подозреваете, что у процесса он нестандартный</p></blockquote></div><p>&nbsp; &nbsp;Всегда разный базовый адрес. </p><br /><p>Попробовал с броузером Opera х32. Базовый получился 0x00DF0000</p><div class="codebox"><pre><code>ProcessName := &quot;opera.exe&quot;
Process, Exist, %ProcessName%
PID := ErrorLevel


ProcGetDllBase(Process, PID)    ; Process = PID or Name.
{
    static StructSize, AddrOffset, NameOffset, MODULEENTRY32
    static FLAGS := 0x18        ; TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32
    static INVALID_HANDLE_VALUE := -1
    If (!StructSize) {
        If (A_PtrSize = 8)
            StructSize := 1080, AddrOffset := 24, NameOffset := 48
        Else
            StructSize := 1064, AddrOffset := 20, NameOffset := 32
        VarSetCapacity(MODULEENTRY32, StructSize, 0)
        NumPut(StructSize, MODULEENTRY32, 0, &quot;uint&quot;)
    }
    Process, Exist, %Process%
    If (ErrorLevel = 0)
        Return 10

    snapMod := DllCall(&quot;CreateToolhelp32Snapshot&quot;, &quot;uint&quot;, FLAGS
                                                 , &quot;uint&quot;, ErrorLevel
                                                 , &quot;ptr&quot;)
    If (snapMod = INVALID_HANDLE_VALUE) {
        Return 20
    }

    If DllCall(&quot;Module32FirstW&quot;, &quot;ptr&quot;, snapMod, &quot;ptr&quot;, &amp;MODULEENTRY32)
    {
        pszModule := &amp;MODULEENTRY32 + NameOffset
        If DllCall(&quot;lstrcmpiW&quot;, &quot;wstr&quot;, DllName, &quot;ptr&quot;, pszModule) = 0
        {
            DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
            Return NumGet(MODULEENTRY32, AddrOffset, &quot;ptr&quot;)
        }

        While DllCall(&quot;Module32NextW&quot;, &quot;ptr&quot;, snapMod, &quot;ptr&quot;, &amp;MODULEENTRY32)
        {
            If DllCall(&quot;lstrcmpiW&quot;, &quot;wstr&quot;, DllName, &quot;ptr&quot;, pszModule) = 0
            {
                DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
                Return NumGet(MODULEENTRY32, AddrOffset, &quot;ptr&quot;)
            }
        }
    }
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
    Return 30
}
    
    
addr := ProcGetDllBase(&quot;opera.exe&quot;, &quot;opera.exe&quot;)
MsgBox, %addr%  
    
Exit 
</code></pre></div><p>&nbsp; &nbsp;Выдаёт &quot;30&quot;. В чём может быть ошибка?</p>]]></content>
			<author>
				<name><![CDATA[Next]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28517</uri>
			</author>
			<updated>2013-11-27T11:15:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77603#p77603</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77600#p77600" />
			<content type="html"><![CDATA[<p>Стандартный адрес 0x400000. Если подозреваете, что у процесса он нестандартный, попробуйте посмотреть вот этой функцией. В качестве DllName укажите имя самого процесса. Т.е., например:<br /></p><div class="codebox"><pre><code>
addr := ProcGetDllBase(&quot;notepad.exe&quot;, &quot;notepad.exe&quot;)
</code></pre></div><p>Если процесс 64-битный, скрипт нужно запускать в АНК 64. Если вернёт 0, значит, какая-то ошибка.<br /></p><div class="codebox"><pre><code>
ProcGetDllBase(Process, DllName)    ; Process = PID or Name.
{
    static StructSize, AddrOffset, NameOffset, MODULEENTRY32
    static FLAGS := 0x18        ; TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32
    static INVALID_HANDLE_VALUE := -1
    If (!StructSize) {
        If (A_PtrSize = 8)
            StructSize := 1080, AddrOffset := 24, NameOffset := 48
        Else
            StructSize := 1064, AddrOffset := 20, NameOffset := 32
        VarSetCapacity(MODULEENTRY32, StructSize, 0)
        NumPut(StructSize, MODULEENTRY32, 0, &quot;uint&quot;)
    }
    Process, Exist, %Process%
    If (ErrorLevel = 0)
        Return 0

    snapMod := DllCall(&quot;CreateToolhelp32Snapshot&quot;, &quot;uint&quot;, FLAGS
                                                 , &quot;uint&quot;, ErrorLevel
                                                 , &quot;ptr&quot;)
    If (snapMod = INVALID_HANDLE_VALUE) {
        Return 0
    }

    If DllCall(&quot;Module32FirstW&quot;, &quot;ptr&quot;, snapMod, &quot;ptr&quot;, &amp;MODULEENTRY32)
    {
        pszModule := &amp;MODULEENTRY32 + NameOffset
        If DllCall(&quot;lstrcmpiW&quot;, &quot;wstr&quot;, DllName, &quot;ptr&quot;, pszModule) = 0
        {
            DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
            Return NumGet(MODULEENTRY32, AddrOffset, &quot;ptr&quot;)
        }

        While DllCall(&quot;Module32NextW&quot;, &quot;ptr&quot;, snapMod, &quot;ptr&quot;, &amp;MODULEENTRY32)
        {
            If DllCall(&quot;lstrcmpiW&quot;, &quot;wstr&quot;, DllName, &quot;ptr&quot;, pszModule) = 0
            {
                DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
                Return NumGet(MODULEENTRY32, AddrOffset, &quot;ptr&quot;)
            }
        }
    }
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, snapMod)
    Return 0
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-11-27T08:56:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77600#p77600</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77583#p77583" />
			<content type="html"><![CDATA[<p>У меня есть адрес ячейки памяти, но на самом&nbsp; деле это не абсолютный адрес, а относительный&nbsp; &quot;имя_процесса + 0x0002000&quot;.&nbsp; Мне нужно получить значение из этого адреса, для этого нужно узнать начальный или &quot;базовый&quot; адрес.&nbsp; Это адрес с которого этот процесс загружен в память.&nbsp; Если он 0x00F00000, то нужный мне будет 0x00F20000.&nbsp; &nbsp;В первом сообщении как раз и говорится о &quot;базовом адресе&quot;.&nbsp; Как узнать этот &quot;базовый&quot; адрес?</p>]]></content>
			<author>
				<name><![CDATA[Next]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28517</uri>
			</author>
			<updated>2013-11-26T17:51:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77583#p77583</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77580#p77580" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Next пишет:</cite><blockquote><p>А как определить адрес с которого процесс загружен в память?</p></blockquote></div><p>Непонял вопроса...</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2013-11-26T17:13:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77580#p77580</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77578#p77578" />
			<content type="html"><![CDATA[<p>А я думал, что это вроде как &quot;базовый адрес процесса&quot;. Почему-то же&nbsp; это &quot;base&quot; в редакторе выделяется синим?&nbsp; А как определить адрес с которого процесс загружен в память?</p>]]></content>
			<author>
				<name><![CDATA[Next]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28517</uri>
			</author>
			<updated>2013-11-26T16:51:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77578#p77578</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77574#p77574" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Next пишет:</cite><blockquote><p>А что это &quot;base&quot; означает? Откуда оно берётся?&nbsp; Это что, какая-то системная переменная?</p></blockquote></div><p>Это адрес по которому происходит чтение, который был указан заранее. Например <em>base=0x36c124cd</em>.<br />Просто ТС выкладывает не полный скрипт а кусками.</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2013-11-26T15:40:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77574#p77574</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77557#p77557" />
			<content type="html"><![CDATA[<p>kamaz, или кто-нибудь, ау!</p>]]></content>
			<author>
				<name><![CDATA[Next]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28517</uri>
			</author>
			<updated>2013-11-26T09:37:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77557#p77557</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Тип данных]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77537#p77537" />
			<content type="html"><![CDATA[<p>А что это &quot;base&quot; означает? Откуда оно берётся?&nbsp; Это что, какая-то системная переменная?</p>]]></content>
			<author>
				<name><![CDATA[Next]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28517</uri>
			</author>
			<updated>2013-11-25T13:44:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77537#p77537</id>
		</entry>
</feed>
