|
191
|
Programación / .NET (C#, VB.NET, ASP) / Re: Detectar cuando la bandeja del lector está abierta o cerrada
|
en: 17 Noviembre 2017, 02:03 am
|
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 ) 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#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 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
|
Programación / .NET (C#, VB.NET, ASP) / Re: Hacer funcionar el lector de bandeja de discos con este lenguaje .net
|
en: 16 Noviembre 2017, 11:24 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
|
Programación / .NET (C#, VB.NET, ASP) / Re: Hacer funcionar el lector de bandeja de discos con este lenguaje .net
|
en: 16 Noviembre 2017, 08:41 am
|
Buen aporte Meta, gracias Lo que no entiendo es porqué al usar el comando "status" mciSendString siempre me devuelve "open" 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)
<DllImport("winmm.dll")> _ Private Shared Function mciSendString(sCommand As String, sReturn As StringBuilder, cchReturn As UInteger, hwnd As IntPtr) As UInteger End Function
|
|
|
195
|
Foros Generales / Foro Libre / Re: Máquina inalámbrica para Cortar el Cabello y la Barba.
|
en: 14 Noviembre 2017, 15:41 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
|
|
|
196
|
Programación / Programación Visual Basic / Re: Seleccionar un Item de un Listview y darle click derecho
|
en: 12 Noviembre 2017, 19:45 pm
|
Hola Simplemente usa las coordenadas del mouse para mover el picture: 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: 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
|
|
|
198
|
Foros Generales / Foro Libre / Re: EEUU lanza en Afganistán una bomba de 10 toneladas contra ISIS
|
en: 11 Noviembre 2017, 12:00 pm
|
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
|
Foros Generales / Foro Libre / Re: Matemática, ¿cómo puedo mejorar velocidad de hacer cuentas ?
|
en: 11 Noviembre 2017, 10:52 am
|
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
|
Foros Generales / Foro Libre / Re: Activado el artículo 155 de la Constitución Española por primera vez.
|
en: 8 Noviembre 2017, 22:38 pm
|
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: 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...
|
|
|
|
|
|
|