| |
| /* |
| * Copyright (C) Igor Sysoev |
| */ |
| |
| |
| #include <ngx_config.h> |
| #include <ngx_core.h> |
| |
| |
| #define NGX_MAX_TEXT 2048 |
| |
| |
| void __cdecl |
| ngx_message_box(char *title, ngx_uint_t type, ngx_err_t err, |
| const char *fmt, ...) |
| { |
| va_list args; |
| u_char text[NGX_MAX_TEXT], *p, *last; |
| |
| last = text + NGX_MAX_TEXT; |
| |
| va_start(args, fmt); |
| p = ngx_vsnprintf(text, NGX_MAX_TEXT, fmt, args); |
| va_end(args); |
| |
| if (err) { |
| |
| if (p > last - 50) { |
| |
| /* leave a space for an error code */ |
| |
| p = last - 50; |
| *p++ = '.'; |
| *p++ = '.'; |
| *p++ = '.'; |
| } |
| |
| if ((unsigned) err >= 0x80000000) { |
| p = ngx_snprintf(p, last - p, " (%Xd: ", err); |
| |
| } else { |
| p = ngx_snprintf(p, last - p, " (%d: ", err); |
| } |
| |
| p = ngx_strerror_r(err, p, last - p); |
| |
| if (p < last) { |
| *p++ = ')'; |
| } |
| } |
| |
| if (p == last) { |
| p--; |
| } |
| |
| *p = '\0'; |
| |
| MessageBox(NULL, (char *) text, title, type); |
| } |
| |
| |
| ngx_int_t |
| ngx_system_tray_icon(HWND window, u_long action, HICON icon, u_char *tip) |
| { |
| NOTIFYICONDATA ni; |
| |
| ni.cbSize = sizeof(NOTIFYICONDATA); |
| ni.hWnd = window; |
| ni.uID = 0; |
| ni.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP; |
| ni.uCallbackMessage = NGX_WM_TRAY; |
| ni.hIcon = icon; |
| |
| if (tip) { |
| ngx_cpystrn((u_char *) ni.szTip, tip, 64); |
| } else { |
| ni.szTip[0] = '\0'; |
| } |
| |
| if (Shell_NotifyIcon(action, &ni) == 0) { |
| return NGX_ERROR; |
| } |
| |
| return NGX_OK; |
| } |