Globally hide mouse cursor in Cocoa/Carbon?
Asked Answered
C

4

12

Is there a way to globally hide the mouse cursor for all apps in Cocoa (or Carbon)? Or at least replace it with something else?

EDIT: Thanks for the input guys, but turns out Daniel Jalkut found the solution a while ago :) http://lists.apple.com/archives/carbon-dev/2006/Jan/msg00555.html

Callery answered 11/9, 2009 at 16:52 Comment(1)
Care to explain a little more as to why you'd want to do this? It generally seems a bad idea as you'd lose the advantage of the cursor changing as items are moused over. Or are you intending more to skin the cursor? i.e. still have it change on mouse over, but again to a custom cursorMetzgar
M
9

You are looking for CGDisplayHideCursor, which is part of the Quartz Display Services API.

Matchboard answered 29/9, 2009 at 13:13 Comment(3)
Thanks, didn't see that before. "In most cases, the caller must be the foreground application to affect the cursor." So...what's the case where I don't have to be the foreground application? :)Callery
I came here searching for a way to hide the cursor in my foreground application only, and this was exactly the ticket. Thanks!Depravity
It seems the link in the answer is defunct now but can be found at: developer.apple.com/documentation/coregraphics/…. When using Swift, I had to use CGDisplayHideCursor(CGMainDisplayID()) as kCGDirectMainDisplay doesn't appear to be available.Buff
S
3

Check out: http://developer.apple.com/legacy/mac/library/samplecode/CarbonCocoa_PictureCursor/listing2.html It's an old sample, but probably still works.

I expect that you're going to be limited to your application window, however. If you want to hide it for everyone you will probably have to make your window cover the screen.

Fun fact: The old toolbox function was simply "HideCursor()".

Snailpaced answered 11/9, 2009 at 23:5 Comment(2)
Thanks. Any advice on making a window cover my screen? (To be clear, I want the mouse cursor to hide for all applications as well...)Callery
Handling a full screen window the right way means you'll have to make sure you're covering all attached screens. Look at: cocoadevcentral.com/articles/000028.php. Alternatively, you might find some sample code for a screen saver application. Screen savers generally cover the screen as well. In your case, you'll want to modify your window to be a layer below your application windows.Snailpaced
C
3

just add this to your code:

CGDisplayHideCursor (kCGNullDirectDisplay);
Cohabit answered 15/7, 2014 at 17:48 Comment(0)
M
0

No, I don't believe there's a way of doing what you want, short of showing a full screen window and then obscuring absolutely everything on the desktop. That would also prevent e.g. keystrokes being sent to the right application and the like.

Macymad answered 19/9, 2009 at 17:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.