Schowek systemowy - obsługa i monitorowanie

0

Witam. Z tego, co obecnie znalazłem, nic nie rozumiem. A znalazłem to: http://www.radsoftware.com.au/articles/clipboardmonitor.aspx. Nigdy nie bawiłem się w obsługę WinAPI i dodawanie bibliotek. Potrzebuję po prostu:

  • czekać aż użytkownik skopiuje treść do schowka(selekcję treści już sam załatwię, aby tylko przechwycić),
  • zapisać przechwyconą treść do zmiennej,
  • i wywołać pewną metodę.

Proszę albo o kod, albo o bardzo konkretne wskazówki, bo tak jak mówiłem, nie bawiłem się jeszcze w WinAPI.

Jeśli będzie to strasznie trudne, to myślałem, aby użyć Timera i co 0,5-1 sekundę szukać w schowku. Ale to może być zbyt mało wydajne...

1

Nigdy nie bawiłem się w obsługę WinAPI i dodawanie bibliotek.

A pisałeś w C/C++ kiedyś? To by wiele ułatwiło...

Z tego, co obecnie znalazłem, nic nie rozumiem.

To jest świetne :]

W sumie zresztą nie wiem jakiej pomocy szukasz bo na stronie którą podałeś wszystko jest łopatologicznie wyjaśnione. Nie robisz kogoś przypadkiem na jelenia?

Tak czy inaczej, ech, zrobiłem to więc masz - najprostszy możliwy przykład:

     [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);

        public Form1()
        {
            InitializeComponent();

            SetClipboardViewer(this.Handle);
        }

        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0308:
                // ... process Clipboard 
                    MessageBox.Show("ktoś zmienił mi tekst");
                    break;

                default:
                    // unhandled window message
                    base.WndProc(ref m);
                    break;
            }
        }
0

A pisałeś w C/C++ kiedyś? To by wiele ułatwiło...

Właśnie nie, C# to mój początek. Nie piszę jakichś ultra-skomplikowanych aplikacji, po prostu 11 form, ok. 3000 linii kodu w tym ok. 500 komentarza. Ogólnie nie korzystam z "głębin" C#, tylko z tych prostszych no i może średnich metod.

W sumie zresztą nie wiem jakiej pomocy szukasz bo na stronie którą podałeś wszystko jest łopatologicznie wyjaśnione.

Próbowałem, ale już na samym początku zniechęcił mnie "DllImport" i prawie całość z pierwszego kroku na czerwono. Dopiero teraz znalazłem odpowiednią "using". W każdym razie dziękuję za pomoc.

EDIT. Nie działa. Twój kod nie reaguje, kopiuję do schowka co chcę i program nie wyświetla MessageBoxa. A gdy przystosuję Twój kod pod mój(czyli zamienię MB na moją metodę) to program się wykłada na Win32Exception. Z tego co podpatrzyłem zapętla się, cały czas wykonuje się WndProc a potem default.

EDIT2. Już doszedłem. Ominąłem jedną linię.

0

@msm a znasz może sposób na odbiór wiadomości WM_DRAWCLIPBOARD w aplikacji konsolowej ? Wszystkie znalezione przeze mnie materiały w Internecie opierają się na nadpisaniu właśnie funkcji WndProc(), tylko z poziomu aplikacji konsolowej jest to nie możliwe, racja ? Ma ktoś jakiś pomysł ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1