グローバルフック過TP


はい、txのTPです.
// dllmain.cpp :    DLL         。
#include "stdafx.h"
#include "Game.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        check();  //DLL       check    ID          ID
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
        UnHook();//   ,  UnHook()  HOOK
        break;
    }
    return TRUE;
}


//Game.cpp:DLLアプリケーションのエクスポート関数を定義します.//
include “stdafx.h”
include “Game.h”
include “stdio.h”
HHOOK m_hook = NULL; LRESULT CALLBACK CBTProc(//SETwindowsHOOKのコールバック関数int nCode,WPARAM wParam,LPARAM lParam){
return CallNextHookEx(m_hook, nCode, wParam, lParam);

}
//DLLの書き出し関数GAME_API void SetHook() {
m_hook = SetWindowsHookEx(WH_CBT, CBTProc, GetModuleHandle(L"Game.dll"), 0);//  HOOK     0
//MessageBox(0, L"    ", L"  ", 0);

} GAME_API void UnHook(){ if (m_hook) ::UnhookWindowsHookEx(m_hook); } //入力するIDがクラス名で見つけたID void check(){HWND hwnd=::FindWindow(L"TWINTROL",NULL);/TXguiFoundationはゲームウィンドウクラス名,CalcFrame DWORD pid;
GetWindowThreadProcessId(hwnd, &pid);  //

if (GetCurrentProcessId() == pid)
{
    MessageBox(hwnd, L"  ok", L"  ", 0);

    //printf("QQ   %d",hwnd);
}

}

//    TP.cpp :           。
//

#include "stdafx.h"
#include "   TP.h"
#include "   TPDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// C   TPApp

BEGIN_MESSAGE_MAP(C   TPApp, CWinApp)
    ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// C   TPApp   

C   TPApp::C   TPApp()
{
    //          
    m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

    // TODO:           ,
    //              InitInstance  
}


//       C   TPApp   

C   TPApp theApp;


// C   TPApp    

BOOL C   TPApp::InitInstance()
{
    //         Windows XP            
    //    ComCtl32.dll    6              ,
    //    InitCommonControlsEx()。    ,       。
    INITCOMMONCONTROLSEX InitCtrls;
    InitCtrls.dwSize = sizeof(InitCtrls);
    //                    
    //      。
    InitCtrls.dwICC = ICC_WIN95_CLASSES;
    InitCommonControlsEx(&InitCtrls);

    CWinApp::InitInstance();


    AfxEnableControlContainer();

    //    shell    ,       
    //    shell        shell       。
    CShellManager *pShellManager = new CShellManager;

    //   “Windows Native”     ,    MFC        
    CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

    //      
    //               
    //           ,      
    //            
    //              
    // TODO:           ,
    //            
    SetRegistryKey(_T("               "));

    C   TPDlg dlg;
    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        // TODO:           
        //  “  ”         
    }
    else if (nResponse == IDCANCEL)
    {
        // TODO:           
        //  “  ”         
    }
    else if (nResponse == -1)
    {
        TRACE(traceAppMsg, 0, "  :        ,         。
"
); TRACE(traceAppMsg, 0, " : MFC , #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。
"
); } // shell 。 if (pShellManager != NULL) { delete pShellManager; } // , FALSE , // 。 return FALSE; }

//グローバルTPDlg.cpp:実装ファイル//
include “stdafx.h”
include「グローバル過TP.h」
include「グローバル過TPDlg.h」
include “afxdialogex.h”
include “Game.h”
ifdef _DEBUG
define new DEBUG_NEW
endif
//アプリケーション「概要」メニュー項目用CAboutDlgダイアログ
class CAboutDlg : public CDialogEx { public: CAboutDlg();
//ダイアログデータenum{IDD=IDD_ABOUTBOX};
protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV   

//protectedの実装:DECLARE_MESSAGE_MAP() };
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { }
void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); }
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP()
//CグローバルTPDlgダイアログ
Cグローバル過TPDlg::Cグローバル過TPDlg(CWnd*pParent/=NULL/):CDialogEx(Cグローバル過TPDlg::IDD,pParent){m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}
void CグローバルTPDlg::DoDataExchange(CDataExchange*pDX){CDialogEx::DoDataExchange(pDX);}
BEGIN_MESSAGE_MAP(Cグローバル過TPDlg,CDialogEx)ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK,&CグローバルTPDlg::OnBnClickedOk)END_MESSAGE_MAP()
//CグローバルTPDlgメッセージハンドラ
BOOL Cグローバル過TPDlg::OnInitDialog(){CDialogEx::OnInitDialog();
//  “  ...”           。

// IDM_ABOUTBOX           。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
    BOOL bNameValid;
    CString strAboutMenu;
    bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
    ASSERT(bNameValid);
    if (!strAboutMenu.IsEmpty())
    {
        pSysMenu->AppendMenu(MF_SEPARATOR);
        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
}

//          。                ,     
//       
SetIcon(m_hIcon, TRUE);         //      
SetIcon(m_hIcon, FALSE);        //      

ShowWindow(SW_MINIMIZE);

// TODO:              

return TRUE;  //           ,     TRUE

}
void CグローバルTPDlg::OnSysCommand(UINT nID,LPARAM lParam){if((nID&0 xFFF 0)==IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else { CDialogEx::OnSysCommand(nID, lParam); } }
//ダイアログボックスに最小化ボタンを追加する場合は、次のコード//でアイコンを描画する必要があります.ドキュメント/ビューモデルを使用するMFCアプリケーションの場合、//これはフレームワークによって自動的に完了します.
void Cグローバル過TPDlg::OnPaint(){if(IIconic(){CPaintDC dc(this);//描画用デバイスコンテキスト
    SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);

    //             
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    //     
    dc.DrawIcon(x, y, m_hIcon);
}
else
{
    CDialogEx::OnPaint();
}

}
//ユーザが最小化ウィンドウをドラッグすると、システムはこの関数を呼び出してカーソル//表示を取得します.HCURSOR Cグローバル過TPDlg::OnQueryDragIcon(){return static_cast(m_hIcon);}
void CグローバルTPDlg::OnBnClickedOk()/TODO:ここにコントロール通知ハンドラコード//CALOgEx::OnOK();SetHook();}を追加
「やあ、コードをつけたら、圧縮バッグに入れないでください.