System.Windows.Forms.Clipboard.SetText("yazı");

Bu şekilde clipboarda veri atabilirsiniz. Ama sanırım sizin istediğiniz farklı bir şey.

Dolayısıyla:

string[] copies = new String[11];


şeklinde 11 verilik (istediğiniz sayıda) bir array oluşturun.

Daha sonra anasınıfınızın içerisine şunları tanımlayın:


[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);


Ve bu fonkisyonu ekleyin:



enum KeyModifier
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
WinKey = 8
}



Class içerisinde formuzun adında bir fonksiyon olacak içerisin de InitializeComponent(); fonksiyonunun bulunduğu başlangıç fonksiyonu bunun içerisine aşağıdakileri ekleyin:



int y1_id = 0; // y + 1 tuşumuzun id değeri.
int y2_id = 1; // y + 1 tuşumuzun id değeri.

RegisterHotKey(this.Handle, id, Keys.Y.GetHashCode(), Keys.1.GetHashCode()); // y + 1 kısayolumuzun kaydı.

RegisterHotKey(this.Handle, id, Keys.Y.GetHashCode(), Keys.2.GetHashCode()); // y + 2 kısayolumuzun kaydı.



Ve şu fonksiyonu her hangi bir yere ekleyiniz:



protected override void WndProc(ref Message m)
{
base.WndProc(ref m);

if (m.Msg == 0x0312)
{
Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
KeyModifier modifier = (KeyModifier)((int)m.LParam & 0xFFFF);
int hotkey = m.WParam.ToInt32();

if (hotkey == y1_id){

// Kısayol y + 1 ise seçilen metni kopyalıyoruz.
copies[0] = GetSelectedText();
}
else if (hotkey == y2_id{

/* Kısayol y + 2 ise değişkendeki veriyi clipboarda yapıştırıp sisteme CTRL+V kombinasyonunu yollyuoruz. Yani değişkendeki veriyi yapıştırıyor. */

Clipboard.SetText(copies[0]);
SendKeys.Send("^{v}");
}

}
}



Ve form dışında seçilen metni alacağımız fonksiyonu ve referansları ekliyoruz:



[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("kernel32.dll")]
static extern uint GetCurrentThreadId();
[DllImport("user32.dll")]
static extern bool AttachThreadInput(uint idAttach, uint idAttachTo,bool fAttach);
[DllImport("user32.dll")]
static extern IntPtr GetFocus();
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam);
// second overload of SendMessage
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, uint Msg, out int wParam, out int lParam);

const uint WM_GETTEXT = 0x0D;
const uint WM_GETTEXTLENGTH = 0x0E;
const uint EM_GETSEL = 0xB0;

function string GetSelectedText()

{

IntPtr hWnd = GetForegroundWindow();

uint processId;

uint activeThreadId = GetWindowThreadProcessId(hWnd, out processId);
uint currentThreadId = GetCurrentThreadId();
AttachThreadInput(activeThreadId, currentThreadId, true);
IntPtr focusedHandle = GetFocus();
AttachThreadInput(activeThreadId, currentThreadId, true);
StringBuilder sb1 = new StringBuilder();
int len = SendMessage(focusedHandle, WM_GETTEXTLENGTH, 0,sb1);

StringBuilder sb = new StringBuilder(len);
int numChars = SendMessage(focusedHandle, WM_GETTEXT, len + 1, sb);
int start, next;
SendMessage(focusedHandle, EM_GETSEL, out start, out next);
string selectedText = "";
if (sb.ToString() != "")
selectedText = sb.ToString().Substring(start, next - start);

return selectedText;

}




Son olarak formun kapandığında kaydedilen kısayolları kaldırıyoruz (Formun Closing Eventına yazınız):



UnregisterHotKey(this.Handle, 0);






Biraz hiyerarşi bakımından karışık oldu kodlar düzenleyemedim. Fakat bu şekilde istediğinizi yapabilirsiniz.


Her hangi bir sıkıntı yaşarsanız yardımcı olurum.