昨夜跳舞回来没事可做,又睡不着。在网络游荡了好一会儿也不知做什么是好,于是玩起连连看来。我眼神差的很,玩到零晨三点都还没过通关,不是时间不够就是生命不够,心有不甘呐。便产生了修理它的念头,正好很久没写程序了,用它来练练手也好。
今晚一洗完澡就动手开工了,程序是对我等菜鸟或是上了年纪的人玩连连看设计的。它可以修改生命、提示、分数和停止计时。程序只对这个系列的连连看有效。下面是源程序。程序效果如图:
下载:http://www.cnitblog.com/Files/walaog/llk.rar
#include <windows.h>
#include "resource.h"
// author:gym
// mail: net_gym@163.com
// QQ:41581106
// date: 2006/12/3 新疆
// 注:若欲转载,请保持代码与此段完整性.
// 并注明出处:http://www.cnitblog.com/walaog
#define TIMEID 1
HWND llk = NULL;
BOOL CALLBACK DlgProc (HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE preHinstance, char* comline,int show)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,(DLGPROC)DlgProc);
return 0;
}
BOOL CALLBACK DlgProc (HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
SetTimer(hDlg,TIMEID,500,NULL);
break;
case WM_TIMER:
{
if (!llk)
{
int i;
char title[6][12]={ "连连看",
"连连看 v3.9",
"连连看 v4.0",
"连连看 v3.4",
"连连看 v2.0",
"连连看 v3.0" };
for(i=0; i<6; ++i)
{
llk = FindWindow("#32770",title[i]);
if (llk)
break;
}
}
if (llk)
{
RECT llk_rect;
RECT Dlg_rect;
int position1;
int position2;
GetWindowRect(hDlg, & Dlg_rect);
GetWindowRect(llk , & llk_rect);
position1 = (llk_rect.right - llk_rect.left) / 2;
position1 += llk_rect.left ;
position2 = (Dlg_rect.right - Dlg_rect.left) / 2;
SetWindowPos(hDlg,HWND_TOPMOST,position1-position2,llk_rect.top,0,0,SWP_NOSIZE);
if (position1 < -400000)
{
int x = GetSystemMetrics(SM_CXSCREEN) / 2;
int y = GetSystemMetrics(SM_CYSCREEN) / 2;
SetWindowPos(hDlg,HWND_TOPMOST,x-160,y-30,0,0,SWP_NOSIZE);
llk = NULL;
}
}
}
break;
case WM_CLOSE:
KillTimer(hDlg,TIMEID);
EndDialog(hDlg,0);
break;
case WM_COMMAND:
switch (wParam)
{
case IDCOK:
{
HANDLE ProHandle;
DWORD ProcessID;
if (llk)
{
int life;
int tip;
int score;
BOOL success;
life = GetDlgItemInt(hDlg,IDC_EDIT1,&success,TRUE);
tip = GetDlgItemInt(hDlg,IDC_EDIT2,&success,TRUE);
score = GetDlgItemInt(hDlg,IDC_EDIT3,&success,TRUE);
GetWindowThreadProcessId(llk,&ProcessID);
ProHandle = OpenProcess(PROCESS_ALL_ACCESS,TRUE, ProcessID);//VM_WRITE FALSE
if (!life )
WriteProcessMemory(ProHandle,0x12FEB8,&life,sizeof(life),NULL);
if (!tip)
WriteProcessMemory(ProHandle,0x12FEBC,&tip,sizeof(tip),NULL);
if (!score)
WriteProcessMemory(ProHandle,0x12FEC0,&score,sizeof(score),NULL);
CloseHandle(ProHandle);
}
}
break;
case IDC_TIME:
{
if (llk)
KillTimer(llk,2);
}
break;
}
break;
}
return 0;
}
posted on 2006-12-04 01:57
gym 阅读(587)
评论(6) 编辑 收藏 引用