Loading ...
Sorry, an error occurred while loading the content.
 

Re: Need to move console window running Perl to front

Expand Messages
  • Piotr Kaluski
    Doesn t SetForegroundWindow work for you? --Piotr ... open ... like
    Message 1 of 6 , Dec 8, 2005
      Doesn't SetForegroundWindow work for you?
      --Piotr

      --- In perlguitest@yahoogroups.com, "C.A. Romero" <aromero51@c...>
      wrote:
      >
      > Hi,
      >
      > I have a plain old Perl console application which writes a lot of
      > info to stdout, kicks off some other GUI based applications
      > (Framemaker and Acrobat Distiller, mostly) plus a number of other
      > console programs that get invoked within the script.
      >
      > At the end of processing, I need to be able to move the Win2K/WinXP
      > console window running the script to the front of the z-order of
      open
      > windows. (The user may well have a number of other windows open--
      > browsers, mail client, Acrobat Reader, Notepad.)
      >
      > I'm unable to figure out how to do this simple task. I've been
      > experimenting with both Win32::GUI and Win32::GUITest. It seems
      like
      > one of these should offer a way to do this, and I figure people on
      > this list probably know at least something about both...
      >
      > Thanks for any leads.
      >
      > -Antonio Romero
      >
    • C.A. Romero
      No, unfortunately, SetForegroundWindow on Win2K has a restriction that it can only make a window flash in the taskbar until you give it attention by
      Message 2 of 6 , Dec 9, 2005
        No, unfortunately, SetForegroundWindow on Win2K has a restriction
        that it can only make a window flash in the taskbar until you give it
        attention by clicking... See:

        http://support.microsoft.com/kb/q97925

        I did think of a way to do it-- basically, this:

        my ($consolehandle)=Win32::GUI::GetPerlWindow();
        while (Win32::GuiTest::GetForegroundWindow() !=
        $consolehandle) {
        Win32::GuiTest::SendKeys("%{ESCAPE}");
        }

        It's a bit of a hack but it does cycle the active window until the
        desired window comes to the foreground.

        I tried "%{TAB}" but I ran into an application that that didn't work
        right for... a text editor called Crimson Editor, that I use for my
        perl code, and that just recognized the alt-tab sequence from
        SendKeys as just plain TAB characters to enter into the editing
        buffer. Very strange, that.

        One more weird thing: If after this procedure I call the
        Win32::GUI::MsgBox function to display a final confirmation window,
        that MsgBox appears behind other windows... very annoying, not sure
        what to do about it.

        Anyway-- Win32::GuiTest is great, I'm not complaining. Thanks for the
        fast reply. If you have any suggestions about the use of MsgBox in
        this context, I'd appreciate them.

        -Antonio

        --- In perlguitest@yahoogroups.com, "Piotr Kaluski" <pkaluski@p...>
        wrote:
        >
        > Doesn't SetForegroundWindow work for you?
        > --Piotr
        >
        > --- In perlguitest@yahoogroups.com, "C.A. Romero" <aromero51@c...>
        > wrote:
        > >
        > > Hi,
        > >
        > > I have a plain old Perl console application which writes a lot of
        > > info to stdout, kicks off some other GUI based applications
        > > (Framemaker and Acrobat Distiller, mostly) plus a number of other
        > > console programs that get invoked within the script.
        > >
        > > At the end of processing, I need to be able to move the
        Win2K/WinXP
        > > console window running the script to the front of the z-order of
        > open
        > > windows. (The user may well have a number of other windows open--

        > > browsers, mail client, Acrobat Reader, Notepad.)
        > >
        > > I'm unable to figure out how to do this simple task. I've been
        > > experimenting with both Win32::GUI and Win32::GUITest. It seems
        > like
        > > one of these should offer a way to do this, and I figure people
        on
        > > this list probably know at least something about both...
        > >
        > > Thanks for any leads.
        > >
        > > -Antonio Romero
        > >
        >
      • Piotr Kaluski
        OK. I got your point. I don t know any simple solution to your problem. But your post ... work ... Yes, it is strange. And if you do Alt-TAB manually does this
        Message 3 of 6 , Dec 9, 2005
          OK. I got your point.
          I don't know any simple solution to your problem. But your post
          raised some questions from my side:

          > I tried "%{TAB}" but I ran into an application that that didn't
          work
          > right for... a text editor called Crimson Editor, that I use for my
          > perl code, and that just recognized the alt-tab sequence from
          > SendKeys as just plain TAB characters to enter into the editing
          > buffer. Very strange, that.

          Yes, it is strange. And if you do Alt-TAB manually does this editor
          also intercept it?

          > One more weird thing: If after this procedure I call the
          > Win32::GUI::MsgBox function to display a final confirmation window,
          > that MsgBox appears behind other windows... very annoying, not sure
          > what to do about it.

          Can you send an example code and description of what do you have to
          do to get this behavior?

          --Piotr


          --- In perlguitest@yahoogroups.com, "C.A. Romero" <aromero51@c...>
          wrote:
          >
          > No, unfortunately, SetForegroundWindow on Win2K has a restriction
          > that it can only make a window flash in the taskbar until you give
          it
          > attention by clicking... See:
          >
          > http://support.microsoft.com/kb/q97925
          >
          > I did think of a way to do it-- basically, this:
          >
          > my ($consolehandle)=Win32::GUI::GetPerlWindow();
          > while (Win32::GuiTest::GetForegroundWindow() !=
          > $consolehandle) {
          > Win32::GuiTest::SendKeys("%{ESCAPE}");
          > }
          >
          > It's a bit of a hack but it does cycle the active window until the
          > desired window comes to the foreground.
          >
          > I tried "%{TAB}" but I ran into an application that that didn't
          work
          > right for... a text editor called Crimson Editor, that I use for my
          > perl code, and that just recognized the alt-tab sequence from
          > SendKeys as just plain TAB characters to enter into the editing
          > buffer. Very strange, that.
          >
          > One more weird thing: If after this procedure I call the
          > Win32::GUI::MsgBox function to display a final confirmation window,
          > that MsgBox appears behind other windows... very annoying, not sure
          > what to do about it.
          >
          > Anyway-- Win32::GuiTest is great, I'm not complaining. Thanks for
          the
          > fast reply. If you have any suggestions about the use of MsgBox in
          > this context, I'd appreciate them.
          >
          > -Antonio
          >
          > --- In perlguitest@yahoogroups.com, "Piotr Kaluski" <pkaluski@p...>
          > wrote:
          > >
          > > Doesn't SetForegroundWindow work for you?
          > > --Piotr
          > >
          > > --- In perlguitest@yahoogroups.com, "C.A. Romero"
          <aromero51@c...>
          > > wrote:
          > > >
          > > > Hi,
          > > >
          > > > I have a plain old Perl console application which writes a lot
          of
          > > > info to stdout, kicks off some other GUI based applications
          > > > (Framemaker and Acrobat Distiller, mostly) plus a number of
          other
          > > > console programs that get invoked within the script.
          > > >
          > > > At the end of processing, I need to be able to move the
          > Win2K/WinXP
          > > > console window running the script to the front of the z-order
          of
          > > open
          > > > windows. (The user may well have a number of other windows
          open--
          >
          > > > browsers, mail client, Acrobat Reader, Notepad.)
          > > >
          > > > I'm unable to figure out how to do this simple task. I've been
          > > > experimenting with both Win32::GUI and Win32::GUITest. It seems
          > > like
          > > > one of these should offer a way to do this, and I figure people
          > on
          > > > this list probably know at least something about both...
          > > >
          > > > Thanks for any leads.
          > > >
          > > > -Antonio Romero
          > > >
          > >
          >
        • aromero51@comcast.net
          Piotr-- The sample code for the MsgBox will follow later. Crimson Editor handles the ALT-TAB sequence correctly when I use it manually. It s only when I use
          Message 4 of 6 , Dec 9, 2005
            Piotr--

            The sample code for the MsgBox will follow later.

            Crimson Editor handles the ALT-TAB sequence correctly when I use it manually. It's only when I use Win32::GuiTest:SendKeys that it misinterprets ALT-TAB.

            You can try Crimson Editor if you like, it's freeware:
            http://www.crimsoneditor.com/

            It's actually a good editor in most respects, and includes an integrated FTP client which I like for editing files directly on Web sites. But Win32::GuiTest doesn't like it...

            Perhaps they have a bug, perhaps you have an edge case. It does use tabs at the top of the window to manage multiple editing buffers... maybe somehow in trapping the control-tab sequence for moving among tabs they also inadvertently trap the alt-tab somehow?

            -Antonio

            -------------- Original message --------------
            From: "Piotr Kaluski" <pkaluski@...>
            OK. I got your point.
            I don't know any simple solution to your problem. But your post
            raised some questions from my side:

            > I tried "%{TAB}" but I ran into an application that that didn't
            work
            > right for... a text editor called Crimson Editor, that I use for my
            > perl code, and that just recognized the alt-tab sequence from
            > SendKeys as just plain TAB characters to enter into the editing
            > buffer. Very strange, that.

            Yes, it is strange. And if you do Alt-TAB manually does this editor
            also intercept it?

            > One more weird thing: If after this procedure I call the
            > Win32::GUI::MsgBox function to display a final confirmation window,
            > that MsgBox appears behind other windows... very annoying, not sure
            > what to do about it.

            Can you send an example code and description of what do you have to
            do to get this behavior?

            --Piotr


            --- In perlguitest@yahoogroups.com, "C.A. Romero" <aromero51@c...>
            wrote:
            >
            > No, unfortunately, SetForegroundWindow on Win2K has a restriction
            > that it can only make a window flash in the taskbar until you give
            it
            > attention by clicking... See:
            >
            > http://support.microsoft.com/kb/q97925
            >
            > I did think of a way to do it-- basically, this:
            >
            > my ($consolehandle)=Win32::GUI::GetPerlWindow();
            > while (Win32::GuiTest::GetForegroundWindow() !=
            > $consolehandle) {
            > Win32::GuiTest::SendKeys("%{ESCAPE}");
            > }
            >
            > It's a bit of a hack but it does cycle the active window until the
            > desired window comes to the foreground.
            >
            > I tried "%{TAB}" but I ran into an application that that didn't
            work
            > right for... a text editor called Crimson Editor, that I use for my
            > perl code, and that just recognized the alt-tab sequence from
            > SendKeys as just plain TAB characters to enter into the editing
            > buffer. Very strange, that.
            >
            > One more weird thing: If after this procedure I call the
            > Win32::GUI::MsgBox function to display a final confirmation window,
            > that MsgBox appears behind other windows... very annoying, not sure
            > what to do about it.
            >
            > Anyway-- Win32::GuiTest is great, I'm not complaining. Thanks for
            the
            > fast reply. If you have any suggestions about the use of MsgBox in
            > this context, I'd appreciate them.
            >
            > -Antonio
            >
            > --- In perlguitest@yahoogroups.com, "Piotr Kaluski" <pkaluski@p...>
            > wrote:
            > >
            > > Doesn't SetForegroundWindow work for you?
            > > --Piotr
            > >
            > > --- In perlguitest@yahoogroups.com, "C.A. Romero"
            <aromero51@c...>
            > > wrote:
            > > >
            > > > Hi,
            > > >
            > > > I have a plain old Perl console application which writes a lot
            of
            > > > info to stdout, kicks off some other GUI based applications
            > > > (Framemaker and Acrobat Distiller, mostly) plus a number of
            other
            > > > console programs that get invoked within the script.
            > > >
            > > > At the end of processing, I need to be able to move the
            > Win2K/WinXP
            > > > console window running the script to the front of the z-order
            of
            > > open
            > > > windows. (The user may well have a number of other windows
            open--
            >
            > > > browsers, mail client, Acrobat Reader, Notepad.)
            > > >
            > > > I'm unable to figure out how to do this simple task. I've been
            > > > experimenting with both Win32::GUI and Win32::GUITest. It seems
            > > like
            > > > one of these should offer a way to do this, and I figure people
            > on
            > > > this list probably know at least something about both...
            > > >
            > > > Thanks for any leads.
            > > >
            > > > -Antonio Romero
            > > >
            > >
            >







            YAHOO! GROUPS LINKS

            Visit your group "perlguitest" on the web.

            To unsubscribe from this group, send an email to:
            perlguitest-unsubscribe@yahoogroups.com

            Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.

            [Non-text portions of this message have been removed]
          • C. Antonio Romero
            Piotr-- I ve pasted my sample code into the mailnote below. A few notes: There s a four second pause due to a call to Win32::Sleep . During that period I
            Message 5 of 6 , Dec 10, 2005
              Piotr--

              I've pasted my sample code into the mailnote below. A few notes:

              There's a four second pause due to a call to "Win32::Sleep". During that
              period I manually bring other windows to the front by clicking on them in
              the taskbar... this simulates some of the other applications that get opened
              and run during the real perl script I've been working on.

              The "ALT-ESC" key sequence does cycle through windows until the perl
              console comes to the front... but then the call to MsgBox produces a window
              that should be at the top of the z order but is not. You can see it pop up
              in the task bar but you have to manually bring it forward. (I think what I
              will do eventually is use Win32::GUI to create and display a small alert box
              of my own instead, if there's no good way past this in Win32::GuiTest. I
              would imagine that with that I can do pretty much anything I need to, though
              it's more code.)

              Thanks for the help on this. Maybe this is a contrived test case, and the
              real problem is how the MsgBox behaves, but the behavior surprised me.

              -Antonio

              PS-- I think Win32::GuiTest can solve a number of other problems for me--
              I'm very happy to have found it, even if this particular situation has me
              calling for help... Thank you for building this.


              # msgtest.pl
              use Win32;
              use Win32::GuiTest;
              use Win32::GUI;

              my ($hndl)=Win32::GUI::GetPerlWindow();


              # do my other stuff... windows apps open and close
              # To simulate, manually bring other apps to the front
              # by clicking them in the taskbar while "Sleep" call below
              # runs
              # the real script kicks off GUI apps that run
              # for 10 minutes or more and many windows open and close

              Win32::Sleep(4000);


              # cycle windows until the Perl console is in front
              while (Win32::GuiTest::GetForegroundWindow() != $hndl) {
              Win32::GuiTest::SendKeys("%{ESCAPE}");
              }


              # Bring perl console to foreground and activate
              Win32::GuiTest::SetForegroundWindow($hndl);
              Win32::GuiTest::SetActiveWindow($hndl);


              # This message box opens behind other windows
              # (MsgBox should just open in front, I think)
              Win32::MsgBox('Popup',0, 'Text message');




              -----Original Message-----
              From: perlguitest@yahoogroups.com [mailto:perlguitest@yahoogroups.com]On
              Behalf Of Piotr Kaluski
              Sent: Friday, December 09, 2005 1:48 AM
              To: perlguitest@yahoogroups.com
              Subject: [perlguitest] Re: Need to move console window running Perl to front


              OK. I got your point.
              I don't know any simple solution to your problem. But your post
              raised some questions from my side:

              > I tried "%{TAB}" but I ran into an application that that didn't
              work
              > right for... a text editor called Crimson Editor, that I use for my
              > perl code, and that just recognized the alt-tab sequence from
              > SendKeys as just plain TAB characters to enter into the editing
              > buffer. Very strange, that.

              Yes, it is strange. And if you do Alt-TAB manually does this editor
              also intercept it?

              > One more weird thing: If after this procedure I call the
              > Win32::GUI::MsgBox function to display a final confirmation window,
              > that MsgBox appears behind other windows... very annoying, not sure
              > what to do about it.

              Can you send an example code and description of what do you have to
              do to get this behavior?

              --Piotr


              --- In perlguitest@yahoogroups.com, "C.A. Romero" <aromero51@c...>
              wrote:
              >
              > No, unfortunately, SetForegroundWindow on Win2K has a restriction
              > that it can only make a window flash in the taskbar until you give
              it
              > attention by clicking... See:
              >
              > http://support.microsoft.com/kb/q97925
              >
              > I did think of a way to do it-- basically, this:
              >
              > my ($consolehandle)=Win32::GUI::GetPerlWindow();
              > while (Win32::GuiTest::GetForegroundWindow() !=
              > $consolehandle) {
              > Win32::GuiTest::SendKeys("%{ESCAPE}");
              > }
              >
              > It's a bit of a hack but it does cycle the active window until the
              > desired window comes to the foreground.
              >
              > I tried "%{TAB}" but I ran into an application that that didn't
              work
              > right for... a text editor called Crimson Editor, that I use for my
              > perl code, and that just recognized the alt-tab sequence from
              > SendKeys as just plain TAB characters to enter into the editing
              > buffer. Very strange, that.
              >
              > One more weird thing: If after this procedure I call the
              > Win32::GUI::MsgBox function to display a final confirmation window,
              > that MsgBox appears behind other windows... very annoying, not sure
              > what to do about it.
              >
              > Anyway-- Win32::GuiTest is great, I'm not complaining. Thanks for
              the
              > fast reply. If you have any suggestions about the use of MsgBox in
              > this context, I'd appreciate them.
              >
              > -Antonio
              >
              > --- In perlguitest@yahoogroups.com, "Piotr Kaluski" <pkaluski@p...>
              > wrote:
              > >
              > > Doesn't SetForegroundWindow work for you?
              > > --Piotr
              > >
              > > --- In perlguitest@yahoogroups.com, "C.A. Romero"
              <aromero51@c...>
              > > wrote:
              > > >
              > > > Hi,
              > > >
              > > > I have a plain old Perl console application which writes a lot
              of
              > > > info to stdout, kicks off some other GUI based applications
              > > > (Framemaker and Acrobat Distiller, mostly) plus a number of
              other
              > > > console programs that get invoked within the script.
              > > >
              > > > At the end of processing, I need to be able to move the
              > Win2K/WinXP
              > > > console window running the script to the front of the z-order
              of
              > > open
              > > > windows. (The user may well have a number of other windows
              open--
              >
              > > > browsers, mail client, Acrobat Reader, Notepad.)
              > > >
              > > > I'm unable to figure out how to do this simple task. I've been
              > > > experimenting with both Win32::GUI and Win32::GUITest. It seems
              > > like
              > > > one of these should offer a way to do this, and I figure people
              > on
              > > > this list probably know at least something about both...
              > > >
              > > > Thanks for any leads.
              > > >
              > > > -Antonio Romero
              > > >
              > >
              >







              YAHOO! GROUPS LINKS

              Visit your group "perlguitest" on the web.

              To unsubscribe from this group, send an email to:
              perlguitest-unsubscribe@yahoogroups.com

              Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
            Your message has been successfully submitted and would be delivered to recipients shortly.