我想要的是什么:
我正在运行一个程序。当程序在托盘中并且没有焦点时,我想设置几个全局快捷方式来向程序发送消息。 “发送消息”是什么意思?好吧,在我的程序中,我想要的只是访问一些标志,这将指示状态指定的密钥对(已启动或未启用)。我会在循环中轮询旗帜并从那里做出决定。
我找到了什么:
System-wide hotkey for an application
system wide shortcut for Mac OS X
我不明白的事情:
从上面的链接看起来我必须在注册热键时传递一个处理程序。在热键按下,OS调用处理程序。那对吗?我不明白的是,如果我的程序正在运行,系统会如何调用程序中的处理程序。
答案 0 :(得分:2)
我认为你的主要问题是你不了解Mac编程是如何在目标C和Cocoa成为常态之前完成的。在此之前,大多数编程都是使用Carbon在C(或C ++)中完成的。此名称用于在Mac OS(Classic)和Mac OS X之间转换期间应该是更现代API集的“碳”副本的库。
您必须了解的另一件事是,您在上面给出的示例中给出的热键注册必须通过注册Carbon事件处理程序来配对,该事件处理程序将在您点击该热键组合时调用。
那就是说,我认为您应该阅读有关Carbon Event Manager的遗留文件:
并特别注意碳事件应该如何注册。我特别使用:
public class Team
{
public string Name { get; set; }
public string Id { get; set; }
public string Matches { get; set; }
}
private ObservableCollection<Team> _teams=new ObservableCollection<Team>()
{
new Team()
{
Id="1",
Matches = "45",
Name = "TeamA"
},
new Team()
{
Id="1",
Matches = "45",
Name = "TeamB"
},
new Team()
{
Id="1",
Matches = "45",
Name = "TeamC"
}
};
public ObservableCollection<Team> Teams
{
get
{
return _teams;
}
set
{
if (_teams == value)
{
return;
}
_teams = value;
OnPropertyChanged();
}
}
我使用它的方式是我制作了一个客观的C包装器,其中我基本上执行以下操作:
这是类的一部分,我们称之为MyOwnEventHandler:
OSStatus InstallEventHandler(EventTargetRef target,
EventHandlerUPP handlerProc,
UInt32 numTypes,
const EventTypeSpec* typeList,
void* userData,
EventHandlerRef* handlerRef);
我希望这会有所帮助。如果你被卡在某处让我知道,我会尽力帮助你。