AttachConsole

C# Signature:

[DllImport("kernel32.dll", SetLastError = true)]
    static extern bool AttachConsole(uint dwProcessId);

VB Signature:

Declare Function AttachConsole Lib "kernel32.dll" (dwProcessId as UInteger) As Boolean

User-Defined Types:

const uint ATTACH_PARENT_PROCESS = 0x0ffffffff;  // default value if not specifing a process ID

User-Defined Types:

const int ERROR_ACCESS_DENIED = 5; // process was already attached to another console

Sample Code to Paste in your "Windows Application (C#)" Program.cs right after the lines that say "static class Program { ":

/// <remarks>
    /// 
    ///  USAGE: Place inside your program's main static class
    ///  and call AllocateConsole whenever you want.
    /// </remarks>

    /// <summary>
    /// allocates a new console for the calling process.
    /// </summary>
    /// <returns>If the function succeeds, the return value is nonzero.
    /// If the function fails, the return value is zero. 
    /// To get extended error information, call Marshal.GetLastWin32Error.</returns>
    [DllImport("kernel32",SetLastError=true)]
    static extern bool AllocConsole();
    /// <summary>
    /// Detaches the calling process from its console
    /// </summary>
    /// <returns>If the function succeeds, the return value is nonzero.
    /// If the function fails, the return value is zero. 
    /// To get extended error information, call Marshal.GetLastWin32Error.</returns>
    [DllImport("kernel32", SetLastError = true)]
    static extern bool FreeConsole();    
    /// <summary>
    /// Attaches the calling process to the console of the specified process.
    /// </summary>
    /// <param name="dwProcessId">[in] Identifier of the process, usually will be ATTACH_PARENT_PROCESS</param>
    /// <returns>If the function succeeds, the return value is nonzero.
    /// If the function fails, the return value is zero. 
    /// To get extended error information, call Marshal.GetLastWin32Error.</returns>
    [DllImport("kernel32.dll", SetLastError=true)]
    static extern bool AttachConsole(uint dwProcessId);
    /// <summary>Identifies the console of the parent of the current process as the console to be attached.
    /// always pass this with AttachConsole in .NET for stability reasons and mainly because
    /// I have NOT tested interprocess attaching in .NET so dont blame me if it doesnt work! </summary>
    const uint ATTACH_PARENT_PROCESS = 0x0ffffffff;  
    /// <summary>
    /// calling process is already attached to a console
    /// </summary>
    const int ERROR_ACCESS_DENIED = 5;  
    /// <summary>
    /// Allocate a console if application started from within windows GUI. 
    /// Detects the presence of an existing console associated with the application and
    /// attaches itself to it if available.
    /// </summary>
    private static void AllocateConsole()
    {
        //
        // the following should only be used in a non-console application type (C#)
        // (since a console is allocated/attached already when you define a console app.. :) )
        //
        if (!AttachConsole(ATTACH_PARENT_PROCESS) && Marshal.GetLastWin32Error() == ERROR_ACCESS_DENIED)
        {
        // A console was not allocated, so we need to make one.
        if (!AllocConsole())
        {
            MessageBox.Show("A console could not be allocated, sorry!");
            throw new Exception("Console Allocation Failed");
        }
        else
        {
            Console.WriteLine("Is Attached, press a key...");
            Console.ReadKey(true);
            // you now may use the Console.xxx functions from .NET framework
            // and they will work as normal
        }

        }
    }

Author

[ mailto:Gabriel@paradisim.net ]
     or visit www.paradisim.net or 
        [ http://inversegoogle.paradisim.net/index3.htm ]
      for a snazzy black google search engine *yeah* i _did_ say snazzy, 
      i know i know... sheesh.

The FreeConsole API4/18/2010 9:54:09 PM - -87.74.96.9Attach current process to the console of a specified process, or to the current one by default (see ATTACH_PARENT_PROCESS) (this is an large contrib article, and since the net add-in insists on using this one, i decided to place it here and not in the original place.)5/18/2020 12:05:07 PM - LNK1123-84.26.94.125TODO - a short description12/2/2007 1:13:05 PM - anonymous

Última actualización