gpt4 book ai didi

objective-c - 我如何开发像 Deskshade 的 DeskLock 这样的东西?

转载 作者:行者123 更新时间:2023-12-03 18:05:57 25 4
gpt4 key购买 nike

抱歉打扰了,但我还有一个问题。我如何从 macrabbit 的 Deskshade 应用程序中执行类似 DeskLock 的操作?我已经制作了小 window ,这就是我所做的。我知道如何在 10.6 中使用PresentationOptions“锁定”屏幕,但我不想冒险,因为上次它不会让我返回;]

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

谢谢!

最佳答案

要创建覆盖窗口,您必须继承 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];
}
}

正如您所提到的,您可以使用 NSAppNSApplicationPresentationOptions 设置来控制用户与系统交互的方式。在不锁定自己的情况下进行测试的一种简单方法是设置一个 NSTimer 来调用一个方法,该方法在超时后将应用程序从信息亭模式中拉出。

关于objective-c - 我如何开发像 Deskshade 的 DeskLock 这样的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2332109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com