Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim?

  • 3 odgovora
  • 4.161 pregleda

Najnovija ↓

Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim? 05.06.2007. u 22:14 · pre 236 meseci #1
Kako da proverim da li je nešto novo smešteno u clipboard? Ja sam probao da napravim f-ju koja će da se poziva svakih par sekundi i onda da u njoj proverim da li je stari objekat tipa DataObject razlicit od novog DataObject-a( ova dobijam preko klase Clipboard, funkcija GetData() ). Za tu proveru sam koristio Equal() funkciju tog objekta ali to poređenje uvek za rezultat daje false, odnosno da su različiti.
I onda ne znam kako da proverim dal' ima nešto novo u Clipboard-u...? Imali li neki event "OnClipboardUpdate" ? ;D
Potpis
Expert Opinions - Niche Articles
Re: Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim? 06.06.2007. u 10:23 · pre 236 meseci #2
Da odgovorim, pa ako nađeš nešto elegantnije, slobodno postuj.

Potrebno je da importuješ sledeće
Code:

using System.Runtime.InteropServices;

Ovo smestiš negde u klasi iznad konstruktora
Code:

[DllImport("User32.dll")]
protected static extern int SetClipboardViewer(int hWndNewViewer);

[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);

IntPtr nextClipboardViewer;


Ovo ubaciš u konstruktor
Code:

Clipboard.Clear();
nextClipboardViewer = (IntPtr)SetClipboardViewer((int)this.Handle);


Potrebno je override-ovati WndProc metodu
Code:

protected override void WndProc(ref System.Windows.Forms.Message m)
{
    // defined in winuser.h
    const int WM_DRAWCLIPBOARD = 0x308;
    const int WM_CHANGECBCHAIN = 0x030D;

    switch (m.Msg)
    {
        case WM_DRAWCLIPBOARD:
            DisplayClipboardData();
            SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam);
            break;

        case WM_CHANGECBCHAIN:
            if (m.WParam == nextClipboardViewer)
                nextClipboardViewer = m.LParam;
            else
                SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam);
            break;

        default:
            base.WndProc(ref m);
            break;
    }
}


I konačno metoda u kojoj radiš nešto kada dođe do promene u clipboard-u
Code:

void DisplayClipboardData()
{
    try
    {
        IDataObject iData = new DataObject();
        iData = Clipboard.GetDataObject();
        if (iData.GetDataPresent(DataFormats.Text))
        {
            // Ovde ide tvoj kod
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.ToString());
    }
}


Kao što vidiš, nema tajmera i ostališ čudesa.
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim? 06.06.2007. u 16:14 · pre 236 meseci #3
Pharos bravo, super, extra! Hvala puno sto si odvojio vremena da mi odgovoriš, eto sad sam pametniji za jednu stvar :) Ću vidim dal ima još neki način za rešavanje ovog problem i ako nađem obavezno ću postavim...

Aj da ne otvaram novu temu za jedno kraće pitanje: Da li se može koristiti( i ako može kako ) atribut DllImport da bi se iz "uvezenog" dll deklarisao neki izvedeni tip podatka. Na primer, napišem neku klasu u C++u, kompajliram je u .dll i sad hoću da napravim instancu( objekat) te klase u C# jeziku. Probao sam ali mi javi grešku u fazonu "može samo funkcija da se deklariše, ne može objekat...". ???

Zanima me i ovo - gde mogu da nađem neku (e)knjigu koja "opisuje" Win32 funkcije? Sad ne znam dal' sam se lepo izrazio...
Potpis
Expert Opinions - Niche Articles
Re: Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim? 06.06.2007. u 16:37 · pre 236 meseci #4
Citat:
toxi_programer:  Na primer, napišem neku klasu u C++u, kompajliram je u .dll i sad hoću da napravim instancu( objekat) te klase u C# jeziku. Probao sam ali mi javi grešku u fazonu "može samo funkcija da se deklariše, ne može objekat...". ???

Zanima me i ovo - gde mogu da nađem neku (e)knjigu koja "opisuje" Win32 funkcije? Sad ne znam dal' sam se lepo izrazio...


Knjiga:
Programming Windows, 5th Edition by Charles Petzold


Sto se tice C++ objekata, ne mozes ih koristiti direktno, jedino da ih wrappujes u managed extensions for C++.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme