Console app clipboard монитор - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет, нужна помощь. Не могу разобраться. Делаю консольное приложение, должно мониторить в фоне изменение буфера. Делал по https://gist.github.com/glombard/7986317. Всё ок, инициализируется, но при копировании ничего не проиходит. Есть идеи, что происходит? Аналогично, что и здесь Постоянная работа метода Пулял и в мейне и в отдельном потоке (SetApartmentState(ApartmentState.STA) - это не забывал). Или инициализация не та? Или обработка? Идеи?
Thread staThread = new Thread(x =>
{
      ClipboardNotification d = new ClipboardNotification();
});
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start();
staThread.Join();
 
Console.ReadLine();

Решение задачи: «Console app clipboard монитор»

textual
Листинг программы
    
 
            Thread staThread = new Thread(x =>
            {
                ClipboardNotification.ClipboardUpdate += ClipboardNotification_ClipboardUpdate;
                ClipboardNotification.Listen();
            });
            staThread.SetApartmentState(ApartmentState.STA);
            staThread.Start();
 
 
    private static void ClipboardNotification_ClipboardUpdate(object sender, EventArgs e)
    {
         Console.WriteLine("Clipboard update");
    }
 
    public sealed class ClipboardNotification
    {
        /// <summary>
        /// Occurs when the contents of the clipboard is updated.
        /// </summary>
        public static event EventHandler ClipboardUpdate;
 
        private static NotificationForm _form = new NotificationForm();
 
        public static void Listen()
        {
            Application.Run();
        }
 
        /// <summary>
        /// Raises the <see cref="ClipboardUpdate"/> event.
        /// </summary>
        /// <param name="e">Event arguments for the event.</param>
        private static void OnClipboardUpdate(EventArgs e)
        {
            var handler = ClipboardUpdate;
            if (handler != null)
            {
                handler(null, e);
            }
        }
 
        /// <summary>
        /// Hidden form to recieve the WM_CLIPBOARDUPDATE message.
        /// </summary>
        private class NotificationForm : Form
        {
            public NotificationForm()
            {
                NativeMethods.SetParent(Handle, NativeMethods.HWND_MESSAGE);
                NativeMethods.AddClipboardFormatListener(Handle);
            }
 
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == NativeMethods.WM_CLIPBOARDUPDATE)
                {
                    OnClipboardUpdate(null);
                }
                base.WndProc(ref m);
            }
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы