Sordum.NET Makale Adı : Sağ tuş yeni menüsündeki Bit eşlem resmini kaldırın
Sordum.NET Makalesinin Web Adresi : https://www.sordum.net/81020/sag-tus-ye ... -kaldirin/
Ben, burada anlatılanları manuel yapıyordum ama 15 günde bir yada "Kullanıcı Hesap Değişikliğinde" geri geliyordu bu sinir olduğum gıcık alt menü girdisi ki , WindowsXP'den beridir birkez olsun kullanmadım bunu...
Sonra dedim ki, yeter artık...!!! bıktım senden ve geri gelmelden....
Bu amaçla bir .ps1 betiği kodladım kendime çünkü bıkmıştım bundan..., bana kalıcı bir çözüm lazımdı...
İşte yaradı...
Önce betiğin içeriğini verelim , sonra konu anlatımını ve en son'da ekran görüntüsünü verelim...
Remove-BitmapFromNewMenu.ps1
Kod: Tümünü seç
<#
.SYNOPSIS
Removes/clears the "New > Bitmap image" display string from the Windows 11
right-click New menu (Turkish UI: "Bit eslem resmi"), which is regenerated
by the Microsoft Paint MSIX package via the MrtCache resource cache.
.DESCRIPTION
Manual removal via Regedit works (search HKCR\Local Settings\MrtCache for
a string value equal to the localized "Bitmap image" label and blank it
out), but the Paint app re-populates this cache whenever Microsoft Store
updates the package (roughly every 10-20 days). This script automates the
search-and-clear operation, backs up the affected registry branch first,
logs every change, and can optionally schedule itself to run automatically
every 2 weeks so the fix keeps reapplying without manual intervention.
.PARAMETER Force
Skip the confirmation prompt before clearing matched values.
.PARAMETER Silent
Skip the "restart Explorer now" prompt and restart it automatically.
Intended for unattended runs (e.g. from Task Scheduler).
.PARAMETER Schedule
Register a Scheduled Task that re-runs this script every 2 weeks with
-Force -Silent, so the fix reapplies itself automatically over time.
.PARAMETER Unschedule
Remove the Scheduled Task created by -Schedule.
.NOTES
Target key : HKCU:\Software\Classes\Local Settings\MrtCache
Scope : Current user only, no administrator rights required.
Effect : Explorer restart is required to see the New menu change.
.EXAMPLE
.\Remove-BitmapFromNewMenu.ps1
Interactive run: scans, shows matches, asks before clearing and before
restarting Explorer.
.EXAMPLE
.\Remove-BitmapFromNewMenu.ps1 -Force -Silent -Schedule
Clears matches immediately, restarts Explorer automatically, and installs
a recurring scheduled task so this keeps happening every 2 weeks.
#>
[CmdletBinding()]
param(
[switch]$Force,
[switch]$Silent,
[switch]$Schedule,
[switch]$Unschedule
)
$ErrorActionPreference = "Stop"
$TaskName = "RemoveBitmapFromNewMenu"
$ScriptPath = $MyInvocation.MyCommand.Path
$LogDir = Join-Path $env:USERPROFILE "Documents\BitmapNewMenuFix"
$LogFile = Join-Path $LogDir "removal-log.txt"
$BackupDir = Join-Path $LogDir "backups"
$MrtCacheKey = "HKCU:\Software\Classes\Local Settings\MrtCache"
function Write-Log {
param([string]$Message)
$line = "[{0}] {1}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Message
Write-Host $line
Add-Content -Path $LogFile -Value $line
}
function Initialize-Environment {
if (-not (Test-Path $LogDir)) { New-Item -ItemType Directory -Path $LogDir -Force | Out-Null }
if (-not (Test-Path $BackupDir)) { New-Item -ItemType Directory -Path $BackupDir -Force | Out-Null }
}
function Backup-MrtCache {
if (-not (Test-Path $MrtCacheKey)) {
Write-Log "MrtCache key not found, nothing to back up."
return $false
}
$stamp = Get-Date -Format "yyyyMMdd_HHmmss"
$backupFile = Join-Path $BackupDir "MrtCache_$stamp.reg"
$regPath = "HKEY_CURRENT_USER\Software\Classes\Local Settings\MrtCache"
reg.exe export $regPath $backupFile /y | Out-Null
Write-Log "Backup created: $backupFile"
return $true
}
function Find-BitmapEntries {
$results = @()
if (-not (Test-Path $MrtCacheKey)) { return $results }
Get-ChildItem -Path $MrtCacheKey -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
$key = $_.PSPath
if ($key -notlike "*Paint*") { return }
$props = Get-ItemProperty -Path $key -ErrorAction SilentlyContinue
if (-not $props) { return }
$props.PSObject.Properties |
Where-Object { $_.Name -notmatch "^PS(Path|ParentPath|ChildName|Drive|Provider)$" } |
ForEach-Object {
# "?" matches exactly one character, avoids hardcoding the
# Turkish "s with cedilla" letter in the source file.
if ($_.Value -is [string] -and $_.Value -like "Bit e?lem resmi") {
$results += [PSCustomObject]@{
KeyPath = $key
ValueName = $_.Name
OldValue = $_.Value
}
}
}
}
return $results
}
function Clear-BitmapEntries {
param([array]$Entries)
foreach ($entry in $Entries) {
Set-ItemProperty -Path $entry.KeyPath -Name $entry.ValueName -Value ""
Write-Log ("Cleared value '{0}' (was: '{1}') under {2}" -f $entry.ValueName, $entry.OldValue, $entry.KeyPath)
}
}
function Restart-Explorer {
Write-Log "Restarting Explorer to apply the change..."
Stop-Process -Name explorer -Force
Start-Sleep -Seconds 2
Start-Process explorer.exe
}
function Register-FixTask {
$action = "-NoProfile -ExecutionPolicy Bypass -File `"$ScriptPath`" -Force -Silent"
schtasks.exe /Create /TN $TaskName /TR "powershell.exe $action" /SC WEEKLY /MO 2 /ST 09:00 /RL LIMITED /F | Out-Null
Write-Log "Scheduled task '$TaskName' registered (runs every 2 weeks)."
}
function Unregister-FixTask {
schtasks.exe /Delete /TN $TaskName /F | Out-Null
Write-Log "Scheduled task '$TaskName' removed."
}
# --- Main ---
Initialize-Environment
if ($Unschedule) {
Unregister-FixTask
Read-Host "`nPress ENTER to exit."
exit
}
if ($Schedule) {
Register-FixTask
}
Write-Log "Scanning MrtCache for bitmap entries..."
# @() forces array context so a single match does not get unrolled into a
# scalar object, which would make $found.Count report blank/null.
$found = @(Find-BitmapEntries)
if ($found.Count -eq 0) {
Write-Log "No matching entries found. Nothing to do."
} else {
$suffix = "ies"
if ($found.Count -eq 1) { $suffix = "y" }
Write-Log ("Found {0} matching entr{1}:" -f $found.Count, $suffix)
$found | ForEach-Object { Write-Log (" - {0} => '{1}'" -f $_.KeyPath, $_.OldValue) }
$proceed = $Force
if (-not $proceed) {
$answer = Read-Host "Clear these values now? (Y/N)"
$proceed = ($answer -eq "Y" -or $answer -eq "y")
}
if ($proceed) {
Backup-MrtCache | Out-Null
Clear-BitmapEntries -Entries $found
$restart = $Silent
if (-not $restart) {
$answer = Read-Host "Restart Explorer now to apply the change? (Y/N)"
$restart = ($answer -eq "Y" -or $answer -eq "y")
}
if ($restart) { Restart-Explorer }
} else {
Write-Log "Operation cancelled by user."
}
}
Read-Host "`nPress ENTER to exit."MrtCache Üzerinden Windows New Menü Kaydının Temizlenmesi

Windows 11'de Paint artık klasik bir masaüstü uygulaması değil, bir MSIX paketi (Microsoft.Paint_11.2603.251.0_x64__8wekyb3d8bbwe).
Bu tür paketler, arayüz metinlerini doğrudan koda gömmek yerine ayrı bir kaynak dosyasında (.pri = Package Resource Index) tutar ve koda sadece bir referans yazar: ms-resource://Microsoft.Paint/Resources/ShellNewDisplayName_Bmp. Log çıktısında tam olarak bu referansı görülür.
Windows Kabuğu (Explorer), "Yeni" menüsünü her açtığında bu tür ms-resource:// referanslarını okunabilir metne çevirmek zorunda. Bu çeviriyi her seferinde .pri dosyasından yapmak performans açısından maliyetli olduğundan, sistem çözümlenen değeri MrtCache (Multilingual Resource Technology Cache) adı verilen bir registry önbelleğinde saklar , tam olarak script'in temizlediği konum:
Kod: Tümünü seç
HKCU\Software\Classes\Local Settings\MrtCache\...\MergedResources-0.pri\...Script'in yaptığı işlem şuydu/şudur : değeri silmek yerine boşaltmak. Çünkü:
1.Anahtarı/değeri tamamen silerseniz, Explorer önbellekte bulamayınca .pri dosyasından tekrar okuyup önbelleği yeniden dolduruyor (bu yüzden manuel silme denemeleri genelde anında geri geliyordu).
2.Değeri boş string'e çevirdiğinizde ise önbellek hâlâ mevcut (cache miss değil, cache hit) ama gösterecek bir metin yok . Explorer boş etiketli bir menü öğesi oluşturmak yerine o öğeyi menüden tamamen düşürüyor.
Benim şikayet durum da önceki "15 günde bir geri gelme" sorunu da bununla açıklanıyor:
Microsoft Store, Paint paketini güncellediğinde (11.2311.30.0 ====>>> 11.2603.251.0 sürüm artışını log'unuzda görebilirsiniz) yeni bir .pri dosyası gelir, sistem önbelleği o paket için yeniden oluşturur ve boşalttığınız değer tazelenir. -Schedule parametresiyle kurduğumuz görev zamanlayıcı görevi, bu yeniden oluşumu? sorusunu, her 2 haftada bir otomatik olarak tekrar temizleyecek şeklinde garanti altına alır.
Özetle, sildiğimiz şey Paint uygulamasının kendisi ya da BMP dosya ilişkilendirmesi değil, sadece Explorer'ın "Yeni" menüsünü çizerken(oluştururken) kullandığı önbelleğe alınmış bir arayüz etiketiydi. Paint programı normal şekilde çalışmaya devam eder, BMP dosyaları normal şekilde açılır , sadece sağ tık menüsündeki gereksiz kısayol kaybolmuştur. Aldığınız .reg yedeği sayesinde istediğiniz an eski haline dönebilirsiniz.Hem bizim adminin teknik makalesinin sağlaması/özet otomasyonunu yapmış oldum çünkü gerçekten bıkmıştım, aynı terane aynı terane...
NASIL KULLANILIR .PS1 İNTERAKTİF KULLANIM KOMUT YAPILARI :
ÖRNEK KOMUT ÇIKTISI :# Etkileşimli mod: bulur, sorar, sizin onayınızla siler# Tek seferlik sessiz temizlik (soru sormadan siler + Explorer'ı yeniden başlatır)Kod: Tümünü seç
.\Remove-BitmapFromNewMenu.ps1# Kalıcı çözüm: temizler + her 2 haftada bir kendini otomatik çalıştıracakKod: Tümünü seç
.\Remove-BitmapFromNewMenu.ps1 -Force -Silent
# bir Görev Zamanlayıcı görevi kaydeder (yönetici hakkı gerekmez)# Zamanlanmış görevi kaldırmak istersenizKod: Tümünü seç
.\Remove-BitmapFromNewMenu.ps1 -Force -Silent -ScheduleKod: Tümünü seç
.\Remove-BitmapFromNewMenu.ps1 -Unschedule
Kod: Tümünü seç
PS C:\Users\TRWE_2012\Masaüstü> .\Remove-BitmapFromNewMenu.ps1
[2026-07-19 16:41:18] Scanning MrtCache for bitmap entries...
[2026-07-19 16:41:18] Found matching entries:
[2026-07-19 16:41:18] - Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Classes\Local Settings\MrtCache\C:%5CProgram Files%5CWindowsApps%5CMicrosoft.Paint_11.2603.251.0_x64__8wekyb3d8bbwe%5Cmicrosoft.system.package.metadata%5CS-1-5-21-530586688-2566659761-922542524-1000-MergedResources-0.pri\1dceb821ca1db8a\4fa3d702 => 'Bit eşlem resmi'
Clear these values now? (Y/N): Y
[2026-07-19 16:41:26] Backup created: C:\Users\TRWE_2012\Documents\BitmapNewMenuFix\backups\MrtCache_20260719_164126.reg
[2026-07-19 16:41:26] Cleared value '@{Microsoft.Paint_11.2603.251.0_x64__8wekyb3d8bbwe? ms-resource://Microsoft.Paint/Resources/ShellNewDisplayName_Bmp}' (was: 'Bit eşlem resmi') under Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Software\Classes\Local Settings\MrtCache\C:%5CProgram Files%5CWindowsApps%5CMicrosoft.Paint_11.2603.251.0_x64__8wekyb3d8bbwe%5Cmicrosoft.system.package.metadata%5CS-1-5-21-530586688-2566659761-922542524-1000-MergedResources-0.pri\1dceb821ca1db8a\4fa3d702
Restart Explorer now to apply the change? (Y/N): Y
[2026-07-19 16:41:33] Restarting Explorer to apply the change...
Press ENTER to exit.:Script'i şu mantıkla tasarladım: (Yukarıdaki komutsal kullanım kalıplarına göre)
Teknik yaklaşım:
1.Hedef anahtar: HKCU:\Software\Classes\Local Settings\MrtCache (yönetici hakkı gerekmiyor, sadece mevcut kullanıcı kapsamında)
2.Türkçe karakter sorunu için ("Bit eşlem resmi" içindeki "ş" harfi) kodda literal Türkçe karakter kullanmak yerine -like "Bit e?lem resmi" joker karakter eşleştirmesi kullandım — ? tek karakteri temsil ediyor, böylece hem kural gereği kodda Türkçe karakter olmuyor hem de kodlama (encoding) sorunları tamamen bypass ediliyor
3.İşlem öncesi otomatik .reg yedeği alınıyor
4.Her değişiklik log dosyasına yazılıyor
4.-Schedule parametresiyle Görev Zamanlayıcı'ya her 2 haftada bir otomatik çalışacak bir görev kaydedebiliyor , böylece sizler elle uğraşmadan sorun tekrar oluştuğunda kendi kendini düzeltiyor.(siz hissetmiyorsunuz bile)
Notlar:
1.Sadece HKCU (mevcut kullanıcı) altında işlem yapıyor, yönetici hakkı gerektirmiyor ve sistem geneli bir şey değiştirmiyor.
Her çalıştırmada değişiklik öncesi %USERPROFILE%\Documents\BitmapNewMenuFix\backups\ altına .reg yedeği alıyor, tüm işlemleri removal-log.txt'ye kaydediyor .

3.-Schedule seçeneği tam benim şikayet ettiğim "15 günde bir geri geliyor" sorununu kalıcı olarak çözmeyi hedefliyor , Paint güncellendiğinde önbellek yeniden dolsa bile en fazla 2 hafta içinde script otomatik temizliyor.
Güle güle kullanın ve @Tarkan_Dost'a da makalesinden ötürü özel teşekkürler...İyi ki varsın usta...(@Windows Hekimi)


