Lo conseguí reparar con el comando diskpart como propuso @Slava_TZD. Muchas gracias a todos.
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úCita de: Meta en 12 Noviembre 2017, 01:04 AMAquí hay un código que pulsando A o C abre o cierras la bandeja del lector, a parte de esto, dice Abierto, Abriendo... Cerrado y Cerrando... Todo esto pulsado las teclas A o C.
Me he dado cuenta que si cierro la bandeja directamente con la mano, en la ventana o en el CMD de C#, no lo sabe, se queda en Abierto. La idea es que si cierro la bandeja con la mano, en la pantalla muestre el mensaje.
¿Esto es posible de hacer?
Imports System.ComponentModel
Imports System.Management
Public NotInheritable Class Form1 : Inherits Form
Private WithEvents EventWatcher As ManagementEventWatcher
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
' https://msdn.microsoft.com/en-us/library/aa394173%28v=vs.85%29.aspx
Dim eventQuery As New WqlEventQuery(
eventClassName:="__InstanceModificationEvent",
condition:="TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType = 5",
withinInterval:=TimeSpan.FromSeconds(1))
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(scopePath, scopeOptions)
Me.EventWatcher = New ManagementEventWatcher With {
.Options = eventOptions,
.Query = eventQuery,
.Scope = scope
}
Me.EventWatcher.Scope.Connect()
Me.EventWatcher.Start()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
Me.EventWatcher.Dispose()
End Sub
Private Sub EventWatcher_EventArrived(sender As Object, e As EventArrivedEventArgs) Handles EventWatcher.EventArrived
Using mo As ManagementBaseObject = e.NewEvent
Dim letter As String = Convert.ToString(mo.Properties("Name").Value).TrimEnd({":"c, "\"c})
' Dim volName As String = Convert.ToString(mo.Properties("VolumeName").Value)
Dim di As DriveInfo = (From item In DriveInfo.GetDrives()
Where item.Name.TrimEnd({":"c, "\"c}) = letter
).Single()
If Not String.IsNullOrEmpty(di.VolumeLabel) Then
Console.WriteLine(String.Format("CD-ROM tray inserted in drive '{0}'.", di.Name))
Else
Console.WriteLine(String.Format("CD-ROM tray ejected in drive '{0}'.", di.Name))
End If
End Using
End Sub
End Class
using System;
using System.IO;
using System.Linq;
using System.Management;
using System.Windows.Forms;
namespace WindowsFormsApp1 {
public partial class Form1 : Form {
private ManagementEventWatcher EventWatcher;
public Form1() {
this.InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
// https://msdn.microsoft.com/en-us/library/aa394173%28v=vs.85%29.aspx
WqlEventQuery eventQuery =
new WqlEventQuery(eventClassName: "__InstanceModificationEvent",
condition: "TargetInstance ISA 'Win32_LogicalDisk' AND TargetInstance.DriveType = 5",
withinInterval: TimeSpan.FromSeconds(1));
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(scopePath, scopeOptions);
this.EventWatcher = new ManagementEventWatcher {
Options = eventOptions,
Query = eventQuery,
Scope = scope
};
this.EventWatcher.Scope.Connect();
this.EventWatcher.EventArrived += this.EventWatcher_EventArrived;
this.EventWatcher.Start();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
this.EventWatcher.Dispose();
}
private void EventWatcher_EventArrived(object sender, EventArrivedEventArgs e) {
using (ManagementBaseObject mo = e.NewEvent) {
string letter = Convert.ToString(mo.Properties["Name"].Value).TrimEnd(new char[] {':', '\\'});
// string volName = Convert.ToString(mo.Properties("VolumeName").Value);
DriveInfo di = (from item in DriveInfo.GetDrives()
where item.Name.TrimEnd(new char[] { ':', '\\' }) == letter
select item
).Single();
if (!string.IsNullOrEmpty(di.VolumeLabel)) {
Console.WriteLine(string.Format("CD-ROM tray inserted in drive '{0}'.", di.Name));
} else {
Console.WriteLine(string.Format("CD-ROM tray ejected in drive '{0}'.", di.Name));
}
}
}
}
}
...
this.EventWatcher.Start();
while (true) {
this.EventWatcher.WaitForNextEvent();
}
...
Cita de: xBart en 12 Noviembre 2017, 00:52 AMUna pregunta, ¿es posible que if exit verifique si existe "x" extensión, aunque este esté oculta?
FOR /F %%# In (
'Dir /B /A "*.txt", "*.pdf", "*.jpg"'
) Do (
Echo.%%~f#
)
FORFILES /M "*.txt" -C "CMD.exe /C Echo.@path"
FORFILES -C "CMD.exe /C (If @ext==\"txt\" Echo.@path) & (If @ext==\"pdf\" Echo.@path) & (If @ext==\"jpg\" Echo.@path)"
FOR %%# In ("txt", "pdf", "jpg") Do (
(FORFILES -m "*.%%#" -C "CMD.exe /C Echo.@path")2>NUL
)
[String[]]$files = Get-ChildItem -ErrorAction Continue `
-Force `
-File `
-Path ".\*" `
-Include "*.txt", "*.pdf", "*.jpg"
#foreach ($file in $files) {
# Write-Host $file
#}
If ($files.Count -gt 0) {
# Se encontró al menos 1 archivo de alguna de las extensiones especificadas.
Write-Host "Launching Windows Calculator..."
Start-Process -FilePath "Calc.exe"
} Else {
# No se encontró ningún archivo.
Write-Host "Launching MS Paint..."
Start-Process -FilePath "MSPaint.exe"
}
Exit(0)
Cita de: JugadorON en 11 Noviembre 2017, 17:40 PMoverblockear
Cita de: JugadorON en 11 Noviembre 2017, 17:40 PM1- ¿Vale la pena overblockear el procesador?
Cita de: JugadorON en 11 Noviembre 2017, 17:40 PM2 - ¿Y la ram?
Cita de: JugadorON en 11 Noviembre 2017, 17:40 PM¿No se queman?
Cita de: JugadorON en 11 Noviembre 2017, 17:40 PM¿Y acortan la vida?
Cita de: JugadorON en 11 Noviembre 2017, 17:40 PM¿Tiene riesgos?
@Echo OFF
FOR %%# in ("*.txt", "*.pdf", "*.jpg") DO (
REM Iniciar Calculadora de Windows...
Start /B "Calc" "Calc.exe"
Exit
)
REM Iniciar MS Paint...
Start /B "MSPaint" "MSPaint.exe"
Exit
@Echo OFF
IF Exist "*.txt" IF Exist "*.pdf" IF Exist "*.jpg" (
REM Iniciar Calculadora de Windows...
Start /B "Calc" "Calc.exe"
) Else (
REM Iniciar MS Paint...
Start /B "MSPaint" "MSPaint.exe"
)
Exit /B 0
Cita de: **Aincrad** en 11 Noviembre 2017, 02:26 AM
si, lo querias hacer de esta forma:for %%i in (*.txt *.pdf *.jpg) do (
IF EXIST %%i (goto del) else (goto sla)
déjame decirte que el *.pdf *.jpg no tenían ninguna función hay.
ya que el BATCH al verificar si existe algún txt "*.txt" va a obviar los *.pdf *.jpg .
no se si me explico . lo que quiero decir es que si quieres que el batch busque *.pdf *.jpg tienes que hacerlo por paso . como el code que te puse . en cambio si lo haces de la forma for %%i in (*.txt *.pdf *.jpg) que de paso esta mal codeado , el batch va a obviar los *.pdf *.jpg osea no los va a buscar.