将应用程序发布到App Store时,我的标准工作流程是Product > Archive从Xcode的菜单栏中按下.
我意识到我从未Build Configuration在构建方案中更改Xcode .我把它设置为Debug开发期间,但希望App Store上的版本Release.
我希望并假设Product > Archive自动使用Release构建配置.谁能确认一下?
我正在尝试创建一个OS X键盘钩子用于辅助技术目的(即不要担心,而不是键盘记录器).
当用户按下某个键时,我想阻止真正的按键并发送假按键(我选择的字符).
我有以下代码:
- (void) hookTheKeyboard {
CGEventMask keyboardMask = CGEventMaskBit(kCGEventKeyDown);
id eventHandler = [NSEvent addGlobalMonitorForEventsMatchingMask:keyboardMask handler:^(NSEvent *keyboardEvent) {
NSLog(@"keyDown: %c", [[keyboardEvent characters] characterAtIndex:0]);
//Want to: Stop the keyboard input
//Want to: Send another key input instead
}];
}
Run Code Online (Sandbox Code Playgroud)
有任何帮助实现这些目标吗?基本上修改NSEvent"keyboardEvent"以发送不同的字符.谢谢.
makeKeyAndOrderFront 不是我的NSWindow钥匙或前面.
我的应用程序没有主窗口或菜单栏,这可能是问题的一部分?
IBOutlet NSWindow *loginWindow;
//(connected in Interface Builder to the NSWindow)
Run Code Online (Sandbox Code Playgroud)
NSWindow"在发布时可见"和"关闭后释放"都未经检查.
然后:
- (void) applicationDidFinishLaunching:(NSNotification *)aNotification
{
[loginWindow makeKeyAndOrderFront:self];
}
Run Code Online (Sandbox Code Playgroud)
这确实打开了窗户.(评论它导致没有窗口被打开).
然而:
它出现在Xcode窗口后面(不是前面).
它似乎可以接收鼠标焦点,但不会在窗口包含的文本字段中获取按键.按键被发送到Xcode.
激活Expose时,它将显示在Expose网格中.但我无法点击窗口在Expose中选择它...它不会出现在前面.
为什么我的Window不工作?
我需要帮助才能找到,在任何应用程序上按CMD + CTRL + D时,Dictionary应用程序如何显示以下弹出对话框中的所选文本.我想为我的cocoa应用程序实现相同类型的功能,我的应用程序将在后台运行,并在所选文本的某些热键按下时显示建议.

我已经实现了热键捕获,我只需要有代码来获取屏幕上所选文本的矩形区域,所以我可以像字典应用程序一样显示对话框.
谢谢
我试图从键盘钩子的lParam获取KBDLLHOOKSTRUCT.
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
KBDLLHOOKSTRUCT kbd = new KBDLLHOOKSTRUCT();
Marshal.PtrToStructure(lParam, kbd); // Throws System.ArguementException
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,PtrToStructure正在投掷两个
A first chance exception of type 'System.ArgumentException' occurred in myprogram.exe
Run Code Online (Sandbox Code Playgroud)
每次按下一个键都会出错.它也会阻止该方法的发展.
MSNDA说:http: //msdn.microsoft.com/en-us/library/4ca6d5z7.aspx
ArgumentException when:
The structureType parameter layout is not sequential or explicit.
-or-
The structureType parameter is a generic type.
Run Code Online (Sandbox Code Playgroud)
我能在这做什么才能让它发挥作用?lParam直接来自键盘钩子,所以我希望它是正确的.这些错误中的任何一个都有意义吗,我该怎么做才能解决它?
我需要写信给:
C:\用户\用户\应用程序数据\漫游\ AppName的
安装过程中的文件夹.我正在使用InnoIDE程序进行设置,这很棒.但是,它似乎缺少一个"AppData"特殊文件夹,可以轻松访问该目录.
例如,您可以使用:
DestDir: "{app}"
编写应用程序目录.
但是你怎么去AppData?是否有所有预设DestDir选项的列表?
我安装了一个键盘钩子:
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
基本上我想拿用户的键盘水龙头,吃输入,然后发布我自己的输入.
因此,如果他点击"g",我可能想将"foo"发布到文本字段.
我正在写文本域CGEventPost并CGEventSetUnicodeString在此处找到:http:
//www.mail-archive.com/cocoa-dev@lists.apple.com/msg23343.html
问题是我的每个编程输入的字符都是键盘钩子.所以我不能return NULL在键盘钩子中阻止用户输入......这也阻止了所有程序的输入!
我在C#中使用'inject'标志在Windows端区分它们,请在一年前看到我的问题:如何使用低级8位标志作为条件?
在Objective-C中寻找类似的东西.
当有人回复您的问题(或网站上的许多其他操作)时,您会收到一些"新邮件"!在站点左上角的"StackExchange"菜单中键入图标.
在此处查看API文档:http: //api.stackoverflow.com/1.0/usage
我没有看到为登录用户获取"新邮件"计数的方法.可能吗?
我找到了这个键盘钩子代码,我试图为我的目的略微修改:http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx
作为概述,我想让用户按一个键,说'E',并让键盘返回一个不同的字符'Z',对任何焦点的应用程序.
我改变的相关方法现在看起来像:
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
//The truely typed character:
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
KBDLLHOOKSTRUCT replacementKey = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));
replacementKey.vkCode = 90; // char 'Z'
Marshal.StructureToPtr(replacementKey, lParam, false);
//Now changed to my set character
vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)
控制台正确输出为:
E
Z
T
Z
G
Z
etc.
Run Code Online (Sandbox Code Playgroud)
但是,焦点应用程序仍然键入"E"而不是"Z".为什么?我更改了钩子键盘输入以包含'Z'而不是'E',并且控制台线显示它已正确更改!
据我了解,调用return CallNextHookEx(_hookID, nCode, wParam, lParam); …
我有一个全球应用程序,报告有关当前文本字段的信息.我已将其设置为每次单击鼠标时都运行:
NSLog(@"Screen:%f,%f", [[NSScreen mainScreen] frame].size.width, [[NSScreen mainScreen] frame].size.height);
Run Code Online (Sandbox Code Playgroud)
但是当我将键盘焦点放在一个屏幕上的文本字段中,然后在同一个文本字段中单击鼠标(重复)时,[[NSScreen mainScreen] frame]通常会报告错误的屏幕尺寸!它给了我另一个显示器的尺寸.
Apple文档说:
主屏幕不一定是包含菜单栏的相同屏幕或其原点为(0,0).主屏幕指的是包含当前正在接收键盘事件的窗口的屏幕.它是主屏幕,因为它是用户最有可能与之交互的屏幕.
这表示具有键盘焦点的屏幕始终是主屏幕.我给它键盘焦点和鼠标焦点.那么为什么我会在50%的时间内获得其他屏幕?
这是[NSScreen mainScreen]中的错误吗?我是否必须以某种方式强制重新计算?有没有其他方法来获得具有键盘焦点的显示器的尺寸?
objective-c ×5
macos ×4
cocoa ×3
c# ×2
appdata ×1
inno-setup ×1
input ×1
ios ×1
low-level ×1
marshalling ×1
nsevent ×1
screen ×1
selectedtext ×1
xcode ×1