From 0854e944ecb28a5c8937ec57b14dfafc195edd66 Mon Sep 17 00:00:00 2001 From: hkanou Date: Tue, 22 Sep 2026 23:33:44 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=E3=83=87=E3=82=A3=E3=82=B9=E3=83=97?= =?UTF-8?q?=E3=83=AC=E3=82=A4=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9=E3=81=8C?= =?UTF-8?q?=E5=86=8D=E6=A7=8B=E6=88=90=E3=81=95=E3=82=8C=E3=81=9F=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=81=AB=E5=A3=81=E7=B4=99=20or=20=E8=83=8C=E6=99=AF?= =?UTF-8?q?=E3=82=92=E5=86=8D=E3=83=AD=E3=83=BC=E3=83=89=E3=81=99=E3=82=8B?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=9F?= =?UTF-8?q?=20#1534=20RDP=E6=8E=A5=E7=B6=9A=E3=80=81=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=82=BD=E3=83=BC=E3=83=AB=E6=8E=A5=E7=B6=9A=E3=80=81=E3=82=B5?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=A4=E3=83=B3=E3=80=81=E3=83=AD=E3=83=83?= =?UTF-8?q?=E3=82=AF=E8=A7=A3=E9=99=A4=E3=81=AE=E3=82=BF=E3=82=A4=E3=83=9F?= =?UTF-8?q?=E3=83=B3=E3=82=B0=E3=81=A7=E3=80=81=E5=A3=81=E7=B4=99=20or=20?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E3=82=92=E5=BC=B7=E5=88=B6=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=9F=20=E7=94=BB=E5=83=8F=E3=81=AE?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E3=81=AB=E5=A4=B1=E6=95=97?= =?UTF-8?q?=E3=81=97=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AB=E3=80=81=E4=BB=A5?= =?UTF-8?q?=E5=89=8D=E3=81=AE=E8=A8=AD=E5=AE=9A=E3=82=92=E7=B6=AD=E6=8C=81?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- teraterm/teraterm/CMakeLists.txt | 1 + teraterm/teraterm/ttermpro.v16.vcxproj | 12 +++---- teraterm/teraterm/ttermpro.v17.vcxproj | 12 +++---- teraterm/teraterm/ttermpro.v18.vcxproj | 14 ++++---- teraterm/teraterm/vtdisp.c | 50 +++++++++++++++++++++----- teraterm/teraterm/vtwin.cpp | 21 +++++++++++ teraterm/teraterm/vtwin.h | 2 ++ 7 files changed, 85 insertions(+), 27 deletions(-) diff --git a/teraterm/teraterm/CMakeLists.txt b/teraterm/teraterm/CMakeLists.txt index 9a642ffb4e..3af9dc593a 100644 --- a/teraterm/teraterm/CMakeLists.txt +++ b/teraterm/teraterm/CMakeLists.txt @@ -449,6 +449,7 @@ target_link_libraries( user32 uuid ws2_32 + Wtsapi32 ) install( diff --git a/teraterm/teraterm/ttermpro.v16.vcxproj b/teraterm/teraterm/ttermpro.v16.vcxproj index a98baa47a3..d8458f8947 100644 --- a/teraterm/teraterm/ttermpro.v16.vcxproj +++ b/teraterm/teraterm/ttermpro.v16.vcxproj @@ -154,7 +154,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -199,7 +199,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -243,7 +243,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -286,7 +286,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -330,7 +330,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -373,7 +373,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) diff --git a/teraterm/teraterm/ttermpro.v17.vcxproj b/teraterm/teraterm/ttermpro.v17.vcxproj index 123c1f9837..8d4837fce9 100644 --- a/teraterm/teraterm/ttermpro.v17.vcxproj +++ b/teraterm/teraterm/ttermpro.v17.vcxproj @@ -154,7 +154,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -199,7 +199,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -243,7 +243,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -286,7 +286,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -330,7 +330,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -373,7 +373,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) diff --git a/teraterm/teraterm/ttermpro.v18.vcxproj b/teraterm/teraterm/ttermpro.v18.vcxproj index 4462635b8b..35670c06d5 100644 --- a/teraterm/teraterm/ttermpro.v18.vcxproj +++ b/teraterm/teraterm/ttermpro.v18.vcxproj @@ -154,7 +154,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -199,7 +199,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -243,7 +243,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -286,7 +286,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -330,7 +330,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -373,7 +373,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -641,4 +641,4 @@ - \ No newline at end of file + diff --git a/teraterm/teraterm/vtdisp.c b/teraterm/teraterm/vtdisp.c index 9c40700fb3..8d53894d39 100644 --- a/teraterm/teraterm/vtdisp.c +++ b/teraterm/teraterm/vtdisp.c @@ -31,6 +31,7 @@ #include "teraterm.h" #include "tttypes.h" #include "teraprn.h" +#include #include #define _CRTDBG_MAP_ALLOC #include @@ -381,7 +382,7 @@ static void BGPreloadPicture(BGSrc *src, const TTTSet *pts) src->width = bm.bmWidth; src->height = bm.bmHeight; }else{ - src->type = BG_COLOR; + // 以前の設定を維持する } free(susie_path); @@ -622,18 +623,38 @@ static void BGPreloadWallpaper(BGSrc *src) src->pattern = wi.pattern; }else{ - src->hdc = NULL; + // 以前の設定を維持する } src->color = GetSysColor(COLOR_DESKTOP); } -static void BGPreloadSrc(BGSrc *src, const TTTSet *pts) +static void BGPreloadSrc(BGSrc *src, const TTTSet *pts, BOOL forceReload) { if (!src->enable) { return; } + if (forceReload == FALSE && src->hdc) { + HDC memdc = CreateCompatibleDC(src->hdc); + if (memdc) { + HBITMAP bmp = CreateCompatibleBitmap(src->hdc, 1, 1); + if (!bmp) { + DeleteDC(memdc); + } else { + SelectObject(memdc, bmp); + BOOL ok = BitBlt(memdc, 0, 0, 1, 1, src->hdc, 0, 0, SRCCOPY); + DeleteObject(bmp); + DeleteDC(memdc); + if (ok) { + // 1x1ピクセルの画像の読み取りに成功した。 + // → HBITMAP(デバイス依存ビットマップ)は使用可能とみなす。 + return; + } + } + } + } + DeleteBitmapDC(&(src->hdc)); switch (src->type) { @@ -1075,15 +1096,23 @@ void BGSetupPrimary(vtdraw_t *vt, BOOL forceSetup) GetClientRect(vt->hVTWin,&rect); OffsetRect(&rect,point.x,point.y); - if(!forceSetup && EqualRect(&rect,&BGPrevRect)) - return; + if (!forceSetup && EqualRect(&rect,&BGPrevRect)) { + // クラウド環境(RDP等)でディスプレイデバイスが再構成されると、 + // DDB(デバイス依存ビットマップ)が作成時のデバイスと互換性を失い + // 描画不能になることがある。 + // HBITMAPが使用不可なら壁紙 or 背景を再ロードする。 + BGPreloadSrc(&BGDest, vt->pts, FALSE); + BGPreloadSrc(&BGSrc1, vt->pts, FALSE); + BGPreloadSrc(&BGSrc2, vt->pts, FALSE); + return; + } CopyRect(&BGPrevRect,&rect); //壁紙 or 背景をプリロード - BGPreloadSrc(&BGDest, vt->pts); - BGPreloadSrc(&BGSrc1, vt->pts); - BGPreloadSrc(&BGSrc2, vt->pts); + BGPreloadSrc(&BGDest, vt->pts, TRUE); + BGPreloadSrc(&BGSrc1, vt->pts, TRUE); + BGPreloadSrc(&BGSrc2, vt->pts, TRUE); _OutputDebugPrintf("BGSetupPrimary : BGInSizeMove = %d\n",BGInSizeMove); @@ -1242,6 +1271,10 @@ void BGLoadThemeFile(vtdraw_t *vt, const TTTSet *pts) } DecideBGEnable(); + + if (BGEnable) { + WTSRegisterSessionNotification(vt->hVTWin, NOTIFY_FOR_THIS_SESSION); + } } /** @@ -1692,6 +1725,7 @@ void EndDisp(vtdraw_t *vt) DispFontDelete(vt); if (!vt->IsPrinter) { + WTSUnRegisterSessionNotification(vt->hVTWin); BGDestruct(); free(BGDest.fileW); diff --git a/teraterm/teraterm/vtwin.cpp b/teraterm/teraterm/vtwin.cpp index 559b32767a..a2da388702 100644 --- a/teraterm/teraterm/vtwin.cpp +++ b/teraterm/teraterm/vtwin.cpp @@ -5299,6 +5299,21 @@ LRESULT CVTWindow::OnDpiChanged(WPARAM wp, LPARAM lp, BOOL calcOnly) return 0; } +void CVTWindow::OnDisplayChange() +{ + BGSetupPrimary(vt_src, TRUE); +} + +void CVTWindow::OnWTSSessionChange(WPARAM wp) +{ + if (wp == WTS_CONSOLE_CONNECT || + wp == WTS_REMOTE_CONNECT || + wp == WTS_SESSION_LOGON || + wp == WTS_SESSION_UNLOCK) { + BGSetupPrimary(vt_src, TRUE); + } +} + LRESULT CVTWindow::Proc(UINT msg, WPARAM wp, LPARAM lp) { static const UINT WM_TASKBER_CREATED = RegisterWindowMessage("TaskbarCreated"); @@ -5555,6 +5570,12 @@ LRESULT CVTWindow::Proc(UINT msg, WPARAM wp, LPARAM lp) case WM_DPICHANGED: OnDpiChanged(wp, lp, FALSE); break; + case WM_DISPLAYCHANGE: + OnDisplayChange(); + break; + case WM_WTSSESSION_CHANGE: + OnWTSSessionChange(wp); + break; case WM_COMMAND: { if (isClosing) { diff --git a/teraterm/teraterm/vtwin.h b/teraterm/teraterm/vtwin.h index 05a5ee4426..0578470bd5 100644 --- a/teraterm/teraterm/vtwin.h +++ b/teraterm/teraterm/vtwin.h @@ -241,6 +241,8 @@ class CVTWindow : public TTCFrameWnd void OnHelpAbout(); LRESULT OnDropNotify(WPARAM ShowMenu, LPARAM lParam); LRESULT OnDpiChanged(WPARAM wParam, LPARAM lParam, BOOL calcOnly); + void OnDisplayChange(); + void OnWTSSessionChange(WPARAM wp); virtual LRESULT Proc(UINT msg, WPARAM wp, LPARAM lp); private: From a41ac8f9269b7a4905088c2e3901a5efa4b91d32 Mon Sep 17 00:00:00 2001 From: hkanou Date: Wed, 23 Sep 2026 00:37:07 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=E5=BF=B5=E3=81=AE=E3=81=9F=E3=82=81?= =?UTF-8?q?=E3=80=81=E7=94=BB=E5=83=8F=E3=82=92=E8=A4=87=E8=A3=BD=E3=81=97?= =?UTF-8?q?=E3=81=9F=E5=BE=8C=E3=81=ABiPicture=E3=82=92Release=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= =?UTF-8?q?=20#1534?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- teraterm/common/bitmap.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/teraterm/common/bitmap.cpp b/teraterm/common/bitmap.cpp index 662d25db27..3d06bf8279 100644 --- a/teraterm/common/bitmap.cpp +++ b/teraterm/common/bitmap.cpp @@ -292,9 +292,13 @@ static HBITMAP GetBitmapHandleW(const wchar_t *File) iPicture->get_Type(&type); if(type==PICTYPE_BITMAP){ iPicture->get_Handle(&hOle); + } else { + iPicture->Release(); + return NULL; } - hBitmap=(HBITMAP)(UINT_PTR)hOle; + HBITMAP hRaw = (HBITMAP)(UINT_PTR)hOle; + hBitmap = (HBITMAP)CopyImage(hRaw, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG); iPicture->Release(); From 816391f696088c3901d41d346ba1bbc7b618cf02 Mon Sep 17 00:00:00 2001 From: hkanou Date: Wed, 23 Sep 2026 22:34:56 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=E3=83=93=E3=83=83=E3=83=88=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=97=E3=81=AE=E8=A7=A3=E6=94=BE=E6=BC=8F=E3=82=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F=20#1534?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- teraterm/teraterm/vtdisp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/teraterm/teraterm/vtdisp.c b/teraterm/teraterm/vtdisp.c index 8d53894d39..55535427e3 100644 --- a/teraterm/teraterm/vtdisp.c +++ b/teraterm/teraterm/vtdisp.c @@ -261,7 +261,6 @@ static HDC CreateBitmapDC(HBITMAP hbm) hdc = CreateCompatibleDC(NULL); - SaveDC(hdc); SelectObject(hdc,hbm); return hdc; @@ -281,11 +280,12 @@ static void DeleteBitmapDC(HDC *hdc) hbm = GetCurrentObject(*hdc,OBJ_BITMAP); - RestoreDC(*hdc,-1); - DeleteObject(hbm); DeleteDC(*hdc); - *hdc = 0; + + if (hbm) { + DeleteObject(hbm); + } } static void FillBitmapDC(HDC hdc,COLORREF color) From 9f24e69d607b06fe1a2f45e61769674e69876149 Mon Sep 17 00:00:00 2001 From: hkanou Date: Thu, 24 Sep 2026 22:23:21 +0900 Subject: [PATCH 4/5] =?UTF-8?q?DDB(=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9?= =?UTF-8?q?=E4=BE=9D=E5=AD=98=E3=83=93=E3=83=83=E3=83=88=E3=83=9E=E3=83=83?= =?UTF-8?q?=E3=83=97)=E3=81=AE=E8=A7=A3=E6=94=BE=E6=BC=8F=E3=82=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F=20#1534=20RDP?= =?UTF-8?q?=E5=86=8D=E6=8E=A5=E7=B6=9A=E7=AD=89=E3=81=AB=E3=82=88=E3=82=8A?= =?UTF-8?q?DDB=E3=81=8C=E4=BD=BF=E7=94=A8=E4=B8=8D=E5=8F=AF=E3=81=AB?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F=E5=A0=B4=E5=90=88=E3=81=AB?= =?UTF-8?q?=E3=80=81=E8=83=8C=E6=99=AF=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9?= =?UTF-8?q?=E3=82=92=E5=86=8D=E6=A7=8B=E7=AF=89=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F=20=E3=83=86?= =?UTF-8?q?=E3=83=BC=E3=83=9E=E8=A8=AD=E5=AE=9A=E5=A4=89=E6=9B=B4=E6=99=82?= =?UTF-8?q?=E3=81=AB=E8=83=8C=E6=99=AF=E3=81=8C=E5=86=8D=E6=A7=8B=E7=AF=89?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=80=81=E3=83=87?= =?UTF-8?q?=E3=82=A3=E3=82=B9=E3=83=97=E3=83=AC=E3=82=A4/=E3=82=BB?= =?UTF-8?q?=E3=83=83=E3=82=B7=E3=83=A7=E3=83=B3=E9=96=A2=E9=80=A3=E3=81=AE?= =?UTF-8?q?=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88=E5=87=A6=E7=90=86=E3=82=92?= =?UTF-8?q?=E8=A6=8B=E7=9B=B4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- teraterm/common/bitmap.cpp | 34 +++++++++++++++- teraterm/teraterm/ttermpro.v18.vcxproj | 12 +++--- teraterm/teraterm/vtdisp.c | 54 ++++++++++++++++---------- teraterm/teraterm/vtwin.cpp | 21 +++++++--- 4 files changed, 88 insertions(+), 33 deletions(-) diff --git a/teraterm/common/bitmap.cpp b/teraterm/common/bitmap.cpp index 3d06bf8279..045328fabd 100644 --- a/teraterm/common/bitmap.cpp +++ b/teraterm/common/bitmap.cpp @@ -298,7 +298,39 @@ static HBITMAP GetBitmapHandleW(const wchar_t *File) } HBITMAP hRaw = (HBITMAP)(UINT_PTR)hOle; - hBitmap = (HBITMAP)CopyImage(hRaw, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG); + + BITMAP bm; + if (GetObject(hRaw, sizeof(bm), &bm)) { + HDC hScreenDC = GetDC(NULL); + if (hScreenDC) { + hBitmap = CreateCompatibleBitmap(hScreenDC, bm.bmWidth, bm.bmHeight); + if (hBitmap) { + HDC hSrcDC = CreateCompatibleDC(hScreenDC); + HDC hDstDC = CreateCompatibleDC(hScreenDC); + if (hSrcDC && hDstDC) { + HBITMAP hOldSrcBmp = (HBITMAP)SelectObject(hSrcDC, hRaw); + HBITMAP hOldDstBmp = (HBITMAP)SelectObject(hDstDC, hBitmap); + BOOL ok = BitBlt(hDstDC, 0, 0, bm.bmWidth, bm.bmHeight, hSrcDC, 0, 0, SRCCOPY); + SelectObject(hSrcDC, hOldSrcBmp); + SelectObject(hDstDC, hOldDstBmp); + if (!ok) { + DeleteObject(hBitmap); + hBitmap = NULL; + } + } else { + DeleteObject(hBitmap); + hBitmap = NULL; + } + if (hSrcDC) { + DeleteDC(hSrcDC); + } + if (hDstDC) { + DeleteDC(hDstDC); + } + } + ReleaseDC(NULL, hScreenDC); + } + } iPicture->Release(); diff --git a/teraterm/teraterm/ttermpro.v18.vcxproj b/teraterm/teraterm/ttermpro.v18.vcxproj index 35670c06d5..876bf7dfd9 100644 --- a/teraterm/teraterm/ttermpro.v18.vcxproj +++ b/teraterm/teraterm/ttermpro.v18.vcxproj @@ -154,7 +154,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -199,7 +199,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -243,7 +243,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -286,7 +286,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -330,7 +330,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) @@ -373,7 +373,7 @@ $(SolutionDir)common;%(AdditionalIncludeDirectories) - onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32;%(AdditionalDependencies) + onig.lib;comctl32.lib;ws2_32.lib;imagehlp.lib;setupapi.lib;gdiplus.lib;Wtsapi32.lib;%(AdditionalDependencies) true $(SolutionDir)..\libs\oniguruma\build\$(Platform)\$(Configuration);$(OutDir);%(AdditionalLibraryDirectories) imagehlp.dll;user32.dll;shell32.dll;%(DelayLoadDLLs) diff --git a/teraterm/teraterm/vtdisp.c b/teraterm/teraterm/vtdisp.c index 55535427e3..6b132cd282 100644 --- a/teraterm/teraterm/vtdisp.c +++ b/teraterm/teraterm/vtdisp.c @@ -31,7 +31,6 @@ #include "teraterm.h" #include "tttypes.h" #include "teraprn.h" -#include #include #define _CRTDBG_MAP_ALLOC #include @@ -260,8 +259,16 @@ static HDC CreateBitmapDC(HBITMAP hbm) _OutputDebugPrintf("CreateBitmapDC : hbm = %p\n",hbm); hdc = CreateCompatibleDC(NULL); + if (hdc == NULL) { + DeleteObject(hbm); + return NULL; + } - SelectObject(hdc,hbm); + if (SelectObject(hdc, hbm) == NULL) { + DeleteDC(hdc); + DeleteObject(hbm); + return NULL; + } return hdc; } @@ -378,6 +385,7 @@ static void BGPreloadPicture(BGSrc *src, const TTTSet *pts) GetObject(hbm,sizeof(bm),&bm); + DeleteBitmapDC(&(src->hdc)); src->hdc = CreateBitmapDC(hbm); src->width = bm.bmWidth; src->height = bm.bmHeight; @@ -617,6 +625,7 @@ static void BGPreloadWallpaper(BGSrc *src) GetObject(hbm,sizeof(bm),&bm); + DeleteBitmapDC(&(src->hdc)); src->hdc = CreateBitmapDC(hbm); src->width = bm.bmWidth; src->height = bm.bmHeight; @@ -629,10 +638,13 @@ static void BGPreloadWallpaper(BGSrc *src) src->color = GetSysColor(COLOR_DESKTOP); } -static void BGPreloadSrc(BGSrc *src, const TTTSet *pts, BOOL forceReload) +// 復帰値 +// TRUE 背景の再構築が必要 +// FALSE 既存の描画リソースをそのまま利用可能 +static BOOL BGPreloadSrc(BGSrc *src, const TTTSet *pts, BOOL forceReload) { if (!src->enable) { - return; + return FALSE; } if (forceReload == FALSE && src->hdc) { @@ -649,29 +661,32 @@ static void BGPreloadSrc(BGSrc *src, const TTTSet *pts, BOOL forceReload) if (ok) { // 1x1ピクセルの画像の読み取りに成功した。 // → HBITMAP(デバイス依存ビットマップ)は使用可能とみなす。 - return; + return FALSE; } } } } - DeleteBitmapDC(&(src->hdc)); - + BOOL ret = FALSE; switch (src->type) { case BG_COLOR: break; case BG_WALLPAPER: BGPreloadWallpaper(src); + ret = TRUE; break; case BG_PICTURE: BGPreloadPicture(src, pts); + ret = TRUE; break; default: break; } + + return ret; } static void BGStretchPicture(HDC hdcDest, BGSrc *src, int x, int y, int width, int height) @@ -1084,6 +1099,7 @@ void BGSetupPrimary(vtdraw_t *vt, BOOL forceSetup) { POINT point; RECT rect; + BOOL preloaded = FALSE; if(!BGEnable) return; @@ -1101,19 +1117,22 @@ void BGSetupPrimary(vtdraw_t *vt, BOOL forceSetup) // DDB(デバイス依存ビットマップ)が作成時のデバイスと互換性を失い // 描画不能になることがある。 // HBITMAPが使用不可なら壁紙 or 背景を再ロードする。 - BGPreloadSrc(&BGDest, vt->pts, FALSE); - BGPreloadSrc(&BGSrc1, vt->pts, FALSE); - BGPreloadSrc(&BGSrc2, vt->pts, FALSE); - return; + preloaded |= BGPreloadSrc(&BGDest, vt->pts, FALSE); + preloaded |= BGPreloadSrc(&BGSrc1, vt->pts, FALSE); + preloaded |= BGPreloadSrc(&BGSrc2, vt->pts, FALSE); + if (preloaded == FALSE) { + return; + } } CopyRect(&BGPrevRect,&rect); //壁紙 or 背景をプリロード - BGPreloadSrc(&BGDest, vt->pts, TRUE); - BGPreloadSrc(&BGSrc1, vt->pts, TRUE); - BGPreloadSrc(&BGSrc2, vt->pts, TRUE); - + if (preloaded == FALSE) { + BGPreloadSrc(&BGDest, vt->pts, TRUE); + BGPreloadSrc(&BGSrc1, vt->pts, TRUE); + BGPreloadSrc(&BGSrc2, vt->pts, TRUE); + } _OutputDebugPrintf("BGSetupPrimary : BGInSizeMove = %d\n",BGInSizeMove); //作業用 DC 作成 @@ -1271,10 +1290,6 @@ void BGLoadThemeFile(vtdraw_t *vt, const TTTSet *pts) } DecideBGEnable(); - - if (BGEnable) { - WTSRegisterSessionNotification(vt->hVTWin, NOTIFY_FOR_THIS_SESSION); - } } /** @@ -1725,7 +1740,6 @@ void EndDisp(vtdraw_t *vt) DispFontDelete(vt); if (!vt->IsPrinter) { - WTSUnRegisterSessionNotification(vt->hVTWin); BGDestruct(); free(BGDest.fileW); diff --git a/teraterm/teraterm/vtwin.cpp b/teraterm/teraterm/vtwin.cpp index a2da388702..7becfc7a47 100644 --- a/teraterm/teraterm/vtwin.cpp +++ b/teraterm/teraterm/vtwin.cpp @@ -85,6 +85,7 @@ #include #include #include +#include #include "tt_res.h" #include "vtwin.h" @@ -1828,6 +1829,7 @@ void CVTWindow::OnDestroy() } EndTerm(); + WTSUnRegisterSessionNotification(HVTWin); EndDisp(vt_src); vt_src = NULL; sendfiledlgUnInit(); @@ -3942,6 +3944,7 @@ void CVTWindow::OnFileNewConnection() } SetKeyMap(); BGLoadThemeFile(vt_src, &ts); + WTSRegisterSessionNotification(HVTWin, NOTIFY_FOR_THIS_SESSION); if (ts.MacroFNW != NULL && ts.MacroFNW[0] != 0) { RunMacroW(ts.MacroFNW,TRUE); free(ts.MacroFNW); @@ -5301,16 +5304,22 @@ LRESULT CVTWindow::OnDpiChanged(WPARAM wp, LPARAM lp, BOOL calcOnly) void CVTWindow::OnDisplayChange() { - BGSetupPrimary(vt_src, TRUE); + if (ThemeIsEnabled()) { + BGSetupPrimary(vt_src, TRUE); + ::InvalidateRect(m_hWnd, NULL, FALSE); + } } void CVTWindow::OnWTSSessionChange(WPARAM wp) { - if (wp == WTS_CONSOLE_CONNECT || - wp == WTS_REMOTE_CONNECT || - wp == WTS_SESSION_LOGON || - wp == WTS_SESSION_UNLOCK) { - BGSetupPrimary(vt_src, TRUE); + if (ThemeIsEnabled()) { + if (wp == WTS_CONSOLE_CONNECT || + wp == WTS_REMOTE_CONNECT || + wp == WTS_SESSION_LOGON || + wp == WTS_SESSION_UNLOCK) { + BGSetupPrimary(vt_src, TRUE); + ::InvalidateRect(m_hWnd, NULL, FALSE); + } } } From c44bcc1af153bfb4013f3fe67ec733b11f625778 Mon Sep 17 00:00:00 2001 From: hkanou Date: Sat, 26 Sep 2026 19:35:49 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=E5=A3=81=E7=B4=99=E5=8F=88=E3=81=AF?= =?UTF-8?q?=E8=83=8C=E6=99=AF=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E6=99=82?= =?UTF-8?q?=E3=81=AB=E8=A7=A3=E6=94=BE=E6=BC=8F=E3=82=8C=E3=81=8C=E8=B5=B7?= =?UTF-8?q?=E3=81=8D=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=81=9F=20#1534=20=E3=83=87=E3=82=A3=E3=82=B9?= =?UTF-8?q?=E3=83=97=E3=83=AC=E3=82=A4/=E3=82=BB=E3=83=83=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E9=96=A2=E9=80=A3=E3=81=AE=E3=82=A4=E3=83=99?= =?UTF-8?q?=E3=83=B3=E3=83=88=E5=87=A6=E7=90=86=E3=81=AE=E5=87=A6=E7=90=86?= =?UTF-8?q?=E6=BC=8F=E3=82=8C=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- teraterm/teraterm/vtdisp.c | 46 ++++++++++++++++++++++--------------- teraterm/teraterm/vtwin.cpp | 26 +++++++++++---------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/teraterm/teraterm/vtdisp.c b/teraterm/teraterm/vtdisp.c index 6b132cd282..b36c37be47 100644 --- a/teraterm/teraterm/vtdisp.c +++ b/teraterm/teraterm/vtdisp.c @@ -383,14 +383,19 @@ static void BGPreloadPicture(BGSrc *src, const TTTSet *pts) if(hbm) { BITMAP bm; - GetObject(hbm,sizeof(bm),&bm); - - DeleteBitmapDC(&(src->hdc)); - src->hdc = CreateBitmapDC(hbm); - src->width = bm.bmWidth; - src->height = bm.bmHeight; + if (GetObject(hbm, sizeof(bm), &bm) == 0) { + DeleteObject(hbm); + } else { + HDC new_hdc = CreateBitmapDC(hbm); + if (new_hdc) { + DeleteBitmapDC(&(src->hdc)); + src->hdc = new_hdc; + src->width = bm.bmWidth; + src->height = bm.bmHeight; + } + } }else{ - // 以前の設定を維持する + src->type = BG_COLOR; // 画像が読めない場合は、単色塗りにフォールバックする } free(susie_path); @@ -623,23 +628,27 @@ static void BGPreloadWallpaper(BGSrc *src) { BITMAP bm; - GetObject(hbm,sizeof(bm),&bm); - - DeleteBitmapDC(&(src->hdc)); - src->hdc = CreateBitmapDC(hbm); - src->width = bm.bmWidth; - src->height = bm.bmHeight; - src->pattern = wi.pattern; - + if (GetObject(hbm, sizeof(bm), &bm) == 0) { + DeleteObject(hbm); + } else { + HDC new_hdc = CreateBitmapDC(hbm); + if (new_hdc) { + DeleteBitmapDC(&(src->hdc)); + src->hdc = new_hdc; + src->width = bm.bmWidth; + src->height = bm.bmHeight; + src->pattern = wi.pattern; + } + } }else{ - // 以前の設定を維持する + src->hdc = NULL; // 壁紙を読めない場合は再読み込み出来るようにしておく } src->color = GetSysColor(COLOR_DESKTOP); } // 復帰値 -// TRUE 背景の再構築が必要 +// TRUE 描画リソースの再構築を行った // FALSE 既存の描画リソースをそのまま利用可能 static BOOL BGPreloadSrc(BGSrc *src, const TTTSet *pts, BOOL forceReload) { @@ -654,8 +663,9 @@ static BOOL BGPreloadSrc(BGSrc *src, const TTTSet *pts, BOOL forceReload) if (!bmp) { DeleteDC(memdc); } else { - SelectObject(memdc, bmp); + HBITMAP oldBmp = SelectObject(memdc, bmp); BOOL ok = BitBlt(memdc, 0, 0, 1, 1, src->hdc, 0, 0, SRCCOPY); + SelectObject(memdc, oldBmp); DeleteObject(bmp); DeleteDC(memdc); if (ok) { diff --git a/teraterm/teraterm/vtwin.cpp b/teraterm/teraterm/vtwin.cpp index 7becfc7a47..04ac49d81e 100644 --- a/teraterm/teraterm/vtwin.cpp +++ b/teraterm/teraterm/vtwin.cpp @@ -761,6 +761,7 @@ CVTWindow::CVTWindow(HINSTANCE hInstance) cv.HWin = HVTWin; vt_src = InitDisp(HVTWin, &ts); BGLoadThemeFile(vt_src, &ts); + WTSRegisterSessionNotification(HVTWin, NOTIFY_FOR_THIS_SESSION); // Windows 11 でウィンドウの角が丸くならないようにする if (ts.WindowCornerDontround && pDwmSetWindowAttribute != NULL) { @@ -3944,7 +3945,6 @@ void CVTWindow::OnFileNewConnection() } SetKeyMap(); BGLoadThemeFile(vt_src, &ts); - WTSRegisterSessionNotification(HVTWin, NOTIFY_FOR_THIS_SESSION); if (ts.MacroFNW != NULL && ts.MacroFNW[0] != 0) { RunMacroW(ts.MacroFNW,TRUE); free(ts.MacroFNW); @@ -5304,22 +5304,24 @@ LRESULT CVTWindow::OnDpiChanged(WPARAM wp, LPARAM lp, BOOL calcOnly) void CVTWindow::OnDisplayChange() { - if (ThemeIsEnabled()) { - BGSetupPrimary(vt_src, TRUE); - ::InvalidateRect(m_hWnd, NULL, FALSE); + if (vt_src == NULL || !ThemeIsEnabled()) { + return; } + BGSetupPrimary(vt_src, TRUE); + ::InvalidateRect(m_hWnd, NULL, FALSE); } void CVTWindow::OnWTSSessionChange(WPARAM wp) { - if (ThemeIsEnabled()) { - if (wp == WTS_CONSOLE_CONNECT || - wp == WTS_REMOTE_CONNECT || - wp == WTS_SESSION_LOGON || - wp == WTS_SESSION_UNLOCK) { - BGSetupPrimary(vt_src, TRUE); - ::InvalidateRect(m_hWnd, NULL, FALSE); - } + if (vt_src == NULL || !ThemeIsEnabled()) { + return; + } + if (wp == WTS_CONSOLE_CONNECT || + wp == WTS_REMOTE_CONNECT || + wp == WTS_SESSION_LOGON || + wp == WTS_SESSION_UNLOCK) { + BGSetupPrimary(vt_src, TRUE); + ::InvalidateRect(m_hWnd, NULL, FALSE); } }