Necesitas crear un keyloger de teclado. Busca informacion ya que es muy sencillo y te permite detectar cualquier pulsacion de cualquier tecla del teclado incluidas las especiales.
Si no das con la tecla avisa y te busco un ejemplo que tengo por ahi. 
EDITO: Encontré el proyecto que tengo de ejemplo aunque es para Borland C++Builder pero es practicamente igual, solo cambia los eventos de los botones y poco mas ya que usa APIs de Windows:    
Código C++:
Ver original//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
#define OK -32767 //Necesario para el keylogger
 
LRESULT WINAPI KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam);
 
TForm1 *Form1;
HHOOK  hKeyboardHook;
//---------------------------------------------------------------------------
 
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ButtonColocarHookClick(TObject *Sender)
{
   hKeyboardHook  = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEvent, GetModuleHandle(NULL), 0);
   ButtonColocarHook->Enabled = false;
   ButtonQuitarHook->Enabled = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ButtonQuitarHookClick(TObject *Sender)
{
   UnhookWindowsHookEx(hKeyboardHook);
   ButtonColocarHook->Enabled = true;
   ButtonQuitarHook->Enabled = false;
}
//---------------------------------------------------------------------------
 
LRESULT WINAPI KeyboardEvent(int nCode, WPARAM wParam, LPARAM lParam)
{
   if( (nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)) ){
      if(GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(VK_SHIFT))
      {
         switch(*(PDWORD)lParam)
         {
            case 'C': //Ctrl+Shift+C
               MessageBox(NULL,"Has pulsado Ctrl+Shift+C.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
 
            case 'V': //Ctrl+Shift+V
               MessageBox(NULL,"Has pulsado Ctrl+Shift+V.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
         }
      }else if(GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(VK_MENU))
      {
         switch(*(PDWORD)lParam)
         {
            case 'C': //Ctrl+Alt+C
               MessageBox(NULL,"Has pulsado Ctrl+Alt+C.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
 
            case 'V': //Ctrl+Alt+V
               MessageBox(NULL,"Has pulsado Ctrl+Alt+V.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
         }
      }else if(GetAsyncKeyState(VK_CONTROL))
      {
         switch(*(PDWORD)lParam)
         {
            case 'C': //Ctrl+C
               MessageBox(NULL,"Has intentado copiar al portapapeles usando Ctrl+C.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
 
            case 'V': //Ctrl+V
               MessageBox(NULL,"Has intentado pegar desde el portapapeles usando Ctrl+V.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
         }
      }else if(GetAsyncKeyState(VK_MENU))
      {
         switch(*(PDWORD)lParam)
         {
            case 'C': //Alt+C
               MessageBox(NULL,"Has pulsado Alt+C.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
 
            case 'V': //Alt+V
               MessageBox(NULL,"Has pulsado Alt+V.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
         }
      }else if(GetAsyncKeyState(VK_SHIFT)){
         switch(*(PDWORD)lParam)
         {
            case 'C': //Shift+C
               MessageBox(NULL,"Has pulsado Shift+C.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
 
            case 'V': //Shift+V
               MessageBox(NULL,"Has pulsado Shift+V.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
         }
      }else{
         switch(*(PDWORD)lParam)
         {
            case 'C': //C
               MessageBox(NULL,"Has pulsado C.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
 
            case 'V': //V
               MessageBox(NULL,"Has pulsado V.","Atención", MB_OK | MB_ICONINFORMATION);
               break;
         }
      }
   }
   return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   hKeyboardHook  = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardEvent, GetModuleHandle(NULL), 0);
   ButtonColocarHook->Enabled = false;
   ButtonQuitarHook->Enabled = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
   UnhookWindowsHookEx(hKeyboardHook);
   ButtonColocarHook->Enabled = true;
   ButtonQuitarHook->Enabled = false;
}
//---------------------------------------------------------------------------
  
Eso si, yo lo hice para controlar solo las teclas C y V con todas sus combinaciones, si quieres controlar todo todo mejor create una funcion la cual obtenga la tecla pulsada y llamas desde cada situacion para hacer el codigo mas pequeño porque si no vas ha tener un codigo espaguetis de la ostia jajaja.