lostyazilim
tr.link

Kopyalama uygulamasi

5 Mesajlar 918 Okunma
lstbozum
tr.link

SonKararimPhp SonKararimPhp WM Aracı Kullanıcı
  • Ü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 ?
 

 

wmaraci
reklam

Blacksheep Blacksheep .NET Developer Kullanıcı
  • Ü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

SonKararimPhp SonKararimPhp WM Aracı Kullanıcı
  • Ü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
 

 

Blacksheep Blacksheep .NET Developer Kullanıcı
  • Ü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
wmaraci
wmaraci

SefaCanDemir SefaCanDemir Front-End Developer Kullanıcı
  • Ü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
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al