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");
}
;)

Mostrar/Ocultar

m4rtyr todo un maestro....

Espero algun día poder hacer algo parecido,mientras me centraré en entender el código...
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
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
Imagen
en el msn ♣Conejo escribió:[26/03/11 10:39:13] Su firma contiene 281 caracteres. El máximo número de caracteres permitidos es 200.
menos mal que soy admin
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

Mostrar/Ocultar

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.
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

Mostrar/Ocultar

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
//mHmm..
Con strtok lo entendi a la perfeccion,de todos modos...

Gracias a los dos....
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
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.
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?
//mHmm..
Responder

Volver a “Fuentes”