【问题标题】:WPF c# copy and paste to clipboardWPF c#复制并粘贴到剪贴板
【发布时间】:2020-03-19 22:17:41
【问题描述】:

我想制作一个转换单位(来自其他应用程序的数字)的 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);
    }
    

【问题讨论】:

  • @PrateekShrivastava 我已经在上面的代码中使用了 Clipboard.SetText()。重点是从其他应用程序复制文本。
  • "...关键是从其他应用程序复制文本..." - 一个应用程序导致另一个应用程序突然发送内容到剪贴板。数据敏感性和所有这些
  • @soyoon3292 - 如果没有其他应用程序支持该功能,您无法从其他应用程序复制文本。就像我写了一个应用程序并说我想复制出现在 soyoon3292 应用程序中的东西。如果您不在应用中打开该功能,我的代码将无处可去。
  • @PrateekShrivastava 没有办法命令 ctrl+c 和 ctrl+v?

标签: c# wpf windows


【解决方案1】:

这是一个bodge类型的答案,但它似乎是一个bodge类型的程序,所以我还是把它放在那里。

如果您已经成功设置了“全局热键”,那么我假设您已经进入了 p/invoke 领域。所以我不妨给你介绍一下SendInput。这种本机方法允许应用程序“将击键、鼠标移动和按钮单击合成到当前活动窗口”。您可以使用它来将 Ctrl+C 发送到活动窗口。

同样,这是一个有很多假设的可靠解决方案,但它可能在大多数情况下都有效。

请注意,您必须分别发送按键输入和按键输入(即“Ctrl down”、“C down”、“C up”、“Ctrl up”,按此顺序)。

【讨论】:

  • 由于没有人回答我的问题,我使用 System.Windows.Forms.SendKeys.SendWait("^{c}") 和 ("^{v}") 自行解决。我也尝试过将 Send/PostMessage() 与 WM_KEYDOWN/KEYUP 一起使用。我自己通过阅读 MSDN 学到了很多东西。谢谢你的回答:D
猜你喜欢
  • 2017-10-14
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 2021-07-09
相关资源
最近更新 更多