Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
est-il possible de récupérer le nom d'un fichier affiché au dessus de la barre de menu dans Word ?
j'ai testé avec ceci mais rien ne se passe :
long ll_cumul, ll_cpt, ll_hDesktop, ll_hChild, ll_handle[], ll_pos string ls_ClassName, ls_WindowName, ls_class[], ls_window[], ls_word CONSTANT uint WM_QUIT = 18 ll_cumul = 0 // handle du bureau de window ll_hDesktop = GetDesktopWindow() // handle du 1er tache window ll_hChild = GetWindow( ll_hDesktop, 5 ) DO WHILE (ll_hChild > 0) ls_ClassName = Space(255) ls_WindowName = Space(255) // window classname GetClassNameA( ll_hChild, ls_ClassName, 255 ) // window text GetWindowTextA( ll_hChild, ls_WindowName, 255 ) ll_cumul ++ ls_class[ll_cumul] = ls_ClassName ls_window[ll_cumul] = ls_WindowName ll_handle[ll_cumul] = ll_hChild // handle suivant d'une tache window ll_hChild = GetWindow( ll_hChild, 2 ) LOOP ls_word = 'Document1' ll_cumul = upperbound(ls_Class) // regarde si on trouve au moins un nom de fenetre qui ressemble à 'Lettres types1 - Microsoft Word' FOR ll_cpt = 1 TO ll_cumul ll_pos = Pos(lower(ls_window[ll_cpt]), ls_word) IF ll_pos > 0 THEN EXIT END IF NEXT IF ll_pos > 0 THEN // fermeture de docubase PostMessageA(ll_handle[ll_cpt], WM_QUIT, 0, 0) END IF
Cordialement
Dernière modification par julien (10-10-2008 12:01:31)
Hors ligne
Je crois qu'une piste de solution se trouve dans l'aide de la méthode Handle() :
A déclarer dans le global external functions :
// Trouver une fenêtre PUBLIC FUNCTION unsignedlong FindWindow (long & classname, string windowname) LIBRARY "user32.dll" & ALIAS FOR FindWindowW // Mettre une fenêtre au premier plan - Ca peut toujours être utile... PUBLIC FUNCTION int SetForegroundWindow (unsignedlong & hwnd) LIBRARY "user32.dll" ALIAS FOR & SetForegroundWindowW
Code utilisé pour rechercher la fenêtre en question :
unsignedlong hwnd hwnd = FindWindow( 0, "Document1") // ou "Word" if hwnd = 0 then // pas trouvée else // trouvée end if
Hors ligne
je viens de tester,
hwnd est toujours égal à 0
j'ai testé avec tous les noms possible de la fenêtre (je pense ! )
Hors ligne
si c'est bon, il fallait mettre : "Document1 - Microsoft Word"
Merci Nyphel, maintenant, il faut que j'arrive à fermer cette fenêtre !
Hors ligne
A quoi correspond le chiffre récupéré dans hwnd ?
Hors ligne
Hé bien c'est le handle de la windows que tu cherches. Et si tu ne sais pas ce que c'est, c'est un long qui identifie de manière unique une fenêtre par rapport à Windows, et qui es utilisé par les méthodes de l'API Microsoft...
Hors ligne
utilises cette fonction...
FUNCTION boolean CloseHandle(ulong w_handle) LIBRARY "Kernel32.dll"
Hors ligne
le boolean que me retourne cette fonction est toujours "false" et la fenetre ne se ferme pas, d'où cela peut il venir ?
cordialement
Hors ligne
En fait, utilise plutôt:
FUNCTION boolean DestroyWindow(ulong hWnd) LIBRARY "user32.dll"
Hors ligne
j'obtiens toujours le même résultat
boolean = "false"
unsignedlong hwnd boolean result hwnd = FindWindow( 0, "Lettres types1 - Microsoft Word") IF hwnd <> 0 THEN result = DestroyWindow(hwnd) END IF messagebox("test", result)
Dernière modification par julien (08-10-2008 14:11:16)
Hors ligne
Mouais...
Alors essaies:
send(hwnd, 256, 0, 0) // 256 = WM_CLOSE
Si ça marche pas, je sais pas.
Hors ligne
es tu sur pour le 256 ?
car cela ne ferme pas la fenetre, par contre lorsque je reprend ce qui est dans l'aide pour minimizer une fenetre, ca la minimize bien :
send(hwnd, 274, 61472, 0)
Dernière modification par julien (08-10-2008 15:04:54)
Hors ligne
Je crois avoir converti 0x100 (=256) au lieu de 0x10 (=16)...
Déso
Hors ligne
oui c'est bon, ca fonctionne avec 16 !
merci beaucoup Cortex !
Hors ligne