2013-01-10 31 views
0

我有兩個Winform的應用程序,當我嘗試複製從ProcessCmdKey作品粘貼文本正確,如果我做了一個檢查其不粘貼..如何禁用在C#中的WinForms

但是,當我嘗試粘貼複製粘貼選項我的文本在記事本中被粘貼...我只是想在相同的應用程序中實現文本的COPY和粘貼

如果我專注於其他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; 
    } 

這工作正常。當我嘗試實現相同記事本的同時寫字板。它被粘貼。

回答

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;} 
    } 
} 

的如果你遵循這種方法,其他應用程序不能使用你的自定義格式(當然,如果安全性是真正的擔憂,將需要更多的調整)