Win2000のAPI(LockWorkStation)でコンピュータのロックをかけることができますが、ロックをかける前にロックしているかどうかを確認する方法は?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/09/10 15:19:07
  • 終了:--

回答(2件)

id:ken_na8c No.1

ken_na8c回答回数26ベストアンサー獲得回数02004/09/10 15:57:13

ポイント25pt

この記事によると、直接ロックのステータスをとるような手段はないそうです。

回避策として、

バックグラウンドで別プロセスのアプリケーションを起動し、

switchさせたときにerrorとなるかどうか

でLockのステータスを確認する方法が紹介されています。

id:ohmix1

すばらしい。こんな手があるとは...

テストプログラムでは今のところ期待通りの動きをしています。

2004/09/10 16:45:11
id:suzuki1972 No.2

suzuki1972回答回数14ベストアンサー獲得回数02004/09/10 16:33:04

ポイント25pt

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

このページは、存在しないか、削除されています。

SwitchDesktop( ) が、不可視のデスクトップではエラーを返すそうです。

あとは、スクリーンセーバーが起動中かどうかを判定すればよいかもしれません。

直接的な回答ではなく申し訳ないですが、参考になれば幸いです。

id:ohmix1

ありがとうございます。SwitchDesktopについては確認が取れました。

HDESK hDsek = GetThreadDesktop(GetCurrentThreadId());

BOOL bIsLock = FALSE;

if (hDsek != NULL && SwitchDesktop(hDsek)) bIsLock = TRUE;

>あとは、スクリーンセーバーが起動中かどうかを判定すればよいかもしれません。

偶然にも、

「Inside Windows 1997 No.8 スクリーンセーバの実行を検知する」

を持っていたので何とかなりそうです。

2004/09/10 16:58:22
  • id:ohmix1
    訂正

    bIsLock の値が逆でした。

    HDESK hDsek = GetThreadDesktop(GetCurrentThreadId());
    BOOL bIsLock = TRUE;
    if (hDsek != NULL && SwitchDesktop(hDsek)) bIsLock = FALSE;

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません