SHARE
TWEET

Diafan Icon by Gar|k

a guest Dec 19th, 2011 87 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top