2010-10-07 6 views
5

मैं कर्सर को स्टेटसबार ऐप से छिपाना चाहता हूं और मैंने कुछ शोध किया है। ऐसा लगता है जैसे कि इस समस्या का समाधान कुछ समय पहले मिला था:ग्लोबली छुपा कर्सर (पृष्ठभूमि ऐप से)

Globally hide mouse cursor in Cocoa/Carbon? या http://lists.apple.com/archives/carbon-dev/2006/Jan/msg00555.html

लेकिन कोड है कि कहा जाता है संकलन नहीं होंगे। क्या आप में से कोई भी व्यक्ति कोड संकलित करने के लिए कैसे जानता है (कुछ पुरानी एपीआई या कुछ आयात करके) या इसे प्राप्त करने का एक और तरीका (किसी प्रकार का हैक)?

(मैं जानता हूँ कि यह आम तौर पर एक बुरा विचार एक पृष्ठभूमि app से कर्सर को छिपाने के लिए है, लेकिन मैं किसी ऐप जहां इस कार्यक्षमता बहुत आवश्यक है बनाते हुए)

संपादित करें:

यहाँ वर्ष हैक है , यह अब और काम नहीं करता है। [MyClass MyMethod - : MyClass.o

"_GetSystemVersion", से संदर्भित में [MyClass MyMethod] - :

"_CGSCreateBoolean", से संदर्भित:

long sysVers = GetSystemVersion(); 

// This trick doesn't work on 10.1 
if (sysVers >= 0x1020) 
{ 
    void CGSSetConnectionProperty(int, int, int, int); 
    int CGSCreateCString(char *); 
    int CGSCreateBoolean(BOOL); 
    int _CGSDefaultConnection(); 
    void CGSReleaseObj(int); 
    int propertyString, boolVal; 

    // Hack to make background cursor setting work 
    propertyString = CGSCreateCString("SetsCursorInBackground"); 
    boolVal = CGSCreateBoolean(TRUE); 
    CGSSetConnectionProperty(_CGSDefaultConnection(), _CGSDefaultConnection(), propertyString, boolVal); 
    CGSReleaseObj(propertyString); 
    CGSReleaseObj(boolVal); 
} 

यह मुझे 4 त्रुटियों देता है MyClass.o में

[MyClass MyMethod] - :] MyClass.o

"_CGSCreateCString", में से संदर्भित

"_CGSReleaseObj", से संदर्भित: - MyClass.o

+0

कृपया अपने प्रश्न का उपयोग करके उस सटीक कोड को शामिल करने के लिए संपादित करें जिसमें आप उपयोग कर रहे हैं और आप जिन त्रुटियों को प्राप्त करते हैं उन्हें शामिल करें। –

उत्तर

5

में [MyClass MyMethod] आप लिंकर त्रुटियों से छुटकारा पाने के अनुप्रयोग सेवा ढांचे के खिलाफ लिंक करना होगा।

यहाँ हैक (कोर फाउंडेशन का उपयोग करने के लिए अद्यतन) की एक पूरी उदाहरण है:

cat >t.c<<EOF 
#include <ApplicationServices/ApplicationServices.h> 

int main(void) 
{ 
    void CGSSetConnectionProperty(int, int, CFStringRef, CFBooleanRef); 
    int _CGSDefaultConnection(); 
    CFStringRef propertyString; 

    // Hack to make background cursor setting work 
    propertyString = CFStringCreateWithCString(NULL, "SetsCursorInBackground", kCFStringEncodingUTF8); 
    CGSSetConnectionProperty(_CGSDefaultConnection(), _CGSDefaultConnection(), propertyString, kCFBooleanTrue); 
    CFRelease(propertyString); 
    // Hide the cursor and wait 
    CGDisplayHideCursor(kCGDirectMainDisplay); 
    pause(); 
    return 0; 
} 
EOF 
gcc -framework ApplicationServices t.c 
./a.out 

मैक ओएस 10.5 पर इस कर्सर को छुपाता है जब तक कार्यक्रम में बाधा आती है। हालांकि, किसी भी विंडो सर्वर या डॉक कार्यों को कर्सर दिखाता है।

+0

बहुत बहुत धन्यवाद। खूबसूरती से काम करता है: डी – Sorig

+0

मैंने 'nstimer' का उपयोग करके बार-बार '-hideCursor' को कॉल करके विंडो सर्वर/डॉक कार्य करने के दौरान कर्सर को फिर से दिखाना तय किया। यह भी काम करता है कि आवेदन अग्रभूमि में नहीं है। – fabian789

+0

कोई भी जानता है कि C++ कंपाइलर का उपयोग करते समय यह कोड क्यों टूटता है? इस उदाहरण ठीक जैसा कि ऊपर उल्लेख काम करता है, लेकिन जब कर "बजना ++ -framework ApplicationServices टीसी" निम्न त्रुटि होती है: 'वास्तुकला x86_64 के लिए अपरिभाषित प्रतीक: " _CGSDefaultConnection() ", से संदर्भित: testCursor-p78PsB.o में _main "CGSSetConnectionProperty (पूर्णांक, पूर्णांक, __CFString स्थिरांक *, __CFBoolean स्थिरांक *)", से संदर्भित: में testCursor-p78PsB.o ld _main: प्रतीक (रों) वास्तुकला x86_64 बजना के लिए नहीं मिला: त्रुटि: लिंकर आदेश के साथ विफल बाहर निकलें कोड 1 (आमंत्रण देखने के लिए उपयोग -v) ' –

संबंधित मुद्दे