3

Windows サービスを介してタスクバーとスタート ボタンを非表示にする必要があります。

コンソールプログラムでは、ウィンドウを呼び出しFindWindowたり、ウィンドウEnumWindowsを取得したりしてから、を使用して非表示にすることができます。"Shell_TrayWnd"ShowWindow(hwnd, SW_HIDE)

しかし、サービスが実行FindWindow("Shell_TrayWnd", NULL)されると が返さNULLれ、サービスが実行EnumWindowsされると、ウィンドウを含まない不完全なリストが取得され"Shell_TrayWnd"ます。

サービスが"Shell_TrayWnd"ウィンドウを表示する方法を提案したり、タスクバーとスタートボタンを非表示にする別の方法 (サービスで機能する) を提案したりできますか? ありがとう。

4

2 に答える 2

2

サービスに UI を提供する (または UI 要素とやり取りする) 正しい方法は、ユーザーのコンテキストで実行され、何らかの IPC メソッド (おそらく RPC、おそらくメッセージ パッシング) を使用してサービスと通信する GUI クライアントを提供することです。特権サービス内での UI 処理は、常にセキュリティ ホールです。

コンピュータによるプロセスでタスクバーを強制終了したいだけなら、サービスは必要ありませんし、役に立ちません。ログイン時に実行するようにスケジュールされたタスクを構成します。または、explorer.exe の代わりにカスタム シェルを起動するようにレジストリを設定します。ユーザー自身のアカウント以外の特権を必要とすることは何もしていません。

コンソール ウィンドウが点滅しないようにするには、WINDOWSサブシステム用にプログラムをビルドするかeditbin /SUBSYSTEM:WINDOWS、ビルドの完了後に PE ヘッダーのフラグを変更するために使用します。

于 2013-12-21T20:02:45.713 に答える
0

残念ながら、サービスがウィンドウにアクセスする方法はありません。これは、サービスの (設計された) 制限です。

于 2012-12-02T18:18:34.653 に答える