0

我有两个 Winform 应用程序,当我尝试从该应用程序中复制粘贴文本时,ProcessCmdKey如果我进行了检查,它未粘贴..

但是当我尝试将我的文本粘贴到记事本中时,它会被粘贴......我只想在同一个应用程序中实现文本的复制和粘贴

如果我专注于其他 Windows 窗体文本不必粘贴...有什么办法..

   private const Keys CopyKeys = Keys.Control | Keys.C;
    private const Keys PasteKeys = Keys.Control | Keys.V;

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {

        bool bVal = false;
        Process[] p2 = Process.GetProcesses();
        foreach (Process pro in p2)
        {
            if (string.Compare(pro.ProcessName, "TestForm.vshost", true) == 0 && (keyData == CopyKeys) || (keyData == PasteKeys))
            {
                bVal = true;  // Text will be pasted 
                return true;
            }
            else
                return base.ProcessCmdKey(ref msg, keyData); // Text will not be pasted
        }
        return bVal;
    }

这可以正常工作。当我尝试为记事本写字板实现相同的功能时。它被粘贴了。

4

2 回答 2

2

如果您确实想确保其他应用程序无法获取剪贴板中的数据,则需要使用自定义格式并自己将数据放入剪贴板中。

这只是一个示例。您需要做更多工作才能获得有效的解决方案,因为您需要自己拦截 Ctrl+C 并将数据放入剪贴板,而不是使用(根据定义)可用于每个应用程序的预定义数据格式

public void cmdTest_Click(object sender, EventArgs e)
{
    Clipboard.SetData("MyCustomFormat", new MyData("This text should not be pasted"));
    if(Clipboard.ContainsData("MyCustomFormat"))
    {
        MyData result = Clipboard.GetData("MyCustomFormat") as MyData;
        MessageBox.Show(result.MyValue);
    }   
}

[Serializable]
class MyData
{
    string _internalValue;
    public MyData(string newValue)
    { _internalValue = newValue;}
    public string MyValue
    {
        get{return _internalValue;}
    }
}

如果您遵循此方法,其他应用程序将无法使用您的自定义格式(当然,如果安全是一个真正的问题,则需要进行更多调整)

于 2013-01-10T12:03:32.847 回答
0

当您的应用程序最小化或失去焦点时,您可以清除剪贴板文本。

于 2013-01-10T11:46:21.613 回答