
05.05.2020, 10:42
|
|
Постоянный
Регистрация: 27.05.2018
Сообщений: 651
С нами:
4191790
Репутация:
83
|
|
Сообщение от tlwsn
как заставить sscanf работать с русскими символами?
Попробуй использовать Wide-аналог этой функции - swscanf_s. В проекте используй набор символов Юникода (Unicode Character Set). Отпиши, помогло или нет.
Сообщение от T4yz1e
Ошибка LNK2019 ссылка на неразрешенный внешний символ "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) в функции "void __clrcall `dynamic initializer for 'hdc''(void)" (???__Ehdc@@YMXXZ@?A0xa98138a8@@$$FYMXXZ)
Юникод на многобайтовую кодировку менял, не помогло. На странице ошибки слишком размыто и инфы конкретной я не нашел
Memory.h:
Код:
#include
#include
#include
#include
#include
DWORD
GetProcId
(
const
char
*
procName
)
{
DWORD procId
=
0
;
HANDLE hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
0
)
;
if
(
hSnap
!=
INVALID_HANDLE_VALUE
)
{
PROCESSENTRY32 procEntry
;
procEntry
.
dwSize
=
sizeof
(
procEntry
)
;
if
(
Process32First
(
hSnap
,
&
procEntry
)
)
{
do
{
if
(
!
strcmp
(
procEntry
.
szExeFile
,
procName
)
)
{
procId
=
procEntry
.
th32ProcessID
;
break
;
}
}
while
(
Process32Next
(
hSnap
,
&
procEntry
)
)
;
}
}
CloseHandle
(
hSnap
)
;
return
procId
;
}
uintptr_t
GetModuleBaseAddress
(
DWORD procId
,
const
char
*
modName
)
{
uintptr_t modBaseAddr
=
0
;
HANDLE hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
|
TH32CS_SNAPMODULE32
,
procId
)
;
if
(
hSnap
!=
INVALID_HANDLE_VALUE
)
{
MODULEENTRY32 modEntry
;
modEntry
.
dwSize
=
sizeof
(
modEntry
)
;
if
(
Module32First
(
hSnap
,
&
modEntry
)
)
{
do
{
if
(
!
strcmp
(
modEntry
.
szModule
,
modName
)
)
{
modBaseAddr
=
(
uintptr_t
)
modEntry
.
modBaseAddr
;
break
;
}
}
while
(
Module32Next
(
hSnap
,
&
modEntry
)
)
;
}
}
CloseHandle
(
hSnap
)
;
return
modBaseAddr
;
}
uintptr_t moduleBase
=
GetModuleBaseAddress
(
GetProcId
(
"gta_sa.exe"
)
,
"samp.dll"
)
;
HANDLE hProcess
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
NULL
,
GetProcId
(
"gta_sa.exe"
)
)
;
HDC hdc
=
GetDC
(
FindWindowA
(
NULL
,
"GTA:SA:MP"
)
)
;
template
T
RPM
(
SIZE_T address
)
{
T buffer
;
ReadProcessMemory
(
hProcess
,
(
LPCVOID
)
address
,
&
buffer
,
sizeof
(
T
)
,
NULL
)
;
return
buffer
;
}
Странно, ведь у меня работает GetDC и при простом подключении Windows.h. Не забывай отрисовочный контекст (DC) чистить, когда ты им воспользовался, и он тебе не нужен. Т.к используется ф-я GetDC, то чистим при помощи ReleaseDC. Рекомендую ознакомиться с этой страницей - http://www.vsokovikov.narod.ru/New_MSDN_API/D_context/fn_releasedc.htm. В частности, нам интересен текст под заголовком "Замечания". Если ты скинул код неполностью и ты используешь эту функцию где-то у себя дальше, то прошу прощения за наезд.
|
|
|