Tastatur-Lichtshow
Lässt die Lämpchen für Num-, Feststell- und Rollen-Taste tanzen: Lauflicht, Knight Rider, alle zusammen oder zufällig. Dauer wählbar, jede Taste beendet die Show, und am Ende sind die Tasten wieder wie vorher. Nur bei Tastaturen mit diesen Lämpchen.
SHA-256:
9b3e16f3ed55cdecd91b8406c6c92f3a0eb4927a0ab099328fa49e1faf4b77ad Code
So sieht die Datei aus, die Sie herunterladen (80 Zeilen). Die Kommentare oben im Skript erklären, was es tut.
<# : Friederich-IT - Tastatur-Lichter
@echo off
setlocal
chcp 65001 >nul
title Tastatur-Lichter - 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%
#>
# ==========================================================================
# Tastatur-Lichter Version 2.0, Oktober 2026
# https://friederich-it.de/downloads
#
# Lässt die Lichter von Num-, Feststell- und Rollen-Taste blinken:
# Lauflicht, alle zusammen, Knight Rider oder zufällig.
# - Dauer wählbar, Beenden jederzeit mit einer beliebigen Taste
# - Am Ende werden die ursprünglichen Zustände wiederhergestellt
# Hinweis: Viele Notebooks haben nur eine oder zwei dieser Lampen.
# Während des Blinkens bitte nichts in anderen Programmen tippen.
# Ersetzt das alte VBScript (Endlosschleife, nur per Task-Manager beendbar).
# ==========================================================================
$ErrorActionPreference = 'Stop'
try { [Console]::OutputEncoding = [Text.Encoding]::UTF8 } catch {}
Add-Type -Namespace FIT -Name Tasten -MemberDefinition @'
[DllImport("user32.dll")] public static extern void keybd_event(byte vk, byte scan, uint flags, UIntPtr extra);
[DllImport("user32.dll")] public static extern short GetKeyState(int vk);
'@
$lampen = @(
@{ Name = 'Num'; Vk = 0x90; Scan = 0x45; Ext = 1 },
@{ Name = 'Caps'; Vk = 0x14; Scan = 0x3A; Ext = 0 },
@{ Name = 'Rollen'; Vk = 0x91; Scan = 0x46; Ext = 0 }
)
function Get-An($l) { return ([FIT.Tasten]::GetKeyState($l.Vk) -band 1) -eq 1 }
function Switch-Lampe($l) {
[FIT.Tasten]::keybd_event([byte]$l.Vk, [byte]$l.Scan, [uint32]$l.Ext, [UIntPtr]::Zero)
[FIT.Tasten]::keybd_event([byte]$l.Vk, [byte]$l.Scan, [uint32]($l.Ext -bor 2), [UIntPtr]::Zero)
}
function Set-Lampe($l, [bool]$an) { if ((Get-An $l) -ne $an) { Switch-Lampe $l } }
function Set-Muster([bool[]]$m) { for ($i = 0; $i -lt 3; $i++) { Set-Lampe $lampen[$i] $m[$i] } }
Write-Host ''
Write-Host ' Tastatur-Lichter' -ForegroundColor Cyan
Write-Host ' ================' -ForegroundColor Cyan
Write-Host ''
Write-Host ' [1] Lauflicht [2] Alle blinken [3] Knight Rider [4] Zufall'
Write-Host ' Muster wählen (Enter = 1): ' -NoNewline
$wahl = [string][Console]::ReadKey($true).KeyChar
if ($wahl -notin '1', '2', '3', '4') { $wahl = '1' }
Write-Host $wahl
$eingabe = Read-Host ' Dauer in Sekunden (Enter = 15)'
$sek = 15
if ($eingabe -match '^\d{1,4}$') { $sek = [math]::Max(1, [math]::Min(3600, [int]$eingabe)) }
$start = @($lampen | ForEach-Object { Get-An $_ })
$muster = switch ($wahl) {
'1' { @(@($true, $false, $false), @($false, $true, $false), @($false, $false, $true)) }
'2' { @(@($true, $true, $true), @($false, $false, $false)) }
'3' { @(@($true, $false, $false), @($false, $true, $false), @($false, $false, $true), @($false, $true, $false)) }
'4' { $null }
}
$takt = if ($wahl -eq '2') { 400 } else { 180 }
Write-Host ''
Write-Host " Läuft $sek Sekunden. Beenden mit einer beliebigen Taste ..." -ForegroundColor Yellow
$ende = (Get-Date).AddSeconds($sek)
$zufall = New-Object System.Random
$n = 0
try {
while ((Get-Date) -lt $ende) {
if ([Console]::KeyAvailable) { [void][Console]::ReadKey($true); break }
if ($null -eq $muster) { Set-Muster @(($zufall.Next(2) -eq 1), ($zufall.Next(2) -eq 1), ($zufall.Next(2) -eq 1)) }
else { Set-Muster $muster[$n % $muster.Count] }
$n++
Start-Sleep -Milliseconds $takt
}
} finally {
for ($i = 0; $i -lt 3; $i++) { Set-Lampe $lampen[$i] $start[$i] }
}
Write-Host ' Fertig. Die Tasten haben wieder ihren ursprünglichen Zustand.' -ForegroundColor Green
Start-Sleep -Seconds 2