উত্তর:
মিঃডানিয়েল প্রদত্ত অনুপ্রেরণার ভিত্তিতে , আমি সিদ্ধান্ত নিয়েছিলাম একটি সাধারণ সামান্য কাউন্টারকে প্রোগ্রাম করবো।
এর উত্স কোড, বিয়োগ সংজ্ঞাটি ইউআই হিসাবে সংজ্ঞায়িত করা হয়েছে xib
; ফাউন্ডেশন এবং অ্যাপকিট ফ্রেমওয়ার্কগুলি ব্যবহার করে ( গিটহাবের উপর সম্পূর্ণ উত্স এবং এক্সকোড প্রকল্প ):
DBAppDelegate.h
//
// DBAppDelegate.h
// CocoaActivityCounter
//
// Created by Daniel Beck on 29.07.2012.
// Copyright (c) 2012 Daniel Beck. All rights reserved.
//
#import <Cocoa/Cocoa.h>
static id monitorLeftMouseDown;
static id monitorRightMouseDown;
static id monitorKeyDown;
@interface DBAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (strong) IBOutlet NSTextView *logView;
@property (weak) IBOutlet NSToolbarItem *toolbarStartButton;
@property (weak) IBOutlet NSToolbarItem *toolbarStopButton;
@property (weak) IBOutlet NSToolbarItem *toolbarClearButton;
@property (weak) IBOutlet NSTextField *keyPressCounterLabel;
@property (weak) IBOutlet NSTextField *leftMouseCounterLabel;
@property (weak) IBOutlet NSTextField *rightMouseCounterLabel;
@property (readwrite) NSDateFormatter *logDateFormatter;
@property (readwrite) NSNumber *keyPressCounter;
@property (readwrite) NSNumber *leftMouseCounter;
@property (readwrite) NSNumber *rightMouseCounter;
@property (readwrite) BOOL loggingEnabled;
- (IBAction)stopButtonPressed:(id)sender;
- (IBAction)startButtonPressed:(id)sender;
- (IBAction)clearButtonPressed:(id)sender;
- (void)logMessageToLogView:(NSString*)message;
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem;
@end
DBAppDelegate.m
//
// DBAppDelegate.m
// CocoaActivityCounter
//
// Created by Daniel Beck on 29.07.2012.
// Copyright (c) 2012 Daniel Beck. All rights reserved.
//
#import "DBAppDelegate.h"
#import <AppKit/NSEvent.h>
@implementation DBAppDelegate
@synthesize logView;
@synthesize toolbarStartButton;
@synthesize toolbarStopButton;
@synthesize keyPressCounterLabel;
@synthesize leftMouseCounterLabel;
@synthesize rightMouseCounterLabel;
@synthesize toolbarClearButton;
@synthesize loggingEnabled;
@synthesize keyPressCounter;
@synthesize leftMouseCounter;
@synthesize rightMouseCounter;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.loggingEnabled = NO;
self.logDateFormatter = [[NSDateFormatter alloc] init];
[self.logDateFormatter setTimeStyle:NSDateFormatterMediumStyle];
self.keyPressCounter = [NSNumber numberWithInt:0];
self.leftMouseCounter = [NSNumber numberWithInt:0];
self.rightMouseCounter = [NSNumber numberWithInt:0];
}
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication {
return YES;
}
-(void)logMessageToLogView:(NSString*)message {
[logView setString: [[logView string] stringByAppendingFormat:@"%@: %@\n", [self.logDateFormatter stringFromDate:[NSDate date]], message]];
}
- (IBAction)stopButtonPressed:(id)sender {
if (!self.loggingEnabled) {
return;
}
self.loggingEnabled = false;
[NSEvent removeMonitor:monitorLeftMouseDown];
[NSEvent removeMonitor:monitorRightMouseDown];
[NSEvent removeMonitor:monitorKeyDown];
}
- (IBAction)startButtonPressed:(id)sender {
if (self.loggingEnabled) {
return;
}
self.loggingEnabled = true;
monitorLeftMouseDown = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask handler:^(NSEvent *evt) {
[self logMessageToLogView:[NSString stringWithFormat:@"Left mouse down!"]];
self.leftMouseCounter = [NSNumber numberWithInt:(1 + [self.leftMouseCounter intValue])];
}];
monitorRightMouseDown = [NSEvent addGlobalMonitorForEventsMatchingMask:NSRightMouseDownMask handler:^(NSEvent *evt) {
[self logMessageToLogView:@"Right mouse down!"];
self.rightMouseCounter = [NSNumber numberWithInt:(1 + [self.rightMouseCounter intValue])];
}];
monitorKeyDown = [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *evt) {
[self logMessageToLogView:[NSString stringWithFormat:@"Key down: %@ (key code %d)", [evt characters], [evt keyCode]]];
self.keyPressCounter = [NSNumber numberWithInt:(1 + [self.keyPressCounter intValue])];
}];
}
- (IBAction)clearButtonPressed:(id)sender {
self.keyPressCounter = [NSNumber numberWithInt:0];
self.leftMouseCounter = [NSNumber numberWithInt:0];
self.rightMouseCounter = [NSNumber numberWithInt:0];
[self.logView setString:@""];
}
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem {
if ([theItem isEqualTo:toolbarStartButton]) {
return !self.loggingEnabled;
}
if ([theItem isEqualTo:toolbarStopButton]) {
return self.loggingEnabled;
}
if ([theItem isEqualTo:toolbarClearButton]) {
return !self.loggingEnabled;
}
return YES;
}
@end
টুলবার ব্যবহার করা আইকন থেকে এসেছ ট্যাঙ্গো ডেস্কটপ প্রকল্প ।
উইন্ডোজ, ওএস এক্স এবং লিনাক্সে হোয়াটপুলস চলে।
এটিকে দেখানোর জন্য ভাসেসকে ধন্যবাদ ।
টাইপিংস্ট্যাটগুলি মোট সংখ্যক কীস্ট্রোক এবং অন্যান্য বিভিন্ন মেট্রিক প্রদর্শন করে। এটি পয়েন্টিং ডিভাইস ক্লিকগুলি যদিও গণনা করে না।
একটি ক্লিক এবং বাটন প্রেস কাউন্টার প্রোগ্রামটি কোকো অবজেক্টিভ-সি প্রোগ্রাম লেখার মাধ্যমে সম্ভব যা মাউস এবং কীবোর্ড ক্লিক ইভেন্টগুলি গ্রহণ করতে এবং গণনা করতে পারে।
ক্লাসটি একবার দেখার জন্য রয়েছে এনএসইভেন্টটি বিশেষত অ্যাডগ্লোবালমনিটরফরেন্টস ম্যাচিংমাস্ক: হ্যান্ডলার: শ্রেণি পদ্ধতিটি খুব সহায়ক বলে প্রমাণিত হওয়া উচিত। যেহেতু এটি ইভেন্টগুলি নিরীক্ষণের প্রস্তাব দেয়:
NSLeftMouseUp
NSRightMouseUp
NSOtherMouseUp
NSLeftMouseDown
NSRightMouseDown
NSOtherMouseDown
NSKeyDown