0

Vistaは、セッション0がビデオカードなどのハードウェアにアクセスできないようにする新しいセキュリティを提供し、ユーザーはセッション0にログインしなくなります。これは、ユーザーにGUIを表示できないことを意味しますが、それはまた、表示できないことを意味します。 1つだけ表示しますか?現在のコードの設定方法では、コマンドラインのみにする方が手間がかかりますが、既存のコードを使用してGUIをプログラムで管理できる場合は、必要なコードが大幅に少なくなります。

これは可能ですか?

MSDNの記事によると:

•サービスは、セッション0でダイアログボックスなどのユーザーインターフェイス(UI)を作成しようとします。ユーザーはセッション0で実行されていないため、UIが表示されることはなく、サービスの入力を提供できません。探している。発生しないユーザー応答を待機しているため、サービスは機能を停止しているように見えます。

自動化されたUIを使用できると思いますが、セッション0で無効になっているため、サービスでSendKeysを使用できないとのことです。

編集:私は実際にユーザーにGUIを表示する必要はありません

4

3 に答える 3

1

1つ表示できます。表示されないだけです。

タスクバーに、GUI ウィンドウとそれに切り替える方法があるという小さな通知があります。

とにかく、アクティブなセッションを切り替えるための TerminalServices API コマンドが実際にあり、それが本当に必要な場合に呼び出すことができます。

于 2009-01-21T21:14:06.223 に答える
0

サービス プロセスの UI を提供する別のプロセスを作成できます。UI とサービス プロセス間の通信は、さまざまな方法で行うことができます (Web で「プロセス間通信」または「IPC」を検索してください)。

于 2009-01-21T21:17:35.327 に答える
0

サービスは GUI を持つことができます。それは単に、人間がそれを見ることはないということです。MSDN の引用が示唆するように、サービスはダイアログ ボックスを表示できます。への呼び出しMessageBoxは失敗しません。ボタンを押す人は誰もいないでしょう。

「GUI を管理したい」というのが何を意味するのかわかりません。のように、実際にコントロールに入力を送信するふりをすることを意味しますSendInputか? それが不可能な理由はありません。結局のところ、自分のプログラムのキューに入力を挿入することになり、SendInputVista 固有の警告はそれについて何も言いません。しかし、必要以上に物事を複雑にしていると思います。UI をまったく持たないようにプログラムを変更するという考えを再検討してください。(これは、コンソール プログラムを使用することとは異なります。コンソールは UI です。)

たとえば、ボタンをクリックするために必要なマウス メッセージをシミュレートする代わりに、仲介者を排除し、ボタン クリック イベントが呼び出す関数を直接呼び出すだけです。

于 2009-01-21T22:35:20.613 に答える