Shoutbox

scripts and the clipboard - Printable Version

-Shoutbox (https://shoutbox.menthix.net)
+-- Forum: MsgHelp Archive (/forumdisplay.php?fid=58)
+--- Forum: Messenger Plus! for Live Messenger (/forumdisplay.php?fid=4)
+---- Forum: Scripting (/forumdisplay.php?fid=39)
+----- Thread: scripts and the clipboard (/showthread.php?tid=63021)

scripts and the clipboard by andrey on 07-11-2006 at 05:29 AM

First, I'd like to say
HI!!
I'm back...kinda :banana:

I'm a noob when it comes to programming and thought that I'll try something easy for a start, but I already noticed that it isn't easy at all...

The (simple) idea was, that when I type a command like "/isi" (stands for Internal Sound Identifier) in the conversation window, to get the Internal Sound Identifier from the clipboard (if it's present) and send the sound to the contact (maybe by sending the ISI prefixed with "/sound ", or is there an easier way?).


well, here's the code I've got so far, for getting the ISI from the clipboard:
(may or may not be complete bs)

code:
    if (Interop.Call("User32", "OpenClipboard", 0))
    {
        if (Interop.Call("User32", "IsClipboardFormatAvailable", "CF_TEXT" || "CF_OEMTEXT"))
        {
            var hClipboardData = Interop.Call("User32", "GetClipboardData", "CF_TEXT");
            var pchData = Interop.Call("Kernel32", "GlobalLock", hClipboardData);
            var strFromClipboard = pchData;
            Debug.Trace(strFromClipboard);
            Interop.Call("Kernel32", "GlobalUnlock", hClipboardData);
        }
    else
    {
        Debug.Trace("There is no text data on the Clipboard.");
    }
    Interop.Call("User32", "CloseClipboard");   
    }

The part with IsClipboardFormatAvailable is probably not useful, because I need to check if it's a Sound Identifier ala #D9586E19B0CB not if there's text

This code should actually check if there is text in the clipboard, then get it from there and display it in the debug window, but it's not working..dunno why and all my other attempts to get it working have failed.

So...any help would be appreciated

Btw, I did this based on the C++ code on http://www.codeproject.com/clipboard/archerclipboard1.asp :rolleyes:
RE: scripts and the clipboard by J-Thread on 07-11-2006 at 07:13 AM

The CF_TEXT and CF_OEMTEXT are constants, don't use them as strings:

code:
var CF_TEXT = 516; // check these
var CF_OEMTEXT = 7;

if (Interop.Call("User32", "OpenClipboard", 0))
{
if (Interop.Call("User32", "IsClipboardFormatAvailable", CF_TEXT | CF_OEMTEXT))
{
var hClipboardData = Interop.Call("User32", "GetClipboardData", CF_TEXT);
var pchData = Interop.Call("Kernel32", "GlobalLock", hClipboardData);
var strFromClipboard = pchData;
Debug.Trace(strFromClipboard);
Interop.Call("Kernel32", "GlobalUnlock", hClipboardData);
}
else
{
Debug.Trace("There is no text data on the Clipboard.");
}
Interop.Call("User32", "CloseClipboard");
}


Not tested, but should work better;)
RE: scripts and the clipboard by segosa on 07-11-2006 at 08:21 AM

I'm having a problem SETTING the text in the clipboard: http://shoutbox.menthix.net/showthread.php?tid=62754

Let me know if you get yours working... maybe we have a similar problem.


RE: RE: scripts and the clipboard by andrey on 07-11-2006 at 08:01 PM

quote:
Originally posted by J-Thread
The CF_TEXT and CF_OEMTEXT are constants, don't use them as strings:

code:
var CF_TEXT = 516; // check these
var CF_OEMTEXT = 7;

if (Interop.Call("User32", "OpenClipboard", 0))
{
if (Interop.Call("User32", "IsClipboardFormatAvailable", CF_TEXT | CF_OEMTEXT))
{
var hClipboardData = Interop.Call("User32", "GetClipboardData", CF_TEXT);
var pchData = Interop.Call("Kernel32", "GlobalLock", hClipboardData);
var strFromClipboard = pchData;
Debug.Trace(strFromClipboard);
Interop.Call("Kernel32", "GlobalUnlock", hClipboardData);
}
else
{
Debug.Trace("There is no text data on the Clipboard.");
}
Interop.Call("User32", "CloseClipboard");
}


Not tested, but should work better;)


no sorry..still doesn't work for me...
btw, what should i do with the CF_TEXT and CF_OEMTEXT vars and why did you use 516 and 7 ? got it :rolleyes:

hmm...any help?
RE: scripts and the clipboard by Ezra on 07-11-2006 at 08:16 PM

I'm thinking a regex could help you with identifying a sounds hash

Something like:

code:
/^\#[A-F0-9]{12}$/s


EDIT: Sound hashes are in HEX codes right? so 0 to F ? and 12 characters?
RE: scripts and the clipboard by deAd on 07-11-2006 at 08:41 PM

@segosa, i got it to copy the first character :P

Here's how to read from the clipboard (h) (i cant believe i figured this out :O):

code:
function readClipboard(){
    var CF_TEXT = 1;
    var CF_OEMTEXT = 7;
    var CF_UNICODETEXT = 13;
    try {
        if (Interop.Call("User32", "OpenClipboard", 0)){
            if (Interop.Call("User32", "IsClipboardFormatAvailable", CF_TEXT | CF_OEMTEXT)){
                var hClipboardData = Interop.Call("User32", "GetClipboardData", CF_UNICODETEXT);
                var pchData = Interop.Call("Kernel32", "GlobalLock", hClipboardData);
                var size = Interop.Call('Kernel32','GlobalSize',hClipboardData);
                var str = '';
                Interop.Call('Kernel32','RtlMoveMemory',str,pchData,size);
                Interop.Call("Kernel32", "GlobalUnlock", hClipboardData);
            } else {
                return false;
            }
        Interop.Call("User32", "CloseClipboard");
        }
    } catch(ex) {
        Interop.Call("User32", "CloseClipboard");
        return false;
    }
    return str;
}
The function will return the text. It will return false if there are any errors or if the clipboard is empty. Do not remove the try/catch or the clipboard will not unlock and you won't be able to copy or paste anything at all.