良いソフトありがとうございます。
かれこれ20年近く使用させていただいてます。
V4.50から追加になった「デスクトップ非アクティブで離席中に」するオプションが
ロック画面(ctrl+alt+del)で動作しない模様です。弊社では離席時にロックする習慣があり、
せっかくのオプションなのですが少し残念です。
ソースを見たのですがTMainWin::CleanupProcで使用しているGetForegroundWindowが
スクリーンセーバではNULLを返しますが画面ロックでは有効なハンドルを返し続ける事が問題のようです。
同オプションがなかった時代に社内限定ですが自動的に不在になるようにソースを修正していました。
(スクリーンセーバとは無関係に不在になるまでの時間を任意に設定できるようにしていました)
現在、同じやり方でV4.50を修正して一応凌いでおります・・(下記)
できましたら画面ロックにも対応していただければと思います。
(おそらく何らかのAPIを使用してもっとスマートにできるものと思います)
長文すいません。ご検討よろしくお願いいたします。
**********************************************************************************
#define DESKTOP_LOCKMAX 5
#define LEAVE_SEAT_MAX (5 * 60) // 5分固定
BOOL TMainWin::CleanupProc()
{
static DWORD last;
DWORD cur = GetTick();
if (cfg->useLockName) {
static POINT LastMP;
POINT NowMP;
static DWORD NoTouchTimer;
DWORD i, ks;
BOOL lock = FALSE;
BOOL need_br = FALSE;
// 現在のマウス位置を得る、前回からキーが押されたか調べる
::GetCursorPos(&NowMP);
for (i = ks = 0; i < 256; i++) ks |= ::GetAsyncKeyState(i);
// マウス位置、キーに変化があるかチェック
if (NowMP.x != LastMP.x || NowMP.y != LastMP.y || (ks & 1) == 1)
NoTouchTimer = LEAVE_SEAT_MAX; // 変化有ればタイマープリセット
else if (NoTouchTimer > 0)
NoTouchTimer--; // 変化がなければダウンカウント
else
lock = TRUE; // タイムアップしたのでロックフラグセット
// マウス位置を保存する
LastMP = NowMP;
// これ以降はオリジナルの処理(省略)
if (lock && desktopLockCnt < DESKTOP_LOCKMAX) {
if (++desktopLockCnt >= DESKTOP_LOCKMAX) {
need_br = TRUE;
}