0

ご迷惑をおかけして申し訳ありませんが、まだ別の質問があります。macrabbit の Deskshade アプリから DeskLock のようなことをするにはどうすればよいですか? 私は小さな窓を作りました。10.6でPresentationOptionsを使用して画面を「ロック」する方法は知っていますが、前回は元に戻すことができなかったので、リスクを冒したくありません;]

編集: DeskShade アプリは、実際にはデスクトップを覆い、すべてのアイコンを隠すことを目的としています。また、複数のフェード/スワイプで壁紙パターンをランダム化することもできます。DeskLock と呼ばれる追加機能が 1 つあり、実際には半透明の黒いベベル (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 に答える