createconsolescreenbuffer (kernel32)
Last changed: -67.160.52.71

.
Summary

C# Signature:

[DllImport("Kernel32.dll")]
static extern IntPtr CreateConsoleScreenBuffer(
     UInt32 dwDesiredAccess,
     UInt32 dwShareMode,
     IntPtr securityAttributes,
     UInt32 flags,
     IntPtr screenBufferData
     );

User-Defined Types:

None.

Notes:

The buffer will not be visible by default. You need to mark it as active:

- Save the current buffer information so you can restore it when close it your buffer

- Call SetConsoleActiveScreenBuffer.

Tips & Tricks:

Helpful Links.

MSDN Documentation for CreateConsoleScreenBuffer:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms686010%28v=vs.85%29.aspx

Calling Unmanaged DLL Functions:

http://msdn.microsoft.com/en-us/library/26thfadc.aspx

Table of Convertions between managed and unmanaged data types:

http://msdn.microsoft.com/en-us/library/ac7ay120.aspx

Sample C# Code:

using System.Runtime.InteropServices; // Needed for the DllImport Attribute

namespace Namepace
{
class Class
{
[DllImport("Kernel32.dll")]
private static extern IntPtr CreateConsoleScreenBuffer(
UInt32 dwDesiredAccess,
UInt32 dwShareMode,
IntPtr secutiryAttributes,
UInt32 flags,
IntPtr screenBufferData
);

    
static void Main(string[] args)
{

/*
* Arguments:
* 0 - From MSDN Documentation.
* 0x00000001 - From MSDN Documentation.
* IntPtr.Zero - Since I did not need to pass it on to a child process, I decided to leave this pointer as null.
* 1 - Found this value on the Internet. It worked so I left it there.
* 0 - MSDN documentation says this must be null.
*/
IntPtr ptr = CreateConsoleScreenBuffer(0, 0x00000001, IntPtr.Zero, 1, IntPtr.Zero);

// Verifying the PInvoke worked.
Int32 err = Marshal.GetLastWin32Error();
if (err != 0)
{
Console.WriteLine("Error: {0}", err);
throw new System.ComponentModel.Win32Exception(err);
}
}

Alternative Managed API:

None. Console Managed class does not have buffer manipulation.

Documentation