代码:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <iomanip>
#include <locale>
#include <sstream>
#include <string>
int main()
{
HWND handle = FindWindow(0 ,TEXT("window name"));
if(handle == 0)
{
MessageBox(0,TEXT("Failed to find window"),TEXT("Return"),MB_OK);
}
else
{
DWORD ID;
GetWindowThreadProcessId(handle,&ID);
HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE|PROCESS_VM_OPERATION , FALSE, ID);
hProcess = OpenProcess(PROCESS_VM_READ , FALSE, ID);
if(!hProcess)
{
Beep(1000,1000);
}else {
int buffer;
if (ReadProcessMemory(hProcess,(void *)0x00963FC4,&buffer,4,NULL))
{
printf(buffer);
}
else {
MessageBox(0,TEXT("Could not Read"),TEXT("Return"),MB_OK);
}
}CloseHandle(hProcess);
}
}
我试图让这个程序读取内存地址,
但我得到了这个错误:
IntelliSense:类型“int”的参数与“const char *”类型的参数不兼容
我试过printf(缓冲区);
我试图制作字符串,也不起作用。
字符串测试;
答案 0 :(得分:1)
首先,尝试使用格式字符串正确的printf()调用:
printf("%d", buffer);
C是一种静态类型语言,你不能用printf()做类似python的东西来输出你想要的东西。 printf()函数总是只打印第一个“const char *”参数,允许根据规则替换此字符串中的某些值。
其次,我在代码中看到了TEXT()宏,因此您可能在项目设置中使用了Unicode字符串。如果是这样(你应该在VC ++中得到链接错误2019/2005),你必须使用wprintf()函数:
wprintf(L"%d", buffer);
要打印std :: string对象,还必须将其转换为“const char *”。这是通过string :: c_str()调用完成的:
std::string MyString("Test");
printf("Your string is = %s", MyString.c_str());