ゲームからキャラクターの統計情報を読み取るコードを考え出しました。これらの値は、データ型の変数に格納されますint
。
int HPvalue, MPvalue, TPvalue;
あとは、これらの値をCOM
シリアル ポートから取得して、Arduino で読み取れるようにするだけです。
オンラインでいくつかのシリアル例を見つけましたが、値を送信するたびに1バイト以上が送信されるようです。
シリアルポートから値を読み取り、その値に応じて LED をオンまたはオフにする Arduino で実行されているコードがいくつかあります。
サンプルのシリアル コードで値を送信すると、LED は 1 つの状態または別の状態に切り替わるのではなく、2 回トグルします。パテで値を送信すると、Led が正しく応答します。つまり。値が 5 より大きい場合はオン、値が 5 以下の場合はオフです。これが、コンピューターが一度に複数のバイトを送信していると思わせる理由です。これがコードです。
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <atlstr.h>
using namespace std;
bool WriteComPort(CString PortSpecifier, CString data);
int _tmain(int argc, _TCHAR* argv[])
{
DWORD HPaddress = 0x046B670C;
DWORD MPaddress = 0x043609B8;
DWORD TPaddress = 0x043609BC;
int HPvalue, MPvalue, TPvalue;
DWORD pid;
HWND hwnd;
hwnd = FindWindow(NULL,L"EvelynofHades");
if(!hwnd)
{
cout <<"Window not found!\n";
cin.get();
}
else
{
cout <<"Found Window!\n";
GetWindowThreadProcessId(hwnd,&pid);
cout << pid;
HANDLE phandle = OpenProcess(PROCESS_VM_READ, 0, pid);
if(!phandle)
{
cout <<"Could not get Handle!\n";
cin.get();
}
else
{
while(1)
{
ReadProcessMemory(phandle,(void*)HPaddress,&HPvalue,sizeof(HPvalue),0);
ReadProcessMemory(phandle,(void*)MPaddress,&MPvalue,sizeof(MPvalue),0);
ReadProcessMemory(phandle,(void*)TPaddress,&TPvalue,sizeof(TPvalue),0);
cout << HPvalue << " " << MPvalue << " " << TPvalue << " " << "\n";
CHAR on = 6;
WriteComPort("COM3", on);
Sleep(3000);
CHAR off = 5;
WriteComPort("COM3", off);
Sleep(3000);
}
return 0;
}
}
}
bool WriteComPort(CString PortSpecifier, CString data)
{
DCB dcb;
DWORD byteswritten;
HANDLE hPort = CreateFile(PortSpecifier,
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if (!GetCommState(hPort,&dcb))
return false;
dcb.BaudRate = CBR_9600; //9600 Baud
dcb.ByteSize = 8; //8 data bits
dcb.Parity = NOPARITY; //no parity
dcb.StopBits = ONESTOPBIT; //1 stop
if (!SetCommState(hPort,&dcb))
return false;
bool retVal = WriteFile(hPort,data,1,&byteswritten,NULL);
CloseHandle(hPort); //close the handle
return retVal;
}
アプリケーションにシリアルを正しく実装していない可能性があります。うまくいけば、誰かがこれを正すのを手伝ってくれます。