5

キオスクとして動作する Windows システムで実行する Java アプリケーションを SWT で開発しました。アプリケーションは、システムで実行されている唯一のアプリケーションである必要があり、システムの起動直後に開く必要があります。タスク マネージャー、Windows のスタート メニュー、ホットキーなどはすべて無効にする必要があります (たとえば、http://www.codeproject.com/Articles/7392/Lock-Windows-Desktopを参照)。)。アプリケーションには、システムに変更を加える可能性があるすべてのものを再度アクティブ化できる管理者ユーザーも組み込まれています。これらのことはすでに実装されています。問題は、ウィンドウが起動すると、アプリケーションが開くまで数秒続き、この短い時間の間にユーザーがすべてを見ることです (アプリケーションが起動するまで何も無効になりません)。私はインターネットを検索しましたが、唯一の解決策は、レジストリ内の標準の Windows シェルを置き換えることのようです。ここで質問が来ます:

Windows用のシェルを作成する方法を知っている人はいますか

  1. 起動時にすべてを無効にすることができます
  2. アプリケーションへのショートカットをデスクトップに配置して、ユーザーがアプリケーションを開くことができるようにする
  3. アプリケーションで管理者ユーザーの非アクティブ化された機能をアクティブにできます

または、これを達成するための他のアイデアはありますか?

ありがとう

4

2 に答える 2

4

私が達成しようとしたことは複雑であることが判明し、今まで誰も答えていないので、私が実装したことに基づいて自分で質問に答えます。

デスクトップからアプリケーションを起動する可能性があるため (削除する必要があったため存在しません)、一種のタスクバーを実装しようとしました。メニューバーとシェルの高さがゼロのSWTダイアログを実装しました

....
WindowsSystemUtility.disableWindowsFunctionality(true);

shell = new Shell(getParent(), getStyle());

createMenu();

shell.layout();
shell.pack();   

Rectangle screenBounds = getParent().getMonitor().getBounds();
int monitorWidth = screenBounds.width;
int monitorHeight = screenBounds.height;
//System.out.println(monitorWidth + ", " + monitorHeight);

int dialogWidth = monitorWidth;
int dialogHeight = 0;   //height 0 - > shell has no height. only menu is shown
Rectangle shellBounds = shell.computeTrim(0, 0, dialogWidth, dialogHeight);
shell.setSize(shellBounds.width, shellBounds.height);

//place the dialog
int x = 0;
int y = 0;  //position north
//int y = monitorHeight - dialogHeight; //position south
shell.setLocation(x, y);

shell.open();
....

ご覧のとおり、このアプリケーションが開くと、すべての Windows 機能を無効にしようとしてから開始されます。ダイアログのメニューバーに、2つのメニュー項目を持つ1つのメニューを配置しました。1 つはアプリケーションの起動用で、もう 1 つは管理者用です。jar を生成し、jar から exe を作成し、リンクhttp://technet.microsoft.com/en-us/library/cc939862.aspxに基づいて、それを userinit キーに入れました。

http://www.codeproject.com/Articles/7392/Lock-Windows-Desktopの dll から生成された Java コードを使用して、タスクバー、時計、タスク マネージャーなどの Windows 機能とリンクhttp://umang-を無効にしました。 world.blogspot.de/2012/02/is-it-is-possible-to-disable-windows.html (キー フックのインストール用) およびhttp://www.kbdedit.com/manual/low_level_vk_list.htmlおよびhttp:/仮想キー マップについては、/msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspxを参照してください。ユーザーがメニュー バーの管理者項目を使用してログインすると、同じ dll を使用してすべてを再度有効にし、フックを無効にします。管理者をログアウトすると、すべてが再び有効になります。

要約すると:

  1. 起動時にすべてを無効にすることができます
    • Windowsレジストリのuserinitキーをオーバーライドして、デスクトップを非アクティブ化し、Windowsが遅延なく起動した直後にアプリケーションを起動します
    • タスクバーが起動したとき(実装したswtダイアログ)
      • Explorer.exeを殺す
      • dll を使用して Windows アプリケーションを無効にする
      • キーフックをインストールしてキーボードのキーを無効にする
  2. アプリケーションへのショートカットをデスクトップに配置して、ユーザーがアプリケーションを開くことができるようにする
    • タスクバーのメニュー項目
  3. アプリケーションで管理者ユーザーの非アクティブ化された機能をアクティブにできます
    • 管理者がメニュー項目からログインした場合
      • エクスプローラーを起動します。
      • dll を使用して Windows アプリケーションを有効にする
      • キーフックを停止してキーボードのキーを有効にする

これが同じものを探している他の人に役立つことを願っています。上記で説明したことは、Windows XP SP3 でテストされ、正常に動作します。

于 2013-03-28T16:04:35.420 に答える