]> gitweb.ps.run Git - autorec/blobdiff - src/main.cpp
Icons
[autorec] / src / main.cpp
index 805932d9ff32054122de192e9a904850b0d3b7ed..d89c1991ea6a0ebc9eb3c5296e895fcb18a8c57e 100644 (file)
 #include <windows.h>\r
 #include <shlwapi.h>\r
 \r
 #include <windows.h>\r
 #include <shlwapi.h>\r
 \r
+bool recording = false;\r
+HANDLE process = NULL;\r
+HWND hwnd;\r
+HINSTANCE hInstance;\r
+\r
+\r
+NOTIFYICONDATAA niData = { 0 };\r
+const UINT ICON_MSG = WM_APP+1;\r
+void\r
+ShowNotificationIcon()\r
+{\r
+  Shell_NotifyIconA(NIM_ADD, &niData);\r
+  Shell_NotifyIconA(NIM_SETVERSION, &niData);\r
+}\r
+\r
+void\r
+HideNotificationIcon()\r
+{\r
+  Shell_NotifyIconA(NIM_DELETE, &niData);\r
+}\r
+\r
+void changeIcon(HWND hwnd, HINSTANCE hInstance, WORD id)\r
+{\r
+  HICON icon = LoadIcon(hInstance, MAKEINTRESOURCE(id));\r
+  HideNotificationIcon();\r
+  niData.hIcon = icon;\r
+  if (! IsWindowVisible(hwnd))\r
+    ShowNotificationIcon();\r
+  SendMessage(hwnd, WM_SETICON, 0, (LPARAM)icon);\r
+  SendMessage(hwnd, WM_SETICON, 1, (LPARAM)icon);\r
+}\r
+\r
+\r
+\r
 void\r
 startRecording()\r
 {\r
   ws::sendRequest("StartRecord");\r
 void\r
 startRecording()\r
 {\r
   ws::sendRequest("StartRecord");\r
+  changeIcon(hwnd, hInstance, IDI_ICON_GREEN);\r
 }\r
 \r
 void\r
 stopRecording()\r
 {\r
   ws::sendRequest("StopRecord");\r
 }\r
 \r
 void\r
 stopRecording()\r
 {\r
   ws::sendRequest("StopRecord");\r
+  changeIcon(hwnd, hInstance, IDI_ICON_RED);\r
 }\r
 \r
 bool\r
 }\r
 \r
 bool\r
@@ -84,49 +120,84 @@ checkForegroundProcess(std::string exeName)
   return strcmp(filename, exeName.c_str()) == 0;\r
 }\r
 \r
   return strcmp(filename, exeName.c_str()) == 0;\r
 }\r
 \r
-bool recording = false;\r
-HANDLE process = NULL;\r
-\r
-// int WINAPI\r
-// WinMain(HINSTANCE hInstance,\r
-//         HINSTANCE hPrevInstance,\r
-//         LPSTR lpCmdLine,\r
-//         int nCmdShow)\r
-int main(int argc, char **argv)\r
+int WINAPI\r
+WinMain(HINSTANCE hInstance,\r
+        HINSTANCE hPrevInstance,\r
+        LPSTR lpCmdLine,\r
+        int nCmdShow)\r
+//int main(int argc, char **argv)\r
 {\r
 {\r
+  hInstance = GetModuleHandle(0);\r
+\r
+  win::Window window("Title", "MyWindowClass", hInstance);\r
+  hwnd = window.hwnd;\r
+\r
+  niData.cbSize = sizeof(niData);\r
+  niData.uID = 12345;\r
+  niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;\r
+  niData.hIcon = LoadIconA(hInstance, MAKEINTRESOURCEA(IDI_ICON_WHITE));\r
+  niData.hWnd = window.hwnd;\r
+  niData.uCallbackMessage = ICON_MSG;\r
+  niData.uVersion = NOTIFYICON_VERSION_4;\r
+\r
+  window.handlers[WM_SIZE].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
+    if (wParam == SIZE_MINIMIZED) {\r
+      ShowNotificationIcon();\r
+      ShowWindow(hwnd, false);\r
+    }\r
+  });\r
+  window.handlers[WM_DESTROY].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
+    HideNotificationIcon();\r
+  });  \r
+  window.handlers[ICON_MSG].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
+    if (LOWORD(lParam) == NIN_SELECT) {\r
+      HideNotificationIcon();\r
+      ShowWindow(hwnd, true);\r
+      SetForegroundWindow(hwnd);\r
+      SetActiveWindow(hwnd);\r
+    }\r
+  });\r
 \r
 \r
-  //win::Window window("Title", "MyWindowClass", hInstance);\r
-  win::Window window("Title", "MyWindowClass", GetModuleHandle(0));\r
+  window.handlers[WM_GETMINMAXINFO].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {\r
+          MINMAXINFO *mmInfo = (MINMAXINFO*)lParam;\r
+          mmInfo->ptMinTrackSize.x = 400;\r
+          mmInfo->ptMinTrackSize.y = 200;\r
+  });\r
 \r
   lay_context *ctx = &window.ctx;\r
   lay_id root = window.lId;\r
 \r
 \r
   lay_context *ctx = &window.ctx;\r
   lay_id root = window.lId;\r
 \r
-  win::Hwnd row1(&window, &window, 0, 0, 0, 25, LAY_ROW, LAY_LEFT);\r
-  lay_set_margins_ltrb(ctx, row1.lId, 5, 5, 5, 5);\r
-  win::Hwnd row2(&window, &window, 0, 0, 0, 0, LAY_ROW, LAY_FILL);\r
-  lay_set_margins_ltrb(ctx, row2.lId, 5, 5, 5, 5);\r
+  lay_id row1 = win::createLayId(&window.ctx, window.lId, 0, 25, LAY_ROW, LAY_LEFT);\r
+  lay_set_margins_ltrb(ctx, row1, 5, 5, 5, 5);\r
+  lay_id row2 = win::createLayId(&window.ctx, window.lId, 0, 0, LAY_ROW, LAY_FILL);\r
+  lay_set_margins_ltrb(ctx, row2, 5, 5, 5, 5);\r
 \r
 \r
-  win::CheckBox cbWindowTitle(&window, &row1, "Window Title", 100, 25, 0, 0);\r
-  win::CheckBox cbFullscreenWindow(&window, &row1, "Any Fullscreen Application", 200, 25, 0, 0);\r
+  win::CheckBox cbWindowTitle(&window, "Window Title", row1, 100, 25, 0, 0);\r
+  win::CheckBox cbFullscreenWindow(&window, "Any Fullscreen Application", row1, 200, 25, 0, 0);\r
 \r
 \r
-  win::Button btnConnect(&window, &row1, "Connect", 100, 25, 0, 0);\r
+  win::Button btnConnect(&window, "Connect", row1, 100, 25, 0, 0);\r
   btnConnect.onClick([&]() {\r
     ws::connect("ws://127.0.0.1:4444");\r
   });\r
   btnConnect.onClick([&]() {\r
     ws::connect("ws://127.0.0.1:4444");\r
   });\r
+  win::Button btnTest(&window, "Test", row1, 100, 25, 0, 0);\r
+  btnTest.onClick([&]() {\r
+    changeIcon(window.hwnd, hInstance, IDI_ICON_GREEN);\r
+  });\r
 \r
 \r
-  win::ListBox lstActiveProcesses(&window, &row2, 0, 0, 0, LAY_FILL);\r
+  win::ListBox lstActiveProcesses(&window, row2, 0, 0, 0, LAY_FILL);\r
   \r
   \r
-  win::Hwnd col1(&window, &row2, 0, 0, 80, 0, LAY_COLUMN, LAY_VCENTER);\r
-  lay_set_margins_ltrb(ctx, col1.lId, 5, 0, 5, 0);\r
-\r
-  win::ListBox lstMonitoredProcesses(&window, &row2, 0, 0, 0, LAY_FILL);\r
+  lay_id col1 = win::createLayId(&window.ctx, row2, 80, 0, LAY_COLUMN, LAY_VCENTER);\r
   lstActiveProcesses.addStyle(WS_VSCROLL);\r
   lstActiveProcesses.addStyle(WS_VSCROLL);\r
+  \r
+  lay_set_margins_ltrb(ctx, col1, 5, 0, 5, 0);\r
+\r
+  win::ListBox lstMonitoredProcesses(&window, row2, 0, 0, 0, LAY_FILL);\r
   lstMonitoredProcesses.addStyle(WS_VSCROLL);\r
 \r
   lstMonitoredProcesses.addStyle(WS_VSCROLL);\r
 \r
-  win::Button btnUpdateWindows(&window, &col1, "Update", 85, 25, 0, 0);\r
-  win::Button btnStartMonitoringName(&window, &col1, "Exe name >>", 85, 25, 0, 0);\r
-  win::Button btnStartMonitoringPath(&window, &col1, "Full path >>", 85, 25, 0, 0);\r
-  win::Button btnStopMonitoring(&window, &col1, "Remove", 85, 25, 0, 0);\r
+  win::Button btnUpdateWindows(&window, "Update", col1, 85, 25, 0, 0);\r
+  win::Button btnStartMonitoringName(&window, "Exe name >>", col1, 85, 25, 0, 0);\r
+  win::Button btnStartMonitoringPath(&window, "Full path >>", col1, 85, 25, 0, 0);\r
+  win::Button btnStopMonitoring(&window, "Remove", col1, 85, 25, 0, 0);\r
   btnUpdateWindows.onClick([&]() {\r
     lstActiveProcesses.clear();\r
     for (HWND hwnd = GetTopWindow(NULL); hwnd != nullptr;\r
   btnUpdateWindows.onClick([&]() {\r
     lstActiveProcesses.clear();\r
     for (HWND hwnd = GetTopWindow(NULL); hwnd != nullptr;\r
@@ -173,12 +244,16 @@ int main(int argc, char **argv)
   });\r
 \r
   window.show();\r
   });\r
 \r
   window.show();\r
+  window.setDefaultFont();\r
 \r
 \r
+  ws::onConnect = [&]() {\r
+    changeIcon(window.hwnd, hInstance, IDI_ICON_RED);\r
+  };\r
   ws::init();\r
 \r
   SetTimer(window.hwnd, 10123, 100, [](HWND, UINT, UINT_PTR, DWORD) {\r
     if (!recording) {\r
   ws::init();\r
 \r
   SetTimer(window.hwnd, 10123, 100, [](HWND, UINT, UINT_PTR, DWORD) {\r
     if (!recording) {\r
-      if (checkForegroundProcess("League of Legends.exe")) {\r
+      if (checkForegroundProcess("notepad.exe")) {\r
         recording = true;\r
         process = getHwndProcess(GetForegroundWindow());\r
         startRecording();\r
         recording = true;\r
         process = getHwndProcess(GetForegroundWindow());\r
         startRecording();\r