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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Mensajes
Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 80
181  Programación / .NET (C#, VB.NET, ASP) / Re: 7-ZIp en: 27 Noviembre 2017, 08:03 am
Para agregar referencia de las dlls

1.  Abre el menú 'PROYECTO' y luego haz clic sobre 'Agregar Referencia'

2. Dale al botón '[Examinar]' que aparece abajo del cuadro junto a [Aceptar] y [Cancelar].

3. Dirígete al directorio C:\Windows\system32\ y ahí están los dll mencionados:

c:\windows\system32\shdocvw.dll
c:\windows\system32\shell32.dll


4. Seleccionas el DLL y pulsas [Agregar]


Con este código (que ya puse antes) obtienes el directorio seleccionado desde el explorer.exe. de Windows.

Código
  1. SHDocVw.ShellWindows objShellWindows = new SHDocVw.ShellWindows();
  2.            try
  3.            {
  4.                foreach (SHDocVw.InternetExplorer Explorer in objShellWindows)
  5.                {
  6.                    Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)Explorer.Document).SelectedItems();
  7.                    foreach (Shell32.FolderItem item in items)
  8.                    {
  9.                       textBox1.Text= item.Path;
  10.                    }
  11.                }
  12.            }
  13.            catch (Exception ex)
  14.            {
  15.                ex.Source = null;
  16.            }
  17.            return null;
  18.  

Creas un objeto Timer, le estableces la propiedad "Enabled" a True, para que esté en funcionamiento de lo contrario no hade nada. Y le metes ese código


Si te fijas en el código, en este caso,  el directorio obtenido es ingresado en un objeto TextBox.
Código:
textBox1.Text= item.Path;

Por lo tanto tienes que creas un objeto TextBox para visualizar el directorio.

Obvio es un ejemplo que debes adaptar a tu código y meter el 'path' en una variable para luego usarlo en el código de compresión. Te recomiendo probarlo en un proyecto aparte y una vez sepas como funciona lo aplicas a tu programa.

O sea, esto es un snippet, un código de ejemplo, un código ya hecho pero que se debe adaptar a tu programa.

Lo explico.:
Código:
       try
            {
    
            }
            catch (Exception ex)
            {
                ex.Source = null;
            }

Es un control de errores o excepción en jerga informática.  Si se produjera un error pasaría a la parte:
Código:
   catch (Exception ex)
            {
                ex.Source = null;
            }

dentro de esto podría introducirse una acción como mostrar un mensaje de error por ejemplo. En este caso no haría nada.
Código:
 
 foreach (Element in Object)
{
}

Es un bucle que recorre todos los elementos de una lista, matriz o colección.

OpenFileDialog
Ahora voy con lo del cuadro de dialogo. Que en fin no es tan complicado, pero como dices que buscaste códigos que pudieras entender...

Por mi parte en el código que expuse anteriormente había un error técnico pues se me olvidó poner el código de compresión dentro de la condición if /then  ya que si se pulsa Cancelar se produce un error al no obtenerse ningún directorio de archivo. Como excusa hice un copia y pega del código de compresión y lo puse fuera de la condición olvidándome por completo del error que se produce al pulsar Cancelar.

Aquí lo vuelvo a poner corregido:
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Diagnostics;
  11. namespace WindowsFormsApplication1
  12. {
  13.    public partial class Form1 : Form
  14.    {
  15.        public Form1()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.  
  20.        private void Form1_Load(object sender, EventArgs e)
  21.        {
  22.  
  23.        }
  24.  
  25.        private void button1_Click(object sender, EventArgs e)
  26.        {
  27.            using (OpenFileDialog ofd = new OpenFileDialog())
  28.            {
  29.                ofd.Title = "Archivos a comprimir";
  30.                ofd.Filter = "All files|*.*";
  31.                ofd.Multiselect = true;
  32.                if ((ofd.ShowDialog() == DialogResult.OK))
  33.                {
  34.                    System.IO.StreamWriter sw = new System.IO.StreamWriter("listfile.lst");
  35.                    //Crea una lista de archivos
  36.                    foreach (string n in ofd.FileNames)
  37.                    {
  38.                        sw.WriteLine(n);
  39.                    }//foreach
  40.                    sw.Close();
  41.  
  42.                    string targetName = "Example";
  43.                    //Carpeta de destino
  44.                    string pathDestination = "Prueba\\";
  45.                    ProcessStartInfo p = new ProcessStartInfo();
  46.                    p.FileName = "7za.exe";
  47.                    p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z";
  48.                    p.WindowStyle = ProcessWindowStyle.Hidden;
  49.                    Process x = Process.Start(p);
  50.                    x.WaitForExit();
  51.                    System.IO.File.Delete("listfile.lst");
  52.                } //if
  53.            }//using
  54.  
  55.        }//button1
  56.  
  57.    }
  58. }
  59.  

EXPLICACIÓN
Lo primero es agregar la línea para usar la clase Process;
Código
  1. using System.Diagnostics;
  2.  

y

Código
  1. using System.Windows.Forms;


La clase OpenFileDialog abre un cuadro de diálogo "Abrir".
Ejemplo:

Código
  1. using System.Windows.Forms;
  2. ...
  3.  
  4.    using (OpenFileDialog ofd = new OpenFileDialog())
  5.            {
  6.                ofd.Title = "Archivos a comprimir";
  7.                ofd.Filter = "All files|*.*";
  8.                ofd.Multiselect = true;
  9.                ofd.ShowDialog();
  10.            }
  11.  

Pero ocurre que si no se selecciona nada el cuadro no devuelve ningún valor, o sea valor nulo. Por esta razón se usa la condición :
Código
  1. //Si se pulsa el botón OK...
  2.       if ((ofd.ShowDialog() == DialogResult.OK))
  3. {
  4. ...
  5. }
  6.  

Como el cuadro de diálogo que he creado tiene activa la opción MULTISELECT,
Código:
ofd.Multiselect = true;
es decir  que permite seleccionar múltiples archivos.

He hecho que guarde y cree un archivo con la lista de los directorios de los archivos seleccionados.  Para después ser comprimidos los archivos de la lista por 7za.exe.

Esta es la parte que crea el archivo
Código
  1.    System.IO.StreamWriter sw = new System.IO.StreamWriter("listfile.lst");
  2.                    //Crea una lista de archivos
  3.                    foreach (string n in ofd.FileNames)
  4.                    {
  5.                        sw.WriteLine(n);
  6.                    }//foreach
  7.                    sw.Close();
  8.  

donde ofd.FileNames es una colección o lista de elementos seleccionados en el cuadro OpenFileDialog

Cada elemento de la lista es ingresado en la variable string 'n' y luego escrito en el archivo por 'WriteLine'

Después de comprimir, la lista es eliminada con la línea:

Código
  1. System.IO.File.Delete("listfile.lst");

También puedes importar System.IO, al principio de código;
Código
  1. using System.Text;
  2. using System.Threading.Tasks;
  3. using System.Windows.Forms;
  4. using System.Diagnostics;
  5. using System.IO;
  6. namespace WindowsFormsApplication1
  7. {
  8.    public partial class Form1 : Form
  9.    {
  10.        public Form1()
  11. ...
  12.  

y luego poner solamente;

Código
  1. File.Delete("listfile.lst");


Para que 7za.exe comprima los archivos de la lista en un único archivo, se debe usar @ +  el nombre que contiene la lista de archivos, ej.: " @listfile.lst"
182  Programación / .NET (C#, VB.NET, ASP) / Re: 7-ZIp en: 25 Noviembre 2017, 19:55 pm
Hola

Como te dije los códigos de @Elektro (o de cualquiera) aunque no sean lo que buscamos o incluso aunque no nos funcionen sirven de guía o indican de alguna manera el camino.

Tras examinar el código de @Elektro el cual establece un enlace entre Explorer.exe y nuestra apliación, no me funcionaba entre otras por errores en  las líneas,

IEnumerable<string> filepath = (from item in itemsitem.Path);

 ShellWindows windows = (ShellWindows)((IShellDispatch6)shell).Windows();


Entonces decidí buscar alguna alternativa más simple, que al final ha sido esta:

NOTA:
Para que funciona
- Dirígete a "Agregar Referencia..." y agrega las librerías:
 
c:\windows\system32\shdocvw.dll
c:\windows\system32\shell32.dll

- Coloca un objeto Timer y un TextBox


Ejecuta el código, con la ventana abierta ejecuta el código y abre el explorador de windows.


Código
  1. using System;
  2. using System.Windows.Forms;
  3. using SHDocVw;
  4. namespace WindowsFormsApplication1
  5. {
  6.    public partial class Form1 : Form
  7.    {
  8.        public Form1()
  9.        {
  10.            InitializeComponent();
  11.        }
  12.  
  13.        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  14.        {
  15.  
  16.        }
  17.        private void Form1_Load(object sender, EventArgs e)
  18.        {
  19.            //propiedades para los objetos
  20.         this.textBox1.Multiline=true;
  21.         this.timer1.Enabled = true; //activa el timer (por defecto enabled = false)
  22.         this.textBox1.Size = new System.Drawing.Size(500, 40);
  23.         this.textBox1.Top = 10;
  24.         this.textBox1.Left = 10;
  25.         this.Size = new System.Drawing.Size(600, 100);
  26.  
  27.            //Mantiene la ventana siempre visible
  28.         Form instance = this;
  29.         instance.TopMost = true;
  30.        }
  31.  
  32.        private void timer1_Tick(object sender, EventArgs e)
  33.        {
  34.            textBox1.Text = GetPathSelectExplorer();
  35.  
  36.        }
  37.  
  38.        //Función que retorna el directorio seleccionador desde Explorer.exe
  39.        public string GetPathSelectExplorer()
  40.        {
  41.            SHDocVw.ShellWindows objShellWindows = new SHDocVw.ShellWindows();
  42.            try
  43.            {
  44.                foreach (SHDocVw.InternetExplorer Explorer in objShellWindows)
  45.                {
  46.                    Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)Explorer.Document).SelectedItems();
  47.                    foreach (Shell32.FolderItem item in items)
  48.                    {
  49.                       return item.Path;
  50.                    }
  51.                }
  52.            }
  53.            catch (Exception ex)
  54.            {
  55.                ex.Source = null;
  56.            }
  57.            return null;
  58.        }
  59.  
  60.  
  61.    }
  62. }
  63.  



La funcion en este código que devuelve la ruta o directorio de un archivo o carpeta es esta :

Código
  1.        //Función que retorna el directorio seleccionado en Explorer.exe
  2.        public string GetPathSelectExplorer()
  3.        {
  4.            SHDocVw.ShellWindows objShellWindows = new SHDocVw.ShellWindows();
  5.            try
  6.            {
  7.                foreach (SHDocVw.InternetExplorer Explorer in objShellWindows)
  8.                {
  9.                    Shell32.FolderItems items = ((Shell32.IShellFolderViewDual2)Explorer.Document).SelectedItems();
  10.                    foreach (Shell32.FolderItem item in items)
  11.                    {
  12.                       return item.Path;
  13.                    }
  14.                }
  15.            }
  16.            catch (Exception ex)
  17.            {
  18.                ex.Source = null;
  19.            }
  20.            return null;
  21.        }
  22.  

Pero vamos yo sigo opinando que tener que crear este enlace con Explorer.exe me parece poco elegante, es mejor un cuadro de diálogo o navegador de archivos desde tu propia aplicación, como hacen la mayoría de compresores conocidos.




y aqui otro codigo que encontre mas simple y a simple vista mia resulta de la misma manera

Código:
//case "comprimir":

                //    string file_name = string.Empty;

                //    OpenFileDialog openFileDialog1 = new OpenFileDialog();

                //    if (openFileDialog1.ShowDialog() == DialogResult.OK)
                //    {
                //        string dir = @openFileDialog1.FileName();
                //      string destino = Path.GetFileName(dir);


                //    }
                //    string sourceName = " ";
                //    string targetName = @"\Temp\Example.7z";
                //    ProcessStartInfo p = new ProcessStartInfo();
                //    p.FileName = "7za.exe";
                //    p.Arguments = "a -t7z \"" + targetName + "\" \"" +
                //        sourceName + "\" -mx=9";
                //    p.WindowStyle = ProcessWindowStyle.Hidden; Process x = Process.Start(p);
                //    x.WaitForExit();

¿Acaso te has molestado en ver mi respuesta anterior que hace eso mismo, abrir un cuadro de diálogo y al seleccionar un archivo o archivos los comprime?

Ya te vale  :¬¬
183  Programación / .NET (C#, VB.NET, ASP) / Re: 7-ZIp en: 23 Noviembre 2017, 01:45 am
@rigorvzla para empezar creo que valoras poco o nada los aportes y la ayuda que ofrece @Elektro. En ningún sitio, y repito de nuevo EN NINGÚN SITIO encontrarás la ayuda y la información gratuita y podría decirse, altruista sobre NET que te ofrece @Elektro. Yo personalmente he aprendido mucho de @Elektro y sus explicaciones así como de sus códigos. Que aunque a veces no resuelvan tu duda si que da pistas o indican el camino para llegar al objetivo que planteamos.

En cuanto a tu dudas sobre el código. No entiendo porqué quieres hacer lo de "sombrear" y "click" y que haga lo que debe hacer. Ya te he puesto un código que te abre un cuadro de diálogo en el que puedes seleccionar (sombrear) y clicar el archivo que quieras y además seleccionar múltiples archivos. ¿Has probado el código? ¿No te funciona?

Además, no explicas el modo que quieres que lo haga ¿Tal cual como WinZip o WinRar?  Digo yo que desde el menú de explorer . ¿no?


Si no es eso lo que pides ya es muy de hack. es trabajar desde Explorer.exe, hacer un hook (gancho, enlace) desde Explorer.exe a nuestro programa y capturar los archivos que haya seleccionados con el ratón.

Para qué complicarte tanto la vida.

Otra opción sería añadir unas claves al registro para mostrar la opción de comprimir con nuestro programa desde explorer, al seleccionarla nuestro programa (el tuyo) se abre, recibe el directorio del archivo a comprimir y éste se comprime. Pero incluso WinZip y WinRar te abre un cuadro de diálogo para elegir opciones así como la ruta donde guardar el archivo comprimido.

7z también tiene un modo 'ventana' con su propio explorador (como ya te propuse en otra respuesta).
184  Programación / .NET (C#, VB.NET, ASP) / Re: 7-ZIp en: 21 Noviembre 2017, 20:39 pm
Disculpa pero no se te entiende nada, no se que es "sobrear" un archivo, ni tampoco "que me tome el click y haga lo que debe hacer", ¿que es lo que debe hacer?. Intenta explicar todo con mejor detalle, sin prisa pero sin pausa lo que quieres hacer, por que así no vamos a ninguna parte...
:xD
Hombre, yo creo con "sobrear" supongo que quiso escribir "sombrear" o sea seleccionar un archivo y con que me tome el click y haga lo que debe hacer" es que lo comprima.

Por eso yo le he puesto lo del cuadro de diálogo, porque puedes seleccionar (sobrear), hacer clic y que comprima los archivos.

185  Programación / .NET (C#, VB.NET, ASP) / Re: 7-ZIp en: 21 Noviembre 2017, 19:45 pm
mi pregunta es como puedo dejar ese valor en blanco y que me tome el objeto que  tenga seleccionado con el click del raton, o que se cree un objeto con el clikck del raton para yo al tener ese valor capturado referenciarlo como archivo a comprimir.

Es posible añadir tu programa al menú emegergente de propiedades de archivos de Windows. Que aparezca tu programa y crear compresión del archivo o archivos seleccionados pero se vuelve un tema más complejo.


Sin embargo puedes implementar tu propio explorador o más fácil aún utilizar un cuadro de diálogo.

Puedes usar el cuadro OpenFileDialog.

Luego aplicar el modo "multiselect" para comprimir multiples archivos

Introducelos en una lista, por ejemplo un archivo temporal listfile.lst, lst.tmp, listfile.txt, lo que prefieras.

Finalmente aplicas el comando:

Código:
a NameFileZip @listfile.lst -t7z



También puedes crear otro cuadro de diálogo para elegir el destino y nombre del archivo y tipo.

Ejemplo:

    
Código
  1.     using (OpenFileDialog ofd = new OpenFileDialog())
  2.                {
  3.                    ofd.Title = "Archivos a comprimir";
  4.                    ofd.Filter = "All files|*.*";
  5.                    ofd.Multiselect = true;
  6.                    if ((ofd.ShowDialog() == DialogResult.OK))
  7.                    {
  8.                        System.IO.StreamWriter sw = new System.IO.StreamWriter("listfile.lst");
  9.                        //Crea una lista de archivos
  10.                        foreach (string n in ofd.FileNames)
  11.                        {
  12.                            sw.WriteLine(n);
  13.                        }
  14.                        sw.Close();
  15.                    }
  16.                }
  17.  
  18.  
  19.  
  20.                string targetName = "Example";
  21.                //Carpeta de destino
  22.                string pathDestination = "Prueba\\";
  23.                ProcessStartInfo p = new ProcessStartInfo();
  24.                p.FileName = "7za.exe";
  25.                p.Arguments = "a " + pathDestination + targetName + " @listfile.lst" + " -t7z";
  26.                p.WindowStyle = ProcessWindowStyle.Hidden;
  27.                Process x = Process.Start(p);
  28.                x.WaitForExit();
  29.                System.IO.File.Delete("listfile.lst");
  30.  


he añadido  al código para borrar la lista una vez usada por 7za.exe
Código
  1. System.IO.File.Delete("listfile.lst");

También he cambiado el título al cuadro de diálogo porque le puse "Abrir imagen" que no es el caso   :P

También había una errata entre comillas porque puse
Código
  1.   p.FileName = "7z.exe";
y no
Código
  1.   p.FileName = "7za.exe";

He usado una versión más vieja la 16, por eso puse 7z.exe y no 7za.exe
186  Foros Generales / Foro Libre / Un grupo de senderistas empuja a un jabalí por un barranco en la Ruta del Cares en: 21 Noviembre 2017, 15:52 pm
Esto pasa porque los seres humanos no somos tan racionales como creemos.

Yo estuve en un grupo por la montaña, en Extremadura, rodeado de encinas. Pues resulta que había una especie de lagarto verde y grande en una rama, algo así.



Entonces uno de ellos empezó a tirarle piedras hasta que calló del árbol y luego sin venir a cuento lo aplasta con un pie, lo mata y luego se ríe.

Yo algo indignado le pregunto que porqué lo hizo, entonces se encoje de hombre y dice  -no se...-, con una sonrisa.

En fin, no se puede ser más irracional que eso.  :-\
187  Programación / .NET (C#, VB.NET, ASP) / Re: 7-ZIp en: 21 Noviembre 2017, 15:30 pm
Ya @Elektro te a respondido muy bien mientras yo intentaba ver cual era tu error.

Te doy esta respuesta más simplista ya que el código que expones está bien, solo hay varios errores en el argumento.


Código
  1. p.FileName = "7za.exe";
Solo necesitas la de consola 7za.exe y 7za.dll. Si lo tienes en otro directorio debes especificarlo ej.: p.Filename = "D:\\7za.exe"


Los argumentos están mal. Debe ser:

Código:
a destino " "  archivo/s  -t7z -mx=9

Nota: El destino debe contener también el nombre del archivo y no hace falta poner extensión pues ya especificas el tipo de archivo  con "-t7z".

Igualmente si pones como destino "D:\\Example.7z" no hace falta poner "-t7z" porque 7za.exe ya establecería el formato de archivo correspondiente.

 
Código
  1.          string sourceName = "ExampleText.txt";
  2.            string targetName = "Example";
  3.            ProcessStartInfo p = new ProcessStartInfo();
  4.            p.FileName = "7za.exe";
  5.  
  6.            p.Arguments = "a " +  targetName + " " + sourceName + " -t7z -mx=9";
  7.            p.WindowStyle = ProcessWindowStyle.Hidden;
  8.  
  9.            Process x = Process.Start(p);
  10.            x.WaitForExit();
  11.  

Si lo hicieras así crearía una carpeta llamada prueba en el mismo directorio del programa:

          
Código
  1. string sourceName = "ExampleText.txt";
  2.            string targetName = "Example";
  3.            string pathDestination = "Prueba\\";
  4.            ProcessStartInfo p = new ProcessStartInfo();
  5.            p.FileName = "7za.exe";
  6.  
  7.            p.Arguments = "a " + pathDestination + targetName + " " + sourceName + " -t7z -mx=9";
  8.            p.WindowStyle = ProcessWindowStyle.Hidden;
  9.  
  10.            Process x = Process.Start(p);
  11.            x.WaitForExit();
  12.  


Comandos 7za.exe v.17.1.0.0
Código:
Usage: 7za <command> [<switches>...] <archive_name> [<file_names>...]

<Commands>
  a : Add files to archive
  b : Benchmark
  d : Delete files from archive
  e : Extract files from archive (without using directory names)
  h : Calculate hash values for files
  i : Show information about supported formats
  l : List contents of archive
  rn : Rename files in archive
  t : Test integrity of archive
  u : Update files to archive
  x : eXtract files with full paths

<Switches>
  -- : Stop switches parsing
  @listfile : set path to listfile that contains file names
  -ai[r[-|0]]{@listfile|!wildcard} : Include archives
  -ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
  -ao{a|s|t|u} : set Overwrite mode
  -an : disable archive_name field
  -bb[0-3] : set output log level
  -bd : disable progress indicator
  -bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
  -bt : show execution time statistics
  -i[r[-|0]]{@listfile|!wildcard} : Include filenames
  -m{Parameters} : set compression Method
    -mmt[N] : set number of CPU threads
    -mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)
  -o{Directory} : set Output directory
  -p{Password} : set Password
  -r[-|0] : Recurse subdirectories
  -sa{a|e|s} : set Archive name mode
  -scc{UTF-8|WIN|DOS} : set charset for for console input/output
  -scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
  -scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
  -sdel : delete files after compression
  -seml[.] : send archive by email
  -sfx[{name}] : Create SFX archive
  -si[{name}] : read data from stdin
  -slp : set Large Pages mode
  -slt : show technical information for l (List) command
  -snh : store hard links as links
  -snl : store symbolic links as links
  -sni : store NT security information
  -sns[-] : store NTFS alternate streams
  -so : write data to stdout
  -spd : disable wildcard matching for file names
  -spe : eliminate duplication of root folder for extract command
  -spf : use fully qualified file paths
  -ssc[-] : set sensitive case mode
  -ssw : compress shared files
  -stl : set archive timestamp from the most recently modified file
  -stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
  -stx{Type} : exclude archive type
  -t{Type} : Set type of archive
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
  -v{Size}[b|k|m|g] : Create volumes
  -w[{path}] : assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
  -y : assume Yes on all queries



188  Programación / .NET (C#, VB.NET, ASP) / Re: Ayuda necesito que el pc lea en: 20 Noviembre 2017, 01:19 am
buenas amigos les traigo lo siguiente , hago un programa simple donde lo que quiero es que  cuando yo sombree algo con el raton y diga "leer" el programa lo haga sin mas nada. aqui esta mi intento fallido si alguien me sabe seria de gran ayuda.

Código:
case "leer":
                    /   TextReader leer_eso;
                        leer_eso = new TextReader.Read();
                        speakOut(leer_eso.ReadLine());
                       break;
Cuando dices "leer" ¿te refieres a copiar al portapapeles?

De cualquier aplicación o de la misma
189  Programación / .NET (C#, VB.NET, ASP) / Re: ¿Por qué me salen botones repetidos? en: 19 Noviembre 2017, 14:29 pm
hola buenas


Así a ojo creo que creas los botones uno desde groupBox_Bandeja y otro desde  Form1.


Prueba...
Código:
# Cargo los Assemblies (necesario para definir el form).
[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms")
[void][reflection.assembly]::loadwithpartialname("System.Drawing")

            $label_Mensaje = New-Object System.Windows.Forms.Label
            $button_Abrir = New-Object System.Windows.Forms.Button
            $button_Cerrar = New-Object System.Windows.Forms.Button
            $groupBox_Bandeja = New-Object System.Windows.Forms.GroupBox

            #
            # label_Mensaje
            #
            $label_Mensaje.Location = New-Object System.Drawing.Point(12, 9)
            $label_Mensaje.Name = "label_Mensaje"
            $label_Mensaje.Size = New-Object System.Drawing.Size(58, 13)
            $label_Mensaje.Text = "Abriendo..."
            #
            # button_Abrir
            #
            $button_Abrir.Location = New-Object System.Drawing.Point(31, 30)
            $button_Abrir.Name = "button_Abrir"
            $button_Abrir.Size = New-Object System.Drawing.Size(75, 23)
            $button_Abrir.Text = "Abrir"         
            #
            # button_Cerrar
            #
            $button_Cerrar.Location = New-Object System.Drawing.Point(139, 30)
            $button_Cerrar.Name = "button_Cerrar"
            $button_Cerrar.Size = New-Object System.Drawing.Size(75, 23)
            $button_Cerrar.Text = "Cerrar"
            #
            # groupBox_Bandeja
            #
            $groupBox_Bandeja.Location = New-Object System.Drawing.Point(15, 118)
            $groupBox_Bandeja.Name = "groupBox_Bandeja"
            $groupBox_Bandeja.Size = New-Object System.Drawing.Size(250, 97)
            $groupBox_Bandeja.Text = "Bandeja"

            #
            # Form1
            #
            #$AutoScaleDimensions = New-Object System.Drawing.SizeF(6F, 13F)
            #$AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            $Form.ClientSize = New-Object System.Drawing.Size(284, 261)
            $Form.Controls.Add($groupBox_Bandeja)
    $groupBox_Bandeja.Controls.Add($button_Cerrar)
            $groupBox_Bandeja.Controls.Add($button_Abrir)
            $Form.Controls.Add($label_Mensaje)
            $Form.Name = "Form1"
            $Form.Text = "Ventana PowerShell"

            # Ejecuto el formulario.
            [void]$Form.ShowDialog()

190  Programación / .NET (C#, VB.NET, ASP) / Re: Detectar cuando la bandeja del lector está abierta o cerrada en: 19 Noviembre 2017, 03:06 am
Hola:

Me ejecuta el programa. Como sabrás, no hay botón para abrir y cerrar la bandeja. Así sin más no pasa nada.

Puse un botón y este código en el cual no furula. Xdddd.

Código
  1.        private void button_Abrir_Click(object sender, EventArgs e)
  2.        {
  3.            EventWatcher_EventArrived();
  4.        }

Saludos.
Hombre así tal cual...

Sería así:
Código
  1. this.EventWatcher.Start();


He hecho esta emulación de lo que se podría hacer pero el thread debería ejecutarse con load para cambiar el botón Cerrar, Abrir si el usuario abriera o cerrara desde el "eject" del propio lector, además que detecte si hay disco o no.

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Management;
  11. using System.IO;
  12. using System.Runtime.InteropServices;
  13. namespace WindowsFormsApplication1
  14. {
  15.    public partial class Form1 : Form
  16.    {
  17.        public Form1()
  18.        {
  19.            InitializeComponent();
  20.        }
  21.        private ManagementEventWatcher withEventsField_EventWatcher;
  22.        private ManagementEventWatcher EventWatcher
  23.        {
  24.            get { return withEventsField_EventWatcher; }
  25.            set
  26.            {
  27.                if (withEventsField_EventWatcher != null)
  28.                {
  29.                    withEventsField_EventWatcher.EventArrived -= EventWatcher_EventArrived;
  30.                }
  31.                withEventsField_EventWatcher = value;
  32.                if (withEventsField_EventWatcher != null)
  33.                {
  34.                    withEventsField_EventWatcher.EventArrived += EventWatcher_EventArrived;
  35.                }
  36.            }
  37.  
  38.        }
  39.  
  40.        [DllImport("winmm.dll")]
  41.        private static extern uint mciSendString(string sCommand, StringBuilder sReturn, uint cchReturn, IntPtr hwnd);
  42.        bool bolEject = false;
  43.        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  44.  
  45.        {
  46.            this.EventWatcher.Dispose();
  47.        }
  48.        private void Form1_Load(object sender, EventArgs e)
  49.        {
  50.            try
  51.            {
  52.                btnEject.Text = "Abrir";
  53.                WqlEventQuery eventQuery = new WqlEventQuery();
  54.                eventQuery.EventClassName = "__InstanceModificationEvent";
  55.                eventQuery.WithinInterval = new TimeSpan(0, 0, 1);
  56.                eventQuery.Condition = "TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 5";
  57.  
  58.  
  59.                EventWatcherOptions eventOptions = new EventWatcherOptions
  60.                {
  61.                    BlockSize = 1,
  62.                    Timeout = TimeSpan.MaxValue
  63.                };
  64.  
  65.                ManagementPath scopePath = new ManagementPath
  66.                {
  67.                    ClassName = "",
  68.                    NamespacePath = "root\\CIMV2",
  69.                    Path = "\\\\.\\root\\CIMV2",
  70.                    Server = "."
  71.                };
  72.  
  73.                ConnectionOptions scopeOptions = new ConnectionOptions
  74.                {
  75.                    Authentication = AuthenticationLevel.Default,
  76.                    EnablePrivileges = true,
  77.                    Impersonation = ImpersonationLevel.Impersonate,
  78.                    Timeout = TimeSpan.MaxValue
  79.                };
  80.  
  81.                ManagementScope scope = new ManagementScope("\\root\\CIMV2", scopeOptions);
  82.  
  83.                this.EventWatcher = new ManagementEventWatcher
  84.                {
  85.                    Options = eventOptions,
  86.                    Query = eventQuery,
  87.                    Scope = scope
  88.                };
  89.  
  90.                this.EventWatcher.Scope.Connect();
  91.             //  this.EventWatcher.Start();
  92.            }
  93.            catch (ManagementException ex)
  94.            {
  95.                Console.WriteLine(ex.Message);
  96.            }
  97.        }
  98.        private void EventWatcher_EventArrived(object sender, EventArrivedEventArgs e)
  99.        {
  100.            ManagementBaseObject wmiDevice = (ManagementBaseObject)e.NewEvent["TargetInstance"];
  101.            string VolumeName = null;
  102.            string driveName = (string)wmiDevice["DeviceID"];
  103.            if (wmiDevice.Properties["VolumeName"].Value != null)
  104.                  {
  105.             VolumeName  = wmiDevice.Properties["VolumeName"].Value.ToString();
  106.                  }
  107.            string Name = (string)wmiDevice["Name"];
  108.  
  109.            StringBuilder infoMessage = new StringBuilder();
  110.            infoMessage.AppendLine(driveName);
  111.            infoMessage.AppendLine(VolumeName);
  112.            infoMessage.AppendLine(Name);
  113.           this.Invoke(new Action(()  =>
  114.            {
  115.                if (wmiDevice.Properties["VolumeName"].Value != null)
  116.                {
  117.                    infoMessage.AppendLine("CD has been inserted");
  118.                    label1.Text = "Cerrado";
  119.                    btnEject.Text = "Abrir";
  120.                    bolEject = false;
  121.                }
  122.                else
  123.                {
  124.                    infoMessage.AppendLine("CD has been ejected");
  125.                    label1.Text = "Abierto";
  126.                    btnEject.Text = "Cerrar";
  127.                    bolEject = true;
  128.  
  129.  
  130.                }
  131.                btnEject.Enabled = true;
  132.            }));
  133.            this.EventWatcher.Stop();
  134.            MessageBox.Show(infoMessage.ToString());
  135.  
  136.        }
  137.  
  138.        private void btnEject_Click(object sender, EventArgs e)
  139.        {
  140.  
  141.            IntPtr ptr = IntPtr.Zero;
  142.            StringBuilder returnstring = new StringBuilder();
  143. this.EventWatcher.Start();
  144. if (bolEject == false) {
  145. this.label1.Text = "Abriendo...";
  146.            mciSendString("set CDAudio door open", returnstring, 127, IntPtr.Zero);
  147.  
  148.  
  149. } else {
  150.            this.label1.Text = "Cerrando...";
  151.            mciSendString("set CDAudio door closed", returnstring, 127, IntPtr.Zero);
  152. }
  153.  
  154. btnEject.Enabled = false;
  155.  
  156.        }
  157.  
  158.    }
  159. }
  160.  


Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 80
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines