マインスイーパ外部ソース

// MineSweeping.cpp:DLL定義された初期化ルーチン。
//

#include "stdafx.hを"
の#include "MineSweeping.h"

_DEBUGの#ifdef
の#define新しいDEBUG_NEW
#endifの

//
// TODO:MFC DLLに対してこのDLLを動的にリンクされている場合、
任意のエクスポート// DLLから転送
// MFC機能マクロAFX_MANAGE_STATEに追加されなければならない
最初の//この関数。
//
//例:
//
//のextern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
//通常の関数本体ここ
//}
//
//これマクロ呼び出しは、任意のMFCの前に
//各機能において非常に重要な表示されます。これは、
それが次の文の最初のエントリでなければなりません//:
//は、でも、すべてのオブジェクト変数を宣言するために、見える
彼らのコンストラクタはMFC生成する可能性があるため、//
// DLLの呼び出しを。
//
//その他の詳細、
// MFCテクニカルノート33および58を参照してください。
//

// CMineSweepingApp

BEGIN_MESSAGE_MAP(CMineSweepingApp、CWinAppの)
END_MESSAGE_MAP()


// CMineSweepingApp建設

:: CMineSweepingApp CMineSweepingApp()
{
     // TODO:ここで追加するように構成されたコード、
     //のInitInstanceにおける全ての重要な初期化
}


//のみCMineSweepingAppオブジェクト

CMineSweepingApp theApp;

HWND g_Wnd;

WNDPROC g_OldProc;

PDWORD g_pWidth =(PDWORD)0x01005334。
PDWORD g_pHeight =(PDWORD)0x01005338。
PDWORD g_pMineCount =(PDWORD)0x01005330。
PBYTE g_pBase =(PBYTE)0x1005340。
#define MINE 0x8F
// CMineSweepingApp初始化

// MOV ECX、DWORD PTR DS:[0x1005334]
// MOV EDX、DWORD PTR DS:[0x1005338]
// LEA EAX、DWORD PTR DS:[ECX + 0x2の]
// TEST EAX、EAX
// PUSH ESI
// MOV ESI、EDX
// SHL ESI、0x5
// LEA ESI、DWORD PTR DS:[ESI + 0x1005360]
// EAX 12月。
// BYTE MOV PTR DS:[EAX + 0x1005340]、0x10を
// BYTE MOV PTR DS:[EAX + ESI]、0x10を
// JNZ SHORT winmine.01002F03






LRESULT
CALLBACK
のWindowProc(
     _In_ HWND hWndは、
     _In_ UINTメッセージ、
     _In_ WPARAM wParamに、
     _In_ LPARAM lParamに)
{
     IF(メッセージ== WM_KEYDOWN &&のwParam == VK_F5)
     {
         のOutputDebugString(L "F5")。


         int型* = nWidth g_pWidth。
         int型* = nHeight g_pHeight。
         int型* = nMineCount g_pMineCount。

        CStringのstrString;
         strString.Format(L "宽度た:%d、高度た:%d、雷数:%のD"、nWidth、
             nHeight、nMineCount)。
         OutputDebugString(strString.GetBuffer())。

        int型nFindCount = 0;
         (; Y <nHeight + 1 Y ++ size_tのY = 1)のために
         {
             CStringのstrLine変数の値。
             (; X <nWidth + 1 X ++ size_tのX = 1)のために
             {
                 BYTE byCode = *(PBYTE)((DWORD)g_pBase + X + Y * 32)。
                 (byCode == MINE)であれば
                 {
                     nFindCount ++。
                     // byCode = 0x8Eが。
                 }
                 他
                 {
                     int型XPOS、YPOS。
                     XPOS =(X << 4) - 4。
                     YPOS =(Y << 4)+は0x27。
                     //模拟键盘输入
                     SendMessage(hWndは、WM_LBUTTONDOWN、0、MAKELPARAM(XPOS、YPOS))。
                     SendMessage(hWndは、WM_LBUTTONUP、0、MAKELPARAM(XPOS、YPOS))。
                 }
                 のCString strCode。
                 strCode.Format(L "%の02X"、byCode)。
                 strLine変数の値+ = strCode。
             }
             のOutputDebugString(strLine.GetBuffer())。
         }
         のCString strCode。
         strCode.Format(L "雷的个数%D"、nFindCount)。
         OutputDebugString(strCode.GetBuffer())。
     }
     そうであれば(MSG == WM_MOUSEMOVE)
     {
         int型のX、Y。
         X = LOWORD(lParamに)。
         Y = HIWORD(lParamに)。
         = X(X + 4)>> 4;
         Y =(Y -は0x27)>> 4;
         BYTE * = byCode(PBYTE)((DWORD)g_pBase + X + Y * 32);
         IF(byCode == MINE)
         {
             SetWindowText関数( "雷がある" hWndを、L);
             //メッセージボックス(NULL、L "ここレイ注意してください"、NULL、NULL);
         }
         他
         {
             SetWindowText関数(hWndを、L "地雷除去");
         }
     }
     (CallWindowProcを返しますg_OldProc、hWndは、メッセージ、wParamに、lParamに);
}

BOOL CMineSweepingApp ::のInitInstance()
{
     のCWinApp ::のInitInstance()。

    //ウィンドウハンドル得、1ウィンドウを探す
     g_Wnd =のFindWindow(L "地雷"、L "地雷除去を");
     IF(g_Wnd == NULL)
     {
         のOutputDebugString(L "ウィンドウハンドル取得失敗");
         戻りFALSE;
     }
     / 。/ 2ウィンドウは、コールバック設け
     g_OldProc =(WNDPROC)のSetWindowLong(g_Wnd、
         ; GWL_WNDPROC、(LONG)のWindowProc)
     IFは(g_OldProc == NULL)
     {
         のOutputDebugString(L "の設定ウィンドウは、コールバックを失敗");
         戻りFALSEを;
     }

    TRUEを返します。
}

おすすめ

転載: www.cnblogs.com/Check-me/p/11848029.html