[fpc-devel] Dynamic GUI/Console apptype

Mimu Bunnylin mimu at mooncore.eu
Sun Dec 27 02:56:22 CET 2009


On Sat, 26 Dec 2009 07:45:30 -0800, Henry Vermaak  
<henry.vermaak at gmail.com> wrote:

> 2009/12/27 Mimu Bunnylin <mimu at mooncore.eu>:
>> Currently, programs for Windows have to be specified as either $APPTYPE
>> Console or GUI.
>>
>> If the user runs a console-mode program from a console, the existing  
>> console is kept; run outside a console, a new console is created.
>>
>> If the user runs a GUI-mode program outside a console, no console is
>> created, and if run inside a console, the console is immediately  
>> released.
>>
>> But suppose I want a program that will continue running in a console if  
>> run from a console, but will not automatically create a new one if run
>> from outside a console. (Eg. without command-line arguments, launch the
>> program's GUI, otherwise print a list of valid arguments in the  
>> console.)
>
> This is basically how linux works.  The child process of a terminal
> inherits the standard input/output/error pipes of the terminal.  If
> the process is called from outside the terminal, the standard output
> pipes are re-directed to ~/.xsession-errors by the desktop environment
> (in my experience, at least).

Right. Now, how to achieve the same under Windows...

>> Would this be hard to implement? Presently I have to compile a
>> console-mode application, and use the Windows API call FreeConsole to
>> eliminate the console if it is not needed. This still makes a useless
>> console pop up for a moment, which looks silly. This could be as simple
>> as adding a check somewhere in the system unit for whether a console is
>> associated with the process or not, and decide the appropriate $APPTYPE
>> at runtime.
>
> You can detect if a process is called from a console under windows.
> I've got some code at work for that.  What you would have to do is to
> detect this, then attach the parent process' console to your app.  I
> haven't tried this, but it sounds achievable.

So, basically, make a GUI-mode application, let FPC release the console
during its normal startup initialisations, then detect that the parent
process was a console, and recapture the console... This could work,
thanks. It would still seem far simpler to alter the FPC system unit to not
release the console in the first place, but I could not find the relevant
part in the source code. (Too many files, not enough idea of where to  
look.)

>
> Henry
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel



More information about the fpc-devel mailing list