Ecco il codice, preso dagli esempi di dev-c++ e aggiunto solo la parte del MessageBox.

Se lo eseguite e premete F2 e F3 quando la finestra è attiva, tutto ok.
Ma se provate a premere i tasti finchè la finestra è per esempio ridotta ad icona e siete su un altro programma (es. dev-c++), per far comparire i MessageBox dovrete premere o tentere premuto i tasti più volte.

Codice PHP:
#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWNDUINTWPARAMLPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int IntPerNonFareComparireUnBordelloDiMessageBox 1;


int WINAPI WinMain (HINSTANCE hThisInstance,
                    
HINSTANCE hPrevInstance,
                    
LPSTR lpszArgument,
                    
int nFunsterStil)

{
    
HWND hwnd;               /* This is the handle for our window */
    
MSG messages;            /* Here messages to the application are saved */
    
WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    
wincl.hInstance hThisInstance;
    
wincl.lpszClassName szClassName;
    
wincl.lpfnWndProc WindowProcedure;      /* This function is called by windows */
    
wincl.style CS_DBLCLKS;                 /* Catch double-clicks */
    
wincl.cbSize sizeof (WNDCLASSEX);

    
/* Use default icon and mouse-pointer */
    
wincl.hIcon LoadIcon (NULLIDI_APPLICATION);
    
wincl.hIconSm LoadIcon (NULLIDI_APPLICATION);
    
wincl.hCursor LoadCursor (NULLIDC_ARROW);
    
wincl.lpszMenuName NULL;                 /* No menu */
    
wincl.cbClsExtra 0;                      /* No extra bytes after the window class */
    
wincl.cbWndExtra 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    
wincl.hbrBackground = (HBRUSHCOLOR_BACKGROUND;

    
/* Register the window class, and if it fails quit the program */
    
if (!RegisterClassEx (&wincl))
        return 
0;

    
/* The class is registered, let's create the program*/
    
hwnd CreateWindowEx (
           
0,                   /* Extended possibilites for variation */
           
szClassName,         /* Classname */
           
"Windows App",       /* Title Text */
           
WS_OVERLAPPEDWINDOW/* default window */
           
CW_USEDEFAULT,       /* Windows decides the position */
           
CW_USEDEFAULT,       /* where the window ends up on the screen */
           
544,                 /* The programs width */
           
375,                 /* and height in pixels */
           
HWND_DESKTOP,        /* The window is a child-window to desktop */
           
NULL,                /* No menu */
           
hThisInstance,       /* Program Instance handler */
           
NULL                 /* No Window Creation data */
           
);

    
/* Make the window visible on the screen */
    
ShowWindow (hwndnFunsterStil);

    
/* Run the message loop. It will run until GetMessage() returns 0 */
    
while (GetMessage (&messagesNULL00))
    {
        
/* Translate virtual-key messages into character messages */
        
TranslateMessage(&messages);
        
/* Send message to WindowProcedure */
        
DispatchMessage(&messages);
    }

    
/* The program return-value is 0 - The value that PostQuitMessage() gave */
    
return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwndUINT messageWPARAM wParamLPARAM lParam)
{
    
        
    if(
GetAsyncKeyState(VK_F2) < && IntPerNonFareComparireUnBordelloDiMessageBox == 1
        {
        
IntPerNonFareComparireUnBordelloDiMessageBox 0;
        
MessageBox(NULL,"Il problema e' che non viene fuori sempre!\nInfatti bisogna premere F2 piu' di una volta!","Problema",MB_ICONERROR); 
        }   
        
    if(
GetAsyncKeyState(VK_F3) < && IntPerNonFareComparireUnBordelloDiMessageBox == 0
        {
        
IntPerNonFareComparireUnBordelloDiMessageBox 1;
        
MessageBox(NULL,"Il problema e' che non viene fuori sempre!\nInfatti bisogna premere F3 piu' di una volta!","Problema",MB_ICONERROR);                                
        }
    
    
    
    switch (
message)                  /* handle the messages */
    
{
        case 
WM_DESTROY:
            
PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            
break;
        default:                      
/* for messages that we don't deal with */
            
return DefWindowProc (hwndmessagewParamlParam);
    }

    return 
0;


PS eseiste un modo per evitare di fare tutto quel casino di
"IntPerNonFareComparireUnBordelloDiMessageBox" ????