Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - okik

#191
hola buenas

Tras leer el comentario de @Elektro en el otro tema(Hacer funcionar el lector de bandeja de discos con este lenguaje .net), decidí entrar aquí a ver el código de @Elektro.

Bueno, a mí tampoco me funcionaba el código de @Elektro pero conseguí que funcionara tras algunos cambios, especialmente con TimeSpan y ManagementBaseObject.

El caso es que ya me funciona y aquí dejo el código (que es un 99% del de @Elektro pero vamos  :P)

Pero antes algunos detalles,
- Desde NET, debe agregarse, desde 'agregar referencia'  la librería System.Management
- La unidad de CD/DVD ROM debe contener un disco en su interior, de lo contrario este código no hace nada de nada.

NOTA: En ambos casos he usado el un proyecto "Aplicación de Windows Forms"

C#
Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Management;
using System.IO;
namespace WindowsFormsApplication1
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }
       private ManagementEventWatcher withEventsField_EventWatcher;
       private ManagementEventWatcher EventWatcher
       {
           get { return withEventsField_EventWatcher; }
           set
           {
               if (withEventsField_EventWatcher != null)
               {
                   withEventsField_EventWatcher.EventArrived -= EventWatcher_EventArrived;
               }
               withEventsField_EventWatcher = value;
               if (withEventsField_EventWatcher != null)
               {
                   withEventsField_EventWatcher.EventArrived += EventWatcher_EventArrived;
               }
           }

       }

       private void Form1_FormClosing(object sender, FormClosingEventArgs e)
       {
           this.EventWatcher.Dispose();
       }
       private void Form1_Load(object sender, EventArgs e)
       {
           try
           {
               WqlEventQuery eventQuery = new WqlEventQuery();
               eventQuery.EventClassName = "__InstanceModificationEvent";
               eventQuery.WithinInterval = new TimeSpan(0, 0, 1);
               eventQuery.Condition = "TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 5";


               EventWatcherOptions eventOptions = new EventWatcherOptions
               {
                   BlockSize = 1,
                   Timeout = TimeSpan.MaxValue
               };

               ManagementPath scopePath = new ManagementPath
               {
                   ClassName = "",
                   NamespacePath = "root\\CIMV2",
                   Path = "\\\\.\\root\\CIMV2",
                   Server = "."
               };

               ConnectionOptions scopeOptions = new ConnectionOptions
               {
                   Authentication = AuthenticationLevel.Default,
                   EnablePrivileges = true,
                   Impersonation = ImpersonationLevel.Impersonate,
                   Timeout = TimeSpan.MaxValue
               };

               ManagementScope scope = new ManagementScope("\\root\\CIMV2", scopeOptions);

               this.EventWatcher = new ManagementEventWatcher
               {
                   Options = eventOptions,
                   Query = eventQuery,
                   Scope = scope
               };

               this.EventWatcher.Scope.Connect();
               this.EventWatcher.Start();
           }
           catch (ManagementException ex)
           {
               Console.WriteLine(ex.Message);
           }
       }
       private void EventWatcher_EventArrived(object sender, EventArrivedEventArgs e)
       {
         ManagementBaseObject wmiDevice = (ManagementBaseObject)e.NewEvent["TargetInstance"];
           string VolumeName = null;
           string driveName = (string)wmiDevice["DeviceID"];
           if (wmiDevice.Properties["VolumeName"].Value != null)
                 {
            VolumeName  = wmiDevice.Properties["VolumeName"].Value.ToString();
                 }
           string Name = (string)wmiDevice["Name"];

           StringBuilder infoMessage = new StringBuilder();
           infoMessage.AppendLine(driveName);
           infoMessage.AppendLine(VolumeName);
           infoMessage.AppendLine(Name);
           if (wmiDevice.Properties["VolumeName"].Value != null)
           {
               infoMessage.AppendLine("CD has been inserted");

           }
           else
           {
               infoMessage.AppendLine("CD has been ejected");

           }
           MessageBox.Show(infoMessage.ToString());
       }
 
   }
}



VB.NET
Código (vbnet) [Seleccionar]


Imports System.Management
Imports System.IO

Public Class Form1
   Private WithEvents EventWatcher As ManagementEventWatcher

   Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing

   End Sub
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

       Try
           Dim eventQuery As New WqlEventQuery()
           eventQuery.EventClassName = "__InstanceModificationEvent"
           eventQuery.WithinInterval = New TimeSpan(0, 0, 1)
           eventQuery.Condition = "TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 5"

         
           Dim eventOptions As New EventWatcherOptions With {
                .BlockSize = 1,
                .Timeout = TimeSpan.MaxValue
            }

           Dim scopePath As New ManagementPath With {
               .ClassName = "",
               .NamespacePath = "root\CIMV2",
               .Path = "\\.\root\CIMV2",
               .Server = "."
           }

           Dim scopeOptions As New ConnectionOptions With {
               .Authentication = AuthenticationLevel.Default,
               .EnablePrivileges = True,
               .Impersonation = ImpersonationLevel.Impersonate,
               .Timeout = TimeSpan.MaxValue
           }

           Dim scope As New ManagementScope("\root\CIMV2", scopeOptions)

           Me.EventWatcher = New ManagementEventWatcher With {
               .Options = eventOptions,
               .Query = EventQuery,
               .Scope = scope
           }

           Me.EventWatcher.Scope.Connect()
           Me.EventWatcher.Start()
       Catch ex As ManagementException
           Console.WriteLine(ex.Message)
       End Try
   End Sub

   Private Sub EventWatcher_EventArrived(sender As Object, e As EventArrivedEventArgs) Handles EventWatcher.EventArrived
         Dim wmiDevice As ManagementBaseObject = DirectCast(e.NewEvent("TargetInstance"), ManagementBaseObject)
       Dim driveName As String = DirectCast(wmiDevice("DeviceID"), String)
       Dim VolumeName As String = wmiDevice.Properties("VolumeName").Value
       Dim Name As String = DirectCast(wmiDevice("Name"), String)

       Dim infoMessage As New StringBuilder
       infoMessage.AppendLine(driveName)
       infoMessage.AppendLine(VolumeName)
       infoMessage.AppendLine(Name)
       If wmiDevice.Properties("VolumeName").Value IsNot Nothing Then
           infoMessage.AppendLine("CD has been inserted")

       Else
           infoMessage.AppendLine("CD has been ejected")

       End If
       MessageBox.Show(infoMessage.ToString)
   End Sub

   Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
       Me.EventWatcher.Dispose()
   End Sub

End Class



#192
Cita de: Meta en 16 Noviembre 2017, 09:55 AM
Hola:

Buscando mciSendString encontré algunas cosas.

Comandos.

status.

¿Qué información quieres sacar exactamente con status?

La verdad no se el motivo.

Mi objeto al tema principal que pregunto. Es conseguir el mismo resultado de abrir y cerrar la bandeja del lector de disco con el lenguaje F#. Puse otros lenguajes que si funciona de C#, VB y C++ para que lo entienda mucha gente. Mi problema que no se hacerlo con F#.

Saludos.

mmm no se programar en F# :-\

El objetivo del comando "status" era saber el estado de apertura del lector si abierto o cerrado. Al menos para eso creía yo que serbia.
#193
Buen aporte Meta, gracias  ;-)

Lo que no entiendo es porqué al usar el comando "status" mciSendString siempre me devuelve "open"

Código (vbnet) [Seleccionar]

 Const cchReturnLen As UInteger = 255
       Dim sRet As New StringBuilder(CInt(cchReturnLen))
       Dim err As UInteger = mciSendString("status cdaudio mode", sRet, cchReturnLen, IntPtr.Zero)
       MessageBox.Show(sRet.ToString)



Código (vbnet) [Seleccionar]
    <DllImport("winmm.dll")> _
    Private Shared Function mciSendString(sCommand As String, sReturn As StringBuilder, cchReturn As UInteger, hwnd As IntPtr) As UInteger
    End Function

#194
vaya, y si te lo pones "en otro sitio", no digo donde... ¿Qué pasa?
#195
Cita de: JugadorON en 14 Noviembre 2017, 13:39 PM
No tengo espejos traseros, tendré que fiarme de la máquina, por eso tiene que ser buena.

buff, eres un poco corto "de pelo" ¿no? jeje.

Te pones delante de un espejo normal, con una mano sujetas la máquina y con la otra el espejo pequeño de mano, como los que llevan muchas mujeres en el bolso  o de tocador por ejemplo.



Te colocas de espaldas al espejo normal (el grande de pared) y el espejo pequeño (el de mano) te lo pones delante de los ojos de modo que puedas ver reflejado  el espejo que tienes a tu espalda. Así podrás ver tu parte trasera.

Algunos espejos pequeños que se usan para maquillaje no son totalmente planos y aumentan la imagen. Estos van muy bien.

Incluso puedes usar el móvil. (venga va, animaos a hacer un App para esto  ;))

En fin algo así:




Fuente:
Yo lo hago  :xD





#196
Hola
Simplemente usa las coordenadas del mouse para mover el picture:

Código (vb) [Seleccionar]
      PicContainer.Left = ListView1.ColumnHeaders.Item(1).Width '//Coloca la imagen al final de la columna
          'PicContainer.Left = Item.Width + 50 '//Coloca la imagen al final de texto
          'PicContainer.Left = x '//Coloca la imagen en el lugar del puntero
          PicContainer.Top = Item.Top + Item.Height + 40


Ejemplo:
Código (vb) [Seleccionar]

Private Sub Listview1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
   'variable para el item seleccionado
   Dim Item As ListItem

   ' verifica que se presionó el botón derecho
   If Button = vbRightButton Then
         
       ' HitTest devuelve la ferencia al item, a partir _
        de las coordenadas del mouse
       Set Item = ListView1.HitTest(x, y)
         
       ' chequea que haya un item seleccionado
       If Not Item Is Nothing Then
             
           ' Selecciona el elemento
           Set ListView1.SelectedItem = Item
             
           ' texto del elemento seleccionado
           Me.Caption = Item.Text
           
           PicContainer.Visible = True
           lblListaDe.Caption = ListView1.SelectedItem.SubItems(1)
          PicContainer.Left = ListView1.ColumnHeaders.Item(1).Width '//Coloca la imagen al final de la columna
          'PicContainer.Left = Item.Width + 50 '//Coloca la imagen al final de texto
          'PicContainer.Left = x '//Coloca la imagen en el lugar del puntero
          PicContainer.Top = Item.Top + Item.Height + 40
       End If
       
    Else
   
       PicContainer.Visible = False
               
   End If
   
End Sub



Como ves he deshabilitado varias líneas de código a la hora de colocar la imagen, una al final de la columna (habilitada), otra al final del texto, y otra justo en el mismo lugar en el que se encuentre el puntero. Según te guste más.


suerte
#197
Tengo la duda de si se trata de estafa o captación por una  secta  :-\
#198
Cita de: buite en 10 Noviembre 2017, 10:23 AM
Yo soy católico porque me bautizaron, pero no soy practicante.

Hombre, a mi también me bautizaron pero no me considero católico, más que nada porque se hizo en contra de mi voluntad. Qué podía hacer yo si solo era un bebe.  Que un cura me echara agua en la cabeza no me convierte en católico.

Igualmente un musulmán me dijo - tu eres cristiano porque eres español - si hombre, lo que tu digas. Por esta regla de tres un  musulmán nacido en España es cristiano  aunque practique el Islam ¿no? O un árabe o de oriente medio  que es cristiano es musulman porque es árabe.  ;-)

Por cierto, a buenas horas comentas, este tema es de abril.
#199
Hola

Hay técnicas para mejorar el cálculo mental.

Lo bueno del siguiente sistema:
-  Lo puedes hacer donde quieras y cuando quieras, cuando comes, ves la TV, corres, nadas, caminas, paseas, conduces, viajas, etc

-  No necesitas ningún App, solo tu mente.

Lo malo del siguiente sistema:
- Se requiere constancia y fuerza de voluntad.

Ejemplos:

Suma mentalmente...
+2 + 2 +2 +2 +2... hasta 100
+3 + 3 + 3 + 3+ 3 ... hasta 99
+4 + 4 ... hasta 100
...
Suma mentalmente...
+2 + 3 + 4 + 5 + 6 + 7  hasta 100 hasta donde puedas...
...
Suma mentalmente...
+2 + 3 + 2 + 3 + 2 ( cualquier pareja de números)
...

Resta mentalmente...
-2 - 2 - 2 - 2 - 2... hasta 0 desde 100
-3 - 3 - 3 - 3 - 3 ... hasta 0 desde 99
-4 - 4 ... hasta 0
...

Resta mentalmente...
-2 - 3 - 4 - 5 - 6 - 7  
...

Resta mentalmente...
-2 - 3 - 2 - 3 - 2 ( cualquier pareja de números)
...

Tablas de multiplicación:
2x2
2x3
...

3x2
3x3
...

con 4, 5, 6,7 8, 9,(10 no necesario), 11, 12, 13, 14, 15, 16, 17, 18, 19,
21

Una vez practicado lo anterior, suma números, resta y multiplica con cifras más complejas:

Ejemplo:
12 +25 +10 + 21 + 5=...
5 + 8 +12 +33 +45 +17 = ...
86 - 8 - 3 -14 -11=...
12 x 13= ...
21 x 42= ...
126 x 13= ...

NOTA:
Puedes usar en este caso, si es necesario, una calculadora sencilla, para comprobar resultados, por ejemplo, sumas mentalmente 12 + 75 y luego comprueba resultado, posteriormente le sumas mentalmente al resultado 21 y compruebas, le sumas, 51 y compruebas, etc.

En cuanto a división requiere dominar suma, resta y multiplicación, de modo que yo recomiendo practicar antes lo anterior, especialmente con divisiones grandes. Divisiones sencillas pueden practicarse, hay tablas.


Los ejercicios visuales, crean dependencia visual en el cálculo. De modo que cuando necesitas hacer algún cálculo sientes la necesidad imperiosa de hacerlo sobre con  papel, o ver representados en alguna parte los números y en orden.

Con el tiempo usando estos ejercicios mentales, tu mente será capaza de hacer cálculos complejos de forma instantánea. Sin necesidad de tener que visualizar el ejercicio o los números.



Se me olvidaba, trabaja pares e impares. Por ejemplo si vas sumando de 7 en  7 empieza desde 0 y luego lo mismo de 1, desde 2, desde 3.. Igualmente con restas.

7, 14, 21, 28 ...
8, 15, 22, 29 ...
9, 16, 23, 30 ...
10, 17, 24, 31 ...
...
#200
Cita de: buite en  8 Noviembre 2017, 10:17 AM
Ahora mismo los independentistas están cortando carreteras y ferrocarriles por la fuerza.

Espero que, los Mossos que ya no tienen a un jefe que defiende los intereses del independentismo hagan cumplir la ley

Un saludo.


Pues resulta que no.

Los estudiantes independentistas de la Universidad Autónoma de Barcelona han cortado la autopista AP7. Y los Mossos presentes no lo han impedido.

MOD: No hacer doble post. Usa el botón modificar.

Me cito a mis mismo:

Cita de: okik en 27 Octubre 2017, 22:27 PM
No se, pero el 155 no es milagroso. Puede aplicarse emitiendo órdenes de tipo jurídico, pero lo que no puede evitar que cualquier mindungui cuelgue un  twitt en Twitter convocando a la gente a realizar movilizaciones a bloquear carreteras, evitar el acceso a Universidades, pintar coches de personas se sabe no son independentistas y cualquier cosa rara que se les ocurra como excusa o protesta contra la aplicación del artículo 155. En fin, crear inestabilidad y poner otra vez a los 'peones' al frente.

Era de esperar...