Try out a kernel mode driver such as

. Pretty much undetectable.
C++ example:
Code:
#include <iostream>
#include <windows.h>
#include "interception.h"
#pragma comment(lib, "interception.lib")
int main() {
InterceptionContext context = interception_create_context();
if (!context) {
std::cerr << "Interception context could not be created.\n";
return 1;
}
InterceptionDevice device = 0;
InterceptionDevice found = 0;
for (device = 1; device <= INTERCEPTION_MAX_KEYBOARD; ++device) {
if (interception_is_keyboard(device)) {
found = device;
break;
}
}
if (!found) {
std::cerr << "No keyboard found for Interception.\n";
interception_destroy_context(context);
return 1;
}
InterceptionKeyStroke stroke;
Sleep(2000);
// Key down
stroke.code = 0x11; // W
stroke.state = INTERCEPTION_KEY_DOWN;
interception_send(context, found, (InterceptionStroke*)&stroke, 1);
Sleep(1000);
// Key up
stroke.state = INTERCEPTION_KEY_UP;
interception_send(context, found, (InterceptionStroke*)&stroke, 1);
interception_destroy_context(context);
return 0;
}