 |
|

28.03.2019, 16:46
|
|
Флудер
Регистрация: 17.06.2013
Сообщений: 3,635
С нами:
6791977
Репутация:
183
|
|
Сообщение от Sarutobi1
void *obj = *(void **)((DWORD)samp + 0x95CD0);
((void(__thiscall *) (void *, int, bool)) ((DWORD)samp + 0x95CD0))(obj, iToggle ? 3 : 0, !iToggle);
За что отвечают эти два адреса ?
Включение/Отключение показа курсора мышки.
|
|
|

28.03.2019, 19:59
|
|
Постоянный
Регистрация: 24.01.2016
Сообщений: 566
С нами:
5421300
Репутация:
83
|
|
Как занопать определенные фрагменты памяти? Пример, я знаю что врайтпроцессмемори, но как занопать несколько сразу
|
|
|

29.03.2019, 00:43
|
|
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами:
4793630
Репутация:
133
|
|
Как воспроизвести аудио файл вSAMPFUNCS? Можно пример?
|
|
|

30.03.2019, 00:08
|
|
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами:
4472205
Репутация:
163
|
|
ващет можно, а вот поставить на паузу скорей всего нельзя
|
|
|

06.04.2019, 20:09
|
|
Участник форума
Регистрация: 28.07.2015
Сообщений: 191
С нами:
5680844
Репутация:
68
|
|
Здравствуйте, товарищи, возникла проблема. Использую moonloader, необходимо отправить сообщение через sendmessage (или postmessage) окну имея его PID. Использую для этого библиотеку ffi, которая способна выполнять win api функции через луа. Однако эта библиотека использует синтаксис СИ обычного (я так понял это C, просто я в C++ C# и С не разбираюсь, они вроде бы одно и тоже, но почему тогда разные названия  ?). Все мое движение уперлось в написании кода на СИ, который потом можно будет выполнить через луа. Приведу то, что я нарыл в гугле и попытался использовать:
Код:
Код:
ffi.cdef[[
int SendMessage(int hWnd, int Msg, int wParam, int lParam);
]]
ffi.C.SendMessage(9576, 0x1002, 0xFF, 0xFFF)
Все что внутри ffi.cdef между [[ ]] это код на СИ, я так понял нужно записать этот код так, как будто он выполнялся бы на СИ, а аргументы получит через луа, который переделает параметры под стандарты СИ. Или это экспорт функции SendMessage... UPD: погуглил, это похоже сигнатура функции... Этот код вызывает следующую ошибку:
Код:
Код:
[19:54:12.474688] (error) test.lua: C:\Games\GTA San Andreas\moonloader\test.lua:33: cannot resolve symbol 'SendMessage': Не найдена указанная процедура.
Возможно это поможет вам понять, что я сделал не так. Помогите пожалуйста записать СИшный код правильно, я конечно спросил в разделе луа, но все таки то раздел луа, а тут проблема в коде написанном на СИ, потому шансов получить помощь у меня больше здесь, я полагаю.
Прошу отнестись ко мне снисходительно, я никогда не изучал СИ и дай Бог если это мой единственный раз, когда я столкнусь с этим языком. Рассчитываю на вашу поддержку.
|
|
|

06.04.2019, 22:32
|
|
Новичок
Регистрация: 06.04.2019
Сообщений: 15
С нами:
3739435
Репутация:
0
|
|
Как сделать так, чтобы по определенной команде в чат писало '/me ' и строку из test.ini файла
|
|
|

06.04.2019, 22:51
|
|
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами:
4423953
Репутация:
68
|
|
как перевести цвет uint32_t в формат rbga и как в hex
|
|
|

06.04.2019, 23:36
|
|
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами:
6530249
Репутация:
133
|
|
Сообщение от Belo4ka_belka
Рассчитываю на вашу поддержку.
Вы попались на то, что многие функции WinAPI реализованы в двух вариантах - для строк Unicode (по правильному конечно это wide characters) и ASCII. Для простоты выбора конкретной из них используют директивы препроцессора, одна из которых на этапе компиляции сама подбирает вариацию функции на основе настроек проекта. Т.е. все функции по типу MessageBox на самом деле бывают двух вариантов - MessageBoxA и MessageBoxW, сам MessageBox - это только макрос.
Это, конечно, весьма не детальное описание, о поддержке широких символов можно почитать тут https://docs.microsoft.com/en-us/windows/desktop/LearnWin32/working-with-strings
В lua Вы, естественно, вручную беспокоитесь о декларировании функций, а это значит, что макроса SendMessage здесь нет, в то время как внешний символ SendMessageA присутствует в составе библиотеки user32.dll.
Lua:
Код:
function
main
(
)
local
ffi
=
require
(
'ffi'
)
ffi
.
cdef
(
'int SendMessageA(int, int, int, int);'
)
ffi
.
C
.
SendMessageA
(
9576
,
0x1002
,
0xFF
,
0xFFF
)
end
|
|
|

06.04.2019, 23:50
|
|
Постоянный
Регистрация: 02.06.2018
Сообщений: 342
С нами:
4183567
Репутация:
133
|
|
Сообщение от Imbecil
Как сделать так, чтобы по определенной команде в чат писало '/me ' и строку из test.ini файла
C++:
Код:
string
ReadStr
(
std
::
string _Section
,
std
::
string _Key
)
{
char
str
[
256
]
;
GetPrivateProfileString
(
_Section
.
c_str
(
)
,
_Key
.
c_str
(
)
,
NULL
,
str
,
sizeof
(
str
)
,
"SAMPFUNCS\\test.ini"
)
;
return
str
;
}
string
UTF8ToANSI
(
string s
)
{
BSTR bstrWide
;
char
*
pszAnsi
;
int
nLength
;
const
char
*
pszCode
=
s
.
c_str
(
)
;
nLength
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
pszCode
,
strlen
(
pszCode
)
+
1
,
NULL
,
NULL
)
;
bstrWide
=
SysAllocStringLen
(
NULL
,
nLength
)
;
MultiByteToWideChar
(
CP_UTF8
,
0
,
pszCode
,
strlen
(
pszCode
)
+
1
,
bstrWide
,
nLength
)
;
nLength
=
WideCharToMultiByte
(
CP_ACP
,
0
,
bstrWide
,
-
1
,
NULL
,
0
,
NULL
,
NULL
)
;
pszAnsi
=
new
char
[
nLength
]
;
WideCharToMultiByte
(
CP_ACP
,
0
,
bstrWide
,
-
1
,
pszAnsi
,
nLength
,
NULL
,
NULL
)
;
SysFreeString
(
bstrWide
)
;
string
r
(
pszAnsi
)
;
delete
[
]
pszAnsi
;
return
r
;
}
SFCLEO
*
SC
;
void
CALLBACK
sendChatMessage
(
string message
)
{
string thmsg
=
"0C8F: samp process_chat_input \""
+
message
+
"\""
;
SC
->
callOpcode
(
thmsg
.
c_str
(
)
)
;
}
Use
:
string szStr
=
"/me "
+
UTF8ToANSI
(
ReadStr
(
""
,
""
)
)
;
sendChatMessage
(
szStr
)
;
|
|
|

07.04.2019, 00:02
|
|
Участник форума
Регистрация: 28.07.2015
Сообщений: 191
С нами:
5680844
Репутация:
68
|
|
Сообщение от san0
Вы попались на то, что многие функции WinAPI реализованы в двух вариантах - для строк Unicode (по правильному конечно это wide characters) и ASCII. Для простоты выбора конкретной из них используют директивы препроцессора, одна из которых на этапе компиляции сама подбирает вариацию функции на основе настроек проекта. Т.е. все функции по типу MessageBox на самом деле бывают двух вариантов - MessageBoxA и MessageBoxW, сам MessageBox - это только макрос.
Это, конечно, весьма не детальное описание, о поддержке широких символов можно почитать тут https://docs.microsoft.com/en-us/windows/desktop/LearnWin32/working-with-strings
В lua Вы, естественно, вручную беспокоитесь о декларировании функций, а это значит, что макроса SendMessage здесь нет, в то время как внешний символ SendMessageA присутствует в составе библиотеки user32.dll.
Lua:
Код:
function
main
(
)
local
ffi
=
require
(
'ffi'
)
ffi
.
cdef
(
'int SendMessageA(int, int, int, int);'
)
ffi
.
C
.
SendMessageA
(
9576
,
0x1002
,
0xFF
,
0xFFF
)
end
А я все думал что это за приставки к названиям функций! Теперь все без ошибок запустилось. Правда раньше я лишь подозревал, а теперь на практике понял, что PID и HWND это разные вещи, к сожалению. Но думаю с этим я уже смогу разобраться. Спасибо!
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|