<?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>https://forum.script-coding.com/viewtopic.php?id=6669</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6669&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Тип данных».]]></description>
		<lastBuildDate>Sun, 29 Dec 2013 11:28:27 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78621#p78621</link>
			<description><![CDATA[<p>Так мало ли ему участков выделено. Тут один человек уже поднимал тему про карту памяти процесса. Я лично этим вопросом не занимался.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sun, 29 Dec 2013 11:28:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78621#p78621</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=78613#p78613</link>
			<description><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Нет, у каждого процесса своё пространство адресов (виртуальных). Как они проецируются на реальные адреса, значения не имеет, т.к. приложения с реальными адресами не работают.</p></blockquote></div><p>&nbsp; А можно, также как и базовый адрес найти быстро и сразу границы выделенного приложению участка памяти, а заодно ещё и читаемые и не читаемые участки в этих границах?</p>]]></description>
			<author><![CDATA[null@example.com (Next)]]></author>
			<pubDate>Sun, 29 Dec 2013 07:44:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=78613#p78613</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77610#p77610</link>
			<description><![CDATA[<p>Меня сбило </p><div class="quotebox"><blockquote><p>В качестве DllName укажите имя самого процесса.</p></blockquote></div><p>&nbsp; Работает, спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Next)]]></author>
			<pubDate>Wed, 27 Nov 2013 14:09:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77610#p77610</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77607#p77607</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 27 Nov 2013 12:48:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77607#p77607</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77606#p77606</link>
			<description><![CDATA[<p>Не надо ничего менять в функции. Зачем вы это делаете? Имя второго параметра (DllName) используется в коде функции, а вы это имя меняете на что-то левое. Естественно, получается левый результат.</p><p>Примечание говорит о том, что параметр Process может быть именем процесса или его PID. Ко второму параметру это не относится. Там может быть только имя.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 27 Nov 2013 12:41:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77606#p77606</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77605#p77605</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Next)]]></author>
			<pubDate>Wed, 27 Nov 2013 12:23:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77605#p77605</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77604#p77604</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 27 Nov 2013 12:18:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77604#p77604</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77603#p77603</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Next)]]></author>
			<pubDate>Wed, 27 Nov 2013 11:15:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77603#p77603</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77600#p77600</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Wed, 27 Nov 2013 08:56:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77600#p77600</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77583#p77583</link>
			<description><![CDATA[<p>У меня есть адрес ячейки памяти, но на самом&nbsp; деле это не абсолютный адрес, а относительный&nbsp; &quot;имя_процесса + 0x0002000&quot;.&nbsp; Мне нужно получить значение из этого адреса, для этого нужно узнать начальный или &quot;базовый&quot; адрес.&nbsp; Это адрес с которого этот процесс загружен в память.&nbsp; Если он 0x00F00000, то нужный мне будет 0x00F20000.&nbsp; &nbsp;В первом сообщении как раз и говорится о &quot;базовом адресе&quot;.&nbsp; Как узнать этот &quot;базовый&quot; адрес?</p>]]></description>
			<author><![CDATA[null@example.com (Next)]]></author>
			<pubDate>Tue, 26 Nov 2013 17:51:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77583#p77583</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77580#p77580</link>
			<description><![CDATA[<div class="quotebox"><cite>Next пишет:</cite><blockquote><p>А как определить адрес с которого процесс загружен в память?</p></blockquote></div><p>Непонял вопроса...</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Tue, 26 Nov 2013 17:13:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77580#p77580</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77578#p77578</link>
			<description><![CDATA[<p>А я думал, что это вроде как &quot;базовый адрес процесса&quot;. Почему-то же&nbsp; это &quot;base&quot; в редакторе выделяется синим?&nbsp; А как определить адрес с которого процесс загружен в память?</p>]]></description>
			<author><![CDATA[null@example.com (Next)]]></author>
			<pubDate>Tue, 26 Nov 2013 16:51:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77578#p77578</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77574#p77574</link>
			<description><![CDATA[<div class="quotebox"><cite>Next пишет:</cite><blockquote><p>А что это &quot;base&quot; означает? Откуда оно берётся?&nbsp; Это что, какая-то системная переменная?</p></blockquote></div><p>Это адрес по которому происходит чтение, который был указан заранее. Например <em>base=0x36c124cd</em>.<br />Просто ТС выкладывает не полный скрипт а кусками.</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Tue, 26 Nov 2013 15:40:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77574#p77574</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77557#p77557</link>
			<description><![CDATA[<p>kamaz, или кто-нибудь, ау!</p>]]></description>
			<author><![CDATA[null@example.com (Next)]]></author>
			<pubDate>Tue, 26 Nov 2013 09:37:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77557#p77557</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Тип данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77537#p77537</link>
			<description><![CDATA[<p>А что это &quot;base&quot; означает? Откуда оно берётся?&nbsp; Это что, какая-то системная переменная?</p>]]></description>
			<author><![CDATA[null@example.com (Next)]]></author>
			<pubDate>Mon, 25 Nov 2013 13:44:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77537#p77537</guid>
		</item>
	</channel>
</rss>
