elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Seleccionar Archivo o Carpeta sin Dialog
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Seleccionar Archivo o Carpeta sin Dialog  (Leído 3,593 veces)
rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Seleccionar Archivo o Carpeta sin Dialog
« en: 13 Noviembre 2018, 13:33 pm »

Hola amigos, tengo un problema al cual no le eh encontrado solucion, poniendole este ejemplo espero puedan entenderme.

Cuando tenemos el WinRAR instalado, podemos hacer click derecho en cualquier archivo (lugar escritorio por ejemplo) , el cual nos desplega un menu cotextual con una serie de opciones, dentro las cuales esta la de ( extraer o descomprimir archivo , segun sea el caso) yo quiero saber como es posible lograr eso, siendo mas especifico, como es posible lograr obtener la ruta completa del archivo para realizar la accion en este caso ( comprimir o descomprimir archivo o carpeta).

Eh entendido anteriormente, que para crear una opcion o boton en el menucontextual es necesario crear una entrada en el registro del windows, cosa ya explicada en el ultimo tema en el cual me asistieron de manera excelente.
Y de momento es un tema ya entendido.

Normalmente uno obtiene la ruta de el archivo o carpeta con un openfiledialog o un browserdialog, el cual nos despliega un menu y es ahi donde seleccionamos el archivo o carpeteta, luego disponer de esa ruta, en mi caso eso no es lo que necesito, en mi caso, necesito obtener la ruta de manera automatica , asi como lo hace el winrar cuando uno selecciona el archivo a comprimir (menu que aparece en el menu contextual al hacer click derecho).

Espero puedan entender mi pregunta y ayudarme feliz dia.


En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Seleccionar Archivo o Carpeta sin Dialog
« Respuesta #1 en: 13 Noviembre 2018, 17:06 pm »

Puedes usar una entrada en el registro como:

myapp.exe "%1"

luego cuando tu aplicacion es lanzada la direccion del fichero sera pasada como parametro, asi que necesitas parsearlo correctamente
Saludos


En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Re: Seleccionar Archivo o Carpeta sin Dialog
« Respuesta #2 en: 13 Noviembre 2018, 17:19 pm »

podrias ser mas explicito no entendi nada , porfavor disculpa
En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Seleccionar Archivo o Carpeta sin Dialog
« Respuesta #3 en: 13 Noviembre 2018, 18:43 pm »

1- ok, teniendo en cuenta que has añadido tú aplicación al menú contextual desde la entrada de registro HKEY_CLASSES_ROOT y usando un command como:

C:\\TU_RUTA\\ALGUN_FOLDER\\TU_PROGRAMA.exe %1

al ser lanzada tu aplicación mediante esta entrada en el menú contextual, la dirección del fichero (sobre el cual invocaste tu aplicación) será pasada a tu aplicación como parámetro.

https://www.howtogeek.com/107965/how-to-add-any-application-shortcut-to-windows-explorers-context-menu/amp/


2- Luego necesitas parsear estas líneas de parámetros en tu propia aplicación para que actúe como deseas

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/command-line-arguments
https://stackoverflow.com/questions/24661047/how-to-get-command-line-parameters-and-put-them-into-variables
https://stackoverflow.com/questions/1179532/how-do-i-pass-command-line-arguments-to-a-winforms-application


Espero haberme explicado
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
rigorvzla

Desconectado Desconectado

Mensajes: 221


Ver Perfil
Re: Seleccionar Archivo o Carpeta sin Dialog
« Respuesta #4 en: 19 Noviembre 2018, 15:54 pm »

hola de nuevo, luego de algo de tiempo estoy por aqui informando lo siguiente y esperando acesoria.

Resulta que ya tengo la entrada en el registro

Código:
  private const string MenuName01 = "7-Zip.7z\\shell\\Asistente Virtual AIRH";
            public const string Command01 = "7-Zip.7z\\shell\\Asistente Virtual AIRH\\command";

public static void cierreContextual()
            {
                try
                {
                    RegistryKey reg01 = Registry.ClassesRoot.OpenSubKey(Command01);
if (reg01 != null)
                    {
                        reg01.Close();
                        Registry.ClassesRoot.DeleteSubKey(Command01);
                    }
                    reg01 = Registry.ClassesRoot.OpenSubKey(MenuName01);
                    if (reg01 != null)
                    {
                        reg01.Close();
                        Registry.ClassesRoot.DeleteSubKey(MenuName01);
                    }
   }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.ToString());
                }
            }

 public static void cargaContextual()
            {
                string ruta01 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Integro.exe /1");

//DEBERIA SER ASI PARA OBTENER LA RUTA
//string ruta01 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, //"Integro.exe %1");

  RegistryKey regmenu01 = null;
                RegistryKey regcmd01 = null;
 try
                {
                    regmenu01 = Registry.ClassesRoot.CreateSubKey(MenuName01);
                    if (regmenu01 != null)
                        regmenu01.SetValue("", "AV-AIRH Descomprimir");
                    regcmd01 = Registry.ClassesRoot.CreateSubKey(Command01);
                    if (regcmd01 != null)
                        regcmd01.SetValue("", ruta01);
}
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.ToString());
                }
                finally
                {
                    if (regmenu01 != null)
                        regmenu01.Close();
                    if (regcmd01 != null)
                        regcmd01.Close();
                 }

Ya eso me da una opcion en el menu contextual de los archivos 7z
Lo que ahora sigue es lo siguiente, es la parte de ejecutar el metodo en el programa al que lo dirijo
Y lo tengo ya, quedando asi

Código:
static void Main(string[] args)
        {
            switch (args[0])
            {
                case "/1":
                    MessageBox.Show("Extraer");
                    extraccionArchivo(IRA LA RUTA OBTENIDA DESDE EL MENU
CONTEXTUAL);
                    break;
            }
        }

        private void extraccionArchivo(string nombreArchivo)
{
}

El problema esta en que no se como obtener la ruta del archivo seleccionado , a pesar que lei los textos que me dieron y es colocando el parametro %1 , no encuentro como pasar ese "valor obtenido" a una variable y colocarlo en este mentodo mensionado arriiba.

espero puedan ayuarme con esto, de antemano gracias.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Seleccionar Archivo o Carpeta sin Dialog
« Respuesta #5 en: 19 Noviembre 2018, 23:05 pm »

Si no recuerdo mal, meses atrás ya se te explicó todo, con ejemplos específicos...

...tu programa recibe los argumentos de la acción registrada para la cual el usuario eligió, entre ellos la ruta del fichero sobre el que se pinchó, naturalmente si se incluyó en el registro que te entregue la ruta, que como ya se te ha explicado se tramita como "%1".
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Seleccionar Archivo o Carpeta sin Dialog
« Respuesta #6 en: 21 Noviembre 2018, 00:04 am »

Cómo ya ha dicho el compañero @NEBIRE, esto ya se te explicó, conretamente en este thread:


En el que, aparte de los comentarios que recibiste de otros usuarios, yo aporté el siguiente comentario:

Citar
Hay dos formas de llevarlo a cabo, la primera manera, que es la más sofisticada y versatil sería mediante el desarrollo de una extensión de la shell (o shell-extension) del menú contextual, lo cual requiere el uso de C++, o de wrappers de C++ para .NET como sería la librería SharpShell, y la segunda manera, que es mucho más simple de llevar a cabo pero también mucho menos sofisticada sería añadiendo ciertas claves en el registro de Windows.

...al cual parece ser que no le hiciste mucho o nada de caso.

En fin. Tienes mil ejemplos disponibles en la World Wide Web sobre como crear un menú contextual mediante el registro de Windows, no es dificil buscar y encontrar, y ponerte a hacerlo, más cuando ya se te mostró un ejemplo funcional en el otro thread.

Aparte, en el repositorio de GitHub de SharpShell también tienes ejemplos de como hacerlo mediante SharpShell, lo cual, repito lo que ya dije en ese otro thread, sería la manera ideal.

Por cierto, no se si lo comenté ya en el otro thread, pero WinRAR lo que hace es registrar en el sistema una shell-extension, concretamente es el archivo RarExt32.dll y RarExt.dll. De hecho cualquier software medianamente profesional utiliza extensiones de shell para crear sus menues contextuales, no se andan añadiendo manualmente claves al registro o usando un vulgar script de registro, así que no le des tantas vueltas y empieza a aprender SharpShell si quieres hacer lo mismo que ellos y de forma eficiente (a falta de C/C++).



El problema esta en que no se como obtener la ruta del archivo seleccionado , a pesar que lei los textos que me dieron y es colocando el parametro %1 , no encuentro como pasar ese "valor obtenido" a una variable y colocarlo en este mentodo mensionado arriiba.

El argumento %1 no lo pasarías "a una variable", el argumento %1 se lo enviarías como entrada de datos por linea de comandos a tu programa, es decir, como un argumento command-line (ej. miprograma.exe %1). Y entonces, en tu programa simplemente debes leer los argumentos command-line (System.Environment.GetCommandLineArgs)

Saludos.
« Última modificación: 21 Noviembre 2018, 00:13 am por Eleкtro (sin pilas) » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
common dialog abrir/seleccionar mas de un fichero
Programación Visual Basic
luiski 3 2,311 Último mensaje 13 Octubre 2006, 07:48 am
por luiski
¿Batch y cuadro de dialogo "Seleccionar directorio/archivo"?
Scripting
Rywshan 4 5,852 Último mensaje 24 Junio 2014, 23:20 pm
por Dany3j
Permisos a un archivo de una carpeta
GNU/Linux
geshiro 1 1,586 Último mensaje 23 Junio 2016, 04:20 am
por MinusFour
Seleccionar carpeta con un combobox
Desarrollo Web
lee51 3 2,585 Último mensaje 8 Septiembre 2017, 17:19 pm
por ivancea96
Mover de archivo a una carpeta en bat
Scripting
#Aitor 0 2,178 Último mensaje 20 Noviembre 2017, 10:17 am
por #Aitor
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines