public static extern HRESULT CreateTerminal()

in sources/Google.Solutions.Terminal/Controls/VirtualTerminal.NativeMethods.cs [145:295]


            public static extern HRESULT CreateTerminal(
                IntPtr parent,
                out IntPtr hwnd,
                out TerminalSafeHandle terminal);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void DestroyTerminal(IntPtr terminal);

            //---------------------------------------------------------------------
            // I/O.
            //---------------------------------------------------------------------

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalSendOutput(
                TerminalSafeHandle terminal,
                string lpdata);


            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalRegisterWriteCallback(
                TerminalSafeHandle terminal,
                [MarshalAs(UnmanagedType.FunctionPtr)] WriteCallback callback);


            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalSendKeyEvent(
                TerminalSafeHandle terminal,
                ushort vkey,
                ushort scanCode,
                ushort flags,
                bool keyDown);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalSendCharEvent(
                TerminalSafeHandle terminal,
                char ch,
                ushort scanCode,
                ushort flags);

            //---------------------------------------------------------------------
            // Resizing.
            //---------------------------------------------------------------------

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern HRESULT TerminalTriggerResize(
                TerminalSafeHandle terminal,
                int width,
                int height,
                out TilSize dimensions);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern HRESULT TerminalTriggerResizeWithDimension(
                TerminalSafeHandle terminal,
                TilSize dimensions,
                out TilSize dimensionsInPixels);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern HRESULT TerminalCalculateResize(
                TerminalSafeHandle terminal,
                int width,
                int height,
                out TilSize dimensions);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalDpiChanged(
                TerminalSafeHandle terminal,
                int newDpi);

            //---------------------------------------------------------------------
            // Scrolling.
            //---------------------------------------------------------------------

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalRegisterScrollCallback(
                TerminalSafeHandle terminal,
                [MarshalAs(UnmanagedType.FunctionPtr)] ScrollCallback callback);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalUserScroll(
                TerminalSafeHandle terminal,
                int viewTop);

            //---------------------------------------------------------------------
            // Selection.
            //---------------------------------------------------------------------

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalClearSelection(
                TerminalSafeHandle terminal);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            [return: MarshalAs(UnmanagedType.LPWStr)]
            public static extern string TerminalGetSelection(
                TerminalSafeHandle terminal);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            [return: MarshalAs(UnmanagedType.I1)]
            public static extern bool TerminalIsSelectionActive(
                TerminalSafeHandle terminal);

            //---------------------------------------------------------------------
            // Appearance.
            //---------------------------------------------------------------------

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalSetTheme(
                TerminalSafeHandle terminal,
                [MarshalAs(UnmanagedType.Struct)] TerminalTheme theme,
                string fontFamily,
                short fontSize,
                int newDpi);

            [DllImport(TerminalCore, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalBlinkCursor(
                TerminalSafeHandle terminal);

            [DllImport(TerminalCore, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalSetCursorVisible(
                TerminalSafeHandle terminal, bool visible);

            //---------------------------------------------------------------------
            // Focus.
            //---------------------------------------------------------------------

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalSetFocus(
                TerminalSafeHandle terminal);

            [DllImport(TerminalCore, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
            public static extern void TerminalKillFocus(
                TerminalSafeHandle terminal);

            [DllImport(User32, SetLastError = true)]
            public static extern IntPtr SetFocus(IntPtr hWnd);

            [DllImport(User32, SetLastError = true)]
            public static extern IntPtr GetFocus();

            [DllImport(User32, SetLastError = true)]
            public static extern short GetKeyState(int keyCode);

            [DllImport(User32, SetLastError = true)]
            public static extern uint GetCaretBlinkTime();
        }

        //---------------------------------------------------------------------
        // SafeHandles.
        //---------------------------------------------------------------------

        internal class TerminalSafeHandle : SafeHandleZeroOrMinusOneIsInvalid
        {