Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

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

[es] :: .NET :: Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim?

[ Pregleda: 3039 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
213.244.197.*

Sajt: www.articles411.com


+8 Profil

icon Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim?05.06.2007. u 21:14 - pre 205 meseci
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
 
Odgovor na temu

Pharos
Pančevo

Član broj: 20664
Poruke: 1029
*.adsl.sezampro.yu.



+2 Profil

icon Re: Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim?06.06.2007. u 09:23 - pre 205 meseci
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.
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.vdial.verat.net.

Sajt: www.articles411.com


+8 Profil

icon Re: Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim?06.06.2007. u 15:14 - pre 205 meseci
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...
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim?06.06.2007. u 15:37 - pre 205 meseci
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++.
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ć
 
Odgovor na temu

[es] :: .NET :: Da li je došlo do promene u sadržaju Clipboarda - kako to da proverim?

[ Pregleda: 3039 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.