CD-Laufwerk-Jux

Der Klassiker unter den harmlosen Streichen: Das CD/DVD-Laufwerk fährt auf und zu. Entweder sofort vorführen oder als Streich unsichtbar starten – dann geht es nach 30 Sekunden fünfmal in zufälligen Abständen los, danach beendet es sich von selbst. Ohne Laufwerk passiert nichts.

cd-laufwerk-jux.cmd 4,4 KB · läuft unter Windows 10/11 · aktualisiert am 17.10.2026 · 5 Downloads

SHA-256: 42a62a1a7634295986fdc8dea9108224406a9233869ee1859c430d2662031419

Code

So sieht die Datei aus, die Sie herunterladen (99 Zeilen). Die Kommentare oben im Skript erklären, was es tut.

cd-laufwerk-jux.cmd
<# : Friederich-IT - CD-Laufwerk-Jux
@echo off
setlocal
chcp 65001 >nul
title CD-Laufwerk-Jux - Friederich-IT
set "FIT_SELF=%~f0"
powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "iex ([IO.File]::ReadAllText($env:FIT_SELF,[Text.Encoding]::UTF8))"
exit /b %errorlevel%
#>
# ==========================================================================
#  CD-Laufwerk-Jux                                 Version 2.0, Oktober 2026
#  https://friederich-it.de/downloads
#
#  Der Klassiker unter den harmlosen Streichen: Das CD/DVD-Laufwerk
#  fährt auf und wieder zu.
#  [1] Vorführen: jetzt sofort, Anzahl wählbar
#  [2] Streich:   startet unsichtbar nach 30 Sekunden, fährt 5-mal in
#                 zufälligen Abständen auf und zu und beendet sich dann
#                 von selbst. Kein Dauerlauf, keine Prozessorlast.
#  Ohne CD/DVD-Laufwerk passiert nichts. Braucht keinen Media Player.
#  Notebook-Schlitzlaufwerke und manche Schubladen lassen sich nur öffnen.
# ==========================================================================
$ErrorActionPreference = 'Stop'
try { [Console]::OutputEncoding = [Text.Encoding]::UTF8 } catch {}
Add-Type -Namespace FIT -Name Mci -MemberDefinition @'
[DllImport("winmm.dll", CharSet = CharSet.Unicode)]
public static extern int mciSendStringW(string cmd, System.Text.StringBuilder ret, int len, IntPtr hwnd);
'@
function Invoke-Mci([string]$befehl) { return [FIT.Mci]::mciSendStringW($befehl, $null, 0, [IntPtr]::Zero) }
function Move-Laufwerk([string]$lw, [bool]$auf) {
    $alias = 'fitcd' + $lw.TrimEnd(':')
    if ((Invoke-Mci "open $lw type cdaudio alias $alias") -ne 0) { return $false }
    if ($auf) { [void](Invoke-Mci "set $alias door open wait") } else { [void](Invoke-Mci "set $alias door closed wait") }
    [void](Invoke-Mci "close $alias")
    return $true
}
function Start-Runde([string[]]$laufwerke) {
    foreach ($lw in $laufwerke) { [void](Move-Laufwerk $lw $true) }
    Start-Sleep -Milliseconds 1500
    foreach ($lw in $laufwerke) { [void](Move-Laufwerk $lw $false) }
}

$laufwerke = @(Get-CimInstance Win32_CDROMDrive | Where-Object { $_.Drive } | ForEach-Object { $_.Drive })

if ($env:FIT_CD_STREICH -eq '1') {           # unsichtbarer Streich-Modus
    if ($laufwerke.Count -eq 0) { exit }
    $zufall = New-Object System.Random
    Start-Sleep -Seconds 30
    for ($i = 0; $i -lt 5; $i++) {
        Start-Runde $laufwerke
        if ($i -lt 4) { Start-Sleep -Seconds ($zufall.Next(10, 41)) }
    }
    exit
}

Write-Host ''
Write-Host '  CD-Laufwerk-Jux' -ForegroundColor Cyan
Write-Host '  ===============' -ForegroundColor Cyan
Write-Host ''
if ($laufwerke.Count -eq 0) {
    Write-Host '  Kein CD/DVD-Laufwerk gefunden - dieser PC ist vor dem Streich sicher.' -ForegroundColor Yellow
    Write-Host ''
    Write-Host '  Taste drücken ...' -ForegroundColor DarkGray
    [void][Console]::ReadKey($true)
    exit
}
Write-Host ('  Gefundene Laufwerke: ' + ($laufwerke -join ', '))
Write-Host ''
Write-Host '  [1] Jetzt vorführen'
Write-Host '  [2] Streich: unsichtbar in 30 Sekunden, 5 Runden, beendet sich selbst'
Write-Host '  [0] Abbrechen'
Write-Host ''
Write-Host '  Auswahl: ' -NoNewline
$k = [string][Console]::ReadKey($true).KeyChar
Write-Host $k
switch ($k) {
    '1' {
        $e = Read-Host '  Wie oft? (Enter = 3)'
        $anzahl = 3
        if ($e -match '^\d{1,2}$') { $anzahl = [math]::Max(1, [math]::Min(20, [int]$e)) }
        Write-Host '  Los geht''s ... (Abbrechen mit einer beliebigen Taste)' -ForegroundColor Yellow
        for ($i = 1; $i -le $anzahl; $i++) {
            if ([Console]::KeyAvailable) { [void][Console]::ReadKey($true); break }
            Write-Host "  Runde $i von $anzahl"
            Start-Runde $laufwerke
            Start-Sleep -Milliseconds 800
        }
        Write-Host '  Fertig.' -ForegroundColor Green
        Start-Sleep -Seconds 2
    }
    '2' {
        $env:FIT_CD_STREICH = '1'
        Start-Process -FilePath 'powershell.exe' -WindowStyle Hidden -ArgumentList '-NoLogo', '-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', 'iex ([IO.File]::ReadAllText($env:FIT_SELF,[Text.Encoding]::UTF8))'
        Write-Host '  Der Streich läuft. In 30 Sekunden geht es los - jetzt unauffällig gehen ;-)' -ForegroundColor Green
        Write-Host '  Vorzeitig beenden: Task-Manager > Details > powershell.exe' -ForegroundColor DarkGray
        Start-Sleep -Seconds 4
    }
}