mirror of
https://github.com/Sunnyyoung/WeChatTweak-macOS.git
synced 2025-05-22 22:36:07 +08:00
63 lines
2.3 KiB
Objective-C
63 lines
2.3 KiB
Objective-C
//
|
|
// MultipleInstances.m
|
|
// WeChatTweak
|
|
//
|
|
// Created by Sunny Young on 2022/2/1.
|
|
// Copyright © 2022 Sunnyyoung. All rights reserved.
|
|
//
|
|
|
|
#import "WeChatTweak.h"
|
|
#import "NSBundle+WeChatTweak.h"
|
|
|
|
@implementation NSObject (MultipleInstances)
|
|
|
|
static void __attribute__((constructor)) tweak(void) {
|
|
[objc_getClass("CUtility") jr_swizzleClassMethod:NSSelectorFromString(@"HasWechatInstance") withClassMethod:@selector(tweak_HasWechatInstance) error:nil];
|
|
[objc_getClass("NSRunningApplication") jr_swizzleClassMethod:NSSelectorFromString(@"runningApplicationsWithBundleIdentifier:") withClassMethod:@selector(tweak_runningApplicationsWithBundleIdentifier:) error:nil];
|
|
[objc_getClass("AppDelegate") jr_swizzleMethod:NSSelectorFromString(@"applicationDockMenu:") withMethod:@selector(tweak_applicationDockMenu:) error:nil];
|
|
}
|
|
|
|
+ (BOOL)tweak_HasWechatInstance {
|
|
return NO;
|
|
}
|
|
|
|
+ (NSArray<NSRunningApplication *> *)tweak_runningApplicationsWithBundleIdentifier:(NSString *)bundleIdentifier {
|
|
if ([bundleIdentifier isEqualToString:NSBundle.mainBundle.bundleIdentifier] ) {
|
|
return @[NSRunningApplication.currentApplication];
|
|
} else {
|
|
return [self tweak_runningApplicationsWithBundleIdentifier:bundleIdentifier];
|
|
}
|
|
}
|
|
|
|
- (NSMenu *)tweak_applicationDockMenu:(NSApplication *)sender {
|
|
NSMenu *menu = [self tweak_applicationDockMenu:sender];
|
|
NSMenuItem *menuItem = ({
|
|
NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:[NSBundle.tweakBundle localizedStringForKey:@"Tweak.Title.LoginAnotherAccount"]
|
|
action:@selector(openNewWeChatInstace:)
|
|
keyEquivalent:@""];
|
|
item.tag = 9527;
|
|
item;
|
|
});
|
|
__block BOOL added = NO;
|
|
[menu.itemArray enumerateObjectsUsingBlock:^(NSMenuItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
if (obj.tag == 9527) {
|
|
*stop = added = YES;
|
|
}
|
|
}];
|
|
if (!added) {
|
|
[menu insertItem:menuItem atIndex:0];
|
|
}
|
|
return menu;
|
|
}
|
|
|
|
- (void)openNewWeChatInstace:(id)sender {
|
|
NSString *applicationPath = NSBundle.mainBundle.bundlePath;
|
|
NSTask *task = [[NSTask alloc] init];
|
|
task.launchPath = @"/usr/bin/open";
|
|
task.arguments = @[@"-n", applicationPath];
|
|
[task launch];
|
|
[task waitUntilExit];
|
|
}
|
|
|
|
@end
|