// MANUEL RUNTIME test araci — CTest'e KAYITLI DEGIL (fikocad_surec_test'in // aksine bu, gercek Notepad penceresi acar + gercek Windows sanal // masaustulerini olusturur/degistirir; CI/otomatik kosumda calistirilmamali). // // AMAC: docs/catia_calisma_alani.md'deki Faz 2 (IVirtualDesktopManagerInternal // tabanli masaustuOlustur/masaustunaGec/pencereyiMasaustunaTasi/ // masaustuSiradanGuidBul) kodu CATIA gerektirmez — yalnizca GERCEK bir HWND ve // GERCEK Windows sanal masaustu altyapisi ister. Bu makinede CATIA kurulu // olmadigi icin GERCEK bir dogrulama yapilamiyordu; bu arac Notepad'i "gercek // pencere" olarak kullanarak AYNI COM yolunu (Sekil A/B/C secimi dahil) GERCEK // bu makinede calistirip sonucu ekrana basar — sahte/varsayilan basari YOK, // her adimin gercek MasaustuDurum + HRESULT'a dayali sonucu yazilir. // // KULLANIM: derle.bat sonrasi insa\Release\fikocad_masaustu_manuel_test.exe'yi // ELLE calistir (masaustu degisecegi icin arka planda calisan islerinizi // kaydedin). Sonucu docs/catia_calisma_alani.md'nin test tablosuna GERCEK // gozlemlenen sonuçla isleyin. #include #include #include #include "../sanal_masaustu.hpp" #include "../windows_surum.hpp" using fiko::MasaustuDurum; namespace { HWND pencereBulPid(DWORD pid) { struct Baglam { DWORD pid; HWND sonuc = nullptr; } b{pid}; EnumWindows( [](HWND h, LPARAM lp) -> BOOL { auto* b = reinterpret_cast(lp); DWORD p = 0; GetWindowThreadProcessId(h, &p); if (p == b->pid && IsWindowVisible(h) && GetWindow(h, GW_OWNER) == nullptr) { b->sonuc = h; return FALSE; } return TRUE; }, reinterpret_cast(&b)); return b.sonuc; } void satir(const std::string& etiket, MasaustuDurum d, const std::string& ek = "") { std::cout << " " << etiket << ": " << fiko::masaustuDurumMetni(d); if (!ek.empty()) std::cout << " (" << ek << ")"; std::cout << (d == MasaustuDurum::Ok ? " [OK]" : " [HATA]") << "\n"; } } // namespace int main() { std::cout << "=== fikocad Faz 2 sanal masaustu MANUEL runtime test ===\n"; std::cout << "UYARI: bu arac gercekten yeni sanal masaustuleri olusturacak ve\n" "aktif masaustunu degistirecek. Devam etmek icin Enter'a basin, " "cikmak icin Ctrl+C.\n"; std::cin.get(); CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); const auto& w = fiko::windowsSurumTespitEt(); std::cout << "\n[1] Windows surumu: " << w.ozet() << " tespitBasarili=" << (w.tespitBasarili ? "evet" : "hayir") << " windows11Mi=" << (w.windows11Mi ? "evet" : "hayir") << "\n"; std::cout << "\n[2] Notepad aciliyor (CATIA yerine GERCEK bir test penceresi)...\n"; STARTUPINFOW si{}; si.cb = sizeof(si); PROCESS_INFORMATION pi{}; wchar_t komut[] = L"notepad.exe"; if (!CreateProcessW(nullptr, komut, nullptr, nullptr, FALSE, 0, nullptr, nullptr, &si, &pi)) { std::cout << " [HATA] Notepad baslatilamadi (GetLastError=" << GetLastError() << ") - test durduruldu\n"; return 1; } Sleep(1000); HWND h = pencereBulPid(pi.dwProcessId); std::cout << " Notepad HWND=" << h << (h ? " [OK]\n" : " [HATA] bulunamadi, test durduruldu\n"); if (!h) return 1; std::cout << "\n"; std::string mevcutGuid; MasaustuDurum d0 = fiko::pencereMasaustuGetir(h, mevcutGuid); satir("[3] pencereMasaustuGetir (dokumante IVirtualDesktopManager)", d0, mevcutGuid); std::string yeniGuid; MasaustuDurum d1 = fiko::masaustuOlustur(yeniGuid); satir("[4] masaustuOlustur (Faz 2 - CreateDesktop)", d1, yeniGuid); if (d1 == MasaustuDurum::Ok) { MasaustuDurum d2 = fiko::pencereyiMasaustunaTasi(h, yeniGuid); satir("[5] pencereyiMasaustunaTasi (Faz 2 - MoveViewToDesktop)", d2); std::string tasindiktanSonra; MasaustuDurum d3 = fiko::pencereMasaustuGetir(h, tasindiktanSonra); const bool dogruMu = (d3 == MasaustuDurum::Ok && tasindiktanSonra == yeniGuid); std::cout << " [6] tasima sonrasi dogrulama: pencere artik " << tasindiktanSonra << " masaustunde - beklenen " << yeniGuid << (dogruMu ? " [OK] ESLESTI" : " [HATA] FARKLI") << "\n"; MasaustuDurum d4 = fiko::masaustunaGec(yeniGuid); satir("[7] masaustunaGec (Faz 2 - SwitchDesktop)", d4); if (d4 == MasaustuDurum::Ok) { bool suanki = false; MasaustuDurum d5 = fiko::pencereSuankiMasaustundeMi(h, suanki); std::cout << " [8] gecis sonrasi dogrulama: pencere su anki masaustunde mi? " << (suanki ? "evet" : "hayir") << " - beklenen evet" << ((d5 == MasaustuDurum::Ok && suanki) ? " [OK] ESLESTI" : " [HATA] FARKLI") << "\n"; } } std::string siradanGuid0; MasaustuDurum d6 = fiko::masaustuSiradanGuidBul(0, siradanGuid0); satir("[9] masaustuSiradanGuidBul(0) (SIRA yedegi - GetDesktops+IObjectArray)", d6, siradanGuid0); std::cout << "\n=== Test bitti. Notepad'i ve olusturulan yeni sanal masaustunu elle " "kapatin/silin. ===\n"; CoUninitialize(); return 0; }