我正在为Mac OSX开发一个打字导师应用程序,即使应用程序没有被关注,也需要将键击转发给它.
有没有办法让系统向应用程序转发击键,可能是通过NSDistributedNotificationCenter?我用谷歌搜索了自己,并且找不到答案......
编辑: 下面的示例代码.
感谢@NSGod指出我正确的方向 - 我最终使用addGlobalMonitorForEventsMatchingMask:handler:方法添加了一个全局事件监视器,它工作得非常好.为了完整起见,我的实现看起来像这样:
// register for keys throughout the device...
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask
handler:^(NSEvent *event){
NSString *chars = [[event characters] lowercaseString];
unichar character = [chars characterAtIndex:0];
NSLog(@"keydown globally! Which key? This key: %c", character);
}];
Run Code Online (Sandbox Code Playgroud)
对我来说,棘手的部分是使用块,所以我会给出一些描述,以防它帮助任何人:
关于上面代码的注意事项是它是NSEvent上的所有单个方法调用.该块作为参数直接提供给函数.你可以认为它有点像内联委托方法.仅仅因为这需要一段时间才能让我沉沦,我将在这里一步一步地完成它:
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask
Run Code Online (Sandbox Code Playgroud)
这第一位没问题.您在NSEvent上调用类方法,并告诉它您要监视哪个事件,在本例中为NSKeyDownMask.一个支持的事件类型的面罩的名单,可以发现在这里.
现在,我们来到棘手的部分:处理程序,它需要一个块:
handler:^(NSEvent *event){
Run Code Online (Sandbox Code Playgroud)
我花了一些编译错误才能做到这一点,但是(谢谢Apple)他们是非常有建设性的错误信息.首先要注意的是克拉^.这标志着块的开始.在那之后,在括号内,
NSEvent *event
Run Code Online (Sandbox Code Playgroud)
其中声明了您将在块中使用的变量来捕获事件.你可以打电话给它
NSEvent *someCustomNameForAnEvent
Run Code Online (Sandbox Code Playgroud)
没关系,你只是在块内使用该名称.然后,这就是它的全部内容.确保关闭大括号和括号以完成方法调用:
}];
Run Code Online (Sandbox Code Playgroud)
而且你已经完成了!这真的是一种"单线".在您的应用程序中执行此调用的位置无关紧要 - 我在AppDelegate的applicationDidFinishLaunching方法中执行此操作.然后,在块中,您可以从应用程序中调用其他方法.
谁能告诉我如何反序列化包含多个属性的对象?
鉴于下面的场景,代码工作正常.
public ActionResult Index()
{
string json = @"{""name"": ""Person 2"",""email"": ""example@example.com""}";
var emp = JsonConvert.DeserializeObject<Person>(json);
Response.Write(emp.name + emp.email);
return View();
}
public class Person
{
public string name { get; set; }
public string email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是如果数组包含多个项目,我该怎么办呢?
string json = @"{""data"": [{""name"": ""Person 1"",""email"": ""test@test.com""},{""name"": ""Person 2"",""email"": ""example@example.com""}]}";
Run Code Online (Sandbox Code Playgroud)
提前致谢
下面给出的答案对于我提出的问题是完美的,但现在我已经领先一步了.任何人都可以告诉我如果json有一个数组,我需要做什么,例如添加一个地址?
{
"data": [
{
"name": "Person 1",
"email": "test@test.com",
"address": {
"address1": "my address 1",
"address2": "my address 2"
}
},
{
"name": "Person …Run Code Online (Sandbox Code Playgroud) 有没有人知道一个简单的方法,使用jQuery,选择<select>其val()属性产生一定值的所有元素?
我正在尝试做一些验证逻辑,并希望只用一个选择器选择所有这些元素,然后将警告类应用于他们的每个父母.我知道如果选择所有元素后该怎么做,但我没有看到处理这种情况的选择器.
我是否必须将所有<select>元素选择到选择器中,然后遍历它们并检查它们的每个值?我希望有一种更简单的方法.
谢谢.
在Silverlight 4应用程序中,我在包含的控件(DataGrid)上调用一个函数,此函数有时会抛出类型的虚假异常MS.Internal.WrappedException.由于这个例外没有意义,我需要吞下它.不幸的是,异常是internal class WrappedException : Exception在System.Windows.dll中声明的,所以我无法在一个catch块中命名.
问题是,检测此异常并忽略它的最安全的方法是什么?我提出的两个选项是:
ex.InnerException is InvalidOperationExceptionex.GetType().FullName == "MS.Internal.WrappedException"有一种方式比另一种更好吗?还有其他我没想过的选择吗?
这是我的功能,显示了不同的选项:
private void SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var selectedAlarm = alarmList.SelectedItem as Alarm;
if (selectedAlarm != null)
{
dataGrid.SelectedItem = selectedAlarm.Source;
try
{
dataGrid.ScrollIntoView(dataGrid.SelectedItem, null);
}
// catch (MS.Internal.WrappedException ex) doesn't compile
catch (Exception ex)
{
if (ex.InnerException is InvalidOperationException) // 1
if (ex.GetType().FullName == "MS.Internal.WrappedException") // 2
{
// ignore exception
}
else
throw;
}
} …Run Code Online (Sandbox Code Playgroud) 我需要从设置表中检索所有默认设置,但如果存在x字符,还需要获取字符设置.
但是此查询仅检索字符= 1的那些设置,而不是用户未设置任何人的默认设置.
SELECT `settings`.*, `character_settings`.`value`
FROM (`settings`)
LEFT JOIN `character_settings`
ON `character_settings`.`setting_id` = `settings`.`id`
WHERE `character_settings`.`character_id` = '1'
Run Code Online (Sandbox Code Playgroud)
所以我应该需要这样的东西:
array(
'0' => array('somekey' => 'keyname', 'value' => 'thevalue'),
'1' => array('somekey2' => 'keyname2'),
'2' => array('somekey3' => 'keyname3')
)
Run Code Online (Sandbox Code Playgroud)
其中,当键0包含具有字符值的默认值时,键1和键2是默认值.
是否有一个内存高效的Java库来读取大型Microsoft Excel文件(.xls和.xlsx)?我对Apache POI的经验非常有限,而且我记得它似乎是一个巨大的记忆力(尽管这可能仅仅是为了写作而不是为了阅读).还有更好的东西吗?或者我错误地记住和/或滥用POI?
拥有"友好"的开源许可证对它来说很重要.
我想使用Windows C/C++ API创建任意大小的文件.我正在使用具有32位虚拟地址内存空间的Windows XP Service Pack 2.我熟悉CreateFile.
然而,CreateFile没有大小arument,我想传递一个size参数的原因是允许我创建内存映射文件,允许用户访问预定大小的数据结构.你能否告诉我正确的Windows C/C++ API函数,它允许我创建一个预定大小的arcoitrary文件?谢谢
我对mac世界比较陌生.我的问题是关于在mac osx上使用python打开一个应用程序.从我到目前为止发现,似乎应用程序以app格式存储,实际上是目录.在打开应用程序时,操作系统会以某种方式解析这些问题吗?我想使用python打开Safari,它位于我的/Applications/Safari.app目录中.是否有一个特定的二进制文件我应该传递给os.system或者我应该以完全不同的方式进行它?我的最终目标是让safari打开一个本地html文件,关闭它然后打开另一个本地html文件.
谢谢,约翰
我写了一个客户端 - 服务器c#app并让它整晚运行,当我想看它是否仍在工作时我发现服务器上有错误.不幸的是,应用程序是很大的粘贴在一些代码,但我得到一个错误
Application.Run(form1中)
在program.cs中说 
前两个消息框可以忽略(从左到右),因为它们应该显示,但另一个消息
代表buton无法执行
来自此代码并且mai参与了此错误(此代码位于form1.cs中):
public void setButonState(inout_buton b, bool t, int q,int contor)
{
try
{
if (b.InvokeRequired)
{
Callback d = new Callback(setButonState);
this.Invoke(d, new object[] { b, t, q, contor });
}
else
{
b.Enabled = t;
if (q == 0) b.setBackgroundGrey();
if (q == 1) b.setBackgroundGreen();
if (q == 2) b.setBackgroundRed();
if (q == 3) b.setBackgroundOrange();
b.setSecondaryLabel(contor);
}
}
catch { new ShowMessageBox("FORM1 : delegate buton couldn't be executed"); }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:这些错误在什么条件下显示?
我正在尝试决定使用哪个复杂的WinForm项目.所以任何建议,欢迎任何经验!
哪个表现更好?哪个更容易学习?哪一个有更好的文档和样本?
...