X-Git-Url: https://gitweb.ps.run/autorec/blobdiff_plain/e00ad6704b8538b1a553960531af7b50d367fe73..f0e7eee62c3b7c71a7accfb7a2cb6e1ed1f566bc:/src/main.cpp diff --git a/src/main.cpp b/src/main.cpp index 7366104..d89c199 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,16 +15,52 @@ #include #include +bool recording = false; +HANDLE process = NULL; +HWND hwnd; +HINSTANCE hInstance; + + +NOTIFYICONDATAA niData = { 0 }; +const UINT ICON_MSG = WM_APP+1; +void +ShowNotificationIcon() +{ + Shell_NotifyIconA(NIM_ADD, &niData); + Shell_NotifyIconA(NIM_SETVERSION, &niData); +} + +void +HideNotificationIcon() +{ + Shell_NotifyIconA(NIM_DELETE, &niData); +} + +void changeIcon(HWND hwnd, HINSTANCE hInstance, WORD id) +{ + HICON icon = LoadIcon(hInstance, MAKEINTRESOURCE(id)); + HideNotificationIcon(); + niData.hIcon = icon; + if (! IsWindowVisible(hwnd)) + ShowNotificationIcon(); + SendMessage(hwnd, WM_SETICON, 0, (LPARAM)icon); + SendMessage(hwnd, WM_SETICON, 1, (LPARAM)icon); +} + + + void startRecording() { ws::sendRequest("StartRecord"); + changeIcon(hwnd, hInstance, IDI_ICON_GREEN); } void stopRecording() { ws::sendRequest("StopRecord"); + changeIcon(hwnd, hInstance, IDI_ICON_RED); } bool @@ -84,19 +120,49 @@ checkForegroundProcess(std::string exeName) return strcmp(filename, exeName.c_str()) == 0; } -bool recording = false; -HANDLE process = NULL; - -// int WINAPI -// WinMain(HINSTANCE hInstance, -// HINSTANCE hPrevInstance, -// LPSTR lpCmdLine, -// int nCmdShow) -int main(int argc, char **argv) +int WINAPI +WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +//int main(int argc, char **argv) { + hInstance = GetModuleHandle(0); + + win::Window window("Title", "MyWindowClass", hInstance); + hwnd = window.hwnd; + + niData.cbSize = sizeof(niData); + niData.uID = 12345; + niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; + niData.hIcon = LoadIconA(hInstance, MAKEINTRESOURCEA(IDI_ICON_WHITE)); + niData.hWnd = window.hwnd; + niData.uCallbackMessage = ICON_MSG; + niData.uVersion = NOTIFYICON_VERSION_4; + + window.handlers[WM_SIZE].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + if (wParam == SIZE_MINIMIZED) { + ShowNotificationIcon(); + ShowWindow(hwnd, false); + } + }); + window.handlers[WM_DESTROY].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + HideNotificationIcon(); + }); + window.handlers[ICON_MSG].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + if (LOWORD(lParam) == NIN_SELECT) { + HideNotificationIcon(); + ShowWindow(hwnd, true); + SetForegroundWindow(hwnd); + SetActiveWindow(hwnd); + } + }); - //win::Window window("Title", "MyWindowClass", hInstance); - win::Window window("Title", "MyWindowClass", GetModuleHandle(0)); + window.handlers[WM_GETMINMAXINFO].push_back([](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + MINMAXINFO *mmInfo = (MINMAXINFO*)lParam; + mmInfo->ptMinTrackSize.x = 400; + mmInfo->ptMinTrackSize.y = 200; + }); lay_context *ctx = &window.ctx; lay_id root = window.lId; @@ -113,14 +179,19 @@ int main(int argc, char **argv) btnConnect.onClick([&]() { ws::connect("ws://127.0.0.1:4444"); }); + win::Button btnTest(&window, "Test", row1, 100, 25, 0, 0); + btnTest.onClick([&]() { + changeIcon(window.hwnd, hInstance, IDI_ICON_GREEN); + }); win::ListBox lstActiveProcesses(&window, row2, 0, 0, 0, LAY_FILL); lay_id col1 = win::createLayId(&window.ctx, row2, 80, 0, LAY_COLUMN, LAY_VCENTER); + lstActiveProcesses.addStyle(WS_VSCROLL); + lay_set_margins_ltrb(ctx, col1, 5, 0, 5, 0); win::ListBox lstMonitoredProcesses(&window, row2, 0, 0, 0, LAY_FILL); - lstActiveProcesses.addStyle(WS_VSCROLL); lstMonitoredProcesses.addStyle(WS_VSCROLL); win::Button btnUpdateWindows(&window, "Update", col1, 85, 25, 0, 0); @@ -173,12 +244,16 @@ int main(int argc, char **argv) }); window.show(); + window.setDefaultFont(); + ws::onConnect = [&]() { + changeIcon(window.hwnd, hInstance, IDI_ICON_RED); + }; ws::init(); SetTimer(window.hwnd, 10123, 100, [](HWND, UINT, UINT_PTR, DWORD) { if (!recording) { - if (checkForegroundProcess("League of Legends.exe")) { + if (checkForegroundProcess("notepad.exe")) { recording = true; process = getHwndProcess(GetForegroundWindow()); startRecording();