我在 SWT 中开发了一个 java 应用程序,它应该在作为 kiosk 运行的 Windows 系统上运行。该应用程序应该是系统中运行的唯一应用程序,并且应该在系统启动后立即打开。任务管理器、Windows 开始菜单、热键等所有东西都应该被禁用(例如参见 http://www.codeproject.com/Articles/7392/Lock-Windows-Desktop )。该应用程序还有一个内置的管理员用户,可以再次激活所有东西,并有可能在系统中进行更改。这些东西已经实现了。问题是,当 Windows 启动时,它会持续几秒钟,直到应用程序打开,并且在这段短时间内用户可以看到所有内容(在应用程序启动之前没有任何内容被禁用)。我在互联网上搜索过,唯一的解决方案似乎是替换注册表中的标准 Windows 外壳。现在问题来了:
有谁知道如何编写windows shell
- 使我能够在启动时停用所有内容
- 让我在桌面上放置我的应用程序的快捷方式,以便用户可以打开该应用程序
- 让我在我的应用程序中为管理员用户激活已停用的功能
或者您还有其他实现方法吗?
谢谢
最佳答案
由于我试图完成的事情很复杂,到目前为止还没有人回答,我将根据我实现的事情自己回答这个问题。
为了能够从桌面启动我的应用程序(桌面不存在,因为我不得不删除它)我尝试实现一种任务栏。我实现了一个 SWT 对话框,只有一个菜单栏和一个 shell 高度为零
....
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 功能,然后再启动。在对话框的菜单栏中,我放置了 1 个菜单和 2 个菜单项。一个用于启动我的应用程序,一个用于管理员。生成了一个 jar,从 jar 中创建了一个 exe,并基于链接 http://technet.microsoft.com/en-us/library/cc939862.aspx我把它放在用户初始化 key 中。
我使用了 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用于安装 key 钩和 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 再次启用所有内容并停用 Hook 。注销管理员会再次激活所有内容。
总结一下:
- 使我能够在启动时停用所有内容
- 覆盖 Windows 注册表中的 userinit 键以停用桌面并使我的应用程序在 Windows 启动后立即启动
- 当任务栏启动时(我实现的 swt 对话框)
- 杀死explorer.exe
- 使用dll禁用windows应用程序
- 安装 keyhook 以禁用键盘键
- 让我在桌面上放置一个指向我的应用程序的快捷方式,以便用户可以打开该应用程序
- 任务栏中的菜单项
- 让我在我的应用程序中为管理员用户激活停用的功能
- 如果管理员通过菜单项登录
- 启动explorer.exe
- 使用dll启用windows应用程序
- 停止 keyhook 以启用键盘键
- 如果管理员通过菜单项登录
我希望这对其他搜索相同内容的人有用。我上面解释的是在 windows xp sp3 上测试的并且工作正常。
关于java - 用于 java kiosk 应用程序的 windows shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15222016/