Чтобы это сделать, нужно убрать из расширенных стилей WS_EX_APPWINDOW и WS_EX_TOOLWINDOW, однако перед этим нужно спрятать окно - иначе ничего работать не будет.
Ниже рабочий код, который это демонстрирует.
public partial class Form1 : Form
{
private Process m_process;
public Form1()
{
InitializeComponent();
m_process = Process.Start("cmd.exe");
}
private const Int32 GWL_EXSTYLE = -20;
private const Int32 WS_EX_APPWINDOW = 0x00040000;
private const Int32 WS_EX_TOOLWINDOW = 0x00000080;
private const Int32 SWP_FRAMECHANGED = 0x0020;
private const int SW_SHOW = 5;
private const int SW_HIDE = 0;
[DllImport("user32.dll", EntryPoint = "SetWindowLong")]
private static extern int SetWindowLong(HandleRef hWnd, int nIndex, Int32 dwNewLong);
//
// If that doesn't work, the following signature can be used alternatively.
//
[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("user32.dll")]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
static extern int GetWindowLong(HandleRef hWnd, int nIndex);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private void button1_Click(object sender, EventArgs e)
{
var sdf = m_process.MainWindowHandle;
var windowExStyles = GetWindowLong(sdf, GWL_EXSTYLE);
var newWindowExStyles = windowExStyles ^ WS_EX_APPWINDOW;
newWindowExStyles = newWindowExStyles ^ WS_EX_TOOLWINDOW;
ShowWindow(sdf, SW_HIDE);
SetWindowLong(sdf, GWL_EXSTYLE, newWindowExStyles);
ShowWindow(sdf, SW_SHOW);
}
}