محاكاة قراءة المقالات

مساء الخير يا عزيزي. أود أن أشارك قصتي وقليلا في الحياة.


أعتقد أن جميع العاملين في المكاتب لديهم موقف ، بعد غداء لذيذ ، فإنهم متعبون للغاية ويريدون أخذ قيلولة. في الواقع ، يعد النوم أثناء النهار مفيدًا جدًا للجسم وللعمل ، حيث إنه له تأثير إيجابي للغاية على الإنتاجية. ومع ذلك ، في تجربتي ، أكثر من 20 دقيقة هو تمثال نصفي. هذا يكفي للجسم لتطبيع نفسها. وبعد دقيقة واحدة حرفيًا ، وأريد خلالها مواصلة النوم ، يستيقظ الجسم ويشعر بالحيوية وزيادة القوة.


من ناحية أخرى ، يفضل الكثير من الناس فنجان قهوة. وعلى الرغم من أنه يبدو أن هذا يساعد ، في الواقع ، لا يستعيد الجسم موارده ، لكنه يخسر المزيد. نعم ، وهو ضار.


بشكل عام ، من الواضح ما يدور حوله ، أليس كذلك؟ ومع ذلك ، فإن السؤال الذي يطرح نفسه بطبيعة الحال حول كيفية كرنك هذا في المكتب. والشيء هو أن معظم الرؤساء لا يوافقون على هذا. والأريكة ليست في كل مكان. نعم ، ومن غير المرجح أن تسمح لنفسك أن تأخذ غفوة عليها إذا كنت تقدر مكان عملك.


ومع ذلك ، كنت محظوظًا ، فقد ارتدّ مقعدي كثيرًا ، ويمكنني عمومًا البحث عن العمل ، فقط في التفكير. وكل شيء سيكون على ما يرام ، إن لم يكن لشيء واحد.


صورة ثابتة تمامًا على الشاشات تخونني بالأحجار الكريمة!


شاركت بطريقة أو بأخرى هذه المشكلة مع أحد الأصدقاء ، وعرض عليه مازحًا أن يكون محاكيًا للعمل.
أحببت حقًا فكرة تطبيق محاكي كامل للعمل - ما هو المفترض أن يكون؟ ما هو ، ويمكن أن تعمل بالنسبة لي؟ بشكل عام ، من الواضح أن إنشاء هذا سيكون أمرًا بالغ الصعوبة. ولكن يمكن للمرء تبسيط المهمة.


حسب الوظيفة ، أنا مبرمج C ++ بسيط ، وبالتالي غالبًا ما أقوم بالزحف على الإنترنت وقراءة مقالات متنوعة. بدون هذا ، فهم جميعًا يدركون ذلك.


إذا لاحظت شخصًا يقرأ مقالًا طويلًا ومعقدًا ، فستلاحظ أنه يتنقل بشكل دوري لأعلى ولأسفل. وهذا ما قررت تنفيذه.
بعد حرفيًا ساعة من تصفح الإنترنت ، من خلال الجمع بين مواد ثلاثة مقالات (مقالات عن تطبيق مخفي بدون نافذة ، والتقاط أحداث لوحة المفاتيح ومقالات حول محاكاة أحداث الماوس) ، تم تنفيذ برنامج بسيط ، أود مشاركته مع الأشخاص.


الفكرة بسيطة في جوهرها: أحداث تمرير عجلة الماوس العشوائية. أي أنك ببساطة اخترت مقالة أكثر أصالة وأكثر تعقيدًا للمهمة الحالية ، وقم بتشغيل جهاز المحاكاة ، وانتقل إلى النوم بهدوء. البرنامج غير مرئي في مدير المهام (أو أنا أعمى ولم أجده هناك) ، باستخدام تركيبة المفاتيح Ctrl + spacebar متوقفة مؤقتًا ، وتستأنف التنفيذ ، وعندما تنقر فوق السهم لأسفل يغلق. يمكن رؤية البرنامج من خلال وحدة التحكم باستخدام أمر قائمة المهام ، وإذا لزم الأمر ، يمكنك معرفة PID الخاص به لإغلاقه من خلال ملف المهام.


أنا شخصياً لا أفهم رمز البرنامج تمامًا ، لذلك لن يكون هناك أي تعليق.


في الواقع ، الكود نفسه:


#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. } 

لم يتم مسح الكود من التعليقات غير الضرورية وغيرها من القمامة لسبب بسيط هو أنه قد يكون مفيدًا لشخص ما لفهمه. للأسف لا يمكنني إرفاق الملف القابل للتنفيذ للكسل.


أود أن أشير إلى أنني لا أوصي باستخدام هذا البرنامج لأي شخص ، وأنا لن أخاطر باستخدامه. بعد كل شيء ، إذا غادرت للتو في مكان العمل ، يمكن تفسير ذلك بالإشارة إلى حالة صحية سيئة ، أو إلى غياب طويل لقضاء عطلة ، أو أي شيء آخر. وإذا فهم شخص ما أنك تحاول خداعه ، فسيكون الأمر سيئًا بالفعل وهجوميًا وغير سارة. ومن غير المرجح أن يكون لها تأثير إيجابي على حياتك المهنية.

Source: https://habr.com/ru/post/ar441096/


All Articles