#pragma once // Sanal Masaustu (Windows Virtual Desktop) soyutlamasi — Windows 10 ve 11 // ARASINDA FARKLI davranabilecegini kabul eder (bkz. docs/catia_calisma_alani.md). // // Dokumante/kararli kisim (Windows 10 1607+ .. Windows 11 hepsinde ayni COM // arayuzu, IVirtualDesktopManager): pencerenin hangi masaustunde oldugunu // SORGULAMA. Bu iki fonksiyon Win10/11'de TEK KOD YOLUYLA calisir. // // Undocumented kisim (masaustu OLUSTURMA / pencere TASIMA / masaustune GECIS): // public API YOK; internal IVirtualDesktopManagerInternal/IApplicationView // arayuzlerinin IID'leri VE vtable sirasi Windows build'ine gore DEGISIR. // Bu dosyadaki ilgili fonksiyonlar FAZ 1'de kasitli olarak STUB'tir ve // durustce MasaustuDurum::HenuzUygulanmadi doner — sahte basari YOK. #include #include namespace fiko { enum class MasaustuDurum : uint8_t { Ok, // islem basarili DesteklenmiyorSurum, // bu makinede/derlemede API yok (COM olusturulamadi) HenuzUygulanmadi, // Faz 2'de eklenecek — bilerek uygulanmamis ComHatasi, // COM cagrisi basarisiz (HRESULT loglanir) PencereGecersiz, // HWND artik gecerli degil }; const char* masaustuDurumMetni(MasaustuDurum d); // RAII COM oturumu — discovery/kaydet/geri-yukle akislarinin BASINDA bir // tane acilir, sonunda otomatik kapanir. Baska bir yerde COM zaten // baslatilmissa (bizAcik_=false) CoUninitialize CAGRILMAZ (cift kapama yok). class ComOturum { public: ComOturum(); ~ComOturum(); bool basariliMi() const { return basarili_; } private: bool basarili_ = false; bool bizAcik_ = false; }; // COM masaustu yoneticisini kurmayi dener (surec omrunde bir kez; sonrasi // onbellekten doner). ComOturum acik degilken cagrilirsa basarisiz olur. bool masaustuYoneticisiHazirMi(); // Pencerenin sanal masaustu kimligini dondurur (GUID metni, "{...}" bicimi). MasaustuDurum pencereMasaustuGetir(void* hwnd, std::string& guidMetniCikis); // Pencere su an EKRANDA GORUNEN (aktif) sanal masaustunde mi? MasaustuDurum pencereSuankiMasaustundeMi(void* hwnd, bool& sonucCikis); // ---- Faz 2 (henuz uygulanmadi) — imzalar simdiden sabit ---- MasaustuDurum masaustuOlustur(std::string& yeniGuidCikis); MasaustuDurum masaustunaGec(const std::string& guidMetni); MasaustuDurum pencereyiMasaustunaTasi(void* hwnd, const std::string& guidMetni); // YEDEK yontem: GUID artik gecerli DEGILSE (orn. reboot sonrasi masaustu // GUID'leri sifirlanir) N'inci (0-tabanli, GetDesktops sirasina gore) masaustunun // GUNCEL GUID'ini bulur. calisma_alani_plan.hpp'nin PlanOturum::masaustuSira // alaniyla eslesir (kayit anindaki "sira" — kalici kimlik degil, yalniz yedek // ipucu). Basarili donuste guidCikis, masaustunaGec/pencereyiMasaustunaTasi'a // dogrudan verilebilir bir GUID metni tasir. MasaustuDurum masaustuSiradanGuidBul(int sira, std::string& guidCikis); } // namespace fiko