• DLL建立读写共享节区(Segment)


    // Hook.cpp : Defines the entry point for the DLL application.
    //
    
    #include "stdafx.h"
    #include "Hook.h"
    
    HHOOK g_hHook;
    HHOOK g_hHookKey;
    HINSTANCE g_hIns;
    
    #pragma data_seg("MySeg")
    HWND g_hWnd =NULL;
    #pragma data_seg()
    
    //#pragma comment(linker,"/section:MySeg,RWS")
    
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
    					 )
    {
    	g_hIns =(HINSTANCE) hModule;
    //     switch (ul_reason_for_call)
    // 	{
    // 		case DLL_PROCESS_ATTACH:
    // 		case DLL_THREAD_ATTACH:
    // 		case DLL_THREAD_DETACH:
    // 		case DLL_PROCESS_DETACH:
    // 			break;
    //     }
        return TRUE;
    }
    
    LRESULT CALLBACK MouseProc(
    						   int nCode,      // hook code
    						   WPARAM wParam,  // message identifier
    						   LPARAM lParam   // mouse coordinates
    						   )
    {
    	return 1;
    }
    
    
    LRESULT CALLBACK KeyProc(
    						   int nCode,      // hook code
    						   WPARAM wParam,  // message identifier
    						   LPARAM lParam   // mouse coordinates
    						   )
    {
    	if(wParam == VK_F2){
    		UnhookWindowsHookEx(g_hHook);
    		UnhookWindowsHookEx(g_hHookKey);
    		//MessageBox(0,"去掉了Hook","提示",0);
    		::SendMessage(g_hWnd,WM_CLOSE,0,0);
    		return 1;
    	}
    	else return CallNextHookEx(g_hHookKey,nCode,wParam,lParam);	
    }
    
    HOOK_API void SetHook(HWND hWnd)
    {
    	g_hWnd = hWnd;
    // 	g_hHook = SetWindowsHookEx(WH_MOUSE,MouseProc,g_hIns,0);
    // 	g_hHookKey = SetWindowsHookEx(WH_KEYBOARD,KeyProc,g_hIns,0);
    	g_hHook = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook.dll"),0);
    	g_hHookKey = SetWindowsHookEx(WH_KEYBOARD,KeyProc,GetModuleHandle("Hook"),0);
     
    }
    

      Hook.def

    LIBRARY Hook
    EXPORTS
    SetHook @23
    
    SEGMENTS
    MySeg	READ WRITE SHARED
    

      

    Client:

    /////////////////////////////////////////////////////////////////////////////
    // CHookTestDlg message handlers
    
    BOOL CHookTestDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Add "About..." menu item to system menu.
    
    	// IDM_ABOUTBOX must be in the system command range.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// Set the icon for this dialog.  The framework does this automatically
    	//  when the application's main window is not a dialog
    	SetIcon(m_hIcon, TRUE);			// Set big icon
    	SetIcon(m_hIcon, FALSE);		// Set small icon
    	
    	// TODO: Add extra initialization here
    	int cx,cy;
    	cx=GetSystemMetrics(SM_CXSCREEN);
    	cy=GetSystemMetrics(SM_CYSCREEN);
    	SetWindowPos(&wndTopMost,0,0,cx,cy,SWP_SHOWWINDOW);
    
    	SetHook(this->m_hWnd);  
    
    	return TRUE;  // return TRUE  unless you set the focus to a control
    }
    

      

  • 相关阅读:
    排列与组合
    C++构造函数虚函数例题
    排序
    Android相机是如何获取到图像的
    《Android进阶》之第七篇 NDK的使用
    递归相关题目
    华为模拟性格测试
    平衡二叉树
    Fragment回调接口应用间分享数据
    IOS中限制TextField中输入的类型以及长度
  • 原文地址:https://www.cnblogs.com/wucg/p/2433985.html
Copyright © 2020-2023  润新知