//***************
// name:江湖小掛
// data:05-11-13
// author:余深瑞
//****************
這個(gè)小外掛適用于對(duì)按鍵消息沒(méi)有屏蔽的游戲,如熱血江湖!
主要用
keybd_event函數(shù)實(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);?//松開(kāi)F1鍵
注意,使用keybd_event必須用MapVirtualKey轉(zhuǎn)換虛擬鍵為鍵盤(pán)掃描碼,并且用Sleep進(jìn)行必要的延遲后再次調(diào)用
keybd_event函數(shù)釋放放鍵。否則模擬功能不起作用。
這個(gè)程序用熱血江湖V1.32進(jìn)行測(cè)試通過(guò).實(shí)現(xiàn)自動(dòng)吃藥。
新建一個(gè)MFC 對(duì)話(huà)框程序,名稱(chēng)為"江湖小掛"。
打開(kāi)"江湖小掛.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鍵不會(huì)彈出幫助窗口。
在窗口上增加一個(gè)按鈕,雙擊按鈕打開(kāi)按鈕事件,加一行代碼初始化計(jì)數(shù)器:
void CMyDlg::OnStart()
{
?SetTimer( 1 , 300 , NULL);?//300毫秒
?
}?
運(yùn)行類(lèi)向?qū)В剌dWM_TIMER消息。并修改OnTimer()函數(shù)如下:
void CMyDlg::OnTimer(UINT nIDEvent)
{
?DWORD hProcId;
?HWND gWnd = ::FindWindow( "D3D Window" , "YB_OnlineClient" );?//獲取熱血江湖窗口句柄
?if(gWnd)
?{
??GetWindowThreadProcessId(gWnd,&hProcId);??//獲取進(jìn)程ID
??HANDLE ghd = OpenProcess(PROCESS_ALL_ACCESS,FALSE,hProcId);?//訪(fǎng)問(wèn)進(jìn)程
??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);?//松開(kāi)鍵
?
?????}
????}
???}
??}
??CloseHandle(ghd);
??
?}
?CDialog::OnTimer(nIDEvent);
}
程序基本到此結(jié)束,至于其它的功能自已再完善。
自動(dòng)補(bǔ)藍(lán)和這大同小異,自動(dòng)群醫(yī)連續(xù)技能更簡(jiǎn)單,只要再加一個(gè)計(jì)數(shù)器模擬按鍵就行了。
游戲相關(guān)的內(nèi)存地址只要用金山游俠等游戲修改軟件,很容易就能掃描出來(lái)。