很抱歉这是一个令人讨厌的问题,但我还有一个问题。我如何从macrabbit的Deskshade应用程序中执行像DeskLock这样的操作?我已经做了一个小窗口,这就是我来的。我知道如何使用PresentationOptions在10.6中“锁定”屏幕,但我不想冒险,因为上次它不会让我回来;]
编辑:DeskShade应用程序实际上是为了覆盖您的桌面,隐藏所有图标。它还允许您使用多个淡入淡出/滑动随机化壁纸图案。还有一个名为DeskLock的额外功能实际上提供了一个带有锁定图标的半透明黑色斜面(类似于App中的AppSwitcher构建),您可以放置个人文本。单击锁定图标时,它会显示一个模式,要求您设置密码。您也可以在不按任何内容的情况下输入此密码,然后按Enter键,它将解锁屏幕。这也使用了隐藏桌面的DeskShade功能。
谢谢!
答案 0 :(得分:1)
要创建叠加窗口,您必须子类化NSWindow并设置其样式蒙版和背景颜色:
@implementation BigTransparentWindow
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)deferCreation
{
self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask //this makes the window transparent
backing:bufferingType
defer:deferCreation];
if(self)
{
[self setOpaque:NO];
[self setHasShadow:NO];
[self setBackgroundColor:[[NSColor blackColor] colorWithAlphaComponent:0.5]];
}
return self;
}
@end
然后您需要设置窗口的框架以覆盖所有屏幕,并且您需要适当地设置其窗口级别:
- (IBAction)showWindow:(id)sender
{
//set the window so it covers all available screens
NSRect screensRect = NSZeroRect;
for(NSScreen* screen in [NSScreen screens])
{
screensRect = NSUnionRect(screensRect,[screen frame]);
}
[yourWindow setFrame:screensRect display:YES];
if(coverScreen)
{
//set the window so it is above all other windows
[yourWindow setLevel:kCGMaximumWindowLevel];
}
else
{
//set the window so it sits just above the desktop icons
[yourWindow setLevel:kCGDesktopIconWindowLevel + 1];
}
}
正如您所提到的,您可以使用NSApplicationPresentationOptions
的{{1}}设置来控制用户与系统交互的方式。一种简单的方法来测试它而不会自己锁定是设置NSApp
调用一种方法,在超时期限之后将应用程序从kiosk模式中拉出来。