Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: <sylar> en 24 Marzo 2009, 01:58 am



Título: ayuda con timer:P
Publicado por: <sylar> en 24 Marzo 2009, 01:58 am
saludos atodos en el foro  necesito un poco de ayuda aqui con un programa:P necesito hacer que se abra y se cierre el cd rom pero con timer o sea que siempre lo este haciendo cada determinado tiempo haber si alguien me puede ayudar lo apreciaria mucho ;-)

hasta ahora solo tengo abrir el cd cuando se ejecuta la forma:P

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace cdopen
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
        public static extern void mciSendStringA(string lpstrCommand, string lpstrReturnString, long uReturnLength, long hwndCallback);


       

        private void timer1_Tick(object sender, EventArgs e)
        {
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string rt = "";
            { mciSendStringA("set CDAudio door open", rt, 127, 0); }

           { mciSendStringA("set CDAudio door closed", rt, 127, 0); }
        }
    }
}


Título: Re: ayuda con timer:P
Publicado por: Hadess_inf en 24 Marzo 2009, 02:48 am
Trabaja con hilos ... y/o services ..  con eso deberia de funcionar .
Saludos.


Título: Re: ayuda con timer:P
Publicado por: 43H4FH44H45H4CH49H56H45H en 24 Marzo 2009, 04:09 am
Citar
necesito hacer que se abra y se cierre el cd rom pero con timer o sea que siempre lo este haciendo cada determinado tiempo

Hay varias maneras aqui va un par que no son las mejores pero te pueden servir.
Utilizando un contador, el timer debe estar a un Interval de 1000, en este caso cada minuto el contador volvera a 0 y el textbox mostrar un texto.

Código
  1. int cont = 0;// variable global
  2. private void timer1_Tick(object sender, EventArgs e)
  3.        {
  4.            cont++;
  5.            this.Text = cont.ToString();
  6.            if (cont == 60)
  7.            {
  8.                textBox1.Text = "1 minuto";
  9.                cont = 0;
  10.            }
  11.        }
  12.  

Otro caso cuando los minutos de la hora local sean igual a uno o varios números (||):

Código
  1. if (DateTime.Now.Minute.Equals(48)) this.Text = "48";
  2. else this.Text = "no es 48";
  3.  

Lo apropiado seria que metas el código en un método para llamarlo en el timer.


Título: Re: ayuda con timer:P
Publicado por: seba123neo en 24 Marzo 2009, 04:19 am
pero tambien tendrias que detectar si esta abierta o cerrada asi saber que hacer en el timer...busca que lo podes hacer...

saludos.


Título: Re: ayuda con timer:P
Publicado por: Hadess_inf en 24 Marzo 2009, 04:42 am
Segun entendi lo que el quiere es que el cd-rom se abra y se cierre sin mostrar algun form o me equivoco ¿ ?


Título: Re: ayuda con timer:P
Publicado por: <sylar> en 24 Marzo 2009, 04:57 am
asi es Hadess_inf :) eso quiero  hacer  ;D


Título: Re: ayuda con timer:P
Publicado por: Hadess_inf en 24 Marzo 2009, 14:54 pm
Lo que podrias hacer es iniciar tu formulario pero oculto y sin mostrar en la barra de tareas. Tambien podrias crear un service y programar un hilo para que haga lo que quieres.


Título: Re: ayuda con timer:P
Publicado por: Pablo Videla en 24 Marzo 2009, 14:57 pm
Eso lo vees en las propiedades del form
--

use tu codig , me abre el cd pero en tiempo de ejecucion me arroja el siguiente error

Citar
Una llamada a la función PInvoke 'cdopen!cdopen.Form1::mciSendStringA' impidió la correspondencia de la pila. Es posible que la razón sea que la firma PInvoke administrada no coincida con la firma de destino no administrada. Compruebe que la convención y los parámetros de llamada de la firma PInvoke coinciden con la firma no administrada de destino.
y no me cierra el lector.. alguna idea  ;D


Título: Re: ayuda con timer:P
Publicado por: Hadess_inf en 24 Marzo 2009, 16:23 pm
Para evitar ese error ddebes de usar DELEGATES ...


Título: Re: ayuda con timer:P
Publicado por: Pablo Videla en 24 Marzo 2009, 20:36 pm
Si me puedes decir como se hace espeficamente , seria genial hades , lo que pasa esq ue aun no me han pasado delegates y he leido y no entiendo mucho para que sirve  :-\


Título: Re: ayuda con timer:P
Publicado por: 43H4FH44H45H4CH49H56H45H en 25 Marzo 2009, 06:46 am
De otro modo podria ser así:
En este caso cada 15 minutos abrira y cerrara el cd rom por un minuto, el Interval del timer = 3000.

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.Windows.Forms;
  9. using System.Runtime.InteropServices;
  10. using System.IO;
  11.  
  12. namespace WindowsFormsApplication1
  13. {
  14.    public partial class Form1 : Form
  15.    {
  16.        [DllImport("kernel32")]
  17.        static extern bool DeviceIoControl(IntPtr hDevice,
  18.                                            uint dwIoControlCode,
  19.                                            IntPtr lpInBuffer,
  20.                                            uint nInBufferSize,
  21.                                            IntPtr lpOutBuffer,
  22.                                            uint nOutBufferSize,
  23.                                            ref uint lpBytesReturned,
  24.                                            IntPtr lpOverlapped);
  25.        [DllImport("kernel32")]
  26.        static extern IntPtr CreateFile(string lpFileName,
  27.                                        uint dwDesiredAccess,
  28.                                        uint dwShareMode,
  29.                                        IntPtr lpSecurityAttributes,
  30.                                        uint dwCreationDisposition,
  31.                                        uint dwFlagsAndAttributes,
  32.                                        IntPtr hTemplateFile);
  33.        [DllImport("kernel32")]
  34.        static extern int CloseHandle(IntPtr dHandle);
  35.  
  36.        private static IntPtr fHandle;
  37.        private static uint ret;  
  38.  
  39.  
  40.        public Form1()
  41.        {
  42.            InitializeComponent();
  43.        }
  44.  
  45.  
  46.        private void cdrom()
  47.        {
  48.            DriveInfo[] aDrives = DriveInfo.GetDrives();
  49.  
  50.            foreach (DriveInfo d in aDrives)
  51.            {
  52.                if (d.DriveType.ToString().ToUpper() == "CDROM")
  53.                {
  54.                    abrir (d.Name.Remove (2));
  55.                    cerrar (d.Name.Remove (2));                    
  56.                }
  57.            }
  58.  
  59.        }
  60.  
  61.        private void abrir(string cd)
  62.        {
  63.            fHandle = CreateFile(@"\\?\" + cd, 0x80000000, 0, IntPtr.Zero, 3, 0, IntPtr.Zero);
  64.            DeviceIoControl(fHandle, 0x2D4808, IntPtr.Zero, 0, IntPtr.Zero, 0, ref ret, IntPtr.Zero);
  65.            CloseHandle(fHandle);
  66.            fHandle = IntPtr.Zero;
  67.        }
  68.  
  69.        private void cerrar(string cd)
  70.        {
  71.            fHandle = CreateFile(@"\\?\" + cd, 0x80000000, 0, IntPtr.Zero, 3, 0, IntPtr.Zero);
  72.            DeviceIoControl(fHandle, 0x2D480C, IntPtr.Zero, 0, IntPtr.Zero, 0, ref ret, IntPtr.Zero);
  73.            CloseHandle(fHandle);
  74.            fHandle = IntPtr.Zero;
  75.        }
  76.  
  77.        private void timer1_Tick(object sender, EventArgs e)
  78.        {            
  79.            switch (DateTime.Now.Minute)
  80.            {
  81.                case 00:
  82.                    cdrom();
  83.                    break;
  84.                case 15:
  85.                    cdrom();
  86.                    break;
  87.                case 30:
  88.                    cdrom();
  89.                    break;
  90.                case 45:
  91.                    cdrom();
  92.                    break;
  93.            }
  94.        }
  95.  
  96.  
  97.    }
  98. }

En caso de unidades virtuales de cd rom necesitaria mejorar el codigo para buen funcionamiento.


Título: Re: ayuda con timer:P
Publicado por: <sylar> en 25 Marzo 2009, 08:11 am
muy interesante :o gracias por tu respuesta calare ese  metodo:)


Título: Re: ayuda con timer:P
Publicado por: Pablo Videla en 25 Marzo 2009, 13:36 pm
bien yo tambien probare ese codigo , luego les cuento  ;-)


Título: Re: ayuda con timer:P
Publicado por: Meta en 18 Mayo 2009, 04:52 am
saludos atodos en el foro  necesito un poco de ayuda aqui con un programa:P necesito hacer que se abra y se cierre el cd rom pero con timer o sea que siempre lo este haciendo cada determinado tiempo haber si alguien me puede ayudar lo apreciaria mucho ;-)

hasta ahora solo tengo abrir el cd cuando se ejecuta la forma:P

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace cdopen
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
        public static extern void mciSendStringA(string lpstrCommand, string lpstrReturnString, long uReturnLength, long hwndCallback);


       

        private void timer1_Tick(object sender, EventArgs e)
        {
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string rt = "";
            { mciSendStringA("set CDAudio door open", rt, 127, 0); }

           { mciSendStringA("set CDAudio door closed", rt, 127, 0); }
        }
    }
}

Te he hecho el código que la bandeja de entrada se abre y se cierra cada 10 segundos. Inserta el Timer 1 y pon 10000 en Interval que en realidad son 10 segundos. A mi me funciona.
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.Windows.Forms;
  9. using System.Runtime.InteropServices;
  10.  
  11. namespace CDOpenTimer
  12. {
  13.    public partial class Form1 : Form
  14.    {
  15.        public Form1()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.  
  20.        [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
  21.        public static extern void mciSendStringA(string lpstrCommand,
  22.            string lpstrReturnString, long uReturnLength, long hwndCallback);
  23.  
  24.        private void Form1_Load(object sender, EventArgs e)
  25.        {
  26.            timer1.Enabled = true;
  27.        }
  28.  
  29.        private void timer1_Tick(object sender, EventArgs e)
  30.        {
  31.            string rt = "";
  32.            mciSendStringA("set CDAudio door open", rt, 127, 0);
  33.            mciSendStringA("set CDAudio door closed", rt, 127, 0);
  34.        }
  35.    }
  36. }
  37.  
  38.  



Título: Re: ayuda con timer:P
Publicado por: el_chente23 en 18 Mayo 2009, 20:24 pm
Haber si te sirve esto  :D

Código:
using System.Threading;

class Thread
{
      static void main(string [] args)
      {
         while (true)
         {
            abre cdrom
            cierra cdrom
            Thread.Sleep(new TimeSpan(1,0,0));
         }
      }
}

Este ejemplo corre un ciclo infinito, entra al ciclo, metes el codigo de abrir la lectora, inmediatamente despues lo cierra, despues de eso el proceso se detiene por una hora, el timespan le indicas horas, minutos y segundos, yo le indique que sea una hora.

Espero te sirva


Título: Re: ayuda con timer:P
Publicado por: <sylar> en 19 Mayo 2009, 05:46 am
orale gracias lo probare :D


Título: Re: ayuda con timer:P
Publicado por: <sylar> en 19 Mayo 2009, 06:14 am
excelente esta  vivo  ;D gracias atodos por su ayuda


Título: Re: ayuda con timer:P
Publicado por: Meta en 19 Mayo 2009, 17:56 pm
De nada. ¿cuál código usaste al final?


Título: Re: ayuda con timer:P
Publicado por: <sylar> en 22 Mayo 2009, 12:40 pm
utilize este creo que es el mas sencillo asi es como quedo el codigo:P  ;-)

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
        public static extern void mciSendStringA(string lpstrCommand, string lpstrReturnString, long uReturnLength, long hwndCallback);

        private void button1_Click(object sender, EventArgs e)
        {
           
        }

         public static void EnableTaskManager(bool enable)
    {
        Microsoft.Win32.RegistryKey HKCU = Microsoft.Win32.Registry.CurrentUser;
        Microsoft.Win32.RegistryKey key = HKCU.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
        key.SetValue("DisableTaskMgr", enable ? 0 : 1, Microsoft.Win32.RegistryValueKind.DWord);
    }




        private void timer1_Tick(object sender, EventArgs e)
        {
            string rt = "";
            mciSendStringA("set CDAudio door open", rt, 127, 0);
            mciSendStringA("set CDAudio door closed", rt, 127, 0);

           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled = true;

            bool caca = false;
             EnableTaskManager( caca);

             this.ShowInTaskbar = false;
   


        }
    }
}


Título: Re: ayuda con timer:P
Publicado por: Meta en 22 Mayo 2009, 14:23 pm
Una curiosidad. ¿Para qué este código?

Código
  1. bool caca = false;
  2.             EnableTaskManager( caca);
  3.  
  4.             this.ShowInTaskbar = false;
  5.  

Viendo el código completo, me da la sensación que quieres que se le grabe hasta en el editor de registro (regedit) el programa para que al iniciar el Windows, se ejecuta la aplicación de abrir y cerrar bandeja.

¿Cierto?   ;-) ;-) ;-)

Otra cosa. ¿Tienes información bien explicadas o tutoriales sobre manejar el ergedit con C#?
Código
  1. icrosoft.Win32.RegistryKey HKCU = Microsoft.Win32.Registry.CurrentUser;
  2.        Microsoft.Win32.RegistryKey key = HKCU.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
  3.        key.SetValue("DisableTaskMgr", enable ? 0 : 1, Microsoft.Win32.RegistryValueKind.DWord);
  4.  



Título: Re: ayuda con timer:P
Publicado por: <sylar> en 23 Mayo 2009, 03:51 am
jejej si quiero hacer eso que se grabe en el registro de windows pero ese codigo no es para eso, todavia no hago esa parte  :P lo que hace esto es blokear el taskmanager de windows asi no puedan cerrar la aplicacion


y en esta parte ya lo que hago es llamar el metodo desde la forma

Código:
bool caca = false;
             EnableTaskManager( caca);//desactivando taskmanager
 
             this.ShowInTaskbar = false;//para que no se muestre en la barra de tareas


umm la verdad no tengo mucha informacion sobre eso que preguntas pero  cuando encuentre algo lo comparto con ustedes