Что нового

Читать аддресс памяти не работает

tonycstech

Новичок
Сообщения
94
Репутация
3
Немогу прочитать память без _WinAPI_CreateString()

Следуюший код суёт слово "Notepad.exe" в память, например "0x00000236E9290860"
Код:
$MemoryAddress = _WinAPI_CreateString ("Notepad.exe")
ClipPut ($MemoryAddress)
$MemoryValue = _WinAPI_GetString ($MemoryAddress)
MsgBox(0,$MemoryAddress,$MemoryValue)


Если в ручную дат аддресс, то почемуто там ничего нет.
Например:
Код:
$MemoryAddress = "0x00000236E9290860"
$MemoryValue = _WinAPI_GetString ($MemoryAddress)
MsgBox(0,$MemoryAddress,$MemoryValue)


В чём проблема ?
Помогите если можете.

Я использую этот метод чтобы передать информацию от одной програмки к другой.
Если есть другой метод, пожалуйста подскажите.
 
Автор
T

tonycstech

Новичок
Сообщения
94
Репутация
3
Примеры старые, неработают итд итп.
Можно какойто по-проще ?
Мне элементарное надо, передать техт с одной программы в другую.
Как это сделать без использования временных написаний файлов или использования риестра ?
Главная программа запускает вторую и посылает текст.
Вторая его читает и делает что надо. Одновременно главная программа постоянно запускает вторую посылая ей новый и новый текст для работы.

Почему память не читается ?
 
Автор
T

tonycstech

Новичок
Сообщения
94
Репутация
3
Что именно не работает?
Я же сказал что _WinAPI_GetString ($MemoryAddress) возвращает ничего.
Возврат есть только если чтение производится из одного и того же скрипта.
Если произвести чтение из другого, то даты нет.
Куда данные деваются из памяти , ведь скрипт продолжает работать ?

А с этим что не так ?
Код:
#include <WinAPISysWin.au3>
$Address = _WinAPI_RegisterWindowMessage("hello")
ClipPut ($Address)
Sleep (5000) ;Give time to test before closing

А как теперь их там прочитать в другом скрипте ?

У меня в принципе та же самая проблема что с тем что с этим.


Мне надо запомнить 3 текста в памяти использую один скрипт.
Затем их прочитать используя другой скрипт.
Как это сделать ?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Я же сказал что _WinAPI_GetString ($MemoryAddress) возвращает ничего.
Куда данные деваются из памяти , ведь скрипт продолжает работать ?
С чего вы решили что у вас есть доступ к этим данным?
Используйте OpenProcess и ReadProcessMemory

А с этим что не так ?
AutoIt код:
#include<WinAPISysWin.au3>
$Address = _WinAPI_RegisterWindowMessage("hello")
ClipPut($Address)
Sleep (5000) ;Give time to test before closing
А как теперь их там прочитать в другом скрипте ?
Посмотрите пример еще раз
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,484

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,484
А с этим что не так ?
Всё не так.
Мне кажется для вас вот такой вариант бы подошёл (судя по пристрастию использовать ClipPut везде):

Скрипт отправитель:
Код:
;Отправитель

Global $sApp_Name = 'MyClipSender'

_ClipInteract_Send('Привет от Отправителя')
MsgBox(64, @ScriptName, 'Запустите получателя...')

Func _ClipInteract_Send($sData)
    ClipPut('')
    ClipPut($sApp_Name & ':' & $sData)
EndFunc


Скрипт Получатель:
Код:
;Получатель

Global $sApp_Name = 'MyClipSender'

$sGet = _ClipInteract_Get()

If @error Then
    MsgBox(48, @ScriptName, 'Ничего не получено')
Else
    MsgBox(64, @ScriptName, 'Получено: ' & @CRLF & $sGet)
EndIf

Func _ClipInteract_Get()
    Local $aData = StringRegExp(ClipGet(), '^' & $sApp_Name & ':(.+)', 3)
    
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    
    ClipPut('')
    Return $aData[0]
EndFunc
 
Автор
T

tonycstech

Новичок
Сообщения
94
Репутация
3
Нет такой вариант с ClipPut() я использоваль ради примера чтобы запомнить в какой аддресс памяти устанавливаются данные чтобы затем их от туда считать.

А что такое OpenProcess и ReadProcessMemory ?
Где вы его взяли ?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Последнее редактирование:
Верх