Clipboard modificado: Soporte para copia/corte de archivos

Plugins y todo lo relacionado para Autoplay Media Studio.
Bueno he tenido un momento y ceone me ha preguntado mucho sobre como copiar archivos mediante el portapapeles, como no lo veo por ahi subo aqui el plugin modificado por si a alguien mas le interesa.

Como bug conocido, creo que puede dar ploblemas al usar strings mas largos que 250 caracteres, por lo que os pido que hagais pruebas para arreglarlo si es asi.

La funcion no viene en el fichero de ayuda ni en el xml

Clipboard.CopyFile(string ARCHIVOS, bool CORTECOPIA);

ARCHIVOS: Ruta completa tipica al archivo en cuestion, usando los \\ y toda esa mierda, si quereis copiar mas de un archivo usad el separador "|"

CORTECOPIA: true para copiar, false para cortar

ejemplo: Clipboard.CopyFile("c:\\MyFile.txt|c:\\test2.xls",false);

Codigo fuente (lo he comentado un poquito):

static int irclipboard_copyfile (lua_State *L)
{
int nLastError = 0;
IRLUA_PLUGIN_ResetLastError(L);

IRLUA_PLUGIN_CheckNumArgs(L,1);

CString path;
BOOL bCopy;

path = IRLUA_PLUGIN_CheckString(L,1); //obtenemos el string
bCopy = IRLUA_PLUGIN_CheckBoolean(L,2); //obtenemos el booleano de copia o corte


//path.Replace("|", ""

//--------------------------------------------CString path, BOOL nCopy
char tmp[256]; //TODO@: 256 caracteres no es muy poco?
ZeroMemory(tmp,256);
for(int i = 0;i<path.GetLength();i++) //Inyectamos uno a uno cada caracter de nuestro string en una cadena de memoria char, guardada en memoria volatil
{
if (path.GetAt(i)!=0x7c) tmp = path.GetAt(i); //como con lua no hay forma de insertar un simbolo 0x00 obtenemos un caracter digamos raro | (0x7c) si lo encuentra en esta posicion de memoria no escribimos nada, lo cual dejara la cadena como 0x00
}
//--------------------------------------------char *lpBuffer, UINT uBufLen, BOOL bCopy

//todo esto inicia variables que vamos a usar
char *lpBuffer;
UINT uBufLen;

UINT uDropEffect;
DROPFILES dropFiles;
UINT uGblLen,uDropFilesLen;
HGLOBAL hGblFiles,hGblEffect;
char *szData,*szFileList;

DWORD *dwDropEffect;



//CutOrCopyFiles(tmp,path.GetLength(),nCopy);


lpBuffer=tmp;
uBufLen=path.GetLength();
//bCopy = true;

//configuramos el drop effect, osea, copia o corte
uDropEffect=RegisterClipboardFormat("Preferred DropEffect");
hGblEffect=GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,sizeof(DWORD));
dwDropEffect=(DWORD*)GlobalLock(hGblEffect);
if(bCopy)
*dwDropEffect=DROPEFFECT_COPY;
else
*dwDropEffect=DROPEFFECT_MOVE;
GlobalUnlock(hGblEffect);

uDropFilesLen=sizeof(DROPFILES);
dropFiles.pFiles =uDropFilesLen;
dropFiles.pt.x=0;
dropFiles.pt.y=0;
dropFiles.fNC =FALSE;
dropFiles.fWide =TRUE;

//escribimos la memoria con mierda aleatoria que funciona gracias a los hijos de puta de ms

uGblLen=uDropFilesLen+uBufLen*2+8;
hGblFiles= GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, uGblLen);
szData=(char*)GlobalLock(hGblFiles);
memcpy(szData,(LPVOID)(&dropFiles),uDropFilesLen);
szFileList=szData+uDropFilesLen;

//hora de convertir nuestra mierda de bytes a una cadena wide, despues de 2 conversiones ya... otra maravilla gracias a los colegas de ms

MultiByteToWideChar(CP_ACP,MB_COMPOSITE,
lpBuffer,uBufLen,(WCHAR *)szFileList,uBufLen);

GlobalUnlock(hGblFiles);


//esto no necesita explicacion¿?
if( OpenClipboard(NULL) )
{
EmptyClipboard(); //jodemos todo lo que haya
SetClipboardData( CF_HDROP, hGblFiles ); //usamos CF_HDROP que nos va a permitir copiar y pegar mierdas
SetClipboardData(uDropEffect,hGblEffect); //agregamos el drop effect
CloseClipboard(); //mandamos a tomar por culo la memoria usada
}
return 0;
}


A descargar:
HIDE: ON
Hidebb Message Hidden Description



salu2
Gracias
Esta interesante esto del codigo fuente
Muchas gracias como siempre compañero.

El enlace de descarga a sido actualizado añadiendo el xml, el archivo de ayuda, la licencia y un ejemplo de como funciona clipboard.

HIDE: ON
Hidebb Message Hidden Description


espero que os guste y que lo disfrutéis.

Nota: aun que la función tiene la opción de retorno siempre os dara nil....

:friends: :friends: :friends: :friends: :friends: :friends: :friends:
Buen trabajo ;)
gracias, buen aporte!
gracias
grazie
thanks
grazie
thank
GOOD JOB .. THANK U
muy bueno
mooola
thanx
Re-subida! versión 2.0.0.2

HIDE: ON
Hidebb Message Hidden Description


2.0.2.0
Added Clipboard.CopyFile Function (this function is only in 32 bits version).
Note: this version is NOT OFICIAL VERSION and as been build wift SDK 2.0.0.0 by Pabloko.
2.0.1.0
Compiled the 32-bit Clipboard action plugin using a newer compiler.
Added a 64-bit version of the Clipboard action plugin (Clipboardx64.lmd) and plugin template file (_plugin_template.xml).
2.0.0.0
Updated to version 2.0 of the plugin SDK.
Esta versión no contiene el archivo de 64 bits, solo lleva : Clipboard_Help.htm, Clipboard Example.apz, Clipboard.lmd, Clipboard.lic.

para mas información, leer el primer post o preguntar..

Un saludo Ceone.
Gracias por tu gran aporte a la comunidad :yes:

:pc: :pc: :pc: :pc:

thanks
Estaba a la busqueda. Gracias por el aporte.
Comprendiendo mas cobre clipboard