用于java kiosk应用程序的windowsshell

我已经在SWT中开发了一个Java应用程序,该应用程序应该在作为信息亭操作的Windows系统上运行。 应用程序应该是在系统中运行的唯一应用程序,应该在系统启动后立即打开。 像任务pipe理器,Windows开始菜单,热键等任何东西都应该被禁用(见例如http://www.codeproject.com/Articles/7392/Lock-Windows-Desktop )。 该应用程序还有一个内置的pipe理员用户,可以激活所有的事情,有可能在系统中进行更改。 这些东西已经实现了。 问题是,当Windows启动时,它会持续几秒钟,直到应用程序打开,在这段时间内用户可以看到一切(直到应用程序启动时才会禁用)。 我search了互联网,唯一的解决scheme似乎是在registry中的标准Windowsshell的替代。 现在问题来了:

有谁知道如何编写一个窗口shell

  1. 使我能够在启动时停用所有的function
  2. 让我把一个快捷方式放到桌面上,这样用户就可以打开应用程序
  3. 让我在我的应用程序中为pipe理员用户激活停用的function

或者你有什么其他的想法如何做到这一点?

谢谢

由于我所努力完成的事情是复杂的,到现在为止还没有人回答,所以我会根据自己所执行的事情自己回答这个问题。

为了有可能从桌面上启动我的应用程序(这是因为我不得不删除它),我试图实现一种任务栏。 我用jast实现了一个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(); .... 

正如你看到当这个应用程序打开它试图禁用每个窗口的功能,而不是开始。 在对话框的菜单栏中,我把1个菜单和2个菜单项。 一个用于启动我的应用程序,一个用于管理员。 生成一个jar,从jar中创建一个exe,并基于链接http://technet.microsoft.com/en-us/library/cc939862.aspx我把它放在userinit键中。

我用http://www.codeproject.com/Articles/7392/Lock-Windows-Desktop中的DLL生成的Java代码来禁用任务栏,时钟,任务管理器等窗口功能和链接http&#xFF1A:// 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. 让我在我的应用程序中为管理员用户激活停用的功能
    • 如果管理员通过菜单项登录
      • 启动explorer.exe
      • 使用DLL来启用Windows应用程序
      • 停止键盘锁以启用键盘按键

我希望这可以帮助别人搜索同样的东西。 我上面解释的是在Windows XP SP1上测试,并正常工作。