Yazılım geliştiriciler ve sistem yöneticileri olarak gün içinde en sık yaptığımız işlemlerden biri, Windows Gezgini'nde bir klasördeyken terminal açmaktır (Shift + Sağ Tık veya adres çubuğuna cmd yazmak).
Fakat bu yöntem her defasında bağımsız, yüzen bir terminal penceresi açar. Klasör değiştirdiğinizde terminal önceki dizinde kalır; pencereler birbirine karışır.
explorer-terminal, Windows Dosya Gezgini pencerelerinin içine doğrudan alt bölme (docked pane) olarak yerleşen ve klasör gezintisini anlık olarak takip eden bir C++ Windhawk modifikasyonudur.
1. Win32 Kancaları (API Hooking) ve Windhawk Altyapısı
Windows Gezgini (explorer.exe), kapalı kaynaklı ve korumalı bir sistem sürecidir. Bu sürecin kullanıcı arayüzüne yeni bir pencere elemanı enjekte etmek için Windhawk framework'ünün sunduğu bellek kancalama (memory patching) altyapısını kullandım.
Modülün çalışma prensibi:
explorer.exeiçinde yeni bir pencere (CabinetWClass) oluşturulduğunda kanca tetiklenir (WM_CREATE).- Gezgin penceresinin kullanıcı alanı (
ShellTabWindowClass) dinamik olarak yeniden boyutlandırılır. - Alt kısma gömülü bir Win32 alt penceresi (
child window) tahsis edilir ve içine gömülü terminal denetleyicisi (ConPTY / Windows Terminal instance) bağlanır.
2. Klasör Değişikliklerinin Çift Yönlü Takibi (Directory Sync)
Modun en can alıcı özelliği, kullanıcının Gezgin içinde bir klasöre tıkladığında terminalin de otomatik olarak o dizine cd yapmasıdır.
Bunu başarmak için Windows Shell API'sindeki IShellWindows ve IShellBrowser COM arayüzleri dinlenir:
- Kullanıcı bir alt klasöre girdiğinde
DISPID_NAVIGATECOMPLETE2olayı yakalanır. - Aktif klasörün tam dosya yolu (
LPITEMIDLIST$\rightarrow$SHGetPathFromIDListW) çözülür. - Terminal oturumuna arka planda görünmez bir
cd /d "C:\Hedef\Klasor"komutu iletilir.
3. Performans ve Güvenlik Sınırları
Sistem sürecine kod enjekte ederken en ufak bir bellek hatası tüm Windows masaüstünün (explorer.exe) çökmesine yol açabilir.
Bu sebeple:
- Tüm Win32 handle kontrolleri katı
nullptrkontrollerinden geçirilir. - Bellek tahsisleri RAII prensipleriyle yönetilir.
- Modül devre dışı bırakıldığında tüm kancalar temizlenip orijinal pencere boyutları anında geri yüklenir.
4. Sonuç
explorer-terminal, Windows üzerinde çalışan geliştiriciler için iş akışını tek bir pencereye indirgeyen, hafif ve son derece pratik bir araç haline geldi. C++ ve yerel Win32 API'lerinin gücü, üçüncü parti hantal araçlara ihtiyaç duymadan işletim sistemini ihtiyaçlarınıza göre nasıl şekillendirebileceğinizi gösteriyor.