Je viens de regarder ton code.
Il est possible de modifier le menu système de la calculatrice mais je pense que subclasser simplement la calculatrice avec l'API SetWindowLong_ n'est pas possible car la calculatrice appartient à un autre process
Microsoft dit ceci :
Subclassing is allowed only within a process. An application cannot subclass a window or class that belongs to another process.
l'article de MS est ici
http://msdn.microsoft.com/library/defau ... bclas3.asp
Je me trompe peut-être car je ne suis pas un spécialiste
Dans cet article, il est expliqué 3 manières de faire, 2 avec des dll (la 1ere en modifiant la base de registre et la 2eme en utilisant les Hook) et la 3eme avec la modif des adresses mémoire, cette 3eme étant déconseillée par MS
Sinon, dans ton code, 
Code : Tout sélectionner
   OriginalWindowProc = SetWindowLong_(hWnd,#GWL_WNDPROC,@MyMenuProc())
OriginalWindowProc  doit être une variable globale
False est une constante et doit commencer par # (GetSystemMenu_)
il n'est pas possible de récupérer le handle de la calculatrice avec WindowID() car aucune fenêtre n'est crée et la calculatrice est un exécutable propre
Pour récupérer le handle de la calculatrice, utilises ce code
Code : Tout sélectionner
   RunProgram ("calc")
    Delay(1000)
    hWnd.L = GetForegroundWindow_()
Mais il apparement pas possible de subclasser la calculatrice facilement, SetWindowLong_ échoue et l'erreur correspond à acces refusé (c'est l'accès mémoire)
En regardant avec le débugger, on voit que ton code se ferme alors que la calculatrice reste bien affichée. J'ai donc fait un essai avec une variable globale pour ne pas fermer ton code avant de m'apercevoir de ça
voici le code qui modifie le menu système de la calculatrice mais sans rien intercepter, il ne fonctionne pas
Code : Tout sélectionner
#MF_STRING = $0
#MF_ENABLED = $0
#IDM_MYMENUITEM = 2003
; #WM_SYSCOMMAND = $112
 #GWL_WNDPROC = -4
Global OriginalWindowproc.l, Quitter_Calculatrice
Procedure.l MymenuProc(hWnd.l , msg.l, wParam.l, lparam.l)
   MyMenuProc = SetWindowLong_(hWnd.l, #GWL_WNDPROC, OriginalWindowProc)
 
 If msg = #WM_SYSCOMMAND And WParam = #IDM_MYMENUITEM
    Debug WParam
    MessageRequester("","New menu item clicked",16)
    ProcedureReturn 0
 ElseIf msg = #WM_SYSCOMMAND And WParam = #SC_CLOSE
    Quitter_Calculatrice = 1
    Debug Quitter_Calculatrice
 Else
   ProcedureReturn MyMenuProc
  EndIf
EndProcedure
Procedure  AddToSystemMenu(hWND)
   hSystemMenu.l = GetSystemMenu_(hwnd, #False)
   AppendMenu_(hSystemMenu,#MF_STRING+#MF_ENABLED, #IDM_MYMENUITEM, "My Menu ITEM")
   OriginalWindowProc = SetWindowLong_(hWnd,#GWL_WNDPROC,@MyMenuProc())
 EndProcedure
 
    OpenWindow(100, x, y, LargeurInterne, HauteurInterne, #PB_Window_Invisible, "")
    ; on initialise Quitter_Calculatrice
    Quitter_Calculatrice = 0  ; à 0 la calculatrice tourne
                              ; à 1 la calculatrice a été fermée; mis à 1 dans la procedure MymenuProc
    RunProgram ("calc")
    Delay(1000)
    hWnd.L = GetForegroundWindow_() ; pour récupérer le bon Handle
    AddToSystemMenu(hWnd)
                                     ; n'est pas fermée
       Repeat
       Until Quitter_Calculatrice = 1  ; on ne ferme pas ton prog tant que la calculatrice
End