quello è purtroppo un po difficile :\

E' vero che ho indicato il linguaggio C, perché a me sta senza problemi anche quello, ma il codice che attualmente sto scrivendo, per tagliare i tempi, è in C#, codice che se va dopo converto, quindi non ho codice da postare

Ho scritto al volo il seguente codice che "dovrebbe" funzionare a livello di logica, però al 99.99% ci saranno degli errori, probabilmente cretini, nel codice

Le varie API fanno uso della User32.dll

codice:
include <stdio.h>
include <stdlib.h>
include <string.h>
include <user32.h>

DWORD trayClockHWND;
WNDPROC oldWndProc;

int main()
{
  // Acquisisce l'HWND
  trayClockHWND = 0;
  EnumWindows(EnumWindowsProcCallback, null);

  // Verifica che l'operazione sia riuscita
  if (trayClockHWND == 0)
  {
    printf("Acquisizione fallita!"\r\n");
    getchar();
    return -1;
  }

  printf("Acquisizione Riuscita\r\n");

  // Subclassa la tray clock
  WNDPROC oldWndProc = (WNDPROC)SetWindowLong(
    trayClockHWND,
    GWL_WNDPROC, 
    (LONG)newWndProc);

  printf("Subclassing Riuscito\r\n");

  // Ripristina il vecchio gestore
  SetWindowLong(
    trayClockHWND,
    GWL_WNDPROC, 
    (LONG)oldWndProc);

  printf("Subclassing Rimosso\r\n");

  // Esce dal programma
  return 0;
}

LRESULT newWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
  return CallWindowProc(oldWndProc, hwnd, uMsg, wParam, lParam);
}

BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam )
{
  // Verifica se è già settato il valore che si sta cercando
  if (trayClockHWND > 0)
  {
    return 0;
  }
  
  // Inizializza il valore di ritorno per il nome della classe
  char* className = mallock(256);
  memset(className, 0, 256);
  
  // Acquisisce il nome della classe
  GetClassName(hwnd, className, 255);
  
  // Esegue il confronto
  if (strcmp(className, "TrayClockWClass") == 0)
  {
    // Acquisisce l'HWND
    trayClockHWND = hwnd;

    // Libera la memoria
    free(className);

    // Blocca l'enumerazione
    return FALSE;
  }

  // Libera la memoria
  free(className);

  // Procede con l'enumerazione delle finestre figlio
  EnumChildWindows(EnumWindowsProcCallback, null);

  // Fa proseguire l'enumerazione
  return TRUE;
}