我有两个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;
}
这可以正常工作。当我 - 我试图实现相同的记事本wordpad相同。它被粘贴了。
答案 0 :(得分: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;}
}
}
如果您遵循此方法,其他应用程序将无法使用您的自定义格式(当然,如果安全性是一个真正的问题,则需要进行更多调整)
答案 1 :(得分:0)
当应用程序最小化或失去焦点时,您可以清除剪贴板文本。