NSScreen
假设我有窗口ID,有没有办法获得另一个进程的窗口?
我与以下代码非常接近,但信息字典没有说明窗口在哪个屏幕上.
CFArrayRef windowArray = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSArray* windowList = (NSArray*)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSUInteger count = [windowList count];
for (NSUInteger i = 0; i < count; i++)
{
NSDictionary* nswindowsdescription = [windowList objectAtIndex:i];
NSNumber* windowid = (NSNumber*)[nswindowsdescription objectForKey:@"kCGWindowNumber"];
if(windowid)
{
if ([windowid integerValue] == appWeAreLookingForWindowId)
{
Warning(@"Found it: %@", nswindowsdescription);
}
}
}
CFRelease(windowArray);
Run Code Online (Sandbox Code Playgroud)
来自:CGWindowListCopyWindowInfo,kCGWindowLayer和窗口级别
这里输出:
kCGWindowAlpha = 1;
kCGWindowBounds = {
Height = 1010;
Width = 1600;
X = 284;
Y = 43;
};
kCGWindowIsOnscreen = 1; // …
Run Code Online (Sandbox Code Playgroud) 我有一个基于视图的NSTableView
.表中的每个视图都有一个自定义文本字段.
当用户点击表格视图中的文本字段(标签)时,我想触发一个动作(想象一下,在每个表格单元格中都有一个带有自定义动作的超链接).
我已经创建了一个基本NSTextField
子类来捕获鼠标事件.但是,它们仅在第二次单击时触发,而不是第一次单击.
我尝试使用一个,NSButton
并立即开火.
这是自定义标签的代码:
@implementation HyperlinkTextField
- (void)mouseDown:(NSEvent *)theEvent {
NSLog(@"link mouse down");
}
- (void)mouseUp:(NSEvent *)theEvent {
NSLog(@"link mouse up");
}
- (BOOL)acceptsFirstResponder {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
return YES;
}
@end
Run Code Online (Sandbox Code Playgroud) 我有一个Mac应用程序,提供应用程序内购买.有一段时间我有用户联系我,因为购买失败并出现以下错误.
请注意,这适用于普通用户.这对我来说可以.(对于具有"测试"用户帐户的开发人员来说,这有很多问题,这不是这种情况).
错误:
Error Domain=SKErrorDomain Code=0 "Unknown Error." UserInfo=0x7fead1e44490
{NSLocalizedDescription=Unknown Error.}
Run Code Online (Sandbox Code Playgroud) 我有一个UWP应用程序,允许用户创建和修改文本文档.我很难让保存机制与app suspend/resume生命周期一起工作.
这是我有的:
Dispatcher.RunAsync()
当应用程序被暂停时:
ExtendedExecutionSession
我的问题:
Dispatcher.RunAsync()
.后台队列等待此任务完成,但它永远不会,因为到那时,UI线程已经停止.→所以我的最终保存操作永远不会执行,因为后台队列等待更新UI.
这是一个流程图:
出现的一些问题:
Dispatcher.RunAsync()
,这至少会完成或"冻结"吗?总结一下这个问题:
当应用程序被暂停时,我必须确保在等待后台线程上的潜在挂起磁盘访问权限才能完成,然后我再次保存文档,以防我的应用程序稍后终止.
我需要一种 100% 故障安全的方法来确定文件名/文件 URL 是否可用于将数据写入磁盘,而不会意外删除现有文件。
目前我正在使用NSFileManager.fileExists(atPath:)
,但我想知道,如果父目录位于 iCloud 中并且我的文件 URL 指向 iCloud 中尚未下载到设备的现有文件怎么办?
让我想到的是这两种方法URL
:
func checkResourceIsReachable() throws -> Bool
func checkPromisedItemIsReachable() throws -> Bool
资源和承诺项目之间存在区别。承诺项目定义为:
除非您使用文件协调器对其 URL 执行协调读取(这会导致内容被下载或以其他方式生成),否则无法保证承诺的项目的内容会存在于文件系统中。
背景:
我想要的是一个扩展,FileManager
它返回给定(现有)文件 URL 的下一个可用的、不存在的文件名。例如:
如何检查Text 2.txt
本地和 iCloud 中是否确实不存在?
这是我目前的方法:
// Safer than: FileManager.default.fileExists(at: url) ?
private func fileExists(at url:URL) throws -> Bool
{
if (try url.resourceValues(forKeys: [.isUbiquitousItemKey])).isUbiquitousItem == true
{
return try url.checkPromisedItemIsReachable()
}
else
{
return try url.checkResourceIsReachable()
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试了解 Swift 中的泛型类型约束。这是我的出发点:
\n\nclass Promise<T> {\n func resolve(_ block:@escaping (T) ->Void) {}\n func fulfill(_ result:T) {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\nPromise 就是将来可以实现的事情。当它与 Swift 类型一起使用时,Result
将结果从后台队列返回到主队列时,这会变得非常有用:
let promise = Promise<Result<String, Error>>()\npromise.fulfill(.success("Hello"))\npromise.fulfill(.failure(NSError()))\n
Run Code Online (Sandbox Code Playgroud)\n\n现在我想向所有用于Result
添加这些辅助方法的 Promise 实例添加扩展:
extension Promise where T == Result<X, Error> {\n \xe2\xac\x86\xef\xb8\x8e Here\'s the problem \xe2\x9a\xa1\xef\xb8\x8f\n func failure(_ error:Error) {\n fulfill(.failure(error))\n }\n\n func success(_ result:X) {\n fulfill(.success(result))\n }\n}\n\n// Shorter:\nlet promise = Promise<Result<String, Error>>()\npromise.success("Hello")\npromise.failure(NSError())\n
Run Code Online (Sandbox Code Playgroud)\n\n唯一的问题是上面的代码无法编译,因为X
没有定义。我想表达的是这样的:
Promise
当其泛型类型T
为 where 类型Result<X,Z>
且 …
有没有办法使用Mac OS X的"Hot Corners"运行自定义AppleScript或任何其他自定义应用程序?
默认系统设置列出了许多操作(例如,Launchpad,Mission Control,桌面等),但没有任何内容可以让我启动自定义应用程序.也许有一种方法可以"重定向"其中一个去做那个?
我有一个自定义NSTableRowView
实现来显示我的数据单元格.该表还包含使用简单的组行NSTextField
.
在我的自定义行视图中,我需要稍微更改底部分隔符的绘图,具体取决于下面的下一行是数据单元格(即我的自定义行)还是组标题.
在组头的情况下,我不必绘制分隔符,否则我最终会得到一个2px分隔符,如屏幕截图所示.
有没有办法从下一个(或上一个)NSTableRowView
实例获取引用[NSTableRowView drawBackgroundInRect:...]
?
我正在尝试创建一个类似于Finder文件标签的文本字段.我希望最后(第二)行在中间被截断.
我从一个多线开始NSTextField
.
但是,[self.cell setLineBreakMode:NSLineBreakByTruncatingMiddle];
在文本字段中调用结果只显示一条截断的行(不再有换行符).
这是Finder中的样子:
我正在尝试重新创建Xcode中使用的分段控件,其中图像是用蓝色色调绘制的.
例如在Interface Builder中:
到目前为止,我有一个自定义NSSegmentedCell
覆盖- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView
,但我坚持如何绘制带有灰色色调的段图像(1)和(2)如果选择了蓝色色调.
此外,它看起来像是用边框或渐变效果绘制的.当我自己绘制段图像时,它只是黑色(因为我使用模板图像).
如何从上方重新创建片段?
cocoa ×6
macos ×2
nstableview ×2
nstextfield ×2
c# ×1
generics ×1
icloud ×1
icloud-drive ×1
nsurl ×1
nswindow ×1
storekit ×1
suspend ×1
swift ×1
uwp ×1
xcode ×1