الكاكاو: الحصول على موقف الماوس الحالي على الشاشة

StackOverflow https://stackoverflow.com/questions/1117065

  •  12-09-2019
  •  | 
  •  

سؤال

أحتاج إلى الحصول على موقف الماوس على الشاشة على جهاز Mac باستخدام XCode. لدي بعض التعليمات البرمجية التي من المفترض أن تفعل ذلك ولكني دائما إرجاع x و y as 0:

void queryPointer()
{

    NSPoint mouseLoc; 
    mouseLoc = [NSEvent mouseLocation]; //get current mouse position

    NSLog(@"Mouse location:");
    NSLog(@"x = %d",  mouseLoc.x);
    NSLog(@"y = %d",  mouseLoc.y);    

}

ما الخطأ الذي افعله؟ كيف تحصل على الموضع الحالي على الشاشة؟ تحتاج أيضا في النهاية إلى نسخ هذا الموضع (المحفوظ في Nspoint) إلى CGpoint لاستخدامه مع وظيفة أخرى، لذلك أحتاج إلى الحصول على هذا إما X أو y إحداثيات أو ترجم هذا.

هل كانت مفيدة؟

المحلول 2

CGEventRef ourEvent = CGEventCreate(NULL);
point = CGEventGetLocation(ourEvent);
CFRelease(ourEvent);
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);

نصائح أخرى

لا يعمل الكود الأصلي للمؤلف لأن S / إنه يحاول طباعة العوامات من حيث٪ د. سيكون الرمز الصحيح:

NSPoint mouseLoc = [NSEvent mouseLocation]; //get current mouse position
NSLog(@"Mouse location: %f %f", mouseLoc.x, mouseLoc.y);

لا تحتاج إلى الذهاب إلى الكربون للقيام بذلك.

احذر خلط بيئة NS مع بيئة CG. إذا حصلت على موقع الماوس باستخدام طريقة MouseLocation NS، فاستخدم Cgwarpmousecursorposition (Cgpoint) لن يتم إرسالها إلى النقطة الموجودة على الشاشة التي توقعتها. ينتج المشكلة من CG باستخدام الجزء العلوي الأيسر ك (0،0) بينما يستخدم NS أسفل اليسار ك (0،0).

الجواب على هذا السؤال في سويفت

let currentMouseLocation = NSEvent.mouseLocation()
let xPosition = currentMouseLocation.x
let yPosition = currentMouseLocation.y
NSLog(@"%@", NSStringFromPoint(point));

NSLOG صحيح؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top