Une solution utilisant l'API Windows... donc ne fonctionnant que sous Windows (testé sous XP SP3)
Je l'ai écrit vite fait à partir d'un autre code que j'avais dans mes cartons.
Il n'y a pas beaucoup de vérification à l'intérieur,il faudra donc l'améliorer pour le rendre plus robuste
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include "mex.h"
#include <windows.h>
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray*prhs[] )
{
HWND hWnd;
RECT rc;
char *fig_name;
int buflen;
double *pos, *screensize ;
/* Get the length of the input string */
buflen = mxGetN(prhs[0])*sizeof(mxChar)+1;
/* Allocate memory for input string */
fig_name = mxMalloc(buflen);
/* Get the input value for fig_name */
mxGetString(prhs[0], fig_name, buflen);
/* Get the input value for screensize */
screensize = mxGetPr(prhs[1]);
/* Get the selected window */
hWnd = FindWindow(NULL, fig_name);
/* Create output array */
plhs[0] = mxCreateDoubleMatrix(1, 4, mxREAL);
pos = mxGetPr(plhs[0]);
if (hWnd!=0) /* Check if the window exists */
if (GetWindowRect(hWnd, &rc)!=0) { /* Check if the position is returned */
pos[0] = rc.left;
pos[1] = screensize[3]-rc.bottom;
pos[2] = rc.right-rc.left;
pos[3] = rc.bottom-rc.top;
}
mxFree(fig_name);
} |
A compiler comme ceci :
et à utiliser comme ceci :
pos = gfp(str,get(0,'screensize'));
Où str contient la chaine de caractères qui apparait en haut de la fenêtre dont on veut récupérer la position.
pos contient les valeurs de la position de la fenêtre comme la propriété Position des objets Figure sous MATLAB en unité pixels
J'ai mis le MEX compilé (gfp.mexw32 avec le compilateur Lcc) pour Windows 32bits dans l'archive zip attachée à ce message.
Il doit être possible de faire la même chose en Java pour une solution multiplateforme...
Partager