
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
|
|
|

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 это разные вещи, к сожалению. Но думаю с этим я уже смогу разобраться. Спасибо!
|
|
|

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

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
)
;
|
|
|

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

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

07.04.2019, 00:58
|
|
Новичок
Регистрация: 06.04.2019
Сообщений: 15
С нами:
3739435
Репутация:
0
|
|
кто то сталкивался с такой проблемой? крч установил Boost
C++:
Код:
boost
::
property_tree
::
ptree pt
;
boost
::
property_tree
::
ini_parser
::
read_ini
(
"time.ini"
,
pt
)
;
std
::
string patay
=
pt
.
get
(
"time.string"
)
;
пишу это, чтобы прочитать time.ini и получить значение строки. и вылазит куча ошибок в boost'e при попытке сборки проекта
boost 1.69
visual studio 2017
|
|
|

07.04.2019, 12:14
|
|
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами:
4793630
Репутация:
133
|
|
Сообщение от Imbecil
кто то сталкивался с такой проблемой? крч установил Boost
C++:
Код:
boost
::
property_tree
::
ptree pt
;
boost
::
property_tree
::
ini_parser
::
read_ini
(
"time.ini"
,
pt
)
;
std
::
string patay
=
pt
.
get
(
"time.string"
)
;
пишу это, чтобы прочитать time.ini и получить значение строки. и вылазит куча ошибок в boost'e при попытке сборки проекта
boost 1.69
visual studio 2017
В начало
C++:
Код:
#include
#include
#include
#include
|
|
|

07.04.2019, 16:53
|
|
Новичок
Регистрация: 06.04.2019
Сообщений: 15
С нами:
3739435
Репутация:
0
|
|
Сообщение от cakebou
В начало
C++:
Код:
#include
#include
#include
#include
было, не помогает
я уже все либы перепробовал, эту тоже. может я что то не так делаю
C++:
Код:
SF
->
getSAMP
(
)
->
registerChatCommand
(
"time"
,
time_command
)
;
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
std
::
string str
=
INI
::
ReadString
(
"time"
,
"string"
,
1337
,
".\\time.INI"
)
;
const
char
*
result
=
&
str
[
0
]
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
result
)
;
}
гружу тут, чтобы сразу увидеть вышло ли
просто пустая строка
|
|
|

07.04.2019, 17:25
|
|
Постоянный
Регистрация: 02.06.2018
Сообщений: 342
С нами:
4183567
Репутация:
133
|
|
Сообщение от Imbecil
было, не помогает
я уже все либы перепробовал, эту тоже. может я что то не так делаю
C++:
Код:
SF
->
getSAMP
(
)
->
registerChatCommand
(
"time"
,
time_command
)
;
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
std
::
string str
=
INI
::
ReadString
(
"time"
,
"string"
,
1337
,
".\\time.INI"
)
;
const
char
*
result
=
&
str
[
0
]
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
result
)
;
}
гружу тут, чтобы сразу увидеть вышло ли
просто пустая строка
Покажи содержимое ini файла в котором читаешь
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|