Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
windows shell for java kiosk应用程序_Java_Windows_Windows Shell_Kiosk - Fatal编程技术网

windows shell for java kiosk应用程序

windows shell for java kiosk应用程序,java,windows,windows-shell,kiosk,Java,Windows,Windows Shell,Kiosk,我已经在SWT中开发了一个java应用程序,该应用程序应该在作为kiosk操作的Windows系统上运行。应用程序应该是系统中运行的唯一应用程序,并且应该在系统启动后立即打开。任务管理器、windows开始菜单、热键等都应该禁用(参见示例)。该应用程序还有一个内置的管理员用户,可以再次激活所有东西,并有可能在系统中进行更改。这些事情已经实现了。问题是,当windows启动时,它会持续几秒钟直到应用程序打开,在这段短时间内,用户会看到所有内容(在应用程序启动之前,没有任何内容被禁用)。我在互联网上

我已经在SWT中开发了一个java应用程序,该应用程序应该在作为kiosk操作的Windows系统上运行。应用程序应该是系统中运行的唯一应用程序,并且应该在系统启动后立即打开。任务管理器、windows开始菜单、热键等都应该禁用(参见示例)。该应用程序还有一个内置的管理员用户,可以再次激活所有东西,并有可能在系统中进行更改。这些事情已经实现了。问题是,当windows启动时,它会持续几秒钟直到应用程序打开,在这段短时间内,用户会看到所有内容(在应用程序启动之前,没有任何内容被禁用)。我在互联网上搜索过,唯一的解决办法似乎是在注册表中替换标准的windows外壳。现在问题来了: 有人知道如何为windows编写一个shell吗

  • 使我能够在启动时停用所有内容
  • 允许我在桌面上放置应用程序的快捷方式,以便用户可以打开应用程序
  • 允许我在应用程序中为管理员用户激活已停用的功能
  • 或者你有没有其他的想法来实现这一点


    谢谢

    因为我试图完成的事情很复杂,到目前为止还没有人回答,所以我将根据我实现的事情自己回答这个问题

    为了能够从桌面启动我的应用程序(因为我不得不删除它,所以桌面不存在),我尝试实现一种任务栏。我实现了一个SWT对话框,其中jast是一个菜单栏,外壳高度为零

    ....
    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,并根据我在userinit密钥中的链接将其放入

    我在中使用了从dll生成的java代码来禁用windows功能,如任务栏、时钟、任务管理器等,以及用于安装密钥挂钩和虚拟密钥映射的链接。当用户使用菜单栏中的管理员项登录时,我会通过同一个dll再次启用所有内容并停用挂钩。注销管理员会再次激活averything

    综上所述:

  • 使我能够在启动时停用所有内容
    • 重写windows注册表中的userinit键以停用桌面,并使我的应用程序在windows启动后立即启动,而不会延迟
    • 任务栏启动时(我实现的swt对话框)
      • kill explorer.exe
      • 使用dll禁用windows应用程序
      • 安装keyhook以禁用键盘键
  • 允许我在桌面上放置应用程序的快捷方式,以便用户可以打开应用程序
    • 任务栏中的菜单项
  • 允许我在应用程序中为管理员用户激活已停用的功能
    • 如果管理员通过菜单项登录
      • 启动explorer.exe
      • 使用dll启用windows应用程序
      • 停止keyhook以启用键盘键

  • 我希望这能对其他寻找同样东西的人有所帮助。我上面解释的内容在windows xp sp3上进行了测试,效果很好。

    我已将windows shell更改为注册表上应用程序的启动程序,而不是资源管理器,唯一有效的快捷方式是ctrl-alt-del

    以管理员身份运行regedit

    这将启动cmd而不是资源管理器
    reg添加HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon/v Shell/t reg\u SZ/d cmd.exe/f

    Shell
    值编辑为
    c:\path\to\your\runMyShell.bat

    因此,只需放置一个脚本,而不是像“runMyShell.bat”这样的浏览器

    要从控件alt del中删除任务管理器,请执行以下操作:


    应用程序应该是唯一正在运行的应用程序?科幻小说。:-)可能只有可见的应用程序。我想说的是,除非用户以应用程序管理员的身份通过我的应用程序中的相应按钮登录,否则他不应打开任何其他应用程序。或者,只需放弃Windows,安装Linux,然后[参考此问题][1][1]:
    @echo off
    rem some Tasks To Be Done Before Custom Shell Loads
    java -jar myshell.jar
    
    reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableTaskMgr /t REG_DWORD /d 1 /f