CreateFileMapping/OpenFileMapping/MapViewOfFile

来源:互联网 发布:Archlinux util-linux 编辑:程序博客网 时间:2024/06/05 07:37

 先要使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用OpenFileMapping函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据

 

void FileMapping(void)    {          //打开共享的文件对象。 
               m_hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE,_T("TestFileMap")); 
                if (m_hMapFile)  {       //显示共享的文件数据。 
                    LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,  0,0,0); 
                    OutputDebugString(lpMapAddr); 
                 } else { //创建共享文件。 

                    m_hMapFile = CreateFileMapping( (HANDLE)0xFFFFFFFF,NULL, PAGE_READWRITE,0,1024, _T("TestFileMap")); 
                    //拷贝数据到共享文件里。 
                   LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS, 0,0,0); 
                  std::wstring strTest(_T("TestFileMap")); 
                   wcscpy(lpMapAddr,strTest.c_str()); 

                   FlushViewOfFile(lpMapAddr,strTest.length()+1); 
               } 
         } 

Win32的WinMain

DLL的DLLMain

BOOL APIENTRY DllMain( HANDLE hModule,

                       DWORD ul_reason_for_call,

                       LPVOID lpReserved

                                    )

{

    switch (ul_reason_for_call)

       {

              case DLL_PROCESS_ATTACH:

              case DLL_THREAD_ATTACH:

              case DLL_THREAD_DETACH:

              case DLL_PROCESS_DETACH:

                     break;

    }

       hInstance=(HINSTANCE)hModule;          //得到DLL实例

    return TRUE;

}

 

 

LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)

{

      .............

       //给出提示:键盘已经被锁定,要进行判断,看是否已有提示窗口,否则会弹个没完

       if (!::FindWindow(0, "KeyBoard Locked"))    // user32.lib 头文件:winuser.h

       {

              MessageBox(0,"键盘已经锁定!!!","KeyBoard Locked",MB_OK);

       }

    return 1;   //没有return CallNextHookEx(hhkHook,nCode,wParam,lParam)则不会把消息传递下去,所以我们的键盘就不起作用了

}

 

hhkHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookProc,hInstance,0)

UnhookWindowsHookEx(hhkHook);

原创粉丝点击