Question sur la structure du CLI
10 sujets de 1 à 10 (sur un total de 10)
-
Bonjour les codeurs…
Je voudrais savoir si c’est possible comment récupérer la structure de la fenêtre CLI d’où mon programme vient de ce lancer.
Afin de pouvoir faire de la lecture dans la structure window du CLi.
Merci !!
Amos un jour, Amos Toujours
-----------------------------------
AmOS4 - Library Amos sous C (Os3-Os4)Essaye ce petit bout de programme assez complexe…
/*
** ConWindow.c
**
** Michael B. Smith
** February 2, 1993
**
** No rights reserved.
*/
#include
#include
#include
#include
#include
#include
#include
#include
struct MsgPort *WhichPort (BPTR file)
{
/*
** WhichPort
**
** If file is passed and non-NULL, find the MsgPort of
** its handler process. If file is NULL, then if I am
** a process, return the MsgPort of my console handler.
**
** See The AmigaDOS Manual, pp. 425 & 395, and
** AmigaMail pg. II-24.
*/
struct MsgPort
*rslt = NULL;
if (file) {
rslt = ((struct FileHandle *) (file << 2))->fh_Type;
}
else {
struct Task *me = FindTask (NULL);
if (me->tc_Node.ln_Type == NT_PROCESS)
rslt = ((struct Process *) me)->pr_ConsoleTask;
}
return rslt;
}
struct Window *WhichWindow (struct MsgPort *port)
{
/*
** WhichWindow
**
** Send a ACTION_DISK_INFO to the port passed in. It must be
** a message-port for a console handler. That will return a
** pointer to a filled-in « struct InfoData » and the window
** will be contained in the id_VolumeNode field.
**
** Note that the window will be NULL for an AUTO or AUX console.
*/
struct InfoData
*info;
long
rslt = 0;
/* info must be long-word aligned */
info = AllocVec (sizeof (struct InfoData), MEMF_PUBLIC);
if (!info)
return NULL;
if (port) {
rslt = DoPkt1 (port, ACTION_DISK_INFO, (long) (info >> 2));
if (rslt) {
rslt = info->id_VolumeNode;
}
}
FreeVec (info);
return (struct Window *) rslt;
}
int main (int argc, char **argv)
{
struct MsgPort
*port;
struct Window
*mywin;
/*
** If we get an argument, use Input (), otherwise find the default…
*/
/*
** You must be careful that Input() is from CON:. If not, results
** are undefined in this context…
*/
if (argc > 1) {
printf (« Window from Input()n »);
port = WhichPort (Input ());
}
else {
printf (« Window from ConsoleTaskn »);
port = WhichPort (NULL);
}
if (port) {
mywin = WhichWindow (port);
if (!mywin)
printf (« Couldn’t find windown »);
else {
printf (« Left %ld, Top %ld, Width %ld, Height %ldn »,
mywin->LeftEdge, mywin->TopEdge,
mywin->Width, mywin->Height);
}
}
else {
printf (« Couldn’t find portn »);
}
exit (0);
}
Sharynn a écrit :
Merci cela va beaucoup m’aider !!
ajoute au debut
#include
#include
et remplace
rslt = DoPkt1 (port, ACTION_DISK_INFO, (long) (info >> 2));
par
rslt = DoPkt1 (port, ACTION_DISK_INFO, (long)info >> 2);
et ça devrait compiler nickel chrome, pile poil.
Encore merci…
Bon j’abuse mais a partir de la je peux remonter jusqu’au WB pour avoir sa taille, en fait pour lire sa structure.?
Ou il y a encore quelques chose a faire avec les task ?
Amos un jour, Amos Toujours
-----------------------------------
AmOS4 - Library Amos sous C (Os3-Os4)Sharynn a écrit :
Encore merci…
Bon j’abuse mais a partir de la je peux remonter jusqu’au WB pour avoir sa taille, en fait pour lire sa structure.?
Ou il y a encore quelques chose a faire avec les task ?
A ce stade on peut laisser de coté les tasks/process.
Au final, tu obtiens un pointeur mywin sur une struct Window.
mywin->RPort, RastPort pour dessiner/écrire dedans avec les fonctions graphics.library
mywin->WScreen, pour voir le screen parent qui porte aussi la fenêtre workbench (c’est une fenêtre backdrop, borderless) dans la plupart des cas.
10 sujets de 1 à 10 (sur un total de 10)
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Question sur la structure du CLI