Текст в памяти

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 12.11.2013 (Вт) 22:43

Код: Выделить всё
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAcess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddess As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWriten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const Process_All_Access As Long = &H1F0FFF



Private Function GetByte(Txt As String, num As Integer) As Byte
GetByte = Asc(Mid$(Txt, num, 1))
End Function



Private Function Str2Hex(ByVal Txt As String) As String
Dim i As Integer
Dim buff As String
For i = 1 To Len(Txt)
buff = Hex(GetByte(Txt, i))
If Len(buff) = 1 Then buff = "0" & buff
Str2Hex = buff & Str2Hex
Next i
End Function



Private Sub Form_Load()
Dim hWnd As Long, pid As Long, pHandle As Long, str As String * 4
Dim ReadMemory As Variant
hWnd = FindWindow(vbNullString, "Perfect World")

GetWindowThreadProcessId hWnd, pid
pHandle = OpenProcess(Process_All_Access, False, pid)

ReadProcessMemory pHandle, &H178EF5B4, str, 4, 0&
ReadMemory = Val("&H" + Str2Hex(str))
If Val(ReadMemory) < 0 Then ReadMemory = 65536 + Val(ReadMemory)
CloseHandle hProcess

Me.Show

Text1 = ReadMemory
End Sub


Адрес с деньгами читает превосходно.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.11.2013 (Вт) 23:58

Хакер писал(а):В чём именно? Где?

Я же привёл цитату оттуда:
What is the difference between UCS-2 and UTF-16? писал(а):UCS-2 is obsolete terminology which refers to a Unicode implementation up to Unicode 1.1, before surrogate code points and UTF-16 were added to Version 2.0 of the standard. This term should now be avoided.

UCS-2 does not define a distinct data format, because UTF-16 and UCS-2 are identical for purposes of data exchange. Both are 16-bit, and have exactly the same code unit representation.

Sometimes in the past an implementation has been labeled "UCS-2" to indicate that it does not support supplementary characters and doesn't interpret pairs of surrogate code points as characters. Such an implementation would not handle processing of character properties, code point boundaries, collation, etc. for supplementary characters.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текст в памяти

Сообщение Хакер » 13.11.2013 (Ср) 6:21

Что непонятного? Их позиция: мы не рекомендуем вам делать что-либо, что поддерживало бы только штуку, которую мы раньше называли UCS-2. Если делаете что-либо с юникодом, оно должно поддерживать суррогатные пары. Всё иное должно считаться устаревшим.

Тем не менее, они говорят, что под UCS-2 могут иметься в виду реализации, которые ничего не знали о суррогатных парах.

Фразой «and have exactly the same code unit representation» они имели в виду, что это не настолько различающиеся между собой вещи, как UTF-7, UTF-8, UTF-16 и UTF-32.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.11.2013 (Ср) 11:51

А в каких языках реально используются суррогатные пары?
Кстати, получается, что пытаясь прочитать UTF-16 как UCS-2 мы всё равно ничего плохого не сделаем, поскольку тех символов, которые будут прочитаны неверно всё равно в UCS-2 нет, так?
Ну а в обратную сторону возникает вопрос, могли ли в UCS-2 присутствовать те символы, которые приведут к неверной интерпритации строки в UTF-16. В каком случае это возможно для реальных символов?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Текст в памяти

Сообщение iGrok » 13.11.2013 (Ср) 15:02

Qwertiy писал(а):прочитать UTF-16 как UCS-2 мы всё равно ничего плохого не сделаем

Наоборот. Если будешь читать UCS-2 читалкой, умеющей UTF-16, ничего плохого не будет. А вот если будешь читать UTF-16 "старой" читалкой для UCS-2, то суррогатные пары окажутся представлены несколькими символами вместо одного, плюс могут встретиться неподдерживаемые символы, и как на них отреагирует UCS-2 декодер не известно.

UTF-16 - кодировка с переменным "размером символа". Как utf-8, только элементы 16-битные. Т.е. символ может состоять и из нескольких 16-битных элементов.
В UCS-2 же размер фиксирован, все символы укладываются в один 16-бит элемент.
Последний раз редактировалось iGrok 13.11.2013 (Ср) 15:10, всего редактировалось 1 раз.
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.11.2013 (Ср) 15:07

iGrok писал(а):суррогатные пары окажутся представлены несколькими символами вместо одного

Вместо того символа, которого вообще нет? Тебе не всё равно, два вопросика увидеть, или один?

iGrok писал(а):Если будешь читать UCS-2 читалкой, умеющей UTF-16, ничего плохого не будет.

А если там окажется код, который означет первую половину двойного символа? Он сам и следующий будут интерпретированы неверно.
Или я что-то не так понял?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Текст в памяти

Сообщение iGrok » 13.11.2013 (Ср) 15:13

Qwertiy писал(а):А если там окажется код, который означет первую половину двойного символа? Он сам и следующий будут интерпретированы неверно.Или я что-то не так понял?

Не окажется. Символов с таким кодом в UCS-2 нет.

Qwertiy писал(а):Вместо того символа, которого вообще нет? Тебе не всё равно, два вопросика увидеть, или один?

Парой могут быть представлены даже "й" или "ё". Это изврат, но это вполне себе валидный вариант.

UPD: Перепутал композицию с суррогатными парами. Но всё равно, варианта "два вопросика" или "один вопросик" не будет. Будет или "два вопросика", или один валидный символ.
Последний раз редактировалось iGrok 13.11.2013 (Ср) 15:15, всего редактировалось 1 раз.
label:
cli
jmp label

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Текст в памяти

Сообщение ger_kar » 13.11.2013 (Ср) 19:04

Что-то тема зациклилась на кодировках, а судя по коду, который привел Res5, проблема не в кодировках, точнее в кодировках, но несколько в ином свете. Проблема как всегда в объявлении и вызове функции, т.е. в этой строке ReadProcessMemory pHandle, &H178EF5B4, str, 4, 0& При таком вызове очевидно, что происходит преобразование, а оно тут нафиг не нужно. Нужно попробовать вызывать так:
ReadProcessMemory pHandle, &H178EF5B4, strptr(str), 4, 0&
Бороться и искать, найти и перепрятать

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Текст в памяти

Сообщение Mikle » 13.11.2013 (Ср) 19:44

ger_kar писал(а):Нужно попробовать вызывать так:

Тогда уж так:
Код: Выделить всё
ReadProcessMemory pHandle, &H178EF5B4, ByVal StrPtr(str), 4, 0&

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Текст в памяти

Сообщение ger_kar » 13.11.2013 (Ср) 19:54

Так аргумент в Declare и так ByVal объявлен.
Бороться и искать, найти и перепрятать

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 13.11.2013 (Ср) 22:58

Ничего не выдает. Видимо тут никак без преобразования. Если функцию StrPtr() вывести отдельно то выдаются цифры <> колличеству денег(если брать адрес с деньгами), с текстом также.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текст в памяти

Сообщение Хакер » 14.11.2013 (Чт) 5:37

ger_kar писал(а):Нужно попробовать вызывать так:
ReadProcessMemory pHandle, &H178EF5B4, strptr(str), 4, 0&


И что это за чтение четырёх байтов? Почему именно четырёх? Почему именно в str? str уже имеет достаточную длину?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Текст в памяти

Сообщение ger_kar » 14.11.2013 (Чт) 9:34

Хакер писал(а):И что это за чтение четырёх байтов? Почему именно четырёх? Почему именно в str? str уже имеет достаточную длину?
Я например понятия не имею, но я исходил из того, что в исходном коде читаются именно 4 байта, ну видимо автору нужно прочитать только 4, может это название валюты из 2-х символов и т.п., это не суть важно. Я только изменил вызов с передачей адреса строкового буфера, что-бы при вызове ReadProcessMemory не происходило преобразований.

Res5 писал(а):Ничего не выдает.
Что значит ничего не выдает? Строковый буфер остается пустой?
Res5 писал(а):Видимо тут никак без преобразования.
Если ничего не выдает, что ты собираешься преобразовывать?
Res5 писал(а):Если функцию StrPtr() вывести отдельно то выдаются цифры <> колличеству денег(если брать адрес с деньгами), с текстом также.
А с какого фига тебе StrPtr() будет выдавать количество денег или что-то еще? Единственное, что выдает эта функция - это адрес начала строкового буфера в который будут считаны данные. Этот адрес из адресного пространства твоего процесса и именно этот адрес и передается аргументом при вызове ReadProcessMemory. Причем StrPtr применима к строке и только к строке ! Для числовых переменных нужно использовать VarPtr.
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Текст в памяти

Сообщение ger_kar » 14.11.2013 (Чт) 9:43

И вообще откуда взялся адрес в пространстве другого процесса, по которому производится чтение? Может этот адрес содержит указатель (т.е. адрес) начала строкового буфера и не является строковым буфером?
Бороться и искать, найти и перепрятать

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 14.11.2013 (Чт) 18:22

Дело в том что деньги в памяти занимают 4ре байта(число). А вот текст может занимать и 2 байта и 10 и больше даже. Есть предположение что строку надо читать по 2 байта и считывать каждый символ .

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.11.2013 (Чт) 18:40

Res5 писал(а):Есть предположение что строку надо читать по 2 байта и считывать каждый символ .

Вчера обсуждалось же...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текст в памяти

Сообщение Хакер » 14.11.2013 (Чт) 20:15

Qwertiy писал(а):Вчера обсуждалось же...

Бить надо за такие идеи.
Читать надо постранично, а не по-2-байтно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.11.2013 (Чт) 22:14

Хакер писал(а):
Qwertiy писал(а):Вчера обсуждалось же...

Бить надо за такие идеи.

И какое это имеет отношение к моей фразе? Особенно с учётом того, что я вчера писал как раз про страницы?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текст в памяти

Сообщение Хакер » 14.11.2013 (Чт) 22:16

К твоей фразе — весьма большое. К тебе лично — пожалуй, никакого.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 14.11.2013 (Чт) 22:53

Не понял...

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 15.11.2013 (Пт) 6:31

Вобщем в интернете я нашел рабочий пример, который заменяет 2 первых символа строки в памяти.
Может это поможет понять как строку выводить.

Код: Выделить всё
'You Need a button (Command1).
' MaRiO G. Serrano. 16/Abril/2002.-
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteString Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'Private Declare Function WriteValue Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Function ReadMemory(hWnd As Long, Address As Long, Bytes As Long, Optional strReplaceWith As String) As String
    'Runs For Not Unicode Strings (VB-Strings)
    On Error Resume Next
    Dim pid As Long        ' Used to hold the Process Id
    Dim pHandle As Long    ' Holds the Process Handle
    Dim bytValue As Long   'Stores the value  of a byte in the memory
    Dim i As Long
    Dim Text As String
   
    ' Get the ProcId of the Window
    GetWindowThreadProcessId hWnd, pid

    ' use the pId to get a handle
    pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
   
    If (pHandle = 0) Then
         'MsgBox "Unable to open process!"
         Exit Function
    End If
    If Address = 0 Then Exit Function
   
    For i = 1 To Bytes Step 2
       ' Read Byte to Byte
       ReadProcessMemory pHandle, Address + i - 1, bytValue, 1, 0&
       'value now contains the long value of the byte located in [Address + i - 1] pos.
       'ReadMemory is a string...
       
       ReadMemory = ReadMemory & Chr$(bytValue)
    Next
    'to write numeric values you can ..(Must) use WriteValue API
    If LenB(strReplaceWith) <> 0 Then
        'No Unicode!!
        WriteString pHandle, Address, StrPtr(strReplaceWith), LenB(strReplaceWith), 0&
    End If
    'Close the Handle
    CloseHandle pHandle
End Function

Private Sub Command1_Click()
Dim hWnd As Long, Address As Long
hWnd = FindWindow(vbNullString, "Perfect World")
If (hWnd = 0) Then Exit Sub
Address = &H27BE1EB8

Text1 = ReadMemory(hWnd, Address, 4, "bg")
End Sub


Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текст в памяти

Сообщение Хакер » 15.11.2013 (Пт) 6:34

Res5, это такая же чушь с побайтовым чтением.

Тебе вообще всё равно, какой код, лишь бы найти хоть что-нибудь? Или ты заинтересован в правильном коде?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 15.11.2013 (Пт) 6:59

Разумеется я заинтересован в правильном коде, а именно в таком, который выполняет поставленную задачу.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Текст в памяти

Сообщение Хакер » 15.11.2013 (Пт) 7:55

Res5 писал(а):Разумеется я заинтересован в правильном коде, а именно в таком, который выполняет поставленную задачу.

Отлично.
Теперь давай поставим задачу. Откуда берутся адреса, откуда берётся информация, что по этому адресу именно строка, откуда берётся информация о кодировке (и насколько она точна) и есть откуда берётся информация о правильном признаке конца строки? Какой бывает длина строки в лучшем, среднем и худшем случае?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 15.11.2013 (Пт) 9:38

Cheat Engine (встраивается в память игры и ищет адреса), можно выбирать что искать в памяти, либо юникодный текст либо число. Я спросил совета у опытных хакеров пв мне выдали http://zhyk.ru/forum/showthread.php?t=743908 . Понимаю ,конечно, слишком много для сайта vb "чужого кода" но всеже там нисчем другим работать не хотят.

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 16.11.2013 (Сб) 7:48

Я очень надеюсь что тут есть умельцы которые смогут переделать эту функцию на аналогичную в VB6.
На Vb6 не писался еще не один трейнер логгер и.т.п. Если выйдет, то это откроет большие перспективы наравне с c++

Код: Выделить всё
function ReadChat(Handle: THandle; ChatStartAddr,ChatNumberAddr: DWORD): string;
var s: string;
buf,Hprocess,start_addr,ChatLen,addr,PID: DWORD;
BytesCountOfRead: SIZE_T;//У кого то это тип DWORD
strNo,i: Integer;
str: array[0..255] of WideChar;
ch: char;
text: string;
st: TStringList;
begin
st:=TStringList.Create;
GetWindowThreadProcessId(handle,@pid);
hprocess:=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
ReadProcessMemory(hprocess, ptr(ChatStartAddr), @start_addr, sizeof(start_addr), BytesCountOfRead);
ReadProcessMemory(hprocess, ptr(ChatNumberAddr), @ChatLen, sizeof(ChatLen), BytesCountOfRead);
for strNo := 0 to ChatLen-1 do
begin
str[0] := #0;
i := 0;
try
ReadProcessMemory(hprocess, ptr(start_addr + ((StrNo * $24) + $8), @addr, sizeof(addr), BytesCountOfRead);
if addr <> 0 then
repeat
ReadProcessMemory(hprocess, ptr(addr), @ch, 2, BytesCountOfRead);
str[i] := ch;
addr := addr + 2;
inc(i);
until (ord(ch) = 0) or (i >=255);
except
end;
if i >= 1 then
str[i] := #0;
text:=str;
st.Add(text);
result:=st.Text;
end;
end;

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Текст в памяти

Сообщение ger_kar » 18.11.2013 (Пн) 21:16

Нашлось у меня время провести эксперимент, в ходе которого я решил проверить работу кода, который выложил Res5, и выяснить что-же он все-таки возвращает.
Взял код Res5, немного подправив вызов, как я сам и рекомендовал. Ну и адрес другой, из тестового приложения
Для извлечения строки.rar
(2.99 Кб) Скачиваний: 102
Адрес (&H4014F0) я в отладчике глянул.
Код: Выделить всё
Private Sub Form_Load()
   
    Dim hWnd As Long, pid As Long, pHandle As Long, str As String *10
    Dim ReadMemory As Variant
    hWnd = FindWindow(vbNullString, "Form1")
   
    GetWindowThreadProcessId hWnd, pid
    pHandle = OpenProcess(Process_All_Access, False, pid)
   
    ReadProcessMemory pHandle, &H4014F0, ByVal StrPtr(str), Len(str), 0&
    Text1 = str
'    ReadMemory = Val("&H" + Str2Hex(str))
'    If Val(ReadMemory) < 0 Then ReadMemory = 65536 + Val(ReadMemory)
'    CloseHandle hProcess
'
'    Me.Show
'
'    Text1 = ReadMemory
     
End Sub
Немного его сократив, так как комментированная часть какой то бред, в котором разбираться мне не хочется.
В таком виде после вызова ReadProcessMemory, в буфере пусто.

Тогда я привел вызов к более привычному виду:
Код: Выделить всё
Private Sub Form_Load()
   
    Dim hWnd As Long, pid As Long, pHandle As Long, str As String
    Dim ReadMemory As Variant
    hWnd = FindWindow(vbNullString, "Form1")
   
    str = String(10, vbNullChar)
   
    GetWindowThreadProcessId hWnd, pid
    pHandle = OpenProcess(Process_All_Access, False, pid)
   
    ReadProcessMemory pHandle, &H4014F0, ByVal StrPtr(str), Len(str), 0&
    Text1 = str
     
End Sub

И все заработало. Как оказалось (Хакер подсказал), что если передавать указатель на строку статичной длины, то реально передается адрес не на сам текстовый буфер, а на его копию. В результате в оригинальный буфер ничего не попадало.
Бороться и искать, найти и перепрятать

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 19.11.2013 (Вт) 1:02

Спасибо работает! А если ячейка содержит адрес, как его можно получить?

Res5
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 07.09.2013 (Сб) 3:11

Re: Текст в памяти

Сообщение Res5 » 19.11.2013 (Вт) 8:30

Разобрался) адрес как число просто читать надо.

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 52

    TopList  
cron