Question sur la structure du CLI

10 sujets de 1 à 10 (sur un total de 10)

  • Sharynn

      #10431

      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 !! :-D

      Amos un jour, Amos Toujours
      -----------------------------------
      AmOS4 - Library Amos sous C (Os3-Os4)

      Alex

        #159954

        Au hasard : DOS.library/CLI() ??

        Ball000

          #159955

          Je n’ai peut-être pas bien compris ce que tu veux faire… Mais si tu as lancé ta commande dans une fenêtre CLI, celle-ci doit a priori être la fenêtre active. Donc il te suffit d’explorer la structure Window de la fenêtre active (Intuition).

          leo

            #159956

            @Ball000: au moment où il lance sa commande, une requête système apparaît. Boom, c’est plus la fenêtre active…

            Gilloo

              #159957

              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

                #159958

                Merci cela va beaucoup m’aider !! :-D

                Amos un jour, Amos Toujours
                -----------------------------------
                AmOS4 - Library Amos sous C (Os3-Os4)

                Gilloo

                  #159959

                  Sharynn a écrit :

                  Merci cela va beaucoup m’aider !! :-D

                  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. ;-)

                  Sharynn

                    #159960

                    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 ?

                    :-D

                    Amos un jour, Amos Toujours
                    -----------------------------------
                    AmOS4 - Library Amos sous C (Os3-Os4)

                    Gilloo

                      #159961

                      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 ?

                      :-D

                      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.

                      Sharynn

                        #159962

                        Ben voila c’est fait…

                        Merci encore !!!! :-D

                        Amos un jour, Amos Toujours
                        -----------------------------------
                        AmOS4 - Library Amos sous C (Os3-Os4)

                      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

                      Amiga Impact