Question Comment fermer le plateau du lecteur optique sous Windows?


Je me suis toujours demandé pourquoi Windows a un Éjecter option mais n'inclut pas de Fermer / Fermer le bac option dans le menu contextuel des lecteurs optiques.

Existe-t-il un moyen de fermer le plateau du lecteur optique? sans pour autant l'utilisation de logiciels tiers sous Windows?


4
2017-12-06 05:13


origine


Voulez-vous cette option dans le cas où vous accédez à distance à un ordinateur? - Christopher Chipps
@ChristopherChipps Va-t-il également mettre le CD dans le bac? - cutrightjm
Touche @ekaj. Bien sûr, sérieusement dans le cas où l'utilisateur a besoin que le plateau soit ouvert et ne puisse pas le faire soi-même. Dans ce cas, cela est nécessaire, je ne suis pas sûr. - Christopher Chipps
Rappelez-vous que (la plupart, sinon la totalité) les lecteurs optiques d'ordinateurs portables doivent être poussés pour être fermés, car le plateau ne peut pas se rétracter automatiquement. Je suppose qu'ils auraient pu faire en sorte que le lecteur prenne en charge la rétractation automatique des bacs et que le système d'exploitation puisse afficher ou masquer l'option Close en fonction de cela, mais en réalité, ce serait beaucoup trop de temps et de ressources. si trivial et surtout inutile. - Karan
+1 pour la question. @ekaj, bien qu'il soit inhabituel de devoir fermer un plateau de disque à distance, il arrive que cette fonctionnalité soit pratique. J'ai créé à distance un CD pour un client et je voulais vérifier que la gravure avait réussi, mais le logiciel de création a automatiquement éjecté le disque. A la maison, si je ne suis pas satisfait de l'encodage de la vidéo sur un serveur Linux, je peux taper eject -t de mon ordinateur portable et ré-encoder sans avoir à marcher dans le placard du serveur pour fermer le plateau manuellement. Une commodité plutôt réduite, mais peut-être pas aussi absurde que le suggèrent les votes négatifs. - jthetzel


Réponses:


La seule façon de faire cette OMI sans utiliser 3rd utils de fête (tels que NirCmd et Wizmo) serait via VBScript ou PowerShell. Toutes les solutions VBScript que j'ai vues jusqu'ici utilisent un OCX Windows Media Player obsolète. Je ne sais pas si les dernières versions de WMP incluent un OCX avec des fonctionnalités similaires ou non, ainsi que la désactivation / désinstallation via Fonctionnalités Windows peut interférer avec le fonctionnement du script dans tous les cas.

Une méthode courante pour implémenter cette fonctionnalité via du code consiste à utiliser le Interface de contrôle média (MCI) API (en particulier, le ensemble commander). Cependant, depuis VBScript ne supporte pas appeler des fonctions API Windows normales ou même des fonctions à partir de DLL arbitraires, ce qui nous laisse avec PowerShell. Ainsi, Windows 7+ fourni avec PS pré-installé et XP / Vista après l'installation de PS devrait fonctionner immédiatement. La DLL MCI, c'est-à-dire Windows \ System32 \ WinMM.dll, doit être disponible dans le cadre de l'installation par défaut sous XP +.

1) Enregistrez les éléments suivants comme CD_Open.ps1:

$cd = Add-Type -memberDefinition @"
[DllImport("winmm.dll", CharSet = CharSet.Ansi)] public static extern int mciSendStringA(string lpstrCommand, string lpstrReturnString, int uReturnLength, IntPtr hwndCallback);
"@ -passthru -name mciSendString
$cd::mciSendStringA('set cdaudio door open', $null, 0, 0);

2) Enregistrer les éléments suivants comme CD_Close.ps1:

$cd = Add-Type -memberDefinition @"
[DllImport("winmm.dll", CharSet = CharSet.Ansi)] public static extern int mciSendStringA(string lpstrCommand, string lpstrReturnString, int uReturnLength, IntPtr hwndCallback);
"@ -passthru -name mciSendString
$cd::mciSendStringA("set cdaudio door closed", $null, 0, 0);

Maintenant vient le problème. Par défaut, les scripts PS non signés ne peuvent pas être exécutés dans Windows pour des raisons de sécurité. Type get-help about_signing à l'invite PS, pour en savoir plus à ce sujet, y compris comment signer vous-même vos scripts, etc.

Heureusement, il existe une solution de contournement obtenir de l'aide commande ci-dessus indique:

TO PERMIT SIGNED SCRIPTS TO RUN
-------------------------------
   When you start Windows PowerShell on a computer for the first time, the
   Restricted execution policy (the default) is likely to be in effect.

   The Restricted policy does not permit any scripts to run.

   To find the effective execution policy on your computer, type:

       get-executionpolicy

   To run unsigned scripts that you write on your local computer and signed
   scripts from other users, use the following command to change the execution
   policy on the computer to RemoteSigned:

       set-executionpolicy remotesigned

   For more information, see Set-ExecutionPolicy.

3) Donc à partir d'un élevé Invite de commandes, exécutez la commande suivante:

PowerShell Set-Exécutionpolitique Remotesigned

(Tu peux courir powershell set-executionpolicy restricted pour revenir au paramètre par défaut.)

Cette commande ne doit être exécutée qu'une seule fois et reste active jusqu'à ce que vous modifiiez à nouveau la stratégie d'exécution.

4) Vous pouvez maintenant utiliser les commandes suivantes (même à partir d’une invite de commandes non élevée) pour ouvrir / fermer le tiroir du lecteur optique:

fichier PowerShell CD_Open.ps1
  fichier_consommateur_fichier_close.ps1

Bien sûr, vous pouvez également créer des raccourcis pour pouvoir ouvrir / fermer le plateau avec un clic ou une combinaison de touches:

CD Tray Shortcuts

Vous pouvez également ajouter le Fermer commande au menu contextuel de votre lecteur optique en utilisant le fichier .REG suivant:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\Drive.CDROM\shell]
@="none"

[HKEY_CLASSES_ROOT\SystemFileAssociations\Drive.CDROM\shell\closetray]
@="Close"

[HKEY_CLASSES_ROOT\SystemFileAssociations\Drive.CDROM\shell\closetray\command]
@="C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\Powershell.exe -windowstyle hidden -file I:\\CD_Close.ps1"

(Modifiez les chemins si nécessaire. En outre, le -WindowStyle Le paramètre est uniquement disponible avec PS 2.0+.)


9
2018-01-01 02:44



Je vous +1 pour le script PowerShell, puis +1 pour l'idée du registre. - palswim


Ici est un exemple. Ici est une implémentation en C # .. (peut nécessiter une DLL ou deux).

Il y en a beaucoup, donc si on ne travaille pas pour vous essayez un autre.


3
2017-12-06 05:27



Eh bien, j'ai fait des recherches. Mais impossible de trouver autre chose que de télécharger quelque chose. La commande ling est utile, merci. - Reza M.


Je ne les ai pas essayé moi-même, mais peut-être que cela aidera Lien
Mais vous devez télécharger un dll
Voici le code source de C à utiliser si vous souhaitez le compiler vous-même, mais vous devez rechercher un moyen d’intégrer le programme compilé dans l’explorateur Windows dans le menu contextuel du lecteur de CD. Code C


2
2017-12-06 05:44



Le programme CDR auquel vous vous connectez comprend un exécutable en plus du code source C. De la ligne de commande, CDR close D:résolu le problème de la nécessité de fermer à distance un plateau de disque. - jthetzel


Il se pourrait que le Eject bouton a été conçu à l'origine pour les cas de défaillance matérielle où le bouton matériel ne répondait plus.

D'un autre côté, la fermeture se fait simplement en poussant le disque. C'est peut-être la raison pour laquelle vous ne ajoutez pas de fermeture.

Éjecte également fonctionne bien sur les lecteurs virtuels / montés (mac dmgs, tous les lecteurs montés), les lecteurs usb (en toute sécurité supprimer) etc, où il n'y a pas de version de fermeture.


0
2017-12-06 05:22



Huh, bon point pour la partie panne de matériel. N'y penserait pas. Je pouvais voir cela comme beaucoup de cas où le design / objectif original ne s’applique plus, mais ils le conservaient toujours. - Reza M.


Sous Linux (et donc probablement sous OSX, BSD et UNIX, etc.), "il existe une application pour cela":

eject -t

0
2017-12-06 05:32





Vous n'avez pas spécifié la version de Windows que vous exécutez. Je viens de remarquer que sur mon système Windows 2000, le programme du lecteur CD (sous Démarrer> Accessoires> Divertissement) comporte un bouton d'éjection. En cliquant sur ce bouton d'éjection, vous ouvrez le magasin si le magasin est fermé et il ferme le magasin si le magasin est ouvert.


0
2018-01-24 08:21





il y a un autre moyen. Dans Windows Media Player (au moins sur 12), vous pouvez cliquer sur, en haut, Jouer, puis Éjecter et choisir votre lecteur. s'il est déjà éjecté, rien ne se passera. alors recommencez, et il devrait fermer le lecteur :)


0
2018-02-18 16:33