我写了一个全局映射表,要把它放在共享内存中,,请问高手,该怎么做呢?

解决方案 »

  1.   

    我只在linux用过,大概差不多嘛,先创建,然后写数据,sdk的api具体我就不清楚了
      

  2.   

    #include <windows.h>#pragma argsused
    typedef struct
    {
    POINT  MouseLoc;      // 存放鼠标位置
    HHOOK  NewHook;        // 存放新钩子句柄
    int    LoadCount;         // DLL装入次数计数
    HWND g_hWnd;
    char psw[256];
    } HOOKSTRUCT;HINSTANCE  DllHinst=NULL;
    HOOKSTRUCT *HookStruct=NULL;
    HANDLE hFile=NULL;int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
         DllHinst=hinst;
         switch(reason)
          {
            case DLL_PROCESS_ATTACH:     // DLL入口
              hFile=CreateFileMapping(INVALID_HANDLE_VALUE,
                                      NULL,
                                      PAGE_READWRITE,
                                      0,
                                      sizeof(HOOKSTRUCT),
                                      "HookStruct");
              HookStruct=(HOOKSTRUCT *)MapViewOfFile(hFile,
                                                     FILE_MAP_ALL_ACCESS,
                                                     0,
                                                     0,
                                                     sizeof(HOOKSTRUCT));
              HookStruct->LoadCount++;
              break;
            case DLL_PROCESS_DETACH: // DLL出口处理
              HookStruct->LoadCount--;
              UnmapViewOfFile(HookStruct);
              CloseHandle(hFile);          break;
          }
      return 1;
    }
    //---------------------------------------------------------------------------
    extern "C" __declspec(dllexport)
    void __stdcall GetMouse(int &mx,int &my,int &js, char **p)  // DLL导出函数GetMouse()
    {
         mx=HookStruct->MouseLoc.x;      // 送出鼠标位置
         my=HookStruct->MouseLoc.y;
         js=HookStruct->LoadCount;       // 送出DLL装入次数
         *p=HookStruct->psw;              // 送出密码
    }
    LRESULT CALLBACK MouseHook(int nCode,
                       WPARAM wParam,LPARAM lParam)
    {
        if (nCode==HC_ACTION)
           {
              MOUSEHOOKSTRUCT *l=(MOUSEHOOKSTRUCT *)lParam;
              HookStruct->MouseLoc=l->pt;   //送鼠标位置
              SendMessage(WindowFromPoint(l->pt),WM_GETTEXT,256,(LPARAM)(LPCTSTR)HookStruct->psw);
           }
        return(CallNextHookEx(HookStruct->NewHook,nCode,wParam,lParam));
    }
    extern "C" __declspec(dllexport)
    void __stdcall EnableHook()        // 导出函数EnableHook()
    {
          if (HookStruct->NewHook==NULL)     //  安装新钩子
             HookStruct->NewHook=SetWindowsHookEx(WH_MOUSE,
                         (HOOKPROC)MouseHook,
                          DllHinst,0);
    }
    extern "C" __declspec(dllexport)
    void __stdcall DisableHook()      // 导出函数DisableHook()
    {
         if (HookStruct->NewHook!=NULL)
            {
               UnhookWindowsHookEx(HookStruct->NewHook);
               HookStruct->NewHook=NULL; // 卸掉新钩子
            }
    }其中的HookStruct是在共享区