コード例 #1
0
        private static void SetText(string text, IntPtr hWnd, TextReplaceMethod replaceMethod) //Вставить текст
        {
            switch (replaceMethod)
            {
            case TextReplaceMethod.TextBox:
            case TextReplaceMethod.RichTextBox:
                WinApi.SendMessage(hWnd, WinApi.EM_REPLACESEL, (IntPtr)1, text);
                break;

            case TextReplaceMethod.Scintilla:
                WinApi.SendMessage(hWnd, WinApi.SCI_REPLACESEL, IntPtr.Zero, text);     //Не работает
                break;

            case TextReplaceMethod.OtherTextControl:
                Clipboard.SetText(text);
                WinApi.SendMessage(hWnd, WinApi.WM_PASTE, IntPtr.Zero, IntPtr.Zero);
                break;

            case TextReplaceMethod.Devenv:
            case TextReplaceMethod.Unknown:
                Clipboard.SetText(text);
                PressHotKey(new Keys[] { Keys.ControlKey, Keys.V });
                break;
            }
        }
コード例 #2
0
        public static bool SwitchText(IntPtr hWnd, Language layout, TextReplaceMethod rm)
        {
            bool   success = false;
            string text;
            IDictionary <string, object> backup = null;

            if ((rm & TextReplaceMethod.UseClipboard) != 0)
            {
                backup = GetClipboardData();
                var oldId = WinApi.GetClipboardSequenceNumber();
                text = GetText(hWnd, rm);
                var newId = WinApi.GetClipboardSequenceNumber();
                if (oldId == newId)
                {
                    return(success);
                }
            }
            else
            {
                text = GetText(hWnd, rm);
            }
            if (!(string.IsNullOrWhiteSpace(text) || rm == TextReplaceMethod.Devenv && DevenvFix(text)))
            {
                var convText = ConvertText(text, layout);
                SetText(convText, hWnd, rm);
                success = true;
            }
            if ((rm & TextReplaceMethod.UseClipboard) != 0)
            {
                SetClipboardData(backup);
            }
            return(success);
        }
コード例 #3
0
        private static string GetText(IntPtr hWnd, TextReplaceMethod replaceMethod) //Взять текст
        {
            string selectedText = "";

            switch (replaceMethod)
            {
            case TextReplaceMethod.TextBox:
            {
                int start = -1, next = -1;
                WinApi.SendMessage(hWnd, WinApi.EM_GETSEL, out start, out next);
                if (start != next)
                {
                    // Возвращаемое значение длина текста в символах, не включая завершающий нулевой символ.
                    int           len     = (int)WinApi.SendMessage(hWnd, WinApi.WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero);
                    StringBuilder sb      = new StringBuilder(len + 1);
                    int           lenRead = (int)WinApi.SendMessage(hWnd, WinApi.WM_GETTEXT, (IntPtr)sb.Capacity, sb);
                    if (lenRead > 0)
                    {
                        selectedText = sb.ToString().Substring(start, next - start);
                    }
                }
            }
            break;

            case TextReplaceMethod.RichTextBox:
            {
                int start = -1, next = -1;
                WinApi.SendMessage(hWnd, WinApi.EM_GETSEL, out start, out next);
                if (start != next)
                {
                    int           len     = next - start;
                    StringBuilder sb      = new StringBuilder(len + 1);
                    int           lenRead = (int)WinApi.SendMessage(hWnd, WinApi.EM_GETSELTEXT, IntPtr.Zero, sb);
                    if (lenRead > 0)
                    {
                        selectedText = sb.ToString();
                    }
                }
            }
            break;

            case TextReplaceMethod.Scintilla:
            {
                int len = (int)WinApi.SendMessage(hWnd, WinApi.SCI_GETSELTEXT, IntPtr.Zero, IntPtr.Zero);
                if (len > 1)
                {
                    StringBuilder sb = new StringBuilder(len);
                    WinApi.SendMessage(hWnd, WinApi.SCI_GETSELTEXT, IntPtr.Zero, sb);         //Не работает
                    selectedText = sb.ToString();
                }
            }
            break;

            case TextReplaceMethod.OtherTextControl:
                WinApi.SendMessage(hWnd, WinApi.WM_COPY, IntPtr.Zero, IntPtr.Zero);
                selectedText = Clipboard.GetText();
                break;

            case TextReplaceMethod.Devenv:
            case TextReplaceMethod.Unknown:
                PressHotKey(new Keys[] { Keys.ControlKey, Keys.C });
                selectedText = Clipboard.GetText();
                break;
            }
            return(selectedText);
        }