mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:33:10 +00:00
[KERNEL32], [WIN32CSR] Implement the CREATE_NO_WINDOW flag which creates a console with an invisible window.
svn path=/trunk/; revision=47326
This commit is contained in:
parent
38734242d5
commit
44ce7e4f55
6 changed files with 16 additions and 9 deletions
|
@ -1692,6 +1692,7 @@ AllocConsole(VOID)
|
||||||
|
|
||||||
Request.Data.AllocConsoleRequest.CtrlDispatcher = ConsoleControlDispatcher;
|
Request.Data.AllocConsoleRequest.CtrlDispatcher = ConsoleControlDispatcher;
|
||||||
Request.Data.AllocConsoleRequest.ConsoleNeeded = TRUE;
|
Request.Data.AllocConsoleRequest.ConsoleNeeded = TRUE;
|
||||||
|
Request.Data.AllocConsoleRequest.Visible = TRUE;
|
||||||
|
|
||||||
CsrRequest = MAKE_CSR_API(ALLOC_CONSOLE, CSR_CONSOLE);
|
CsrRequest = MAKE_CSR_API(ALLOC_CONSOLE, CSR_CONSOLE);
|
||||||
|
|
||||||
|
|
|
@ -150,6 +150,7 @@ BasepInitConsole(VOID)
|
||||||
{
|
{
|
||||||
/* Assume one is needed */
|
/* Assume one is needed */
|
||||||
Request.Data.AllocConsoleRequest.ConsoleNeeded = TRUE;
|
Request.Data.AllocConsoleRequest.ConsoleNeeded = TRUE;
|
||||||
|
Request.Data.AllocConsoleRequest.Visible = TRUE;
|
||||||
|
|
||||||
/* Handle the special flags given to us by BasepInitializeEnvironment */
|
/* Handle the special flags given to us by BasepInitializeEnvironment */
|
||||||
if (Parameters->ConsoleHandle == HANDLE_DETACHED_PROCESS)
|
if (Parameters->ConsoleHandle == HANDLE_DETACHED_PROCESS)
|
||||||
|
@ -168,8 +169,9 @@ BasepInitConsole(VOID)
|
||||||
else if (Parameters->ConsoleHandle == HANDLE_CREATE_NO_WINDOW)
|
else if (Parameters->ConsoleHandle == HANDLE_CREATE_NO_WINDOW)
|
||||||
{
|
{
|
||||||
/* We'll get the real one soon */
|
/* We'll get the real one soon */
|
||||||
DPRINT1("NOT SUPPORTED: HANDLE_CREATE_NO_WINDOW\n");
|
DPRINT("Creating new invisible console\n");
|
||||||
Parameters->ConsoleHandle = NULL;
|
Parameters->ConsoleHandle = NULL;
|
||||||
|
Request.Data.AllocConsoleRequest.Visible = FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -80,7 +80,8 @@ typedef struct
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
PCONTROLDISPATCHER CtrlDispatcher;
|
PCONTROLDISPATCHER CtrlDispatcher;
|
||||||
BOOL ConsoleNeeded;
|
BOOLEAN ConsoleNeeded;
|
||||||
|
BOOLEAN Visible;
|
||||||
HANDLE Console;
|
HANDLE Console;
|
||||||
HANDLE InputHandle;
|
HANDLE InputHandle;
|
||||||
HANDLE OutputHandle;
|
HANDLE OutputHandle;
|
||||||
|
|
|
@ -142,7 +142,7 @@ CsrInitConsoleScreenBuffer(PCSRSS_CONSOLE Console,
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS WINAPI
|
static NTSTATUS WINAPI
|
||||||
CsrInitConsole(PCSRSS_CONSOLE Console)
|
CsrInitConsole(PCSRSS_CONSOLE Console, BOOL Visible)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
SECURITY_ATTRIBUTES SecurityAttributes;
|
SECURITY_ATTRIBUTES SecurityAttributes;
|
||||||
|
@ -210,7 +210,7 @@ CsrInitConsole(PCSRSS_CONSOLE Console)
|
||||||
}
|
}
|
||||||
if (GuiMode)
|
if (GuiMode)
|
||||||
{
|
{
|
||||||
Status = GuiInitConsole(Console);
|
Status = GuiInitConsole(Console, Visible);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
HeapFree(Win32CsrApiHeap,0, NewBuffer);
|
HeapFree(Win32CsrApiHeap,0, NewBuffer);
|
||||||
|
@ -286,7 +286,7 @@ CSR_API(CsrAllocConsole)
|
||||||
/* insert process data required for GUI initialization */
|
/* insert process data required for GUI initialization */
|
||||||
InsertHeadList(&Console->ProcessList, &ProcessData->ProcessEntry);
|
InsertHeadList(&Console->ProcessList, &ProcessData->ProcessEntry);
|
||||||
/* Initialize the Console */
|
/* Initialize the Console */
|
||||||
Status = CsrInitConsole(Console);
|
Status = CsrInitConsole(Console, Request->Data.AllocConsoleRequest.Visible);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Console init failed\n");
|
DPRINT1("Console init failed\n");
|
||||||
|
|
|
@ -2070,7 +2070,10 @@ GuiConsoleNotifyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
if (NULL != NewWindow)
|
if (NULL != NewWindow)
|
||||||
{
|
{
|
||||||
SetWindowLongW(hWnd, GWL_USERDATA, GetWindowLongW(hWnd, GWL_USERDATA) + 1);
|
SetWindowLongW(hWnd, GWL_USERDATA, GetWindowLongW(hWnd, GWL_USERDATA) + 1);
|
||||||
ShowWindow(NewWindow, SW_SHOW);
|
if (wParam)
|
||||||
|
{
|
||||||
|
ShowWindow(NewWindow, SW_SHOW);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return (LRESULT) NewWindow;
|
return (LRESULT) NewWindow;
|
||||||
case PM_DESTROY_CONSOLE:
|
case PM_DESTROY_CONSOLE:
|
||||||
|
@ -2250,7 +2253,7 @@ static CSRSS_CONSOLE_VTBL GuiVtbl =
|
||||||
};
|
};
|
||||||
|
|
||||||
NTSTATUS FASTCALL
|
NTSTATUS FASTCALL
|
||||||
GuiInitConsole(PCSRSS_CONSOLE Console)
|
GuiInitConsole(PCSRSS_CONSOLE Console, BOOL Visible)
|
||||||
{
|
{
|
||||||
HANDLE GraphicsStartupEvent;
|
HANDLE GraphicsStartupEvent;
|
||||||
HANDLE ThreadHandle;
|
HANDLE ThreadHandle;
|
||||||
|
@ -2317,7 +2320,7 @@ GuiInitConsole(PCSRSS_CONSOLE Console)
|
||||||
*/
|
*/
|
||||||
GuiData->hGuiInitEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
|
GuiData->hGuiInitEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||||
/* create console */
|
/* create console */
|
||||||
PostMessageW(NotifyWnd, PM_CREATE_CONSOLE, 0, (LPARAM) Console);
|
PostMessageW(NotifyWnd, PM_CREATE_CONSOLE, Visible, (LPARAM) Console);
|
||||||
|
|
||||||
/* wait untill initialization has finished */
|
/* wait untill initialization has finished */
|
||||||
WaitForSingleObject(GuiData->hGuiInitEvent, INFINITE);
|
WaitForSingleObject(GuiData->hGuiInitEvent, INFINITE);
|
||||||
|
|
|
@ -13,6 +13,6 @@
|
||||||
#define CONGUI_UPDATE_TIME 0
|
#define CONGUI_UPDATE_TIME 0
|
||||||
#define CONGUI_UPDATE_TIMER 1
|
#define CONGUI_UPDATE_TIMER 1
|
||||||
|
|
||||||
NTSTATUS FASTCALL GuiInitConsole(PCSRSS_CONSOLE Console);
|
NTSTATUS FASTCALL GuiInitConsole(PCSRSS_CONSOLE Console, BOOL Visible);
|
||||||
|
|
||||||
/*EOF*/
|
/*EOF*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue