L'adresse mémoire de la classe d'une fenêtre par son handle?

Sujets variés concernant le développement en PureBasic
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

L'adresse mémoire de la classe d'une fenêtre par son handle?

Message par Lna »

(Obtenir l'adresse mémoire de la classe d'une fenêtre par son handle)

Bonjour à toutes et à tous,

Sauriez-vous s'il vous plaît, s'il existe une instruction API qui retourne l'adresse mémoire, où est stockée la classe d'une fenêtre de sa structure WNDCLASS (comme au moment de sa création uniquement par API, par exemple) ?

Merci d'avance

A +
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Je ne pense pas que l'on puisse avoir l'adresse mémoire où est stockée la classe ( Window la garde secrète :( ) Mais on peut en avoir une copie ! :D grâce aux fonctions GetClassName et GetClassInfoEx
Regarde mon petit exemple :

Code : Tout sélectionner

If OpenWindow(0, 100, 200, 200, 200,#PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Window Class")
     
     handle = WindowID()
     
     StartDrawing(WindowOutput())
     class$=Space(255)
     GetClassName_(handle,@class$,Len(class$))
     class$ = Left(class$,Len(class$))
     wc.WNDCLASSEX
     wc\cbSize = SizeOf(WNDCLASSEX)
     If GetClassInfoEx_(GetModuleHandle_(#Null),@class$,@wc)
          DrawingMode(1)
          Locate(10,30)
          DrawText("Class : "+PeekS(wc\lpszClassName))
          Locate(10,50)
          DrawText("WndProc : "+Hex(wc\lpfnWndProc))
          Locate(10,70)
          DrawText("Style : "+Hex(wc\style))
          ;typedef struct _WNDCLASSEX {    // wc  
          ;    UINT    cbSize; 
          ;    UINT    style; 
          ;    WNDPROC lpfnWndProc; 
          ;    int     cbClsExtra; 
          ;    int     cbWndExtra; 
          ;    handle  hInstance; 
          ;    hIcon   hIcon; 
          ;    hCursor hCursor; 
          ;    HBRUSH  hbrBackground; 
          ;    LPCTSTR lpszMenuName; 
          ;    LPCTSTR lpszClassName; 
          ;    hIcon   hIconSm; 
          ;} WNDCLASSEX; 
          
     EndIf
     StopDrawing()
     Repeat
          EventID = WaitWindowEvent()
          If EventID = #PB_Event_CloseWindow
               Quit = 1
          EndIf
     Until Quit = 1
EndIf
End
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Bonjour erix14,

Je te remercie pour ta réponse, ainsi que pour le temps passé à réaliser le programme d'exemple.
Oui, c'est la bonne API pour copier la classe d'une fenêtre.
Vue le nombre des API avec leurs noms pas toujours explicites, il devient bien difficile de s'y retrouver.

Encore un grand merci

A +
Répondre