Página 1 de 1
[Source]DragAndDrop
Publicado: 16 Nov 2010, 13:50
por m4rtyr
Código: Seleccionar todo
#include <windows.h>
#include <stdio.h>
void main(){
unsigned char dirname[250]={"\0"};
unsigned char * file =(unsigned char *)GetCommandLine();
for (int x=strlen((const char *)file)-1;x>=0;x--){
if (*(file+x)=='"' && *(file+x-1)==' ' && *(file+x-2)=='"') // busca " " esta entre GetModuleFileName y el file parametro
{strcpy((char *)dirname,(const char *)file+x+1); // copia el file y el directorio;
dirname[strlen((const char *)dirname)-1]='\0';} // quitando el ' " ' del final del string
}
// dirname ya lo pueden usar abajo es un ejemplo
if(dirname[0]=='\0')printf("no dragndrop");
else printf("%s\n",dirname);
system("pause");
}
;)
Re: DragAndDrop
Publicado: 16 Nov 2010, 15:05
por p0is0n-123
m4rtyr todo un maestro....
Espero algun día poder hacer algo parecido,mientras me centraré en entender el código...
Re: DragAndDrop
Publicado: 16 Nov 2010, 15:29
por FroZenFeW
p0is0n-123 escribió:m4rtyr todo un maestro....
Espero algun día poder hacer algo parecido,mientras me centraré en entender el código...
a veces tus respuestas me dan risa
no es tan complicado el source
Re: DragAndDrop
Publicado: 16 Nov 2010, 16:04
por m4rtyr
FroZenFeW escribió:
no es tan complicado el source
si tienes rason es que los casts lo hace que se vea complicado // por el strlen y strcpy necesitan (char *) (const char *) para poder compilar
el programa busca " " y copia el siguinte de " " a dirname , muy simple
gracias a poison siempre me da animo a compartir cosas , aunque no tan complicada ;)
saludos
Re: DragAndDrop
Publicado: 16 Nov 2010, 17:15
por winnipu
pero alguien podria arrojar un poco de luz a los novatos en programacion de para que sirve ese codigo? Trato de compilarlo en codeblocks y salta error. Trato de compilarlo en dev cpp y me dice: `main' must return `int'
Creo entender que busca la ruta del ejecutable y la copia en pantalla. No se si es eso exactamente o no. Perdonad por mi desconocimiento.
Re: DragAndDrop
Publicado: 16 Nov 2010, 18:57
por m4rtyr
winnipu escribió:pero alguien podria arrojar un poco de luz a los novatos en programacion de para que sirve ese codigo? Trato de compilarlo en codeblocks y salta error. Trato de compilarlo en dev cpp y me dice: `main' must return `int'
en ves de poner void main() , pon int main() y abajo del codigo pon return 0;
el source compila bien con visual studio 6.0
Creo entender que busca la ruta del ejecutable y la copia en pantalla. No se si es eso exactamente o no. Perdonad por mi desconocimiento.
si pero la ruta del ejecutable que lo envias como parametro al programa original , el drag and drop es cojer el icono del file y ponerlo en el icono del programa compilado , coje el file como parametro
no te perdones de nada todos somo ignorantes
saludos
Re: DragAndDrop
Publicado: 17 Nov 2010, 05:36
por linkgl
a veces tus respuestas me dan risa
no es tan complicado el source
Así es el src no es nada complicado lo que pasa esque creo que m4rty te líaste al separar las dos rutas yo que tu usaría strtok queda el código mas limpio ya lo codeo:
Código: Seleccionar todo
#include <windows.h>
#include <stdio.h>
#include <string.h>
int main(){
char *dirname;
char *file = GetCommandLine();//obtenemos las rutas
dirname=strtok(file,"\"");//separamos por comillas
for(int i=0;i<2;i++)
dirname=strtok(NULL,"\""); //almacenamos el último valor entre ""
//uso
if(dirname==NULL)
printf("Tiene que arrastrar un archivo");
else
printf("%s",dirname);
getchar();
return 0;
}
Compilado en dev C++
Te ahorras unas lineas
Re: DragAndDrop
Publicado: 17 Nov 2010, 15:03
por m4rtyr
linkgl escribió:
Te ahorras unas lineas
tienes razon
no me la savia eso lo de strtok , gracias :)
Re: DragAndDrop
Publicado: 17 Nov 2010, 15:05
por p0is0n-123
Con strtok lo entendi a la perfeccion,de todos modos...
Gracias a los dos....
Re: DragAndDrop
Publicado: 18 Nov 2010, 17:34
por asdf1232005
linkgl escribió:a veces tus respuestas me dan risa
no es tan complicado el source
Así es el src no es nada complicado lo que pasa esque creo que m4rty te líaste al separar las dos rutas yo que tu usaría strtok queda el código mas limpio ya lo codeo:
Código: Seleccionar todo
#include <windows.h>
#include <stdio.h>
#include <string.h>
int main(){
char *dirname;
char *file = GetCommandLine();//obtenemos las rutas
dirname=strtok(file,"\"");//separamos por comillas
for(int i=0;i<2;i++)
dirname=strtok(NULL,"\""); //almacenamos el último valor entre ""
//uso
if(dirname==NULL)
printf("Tiene que arrastrar un archivo");
else
printf("%s",dirname);
getchar();
return 0;
}
Compilado en dev C++
Te ahorras unas lineas
Che !! Que logica tiene poner el GetCommandLine() y todo el otro code, si no se utiliza para nada?? , con solo poner el getchar obtenes la ruta del ejecutable, yo me ponia a analizar el codigo y no le encontre mucho sentido , ya que la gracia seria contar con un puntero con la "
direccion + nombre" del programa , pero con tu code nose obtiene dicha direccion.
Re: DragAndDrop
Publicado: 19 Nov 2010, 05:38
por linkgl
asdf1232005 escribió:linkgl escribió:a veces tus respuestas me dan risa
no es tan complicado el source
Así es el src no es nada complicado lo que pasa esque creo que m4rty te líaste al separar las dos rutas yo que tu usaría strtok queda el código mas limpio ya lo codeo:
Código: Seleccionar todo
#include <windows.h>
#include <stdio.h>
#include <string.h>
int main(){
char *dirname;
char *file = GetCommandLine();//obtenemos las rutas
dirname=strtok(file,"\"");//separamos por comillas
for(int i=0;i<2;i++)
dirname=strtok(NULL,"\""); //almacenamos el último valor entre ""
//uso
if(dirname==NULL)
printf("Tiene que arrastrar un archivo");
else
printf("%s",dirname);
getchar();
return 0;
}
Compilado en dev C++
Te ahorras unas lineas
Che !! Que logica tiene poner el GetCommandLine() y todo el otro code, si no se utiliza para nada?? , con solo poner el getchar obtenes la ruta del ejecutable, yo me ponia a analizar el codigo y no le encontre mucho sentido , ya que la gracia seria contar con un puntero con la "
direccion + nombre" del programa , pero con tu code nose obtiene dicha direccion.
Aver... la api GetCommandLine() sí se utiliza, es lo que obtiene la ruta del EJECUTABLE + el archivo o carpeta arrastrado... Se usa aquí:
dirname=strtok(file,"\""); en donde dirname funciona como el puntero para almacenar la ruta + nombre... Ahora getchar() es una función que PAUSA el programa no obtiene ninguna ruta... El puntero con la dirección y nombre del programa está almacenado en dirname... Alguna otra duda?