WPF c# копирование и вставка в буфер обмена - PullRequest
0 голосов
/ 20 марта 2020

Я хочу создать программу WPF, которая конвертирует единицы (числа из других приложений). Я сделал так, что моя программа может работать в системном трее, и я также могу установить глобальную горячую клавишу. Но я впервые делаю программу WPF, поэтому у меня возникли некоторые проблемы.

Эта функция вызывается, когда пользователь нажимает глобальную горячую клавишу. Для расчета мне нужно скопировать / вставить выделенный текст из другого приложения. Буду признателен, если вы мне поможете. (Код может быть немного запутанным)

  • Мой пользователь хочет автоматически преобразовать выбранный текст.
  • Он сейчас использует мое приложение следующим образом: 1. Выберите текст 2. Нажмите Ctrl + C 3. Нажмите Ctrl + D (глобальная горячая клавиша) 4. Нажмите Ctrl + V.
  • Что ему нужно: 1. Выберите текст 2. Нажмите Ctrl + D (глобальная горячая клавиша), и это сделано.

    void ClipboardCalc()
    {
        string resultStr = string.Empty;
        string temp = string.Empty;
        string digit = string.Empty;
        double result = 0;
        temp = Clipboard.GetText();
    
        // Need to copy "selected text from other application" to clipboard here.
    
        resultStr = Clipboard.GetText();
        resultStr = string.Join(string.Empty, Regex.Match(resultStr, @"\d+(\.\d+)?"));
        try
        {
            result = Convert.ToDouble(resultStr);
        } 
        catch (Exception ee)
        {
        }
        if (reverse_mode == false)
            result *= 3.30579;
        else
            result /= 3.30579;
        digit = "F" + textBox2.Text;
    
        if (result == (int)result)
            resultStr = result.ToString();
        else
            resultStr = result.ToString(digit);
        resultStr = string.Format("{0:0.##########}", Convert.ToDouble(resultStr));
    
        if (print_measure != false)
        {
            if (reverse_mode != false)
                resultStr += "평";
            else
                resultStr += "m²";
        }
        Clipboard.SetText(resultStr);
    
        // Then paste clipboard text here.
    
        //Clipboard.SetText(temp);
    }
    

1 Ответ

0 голосов
/ 27 марта 2020

Это ответ типа bodge, но кажется, что это программа типа bodge, поэтому я все равно ее опубликую.

Если вам удалось настроить «глобальную горячую клавишу» , тогда я предполагаю, что вы уже попали на территорию p / invoke. Так что я мог бы также представить вам SendInput . Этот собственный метод позволяет приложению «синтезировать нажатия клавиш, движения мыши и нажатия кнопок в текущем активном окне». Вы можете использовать его, чтобы послать Ctrl + C в активное окно.

Опять-таки, решение с множеством предположений, но оно, вероятно, будет работать в большинстве случаев.

Обратите внимание, что вы Придется отправлять клавишу «вниз» и вводить клавиши «вверх» индивидуально (т. е. «Ctrl down», «C down», «C up», «Ctrl up», в этом порядке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...