Banky has asked for the wisdom of the Perl Monks concerning the following question:

Is there any way of launching a Win32::GUI app without having to launch a command prompt?

If I click the icon for the file it still launches the command prompt.

Is there any way to get around this?

  • Comment on Launching a Win32::GUI app without launching a terminal

Replies are listed 'Best First'.
Re: Launching a Win32::GUI app without launching a terminal
by Moonie (Friar) on Oct 02, 2001 at 23:17 UTC
    There are a couple of suggestions that you may wanna look into. Take a look at these two links: Win32-Gui-HowTo and Gui scripts. Both have some good ideas.
    - Moon
Re: Launching a Win32::GUI app without launching a terminal
by the_slycer (Chaplain) on Oct 02, 2001 at 23:33 UTC
    It's not possible to do it without launching the command prompt. You can hide the command prompt immediately after the GUI is launched, but it still needs to be there for a second.

    There are a couple of ways of doing this. First off, with Win32::Gui you can use something like:
    my ($dos) = Win32::GUI::GetPerlWindow(); Win32::GUI::Hide($dos);
    That you can use within the application and it will hide the DOS window/command prompt almost immediately.

    And I've used the following to perform the same function in TK, though this is a "wrapper" program to launch a program and it exits. So, this program runs in a command prompt, which exits, and launches a new perl interpreter that does not open a command prompt.
    #!/usr/bin/perl -w # loader - starts Perl scripts without the annoying DOS window use strict; use Win32; use Win32::Process; # Create the process object. Win32::Process::Create($Win32::Process::Create::ProcessObj, 'C:/perl5/bin/perl.exe', # Whereabouts of Perl 'perl realprogram', # 0, # Don't inherit. DETACHED_PROCESS, # ".") or # current dir. die print_error(); sub print_error() { return Win32::FormatMessage( Win32::GetLastError() ); }
    The second example is word for word from the O'Reilly cookbook, section 15.17

    And lastly, if you are using ActiveState perl, you can probably use wPerl.exe to launch the app (instead of just perl.exe) and that should do the trick.
      Although I don't know what's going on behind the scenes, as it may be hiding the command window as described above, but you could look into using Perl2exe and compile your script using the -gui option. The documentation states using the -gui option will:
      Create a no-console executable. This can be used for Tk and Win32::GUI applications. I/O to STDOUT and STDIN will not be visible. Applies to Win32 version only.
      I've tried it and it seems to work as advertised.

      "Make everything as simple as possible, but not simpler." -- Albert Einstein

Re: Launching a Win32::GUI app without launching a terminal
by rchiav (Deacon) on Oct 03, 2001 at 05:09 UTC
    If you're using ActivePerl, it comes with wperl.exe. You can associate another file extension with wperl.exe and it won't launch a command window. As far as associating the extension, look at the ActivePerl help files (if you're using ActivePerl).

    Hope this helps,
    Rich

Re: Launching a Win32::GUI app without launching a terminal
by archen (Pilgrim) on Oct 03, 2001 at 05:34 UTC
    This probably isn't what you're looking for, but you can get the command prompt to start up minimized so that it's at least out of the way - which is what I do.

    1) make a batch file to call perl and the program - put it anywhere you want.
    2) make a shortcut to the batch file
    3) in the properties of the shortcut, set the "Run" option to minimized. You can change the icon too. The prompt is still there, but out of the way. Maybe not the best method, but it doesn't take much effort.
Re: Launching a Win32::GUI app without launching a terminal
by Rex(Wrecks) (Curate) on Oct 02, 2001 at 23:11 UTC
    What is the commandline in the icon?

    You should be able to fire off perl directly as "perl -w MyApp". That way there is no cmd related functions happening

    "Nothing is sure but death and taxes" I say combine the two and its death to all taxes!