Здравствуйте, гость ( Вход | Регистрация )

> ffi pid по hwnd
DarkMaster
сообщение 17.2.2024, 16:59
Сообщение #1


***********

Модератор UOPilot
Сообщений: 9.745
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29676
Пользователь №: 11.279



Господа, а как дернуть pid по hwnd?
Я так люблю виндовые переопределения типов... Задолбался уже...
Во 1 GetWindowThreadProcessId я же правильно понимаю, что это НЕ оно? Он же id потока вернет?
GetProcessHandleFromHwnd требует чтобы ему передали HWND__. Что есть это нашлась только одна страничка с гордой структурой из одного инта. Как еще через ffi воссоздать не понимаю. Объявляю define, делаю ffi.new('HWND__[1]' говорит declaration specifier expected near 'HWND__'...


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 18.2.2024, 5:42
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.745
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29676
Пользователь №: 11.279



Ну так я был там. В том и проблема, что HWND__ там нет. О нем вообще описание от майкрософта "сами напрямую использовать не можете" и на этом все. GetProcessHandleFromHwnd требует его. По крайней мере луа орет на него. Попытки объявить эту структуру ни к чему не привели. В доках требуется HWND, а не HWND__.
Код

ffi.cdef([[
    typedef void * PVOID;
    typedef PVOID  HANDLE;
    typedef HANDLE HWND;

    typedef unsigned long DWORD;
    HANDLE GetProcessHandleFromHwnd(HWND hwnd);
    DWORD GetProcessId(HANDLE Process);
]])
local ole = ffi.load('Oleacc.dll')
--local user, kernel = ffi.load('User32'), ffi.load('Kernel32')

local PROCESS_VM_READ = 0x0010
function readDword(address)
    if workwindow() == 0 then log('No Workwindow') return -1 end

    local PID, pointer_int, hwnd = ffi.new('unsigned long[1]'), ffi.new('int[1]'), ffi.new('HWND[1]')
    local puint = ffi.new('unsigned int[1]')

    puint[1] = workwindow()
    hwnd = ffi.cast("HWND", puint)
    log(tostring(hwnd))

    PID[1] = ole.GetProcessHandleFromHwnd(hwnd[1])

в таком варианте орет cannot convert 'void *' to 'unsigned int' при попытке дернуть хэндл процесса (я в курсе, что там не pid).


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 18.2.2024, 13:27
Сообщение #3


********

Master
Сообщений: 1.404
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22549
Пользователь №: 16.156



Цитата(DarkMaster @ 18.2.2024, 5:42) *

Ну так я был там. В том и проблема, что HWND__ там нет. О нем вообще описание от майкрософта "сами напрямую использовать не можете" и на этом все. GetProcessHandleFromHwnd требует его. По крайней мере луа орет на него. Попытки объявить эту структуру ни к чему не привели. В доках требуется HWND, а не HWND__.
Код

ffi.cdef([[
    typedef void * PVOID;
    typedef PVOID  HANDLE;
    typedef HANDLE HWND;

    typedef unsigned long DWORD;
    HANDLE GetProcessHandleFromHwnd(HWND hwnd);
    DWORD GetProcessId(HANDLE Process);
]])
local ole = ffi.load('Oleacc.dll')
--local user, kernel = ffi.load('User32'), ffi.load('Kernel32')

local PROCESS_VM_READ = 0x0010
function readDword(address)
    if workwindow() == 0 then log('No Workwindow') return -1 end

    local PID, pointer_int, hwnd = ffi.new('unsigned long[1]'), ffi.new('int[1]'), ffi.new('HWND[1]')
    local puint = ffi.new('unsigned int[1]')

    puint[1] = workwindow()
    hwnd = ffi.cast("HWND", puint)
    log(tostring(hwnd))

    PID[1] = ole.GetProcessHandleFromHwnd(hwnd[1])

в таком варианте орет cannot convert 'void *' to 'unsigned int' при попытке дернуть хэндл процесса (я в курсе, что там не pid).


А откуда ты взял HWND___ ? Правильно тебе говорят что это кишки какие то винды, а для обычного вин апи требуется hwnd. Мне кажется что ты смотришь не на ту функцию в документации, или не на ту документацию


https://learn.microsoft.com/ru-ru/windows/w...threadprocessid
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
DarkMaster   ffi pid по hwnd   17.2.2024, 16:59
DarkMaster   хэндл естественно имеет type number луашный. workw...   17.2.2024, 17:36
Cockney   Не, ну чего ты как маленький... https://learn.mic...   17.2.2024, 21:09
cirus   --lua local ffi = require("ffi") l...   18.2.2024, 11:13
DarkMaster   GetWindowThreadProcessId вернет разве id процесса?...   18.2.2024, 12:08
DarkMaster   Это мне луа выкидывает ошибку что не может к нему...   18.2.2024, 13:38
cirus   GetWindowThreadProcessId возвращает ид потока, в п...   18.2.2024, 13:50
DarkMaster   мля а вот теперь стыдно стало =) тем не менее GetP...   18.2.2024, 14:29
cirus   Индексация начинается с 0.   18.2.2024, 16:37
DarkMaster   ffi.cdef([[ typedef void * PVOID; t...   18.2.2024, 18:41
Cockney   А почему вообще оле используется ? Зачем он тут   18.2.2024, 18:42
cirus   Проще так: --lua local ffi = require("ffi...   18.2.2024, 19:17
DarkMaster   потому что нужна либа с этой функцией ole ее соде...   18.2.2024, 19:34
Cockney   хендл и есть по сути указатель. если бы функция ...   18.2.2024, 21:35
DarkMaster   при попытке засунуть туда указатель ловлю маты на...   19.2.2024, 3:58
Cockney   Куда туда ? Зачем что то засовывать, если cirus да...   19.2.2024, 9:00
DarkMaster   в GetProcessHandleFromHwnd Не рабочий. Если фун...   19.2.2024, 9:20
DarkMaster   user.GetWindowThreadProcessId(ffi.cast('HWND...   19.2.2024, 10:52
cirus   Не проще посмотреть пример чтения памяти? https://...   19.2.2024, 11:30
Cockney   Крамольную вещь напишу - мне кажется лучше всего...   19.2.2024, 11:31
DarkMaster   Гут ссылка. Тем не менее есть вопрос =) ты объявл...   19.2.2024, 11:58
DarkMaster   Так в том и вопрос. В документации на входе и вых...   19.2.2024, 12:24
Cockney   Так в том и вопрос. В документации на входе и вых...   19.2.2024, 19:20
cirus   Это всё одно и тоже, по сути int. Нет смысла игра...   19.2.2024, 14:27
DarkMaster   Банально взять тот же ReadProcessMemory по майкрос...   19.2.2024, 19:42
Cockney   Ну давай попробуем по порядку: 1) Любой указатель...   19.2.2024, 20:16
DarkMaster   ну типа звездочка = указатель, если совсем по дуб...   19.2.2024, 20:21
Cockney   Использование void* не в качестве указателя обусло...   19.2.2024, 20:34
Aqualon   Да, возвращает GetWindowThreadProcessId действител...   20.2.2024, 2:15
DarkMaster   handle лучше завернуть в tostring(handle), т.к. е...   20.2.2024, 7:42
DarkMaster   Я уже раз десятый перечитваю это... Ну разве не к...   20.2.2024, 19:08
Cockney   А есть ли у тебя опыт поддержки кодовой базы в мил...   20.2.2024, 20:33
DarkMaster   А я и не претендую. Просто смотрю на это и впадаю...   21.2.2024, 7:43
Cockney   Ну это прям разные случаи. От тебя не зависело до ...   21.2.2024, 13:03


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 18.7.2025, 10:33
Designed by Nickostyle