KerberX
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Pahuchiy1 Цитата: Хочу наладить обмен данными с clickermann. С буфером обмена связываться уже как-то некомильфо. Но в MemoryEx ничего не понимаю. Помогите послать в clickermann данные. Вот из справки к clickermann: ... | Пора бы уже самому WinAPI изучить. Советую написать что-нибудь простое на C или C++ с использованием WinAPI. Понимание придёт не сразу, зато потом MemoryEx будет очень просто пользоваться. Потому что тут сущая ерунда, используются всего две функции. Это в глобальные функции: Код: hKernel32 = Library.Load("Kernel32.dll"); NULL = 0; TRUE = 1; FALSE = 0; PROCESS_VM_READ = 0x0010; function READMEM(nPID, pAddress, nSize) assert(pAddress ~= 0, "null pointer dereferencing"); assert(nSize > 0 and nSize == 1 or nSize == 2 or nSize == 4 or nSize == 8, "invalid block size: "..nSize); local nValue; local hProcess = hKernel32.OpenProcess(PROCESS_VM_READ, FALSE, nPID); if (hProcess ~= NULL) then local tBuffer = MemoryEx.AllocateEx(nSize); if (hKernel32.ReadProcessMemory(hProcess, pAddress, tBuffer:GetPointer(), nSize, NULL) ~= 0) then if (nSize == 1) then nValue = tBuffer:Byte(); elseif (nSize == 2) then nValue = tBuffer:WORD(); elseif (nSize == 4) then nValue = tBuffer:DWORD(); elseif (nSize == 8) then nValue = tBuffer:QWORD(); end end tBuffer:Free(); hKernel32.CloseHandle(hProcess); end return nValue; end | Использовать так: Код: Dialog.Message("", READMEM(4348, 0x00010060, 4)); -- Адрес представлен как число Dialog.Message("", READMEM(4348, tonumber("00010060", 16), 4)); -- Адрес представлен как строка с шестнадцатеричными цифрами без префикса "0x" | Функция возвращает nil если не может прочитать данные и вызывает исключение при некорректных параметрах. Цитата: Ещё вопрос: как нарисовать прямоугольник без заливки с толщиной контура 1 пиксель чёрного цвета с помощью winapi? | Ты замучаешься его рисовать. Для этого тебе придётся импортировать несколько функций из User32.dll и GDI32.dll. Сначала получаешь HDC окна на котором тебе нужно рисовать. Потом выбрать ручку (Pen) которой будет рисоваться контур и кисть (Brush) для заливки внутренностей фигуры. Можно использовать системные ручки и кисти (GetStockObject). По идее NULL_PEN и NULL_BRUSH должны работать как прозрачные. По умолчанию ручки рисуют линии толщиной в 1 пиксель, если не ошибаюсь. После этого рисуешь прямоугольник используя функцию Rectangle. Но оконный менеджер может в любой момент выбросить всё что ты нарисовал во время следующего цикла перерисовки окна. Так что тебе нужно перехватывать сообщение WM_PAINT и рисовать там. Модуль Subclass из MemoryEx может помочь тебе с этим. В его справке есть пример. А вот пример того, как это выглядит в C: https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd145096(v=vs.85).aspx | Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 17:19 28-02-2017 | Исправлено: KerberX, 17:34 28-02-2017 |
|