2015-07-07 2 views
-3

Я хочу захватить изменения буфера обмена в win-forms. Только Capture Hyper-Links для моей программы.Как отслеживать изменения буфера обмена в C# только для Capture Гиперссылки

Я создаю диспетчер загрузки. поэтому я должен реализовать эту функцию в этом.
(Когда я когда-либо копирую любую гиперссылку в буфер обмена, My Down-loader показывает мне новый диалог загрузки, содержащий эту ссылку).

+0

Да ну, мы не будем делать вашу работу за вас. Это очень ленивый вопрос. –

+0

Мы не являемся службами написания кода. Пожалуйста, покажите нам, что вы написали, и мы можем помочь с этим. – Enigmativity

+0

Я пробовал Codeplex для этого и немного google об этом ... –

ответ

0

Вот URL проверки связаны Ashutosh Пандей подключен к моей существующей реализации ClipBoard цепи API:

public partial class Form1 : Form 
{ 

    private ClipBoardMonitor cbm = null; 

    public Form1() 
    { 
     InitializeComponent(); 
     cbm = new ClipBoardMonitor(); 
     cbm.NewUrl += cbm_NewUrl; 
    } 

    private void cbm_NewUrl(string txt) 
    { 
     this.label1.Text = txt; 
    } 

} 

public class ClipBoardMonitor : NativeWindow 
{ 

    private const int WM_DESTROY = 0x2; 
    private const int WM_DRAWCLIPBOARD = 0x308; 
    private const int WM_CHANGECBCHAIN = 0x30d; 

    [DllImport("user32.dll")] 
    private static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer); 
    [DllImport("user32.dll")] 
    private static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); 
    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

    public event NewUrlHandler NewUrl; 
    public delegate void NewUrlHandler(string txt); 

    private IntPtr NextClipBoardViewerHandle; 

    public ClipBoardMonitor() 
    { 
     this.CreateHandle(new CreateParams()); 
     this.NextClipBoardViewerHandle = SetClipboardViewer(this.Handle); 
    } 

    protected override void WndProc(ref Message m) 
    { 
     switch (m.Msg) 
     { 
      case WM_DRAWCLIPBOARD: 
       if (Clipboard.ContainsText()) 
       { 
        string txt = Clipboard.GetText(); 
        if (this.NewUrl != null && this.IsValidUrl(txt)) 
        { 
         this.NewUrl(txt); 
        } 
       } 
       SendMessage(this.NextClipBoardViewerHandle, m.Msg, m.WParam, m.LParam); 

       break; 

      case WM_CHANGECBCHAIN: 
       if (m.WParam.Equals(this.NextClipBoardViewerHandle)) 
       { 
        this.NextClipBoardViewerHandle = m.LParam; 
       } 
       else if (!this.NextClipBoardViewerHandle.Equals(IntPtr.Zero)) 
       { 
        SendMessage(this.NextClipBoardViewerHandle, m.Msg, m.WParam, m.LParam); 
       } 
       break; 

      case WM_DESTROY: 
       ChangeClipboardChain(this.Handle, this.NextClipBoardViewerHandle); 
       break; 

     } 

     base.WndProc(ref m); 
    } 

    private bool IsValidUrl(string txt) 
    { 
     Uri uriResult; 
     return Uri.TryCreate(txt, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps); 
    } 

} 
+0

Спасибо @Idle_Mind –

+0

спасибо, он работает как шарм .. –

0

Для чтения данных из буфера обмена следующим образом:

https://msdn.microsoft.com/en-us/library/kz40084e(v=vs.110).aspx

или

https://msdn.microsoft.com/en-us/library/c2thcsx4(v=vs.110).aspx

Чтобы проверить, если строка является действительным Url следующим образом: How to check whether a string is a valid HTTP URL?

Для мониторинга буфера обмена для любые изменения считаются: Clipboard event C#

Теперь вы можете написать свой код в соответствии с вашими потребностями.

+0

Спасибо за ваше усилие @Ashutosh –

Смежные вопросы