[fpc-devel] Dynamic GUI/Console apptype
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
>> 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
> 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
> fpc-devel maillist - fpc-devel at lists.freepascal.org
More information about the fpc-devel