//***************
// name:江湖小掛
// data:05-11-13
// author:余深瑞
//****************
這個小外掛適用于對按鍵消息沒有屏蔽的游戲,如熱血江湖!
主要用
keybd_event函數(shù)實現(xiàn)模擬按鍵的功能。
keybd_event函數(shù)原型:
VOID keybd_event(
? BYTE bVk,?????????? // 虛擬鍵
? BYTE bScan,???????? // 掃描碼
? DWORD dwFlags,????? // flags specifying various function options
? DWORD dwExtraInfo?? // additional data associated with keystroke
);
模擬按鍵主要代碼:
keybd_event( VK_F1 , MapVirtualKey(VK_F1,0) , 0 , 0);????//按下F1鍵
Sleep(300);
keybd_event( VK_F1 , MapVirtualKey(VK_F1,0) , KEYEVENTF_KEYUP , 0);?//松開F1鍵
注意,使用keybd_event必須用MapVirtualKey轉(zhuǎn)換虛擬鍵為鍵盤掃描碼,并且用Sleep進行必要的延遲后再次調(diào)用
keybd_event函數(shù)釋放放鍵。否則模擬功能不起作用。
這個程序用熱血江湖V1.32進行測試通過.實現(xiàn)自動吃藥。
新建一個MFC 對話框程序,名稱為"江湖小掛"。
打開"江湖小掛.cpp"文件。修改
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
?//{{AFX_MSG_MAP(CMyApp)
??// NOTE - the ClassWizard will add and remove mapping macros here.
??//??? DO NOT EDIT what you see in these blocks of generated code!
?//}}AFX_MSG
?ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
代碼段,刪除ON_COMMAND(ID_HELP, CWinApp::OnHelp)行。這樣,按F1鍵不會彈出幫助窗口。
在窗口上增加一個按鈕,雙擊按鈕打開按鈕事件,加一行代碼初始化計數(shù)器:
void CMyDlg::OnStart()
{
?SetTimer( 1 , 300 , NULL);?//300毫秒
?
}?
運行類向?qū)В剌dWM_TIMER消息。并修改OnTimer()函數(shù)如下:
void CMyDlg::OnTimer(UINT nIDEvent)
{
?DWORD hProcId;
?HWND gWnd = ::FindWindow( "D3D Window" , "YB_OnlineClient" );?//獲取熱血江湖窗口句柄
?if(gWnd)
?{
??GetWindowThreadProcessId(gWnd,&hProcId);??//獲取進程ID
??HANDLE ghd = OpenProcess(PROCESS_ALL_ACCESS,FALSE,hProcId);?//訪問進程
??if(ghd)
??{
???DWORD dHP,bytes;
???WORD? dDiff = 300;??//HP底限
???WORD? buff;???
???
???dHP=0x013AE838;??//血的內(nèi)存地址(熱血江湖1.32版)
???//讀血值
???if(TRUE) //有效
???{
????
????//讀內(nèi)存
????BOOL ok = ReadProcessMemory(ghd , (void *)dHP , (void *)&buff , 2 , &bytes);//讀內(nèi)存血值到緩沖
????if(ok)
????{
?????if(buff <= dDiff)?//判斷內(nèi)存HP是否小于底限
?????{
??????keybd_event( VK_F1 , MapVirtualKey(VK_F1,0) , 0 , 0);????//按下鍵
??????Sleep( 300 );??????????????//延遲
??????keybd_event( VK_F1 , MapVirtualKey(VK_F1,0) , KEYEVENTF_KEYUP , 0);?//松開鍵
?
?????}
????}
???}
??}
??CloseHandle(ghd);
??
?}
?CDialog::OnTimer(nIDEvent);
}
程序基本到此結(jié)束,至于其它的功能自已再完善。
自動補藍和這大同小異,自動群醫(yī)連續(xù)技能更簡單,只要再加一個計數(shù)器模擬按鍵就行了。
游戲相關(guān)的內(nèi)存地址只要用金山游俠等游戲修改軟件,很容易就能掃描出來。