Advertisement
AlukardBF

os_yar4_client

Apr 24th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Windows.h>
  2. #include <windowsx.h>
  3. #include <process.h>
  4. #include <string>
  5. #include <iostream>
  6. #include "resource.h"
  7. using namespace std;
  8. #define BUF_SIZE 1024 //1kb
  9.  
  10. LPCWSTR szName = L"MyFileMappingObject";
  11. HANDLE hMapFile, hThread;
  12. HANDLE rwEvent, exitEvent;
  13. LPCTSTR pBuf;
  14. HWND hDlg;
  15.  
  16. BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
  17. BOOL LoadMapping();
  18.  
  19. //Считываем инфу с mapped file по ивенту и обрабатываем
  20. void WINAPIV thread(void*)
  21. {
  22.     int ButtonCount, status;
  23.     wstring temp; //Строка для вывода инфы на экран
  24.     //Вызываем функцию подключения к mapped file
  25.     LoadMapping();
  26.     do
  27.     {
  28.         //Ждем эвента
  29.         WaitForSingleObject(rwEvent, INFINITE);
  30.         //Копируем в ButtonCount из pBuf переменную типа int
  31.         CopyMemory(&ButtonCount, pBuf, sizeof(int));
  32.         //Очищаем строку
  33.         temp.clear();
  34.         //В цикле формируем строку
  35.         for (int i = 1; i <= ButtonCount; i++)
  36.         {
  37.             //Считываем из памяти (mapped file) инфу о статусе кнопки в status
  38.             CopyMemory(&status, pBuf + sizeof(int) * i, sizeof(int));
  39.             //Формируем строку...
  40.             temp.append(L"Кнопка " + to_wstring(i));
  41.             if (status == 1)
  42.                 temp.append(L" нажата");
  43.             else
  44.                 temp.append(L" не нажата");
  45.             temp.append(L"\r\n");
  46.         }
  47.         //Кидаем текст в Edit Control
  48.         SetWindowText(GetDlgItem(hDlg, IDC_EDIT), temp.c_str());
  49.         //Выполняем работу, пока не пришел ивент на выход от главного окна
  50.     } while (WaitForSingleObject(exitEvent, 0) != WAIT_OBJECT_0);
  51.     //Посылаем сообщение окну на закрытие
  52.     SendMessage(hDlg, WM_CLOSE, NULL, NULL);
  53.     _endthread();
  54. }
  55.  
  56. int WINAPI wWinMain(HINSTANCE hInstance,
  57.     HINSTANCE hPrevInstance,
  58.     LPWSTR lpCmdLine,
  59.     int nCmdShow)
  60. {
  61.     //Подключаемся к нашим ивентам и создаем поток
  62.     rwEvent = CreateEvent(
  63.         NULL,
  64.         TRUE,
  65.         FALSE,
  66.         L"ReadWriteEvent"
  67.     );
  68.     exitEvent = CreateEvent(
  69.         NULL,
  70.         TRUE,
  71.         FALSE,
  72.         L"exitEvent"
  73.     );
  74.     hThread = (HANDLE)_beginthread(&thread, 0, NULL);
  75.     //Отображаем диалог из ресурсов (окно)
  76.     DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), 0, (DlgProc), 0);  
  77.     return 0;
  78. }
  79.  
  80. BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  81. {
  82.     //Заносим hwnd диалога в глобальную переменную
  83.     //нужно для thread
  84.     hDlg = hWnd;
  85.     switch (uMsg)
  86.     {
  87.     case WM_INITDIALOG:
  88.         break;
  89.     case WM_COMMAND:
  90.     {
  91.         break;
  92.     }
  93.     case WM_CLOSE:
  94.     {
  95.         //При закрытии окна безопасно закрываем все хэндлы
  96.         CloseHandle(hThread);
  97.         CloseHandle(hMapFile);
  98.         EndDialog(hWnd, 0);
  99.         return FALSE;
  100.     }
  101.     }
  102.     return FALSE;
  103. }
  104.  
  105. //Подключаемся к mapped file
  106. BOOL LoadMapping()
  107. {
  108.     //Подключаемся
  109.     hMapFile = OpenFileMapping(
  110.         FILE_MAP_ALL_ACCESS,
  111.         FALSE,
  112.         szName);
  113.  
  114.     if (hMapFile == NULL)
  115.     {
  116.         cerr << "Could not open file mapping object " << GetLastError() << endl;
  117.         return FALSE;
  118.     }
  119.     //Открываем
  120.     pBuf = (LPTSTR)MapViewOfFile(hMapFile,
  121.         FILE_MAP_ALL_ACCESS,
  122.         0,
  123.         0,
  124.         BUF_SIZE);
  125.  
  126.     if (pBuf == NULL)
  127.     {
  128.         cerr << "Could not map view of file " << GetLastError() << endl;
  129.         CloseHandle(hMapFile);
  130.         return FALSE;
  131.     }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement