Bilgisayarimizi kullanirken yaptigimiz kopyalama islemlerinin degerlerini çekmek istersek eger mesela bir .txt dosyasindan bir kismi secip CTRL-C veya mouse yardimi ile kopyalama islemi yaptigimizda bu deger bilgisayarin hafizasina aliniyor ve sonrasinda yapistir islemi gerçeklestiriyoruz. Tam bu sirada bu degeri yakalamak istersek nasil yakalayabiliriz diye düsünüyordum. Windows API fonksiyonlari ile gerçeklesecegini tahmin ettim ama Windows API;leri kullanimi ile yeterli türkçe kaynak malesef bulunmamakta. Isin aslina bakarsaniz tüm konularda türkçe kaynak bulmasi zor. Türkçe kaynaklarda hep ayni seyler dönüp duruyor. Mesela BackGroundWorker kontrolu kullanimi hakkinda bilgi aratsaniz her blogda veya yazida çogu birbirinden alinma kaynaklarda hep ayni seyleri anlatip durmuslar. Belli bir noktadan sonra türkçe kaynaklar ile ileriye gidemiyorsunuz. Neyse nerde kalmistik, en son mouse ile kopyalanan degeri çekiyorduk. Bununla birlikte birde kopyalama yapildiginda, uyari verdiriyoruz. Bu islemler nerde isimize yarar derseniz eger, isine yariyacak birileri cikar elvet.
Kaynak kodlarimiza bakacak olursak eger;
Public Class Form1
' Mouse;da kopyalanan degerini çekmek için, Windows API fonksiyonunu dahil ediyoruz.
Private Shared Function FindWindowEx(hwndParent As IntPtr, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr
End Function
Dim lhWnd As IntPtr = FindWindowEx(0, IntPtr.Zero, "EDIT", Nothing)
' Programin hangi tuslara basildini anlamasi için Windows API fonksiyonunu dahil ediyoruz.
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Integer) As Short
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Timer kontrolumuzu çalistiriyoruz.
Timer1.Enabled = True
End Sub
Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
' Mouse sag faresine basildiginda ve kopyalama degeri 0 oldugunda degeri çekiyoruz.
If e.Button = Windows.Forms.MouseButtons.Right And lhWnd <> 0 Then
Clipboard.SetText(Clipboard.GetText().Replace(vbCrLf, " "))
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
' Kopyalanan degeri kopya degiskenine atiyoruz.
Dim kopya As String = Clipboard.GetText()
' En son kopyalanan deger ile bir önceki deger ayni degilse
' Textbox kontrolumuze degerimizi yazdiriyoruz.
' Ardindan birden fazla ayni degeri textbox kontrolune yazmamasi için
' Kopya degiskeni sifirliyoruz.
If Label2.Text <> kopya Then
Label2.Text = kopya
TextBox1.Text += " " & "-" & " " & "[" & DateTime.Now.ToString("HH:mm:ss") & "]" & " " & Clipboard.GetText
Label2.Text = kopya
kopya = Nothing
End If
Dim C As Boolean
' Burda ise Klavyede C tusuna basilip basilmadigini kontrol ediyoruz.
C = GetAsyncKeyState(Keys.C)
' CTRL ve C tusuna ayni anda basilmissa eger
' Kopyalama yapildi, uyarisi veriyoruz.
If My.Computer.Keyboard.CtrlKeyDown And C Then
MessageBox.Show("Kopyalama Yapildi !", "Bilgilendirme", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
End If
End Sub
End Class
Seklinde görebilirsiniz. Birazda resimlere bakalim;
Buradada CTRL-C tus kombinasyonunu yakaliyoruz.
Uygulama dosyasini buradan indirebilirsiniz.