質問
私は複数のアプリケーションのスイートツールの様々な開発者は自分たちのスタジオに利用します。アプリケーションは、主にコマンドラインのアプリを開DOS cmdしています。これらのアプリを順番に起動GUIアプリケーションのためにアクセスの出力状況(ソケット)これらのコマンドラインアプリとなります。
のコマンドラインのアプリを始めることができ、ユーザーがログインがワークステーションロック(火offバッチファイルとし、その後直ちにロックをworkstaion)は、ログアウトして下さい(予定。の問題としての事を成し遂げてまいりました。
これらのアプリの火災時にユーザーがロックされたログインし、これらのコマンドは、産卵は、windows GUIをカナダマギル大学モントリオール出力状態にします。ことになるものと言うより、ユーザーがそのワークステーションロックがいまだワークステーションのGUIいます。このタスク一覧で見えません。次にこれらのユーザー走行では一部のコマンドラインのアプリは、GUI作を開始で既に起動しているものでは見えないデスクトップのユーザーと思われ出力されます。
私が求めていたものであるからの私のコマンドラインのアプリであれば走行の背後にロックされたワークステーションがユーザーでログアウトして下さい(予定作業)--基本的にはその走りのないユーザーのデスクトップます。出すことができれば聞かせてくれるし、できるだけで起動できない場合が当社のGUIるのを防ぐことが出来ますの問題です。
これらのアプリを必要とすることを試してC/C++のWindowsアプリケーション.
してもらえればと思います"と、うです。
解決
このプ答えることがいっぱいになりました。を持っています。どうやら何かのデスクトップで動の駅が特定の名前です。何もないのデスクトップ(プロセス開始により、タスクマネージャーサービスにログインした場合、停止またはロックされたワークステーション)をしたいと考える人は多いだろう別の駅名です。例コード:
HWINSTA dHandle = GetProcessWindowStation();
if ( GetUserObjectInformation(dHandle, UOI_NAME, nameBuffer, bufferLen, &lenNeeded) ) {
if ( stricmp(nameBuffer, "winsta0") ) {
// when we get here, we are not running on the real desktop
return false;
}
}
ばくの場合、そのプロセスのデスクトップで走る"else".ご本人の了解のもと、掲載していnamebuffer値が走ってデスクトップの名前にいるつもりではないんですけれどもがいないWinSta0.
リンクのドキュメント こちらの.
他のヒント
ることができるかもしれませ利用SENS(システムのイベント通知サービス私は利用したことのない自分ですが、私はほとんど正しい何をしたい:きの通知のイベントのログオンログオフ、クリーンセーバー。
知っているのか曖昧なものと思います。迅速に検索し、その http://discoveringdotnet.alexeyev.org/2008/02/sens-events.html
いうことに成功しこのアプローチを検出するかどうかのデスクトップロックWindows:
bool isDesktopLocked = false;
HDESK inputDesktop = OpenInputDesktop(0, FALSE,
DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE | DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS | DESKTOP_READOBJECTS |
DESKTOP_WRITE);
if (NULL == inputDesktop)
{
isDesktopLocked = true;
}
else
{
CloseDesktop(inputDesktop);
}