0

抱歉打扰了,但我还有另一个问题。我将如何从 macrabbit 的 Deskshade 应用程序中执行诸如 DeskLock 之类的操作?我已经做了小窗户,这就是我来的地方。我知道如何使用 PresentationOptions 在 10.6 中“锁定”屏幕,但我不想冒险,因为上次它不会让我重新进入;]

编辑:DeskShade 应用程序实际上是为了覆盖您的桌面,隐藏所有图标。它还允许您通过几次淡入淡出/滑动来随机化壁纸图案。还有一个称为 DeskLock 的额外功能,它实际上呈现了一个带有锁定图标的半透明黑色斜面(类似于 Mac 内置的 AppSwitcher),您可以放置​​个人文本。当您单击锁定图标时,它会显示一个模式,询问您可以设置的密码。您也可以只输入此密码而不按任何内容,然后按 Enter 键,它会解锁屏幕。这也使用了隐藏桌面的 DeskShade 功能。

谢谢!

4

1 回答 1

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设置NSApp来控制用户与系统交互的方式。在不锁定自己的情况下进行测试的一种简单方法是设置一个NSTimer调用方法,该方法在超时时间后将应用程序退出信息亭模式。

于 2010-03-01T07:01:38.300 回答