因为我试图完成的事情变得复杂,直到现在还没有人回答,我将根据我实施的事情自己回答这个问题。
为了有可能从桌面启动我的应用程序(因为我不得不删除它而不存在),我试图实现一种任务栏。我实现了一个带有菜单栏和shell高度为零的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功能而不是启动。在对话框的菜单栏中,我放入了1个带有2个菜单项的菜单。一个用于启动我的应用程序,一个用于管理员。生成一个jar,根据链接从jar中制作一个exe http://technet.microsoft.com/en-us/library/cc939862.aspx 我把它放在userinit键中。
我使用了来自dll的java生成的代码 http://www.codeproject.com/Articles/7392/Lock-Windows-Desktop 禁用任务栏,时钟,任务管理器等窗口功能和链接 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再次启用所有内容并停用挂钩。注销管理员会再次激活所有内容。
总结如下:
我希望这对于寻找相同事物的其他人有用。我上面解释的是在windows xp sp3上测试并且工作正常。