Advertisement
Guest User

Diafan Icon by Gar|k

a guest
Dec 19th, 2011
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.51 KB | None | 0 0
  1. #include <windows.h>
  2.  
  3. #include <tchar.h>
  4.  
  5. #include <wininet.h>
  6.  
  7. #pragma comment(lib,"wininet")
  8.  
  9.  
  10.  
  11. #include "resource.h"
  12.  
  13.  
  14.  
  15. #define WM_FLIPPED_TO_TRAY (WM_APP + 1234)
  16.  
  17. #define ID_FLIPPED_TO_TRAY 1234
  18.  
  19. #define MAIN_TEXT _TEXT("diafan.CMS")
  20.  
  21.  
  22.  
  23. #pragma pack(1)
  24.  
  25. typedef struct _SETTINGS
  26.  
  27. {
  28.  
  29.     LONG uid;
  30.  
  31.     LONG time;
  32.  
  33. } SETTINGS, *PSETTINGS;
  34.  
  35. #pragma pack()
  36.  
  37.  
  38.  
  39. LRESULT CALLBACK GarikWinProc (HWND,UINT,UINT,LONG);
  40.  
  41.  
  42.  
  43. NOTIFYICONDATA nid;
  44.  
  45. HICON hIcon,hIcon2=NULL;
  46.  
  47. HINSTANCE hInst;
  48.  
  49. SETTINGS opt;
  50.  
  51.  
  52.  
  53. DWORD WINAPI th_main(PVOID data) {
  54.  
  55.  
  56.  
  57.     while(1) {
  58.  
  59.         nid.hIcon=hIcon;
  60.  
  61.         _stprintf(nid.szTip,MAIN_TEXT);
  62.  
  63.  
  64.  
  65.         // инициализируем WinInet
  66.  
  67.         HINTERNET hInternet = InternetOpen(MAIN_TEXT, INTERNET_OPEN_TYPE_PRECONFIG, NULL,NULL, 0);
  68.  
  69.  
  70.  
  71.         if (hInternet != NULL) {
  72.  
  73.             // открываем HTTP сессию
  74.  
  75.             HINTERNET hConnect = InternetConnect(hInternet,_TEXT("host.ru"),INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,1u);
  76.  
  77.  
  78.  
  79.             if (hConnect != NULL) {
  80.  
  81.  
  82.  
  83.                 TCHAR get[128];
  84.  
  85.                 _stprintf(get,_TEXT("/%d"),opt.uid);
  86.  
  87.  
  88.  
  89.                 // открываем запрос
  90.  
  91.                 HINTERNET hRequest = HttpOpenRequest(hConnect,_TEXT("GET"),get,NULL,NULL,0,INTERNET_FLAG_KEEP_CONNECTION,1);
  92.  
  93.  
  94.  
  95.                 if (hRequest != NULL) {
  96.  
  97.                     // посылаем запрос
  98.  
  99.                     if (HttpSendRequest(hRequest, NULL,0, NULL,0)) {
  100.  
  101.                         DWORD dwBytesRead;
  102.  
  103.                         char  szData[128];
  104.  
  105.                         if(InternetReadFile(hRequest,szData,sizeof(szData)-1,&dwBytesRead))
  106.  
  107.                         {
  108.  
  109.                             szData[dwBytesRead]=0;
  110.  
  111.                             if(szData[0]!='0')
  112.  
  113.                             {
  114.  
  115.                                 nid.hIcon=hIcon2;
  116.  
  117.                                 _stprintf(nid.szTip,_TEXT("%s\n%S новое событие"),MAIN_TEXT,szData);
  118.  
  119.                             }
  120.  
  121.                         }
  122.  
  123.  
  124.  
  125.                     }
  126.  
  127.                     // закрываем запрос
  128.  
  129.                     InternetCloseHandle(hRequest);
  130.  
  131.                 }
  132.  
  133.                 // закрываем сессию
  134.  
  135.                 InternetCloseHandle(hConnect);
  136.  
  137.             }
  138.  
  139.             InternetCloseHandle(hInternet);
  140.  
  141.         }
  142.  
  143.         Shell_NotifyIcon(NIM_MODIFY, &nid);
  144.  
  145.         Sleep(opt.time);
  146.  
  147.     }
  148.  
  149.  
  150.  
  151.     return 0;
  152.  
  153. }
  154.  
  155.  
  156.  
  157. BOOL CALLBACK DialogProc(HWND hwndDlg,UINT Message, UINT wParam, LONG lParam)
  158.  
  159. {
  160.  
  161.     switch (Message)
  162.  
  163.     {
  164.  
  165.     case WM_INITDIALOG:
  166.  
  167.         SetDlgItemInt(hwndDlg,IDC_EDIT1,opt.uid,FALSE);
  168.  
  169.         SetDlgItemInt(hwndDlg,IDC_EDIT2,opt.time,FALSE);
  170.  
  171.         return TRUE;
  172.  
  173.     case WM_COMMAND:
  174.  
  175.         switch (LOWORD(wParam))
  176.  
  177.         {
  178.  
  179.         case IDOK:
  180.  
  181.             InterlockedExchange(&opt.uid,GetDlgItemInt(hwndDlg,IDC_EDIT1,NULL,FALSE));
  182.  
  183.             InterlockedExchange(&opt.time,GetDlgItemInt(hwndDlg,IDC_EDIT2,NULL,FALSE));
  184.  
  185.            
  186.  
  187.         case IDCANCEL:
  188.  
  189.             EndDialog(hwndDlg, wParam);
  190.  
  191.             return TRUE;
  192.  
  193.         }
  194.  
  195.     }
  196.  
  197.     return FALSE;
  198.  
  199. }
  200.  
  201.  
  202.  
  203. BOOL init_options(BYTE set)
  204.  
  205. {
  206.  
  207.     DWORD MaxValueLen;
  208.  
  209.     LONG lResult;
  210.  
  211.     HKEY hKey;
  212.  
  213.  
  214.  
  215.     if(RegCreateKeyEx(HKEY_CURRENT_USER, _TEXT("Software\\diafan.CMS"), 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &MaxValueLen)!=ERROR_SUCCESS) {
  216.  
  217.         return FALSE;
  218.  
  219.     }
  220.  
  221.  
  222.  
  223.     if(MaxValueLen == REG_CREATED_NEW_KEY) {
  224.  
  225.         set=1;
  226.  
  227.         DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
  228.  
  229.     }
  230.  
  231.  
  232.  
  233.     if(set==0){
  234.  
  235.  
  236.  
  237.         MaxValueLen=sizeof(opt.uid);
  238.  
  239.         RegQueryValueEx(hKey, _TEXT("uid"), NULL, NULL, (LPBYTE)&opt.uid, &MaxValueLen);
  240.  
  241.         MaxValueLen=sizeof(opt.time);
  242.  
  243.         RegQueryValueEx(hKey, _TEXT("time"), NULL, NULL, (LPBYTE)&opt.time, &MaxValueLen);
  244.  
  245.        
  246.  
  247.     }
  248.  
  249.     else
  250.  
  251.     {
  252.  
  253.         MaxValueLen=sizeof(opt.uid);
  254.  
  255.         RegSetValueEx(hKey,_TEXT("uid"),0,REG_DWORD,(BYTE *)&opt.uid,MaxValueLen);
  256.  
  257.         MaxValueLen=sizeof(opt.time);
  258.  
  259.         RegSetValueEx(hKey,_TEXT("time"),0,REG_DWORD,(BYTE *)&opt.time,MaxValueLen);
  260.  
  261.     }
  262.  
  263.  
  264.  
  265.     RegCloseKey(hKey);
  266.  
  267.  
  268.  
  269.     return TRUE;
  270.  
  271. }
  272.  
  273.  
  274.  
  275. int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,
  276.  
  277.                     LPSTR lpCmdLine,int nShowCmd)
  278.  
  279. {
  280.  
  281.     UNREFERENCED_PARAMETER(hPrevInstance);
  282.  
  283.     UNREFERENCED_PARAMETER(lpCmdLine);
  284.  
  285.  
  286.  
  287.     MSG Msg;
  288.  
  289.     WNDCLASS WndClass={};
  290.  
  291.  
  292.  
  293.     hIcon2=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));
  294.  
  295.  
  296.  
  297.     nid.uID = ID_FLIPPED_TO_TRAY;
  298.  
  299.     nid.uCallbackMessage = WM_FLIPPED_TO_TRAY;
  300.  
  301.     nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
  302.  
  303.     _stprintf(nid.szTip,MAIN_TEXT);
  304.  
  305.  
  306.  
  307.  
  308.  
  309.     WndClass.lpfnWndProc=GarikWinProc;
  310.  
  311.     WndClass.hInstance = hInst = hInstance;
  312.  
  313.     WndClass.hIcon= nid.hIcon = hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MAIN));
  314.  
  315.     WndClass.lpszClassName=nid.szTip;
  316.  
  317.  
  318.  
  319.     opt.time=30*1000;
  320.  
  321.     opt.uid=0;
  322.  
  323.  
  324.  
  325.     init_options(0);
  326.  
  327.  
  328.  
  329.     RegisterClass(&WndClass);
  330.  
  331.  
  332.  
  333.     nid.hWnd=CreateWindow(WndClass.lpszClassName,NULL,WS_POPUP,
  334.  
  335.         0,0,
  336.  
  337.         0,0,
  338.  
  339.         NULL,NULL,
  340.  
  341.         hInstance,NULL);
  342.  
  343.  
  344.  
  345.     Shell_NotifyIcon(NIM_ADD, &nid);
  346.  
  347.     while(GetMessage(&Msg,NULL,0,0))
  348.  
  349.     {
  350.  
  351.         TranslateMessage(&Msg);
  352.  
  353.         DispatchMessage(&Msg);
  354.  
  355.     }
  356.  
  357.     Shell_NotifyIcon(NIM_DELETE, &nid);
  358.  
  359.  
  360.  
  361.     return (int)Msg.wParam;
  362.  
  363. }
  364.  
  365.  
  366.  
  367. LRESULT CALLBACK GarikWinProc(HWND hWnd,UINT Message, UINT wParam, LONG lParam)
  368.  
  369. {
  370.  
  371.     switch(Message)
  372.  
  373.     {
  374.  
  375.     case WM_CREATE:
  376.  
  377.         CreateThread(NULL,0,th_main,NULL,0,NULL);
  378.  
  379.         break;
  380.  
  381.  
  382.  
  383.     case WM_FLIPPED_TO_TRAY:
  384.  
  385.         if(lParam == WM_LBUTTONUP) {
  386.  
  387.             ShellExecute(0,_TEXT("open"),_TEXT("http://diafan.ru"),NULL,NULL,SW_SHOW);
  388.  
  389.             return 0;
  390.  
  391.         }
  392.  
  393.         if(lParam == WM_RBUTTONUP) {
  394.  
  395.             DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
  396.  
  397.             init_options(1);
  398.  
  399.             return 0;
  400.  
  401.         }
  402.  
  403.  
  404.  
  405.         if(lParam == WM_LBUTTONDBLCLK)
  406.  
  407.         {
  408.  
  409.             SendMessage(hWnd,WM_DESTROY,0,0);
  410.  
  411.         }
  412.  
  413.         break;
  414.  
  415.  
  416.  
  417.     case WM_DESTROY:
  418.  
  419.         PostQuitMessage(0);
  420.  
  421.         return 0;
  422.  
  423.     }
  424.  
  425.     return DefWindowProc(hWnd,Message,wParam,lParam);
  426.  
  427. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement