" Umut, hiç görmeyen birine gökkuşağını anlatmak kadar zor ve imkansız... "

Categories

-

Mouse ve ctrl-c ile kopyalanan degeri vb.net'le çekme

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.

  • 0
  • 2947
  • 0

- BUNLARIDA GÖZDEN GEÇİREBİLİRSİNİZ -

HENÜZ YORUM YAPILMAMIŞ !

Yorum yazın

HAKKIMDA

KONULARI TAKİP EDİN

SOSYAL AĞLAR

  • Mesajınızı Gonderin