Página 1 de 2

Clipboard modificado: Soporte para copia/corte de archivos

Publicado: 10 Abr 2011 18:03
por Pabloko
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

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 10 Abr 2011 19:34
por Geran
Gracias
Esta interesante esto del codigo fuente

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 11 Abr 2011 00:56
por Ceone
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:

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 11 Abr 2011 08:33
por abood1987
Buen trabajo ;)

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 02 May 2011 12:36
por er_mejor
gracias, buen aporte!

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 03 Jun 2011 23:23
por TiNGuiLiLLo
gracias

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 20 Jun 2011 02:53
por ams2010
grazie

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 21 Jun 2011 07:21
por dangngocnguyenit
thanks

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 21 Jun 2011 13:30
por ayoux
grazie

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 04 Jul 2011 15:31
por nghethihieu
thank

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 21 Nov 2011 16:40
por Haitham.2012
GOOD JOB .. THANK U

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 12 Dic 2011 17:00
por mensajero1
muy bueno

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 17 Dic 2011 00:13
por carsonzillo
mooola

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 18 Dic 2011 15:19
por bumbo
thanx

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 12 Mar 2013 22:16
por Ceone
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.

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 28 Feb 2014 04:02
por Dow Sher
Gracias por tu gran aporte a la comunidad :yes:

Publicado: 20 Mar 2014 18:50
por LSVargas
:pc: :pc: :pc: :pc:

Publicado: 22 Mar 2014 16:29
por tam
thanks

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 28 Mar 2014 21:29
por Rodolfo
Estaba a la busqueda. Gracias por el aporte.

Re: Clipboard modificado: Soporte para copia/corte de archiv

Publicado: 11 Ago 2015 07:45
por CAEL1011
Comprendiendo mas cobre clipboard