Selamat siang sayang Saya ingin berbagi kisah saya dan sedikit hack kehidupan.
Saya pikir semua pekerja kantor memiliki situasi di mana, setelah makan siang yang lezat, mereka sangat lelah dan ingin tidur siang. Padahal, tidur siang hari sangat berguna baik untuk tubuh maupun untuk pekerjaan, karena memiliki efek yang sangat positif terhadap produktivitas. Namun, dalam pengalaman saya, lebih dari 20 menit adalah sebuah kegagalan. Ini cukup bagi tubuh untuk menormalkan dirinya. Dan setelah satu menit, di mana saya benar-benar ingin terus tidur, tubuh bangun, Anda merasakan kekuatan dan gelombang kekuatan.
Di sisi lain, banyak orang lebih suka secangkir kopi. Dan meskipun tampaknya ini membantu, pada kenyataannya, tubuh tidak memulihkan sumber dayanya, tetapi hanya kehilangan lebih banyak. Ya, dan itu berbahaya.
Secara umum, jelas tentang apa ini, kan? Namun, pertanyaan secara alami muncul tentang bagaimana cara memasangnya di kantor. Dan masalahnya adalah bahwa sebagian besar bos tidak menyetujui ini. Dan sofa tidak ada di mana-mana. Ya, dan Anda tidak mungkin membiarkan diri untuk tidur siang jika Anda menghargai tempat kerja Anda.
Namun, saya beruntung, kursi saya dapat bersandar sangat banyak, dan saya biasanya terlihat bekerja, hanya berpikir. Dan semuanya akan baik-baik saja, jika bukan karena satu hal.
Gambar yang benar-benar statis pada monitor mengkhianati saya dengan jeroan ayam itik!
Saya entah bagaimana berbagi masalah ini dengan seorang teman, dan dia bercanda menawarkan untuk membuat simulator kerja.
Namun saya sangat menyukai gagasan itu untuk mengimplementasikan simulator kerja yang lengkap - seperti apa seharusnya? apa itu, dan bisa bekerja untuk saya? Secara umum, jelas bahwa membuat ini akan sangat sulit. Tetapi orang bisa menyederhanakan tugas.
Berdasarkan pekerjaan, saya adalah seorang programmer C ++ sederhana, dan karena itu sangat sering merangkak di Internet dan membaca berbagai artikel. Tanpa ini, mereka semua memahaminya.
Jika Anda mengamati seseorang yang membaca artikel yang panjang dan rumit, Anda akan melihat bahwa dia secara berkala menggulir artikel ke atas dan ke bawah. Dan inilah yang saya putuskan untuk diterapkan.
Setelah satu jam berselancar di Internet, dengan menggabungkan bahan dari tiga artikel (artikel tentang aplikasi tersembunyi tanpa jendela, tentang menangkap acara keyboard dan artikel tentang simulasi acara mouse), sebuah program sederhana diimplementasikan, yang ingin saya bagikan kepada orang-orang.
Idenya sederhana pada intinya: peristiwa gulir roda mouse acak. Artinya, Anda cukup memilih artikel yang lebih otentik dan lebih rumit untuk tugas saat ini, nyalakan simulator, dan tidurlah dengan tenang. Program tidak terlihat di task manager (atau saya hanya buta dan tidak menemukannya di sana), menggunakan kombinasi tombol Ctrl + bilah spasi dijeda, dan melanjutkan eksekusi, dan ketika Anda mengklik panah bawah itu menutup. Program dapat dilihat melalui konsol menggunakan perintah tasklist, dan jika perlu, Anda dapat mengetahui PID-nya untuk menutupnya melalui taskkill.
Saya sendiri tidak sepenuhnya memahami kode program, sehingga tidak akan ada komentar.
Sebenarnya, kode itu sendiri:
#define WIN32_LEAN_AND_MEAN #define _WIN32_WINNT 0x0500 #include <stdio.h> #include <iostream> #include <stdlib.h> #include <time.h> #include <conio.h> #include <string.h> #include <windows.h> HHOOK hKeyboardHook; #define X 500 #define Y 500 #define SCREEN_WIDTH 1920 #define SCREEN_HEIGHT 1080 bool bQuit = false; bool bPause = false; __declspec(dllexport) LRESULT CALLBACK KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam) { DWORD SHIFT_key = 0; DWORD CTRL_key = 0; DWORD ALT_key = 0; if ((nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN))) { KBDLLHOOKSTRUCT hooked_key = *((KBDLLHOOKSTRUCT*)lParam); DWORD dwMsg = 1; dwMsg += hooked_key.scanCode << 16; dwMsg += hooked_key.flags << 24; char lpszKeyName[1024] = { 0 }; int i = GetKeyNameText(dwMsg, (lpszKeyName + 1), 0xFF) + 1; int key = hooked_key.vkCode; SHIFT_key = GetAsyncKeyState(VK_SHIFT); CTRL_key = GetAsyncKeyState(VK_CONTROL); ALT_key = GetAsyncKeyState(VK_MENU); //printf("Keycode = %c\n", key); if (key == VK_DOWN) { bQuit = true; PostQuitMessage(0); } if (CTRL_key != 0 && key == ' ') { bPause = !bPause; } //if (key >= 'A' && key <= 'Z') //{ // if (GetAsyncKeyState(VK_SHIFT) >= 0) key += 32; // /********************************************* // *** Hotkey scope *** // *** do stuff here *** // **********************************************/ // if (CTRL_key != 0 && key == 'y') // { // MessageBox(NULL, "CTRL-y was pressed\nLaunch your app here", "HOTKE Y", MB_OK); // CTRL_key = 0; // //do stuff here // } // if (CTRL_key != 0 && key == 'q') // { // MessageBox(NULL, "Shutting down", "HOTKE Y", MB_OK); // bQuit = true; // PostQuitMessage(0); // } // // SHIFT_key = 0; // CTRL_key = 0; // ALT_key = 0; //} } return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam); } void MessageLoop() { MSG message; while (GetMessage(&message, NULL, 0, 0)) { TranslateMessage(&message); DispatchMessage(&message); } } DWORD WINAPI my_HotKey(LPVOID lpParm) { HINSTANCE hInstance = GetModuleHandle(NULL); if (!hInstance) hInstance = LoadLibrary((LPCSTR)lpParm); if (!hInstance) return 1; hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEvent, hInstance, NULL); MessageLoop(); UnhookWindowsHookEx(hKeyboardHook); return 0; } void MouseSetup(INPUT *buffer) { buffer->type = INPUT_MOUSE; buffer->mi.dx = (0 * (0xFFFF / SCREEN_WIDTH)); buffer->mi.dy = (0 * (0xFFFF / SCREEN_HEIGHT)); buffer->mi.mouseData = 0; buffer->mi.dwFlags = MOUSEEVENTF_ABSOLUTE; buffer->mi.time = 0; buffer->mi.dwExtraInfo = 0; } void MouseMoveAbsolute(INPUT *buffer, int x, int y) { buffer->mi.dx = (x * (0xFFFF / SCREEN_WIDTH)); buffer->mi.dy = (y * (0xFFFF / SCREEN_HEIGHT)); buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE); SendInput(1, buffer, sizeof(INPUT)); } void MouseClick(INPUT *buffer) { buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN); SendInput(1, buffer, sizeof(INPUT)); Sleep(10); buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP); SendInput(1, buffer, sizeof(INPUT)); } void MouseWheel(INPUT *buffer, bool bUp) { buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_WHEEL); if(bUp) buffer->mi.mouseData = 120; else buffer->mi.mouseData = -120; SendInput(1, buffer, sizeof(INPUT)); } /* declare window procedure for this application. */ LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR szArgs, int nCmdShow) { HANDLE hThread; DWORD dwThread; hThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)my_HotKey, (LPVOID)szArgs[0], NULL, &dwThread); INPUT buffer[1]; int probability = 3; // probability / 1000 int pr = probability; int repeat = 0; while (!bQuit) { if (bPause) { continue; Sleep(100); } MouseSetup(buffer); int p = rand() % 1000; if (p < pr) { if(p >= (pr + 1) / 2) MouseWheel(buffer, true); else MouseWheel(buffer, false); pr-=100; if (pr < probability) pr = probability; } else { pr++; } Sleep(100); } if (hThread) return WaitForSingleObject(hThread, INFINITE); return 0; //MSG Msg; // save window messages here. // /* Run the message pump. It will run until GetMessage() returns 0 */ //while (GetMessage(&Msg, NULL, 0, 0)) //{ // TranslateMessage(&Msg); // Translate virtual-key messages to character messages // DispatchMessage(&Msg); // Send message to WindowProcedure //} //return Msg.wParam; return 0; } /* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WinProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch (Message) { case VK_ESCAPE: { MessageBox(NULL, "You hit escape, quitting now.", "Message", 0); PostQuitMessage(0); break; } // handle non-trapped messages. default:return DefWindowProc(hWnd, Message, wParam, lParam); } return 0; // this indicates a message was trapped. }
Kode tidak dibersihkan dari komentar yang tidak perlu dan sampah lain karena alasan sederhana yang mungkin berguna bagi seseorang untuk mengerti. Sayangnya saya tidak bisa melampirkan file yang dapat dieksekusi untuk malas.
Saya ingin mencatat bahwa saya tidak merekomendasikan penggunaan program ini kepada siapa pun, dan saya sendiri tidak akan mengambil risiko menggunakannya. Lagi pula, jika Anda hanya tertidur di tempat kerja, ini dapat dijelaskan dengan merujuk pada kesehatan yang buruk, atau tidak adanya liburan panjang, atau sesuatu yang lain. Dan jika seseorang mengerti bahwa Anda mencoba menipu dia, itu akan menjadi buruk, menyinggung dan tidak menyenangkan. Dan itu tidak mungkin memiliki efek positif pada karier Anda.