-
Üyelik
20.03.2017
-
Yaş/Cinsiyet
32 / E
-
Meslek
Ögrencisi
-
Konum
Afyon
-
Ad Soyad
K** Y**
-
Mesajlar
68
-
Beğeniler
26 / 3
-
Ticaret
0, (%0)
Bir metinden istediğim alanları seçip sırası hafızaya alıp sonra onları istediğim yere yapıştırmak istiyorum, mesela "bugün hava çok güzel" cümlesinde "bugün" kelimesini seçip klavyeden c+1 ve "güzel" kelimesini seçip c+2 yaparak kopyalayın istediğim tabloya gidip gerekli sütuna y+1 yaparak c+1 hafızasına aldığım veriyi y+2 yaparak c+2 hafızasına aldığım veriyi yapıştırmak istiuirum.
Sizce nasıl bir yol izlemeliyim ?
-
Üyelik
20.07.2014
-
Yaş/Cinsiyet
28 / E
-
Meslek
Webmaster
-
Konum
Ankara
-
Ad Soyad
M** K**
-
Mesajlar
2074
-
Beğeniler
60 / 532
-
Ticaret
10, (%100)
Kopyalanacak kelimeler için dinamik olarak değişken oluşturabilir veya sırasıyla kopyalananları biz dizi içerisine aktarabilirsiniz. c+1 veya c+2 de bulunan 1 ve 2 gibi tanımlayıcılara göre dizi içerisinden gerekli index numarasına göre kopyalamış olduğun veriyi çekebilirsin.Birçok farklı şekilde yapabilirsin
Fizello - Inspired by Colors
-
Üyelik
20.03.2017
-
Yaş/Cinsiyet
32 / E
-
Meslek
Ögrencisi
-
Konum
Afyon
-
Ad Soyad
K** Y**
-
Mesajlar
68
-
Beğeniler
26 / 3
-
Ticaret
0, (%0)
Bunları bir web sayfasından sırası ile kopyalayıp baska bir sayfadaki tabloya yapıştırmam gerekiyor. Aynı uygulama için kullanmayacağım yani verileri
-
Üyelik
20.07.2014
-
Yaş/Cinsiyet
28 / E
-
Meslek
Webmaster
-
Konum
Ankara
-
Ad Soyad
M** K**
-
Mesajlar
2074
-
Beğeniler
60 / 532
-
Ticaret
10, (%100)
Tamam kopyalacağın verleri alır diziye atarsın daha sonra diziyi querystring olarak diğer sayfaya gönderir diğer sayfada üzerinde işlem yapıp tabloya atarsın
Fizello - Inspired by Colors
-
Üyelik
10.11.2013
-
Yaş/Cinsiyet
27 / E
-
Meslek
Front-End Developer
-
Konum
Adana
-
Ad Soyad
S** D**
-
Mesajlar
1345
-
Beğeniler
234 / 472
-
Ticaret
12, (%100)
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.
sefacandemir.com.tr