如何自動開啟微信通知忧勿?

如何自動開啟微信通知?

自動開啟微信通知

微信有一個很貼心的功能瞻讽,當(dāng)你在電腦上登錄的時候鸳吸,你可以選擇不通知手機(jī)。但是這個很貼心的功能很笨速勇,沒辦法再我鎖定的時候自動開啟通知……怎么辦呢晌砾?自己解決吧!

背景

因為Mac上開了微信烦磁,手機(jī)上可以設(shè)置不提示贡羔,但我暫時離開的時候總是忘記開啟微信通知。

購買了米動手表就是為了避免這樣的事情發(fā)生个初,但是偶爾忘記打開手機(jī)上的通知會錯過重要的事情乖寒。

當(dāng)然,我已經(jīng)將不重要的通知全部設(shè)置為消息免打擾了院溺。

需求

因此需要在我離開筆記本之前設(shè)置手機(jī)開啟通知楣嘁,在我回到筆記本旁邊后關(guān)閉手機(jī)通知。

分析

整個過程是如何呢珍逸?

  1. 我離開電腦逐虚,合蓋/鎖定;

  2. 微信進(jìn)入手機(jī)通知狀態(tài)(退出)谆膳;

  3. 我來到電腦前叭爱,打開/解鎖;

  4. 微信進(jìn)入手機(jī)靜音狀態(tài)(登錄)漱病;

那么關(guān)鍵的步驟就在于:

  1. 如何判斷電腦鎖定解鎖/睡眠喚醒了呢买雾?

  2. 如何關(guān)閉微信或者退出微信?

  3. 如何啟動微信或者登錄微信杨帽?

如何關(guān)閉/啟動程序

查了下漓穿,下面這條命令可以通知Chrome正常關(guān)閉。


osascript -e 'tell app "/Applications/WeChat.app" to quit'

而下面這條命令可以啟動Chrome注盈。


open "/Applications/WeChat.app"

如何判斷電腦睡眠

至于如何在離開電腦和回到電腦前進(jìn)行操作晃危,在參考5中看到了這么一句話:

You can schedule your Macintosh to wake up in the Energy Saver preference panel. See the Schedule button.

也就是說在電源管理中,有對應(yīng)的計劃任務(wù)可以管理老客。

在Alfred中輸入EnergySaver僚饭,打開節(jié)能面板震叮,然而,并沒有計劃這個按鈕鳍鸵。

節(jié)能面板

在不進(jìn)行其他程序安裝的情況下苇瓣,貌似這條路堵死了。

如何判斷屏幕鎖定

上面的內(nèi)容是在5月31日更新的权纤,今天9月14日,繼續(xù)乌妒。

考慮了一下汹想,實際上我需要在電腦鎖屏后就自動轉(zhuǎn)入微信通知,這樣手表可以收到具體的通知信息撤蚊。

那么古掏,怎么來獲取到屏幕鎖定呢?在stackoverflow上找到了這么一條信息:


#!/usr/bin/python

import Quartz

d = Quartz.CGSessionCopyCurrentDictionary()

if d.get("CGSSessionScreenIsLocked", 0):

    print 'Screen locked.'

else:

    print 'Screen unocked.'

上面的代碼基本上就可以判定了侦啸,那么后面的解決方案就很好辦了槽唾。

解決方案

將下面的內(nèi)容保存為wechat_auto.py


#!/bin/env python

# -*- coding=utf-8 -*-

import sys, os, subprocess

import logging, logging.handlers

def main():

    import time

    fn = sys._getframe().f_code.co_name

    logger.debug(u"%s()." % fn)

    while True:

        if is_system_locked():

            if is_app_running(app_name):

                control_app(app_name, 'stop')

            continue

        if not is_app_running(app_name):

            control_app(app_name, 'start')

        time.sleep(10)

def is_system_locked():

    fn = sys._getframe().f_code.co_name

    logger.debug(u"%s()." % fn)

    import Quartz

    system_locked = False

    d = Quartz.CGSessionCopyCurrentDictionary()

    result = d and \

             d.get("CGSSessionScreenIsLocked", 0) == 0 and \

             d.get("kCGSSessionOnConsoleKey", 0) == 1

    logger.debug(u'%s: CGSessionCopyCurrentDictionary is %s.' % (fn, d))

    logger.debug(u'%s: result is %s.' % (fn, result))

    if result == 0: system_locked = True

    logger.debug(u'%s: system is %slocked.' % (fn,

        '' if system_locked else 'not '))

    return system_locked

def is_app_running(app_name=None):

    fn = sys._getframe().f_code.co_name

    logger.debug(u"%s()." % fn)

    import commands

    if app_name:

        output = commands.getoutput('pgrep %s' % app_name)

        if output:

            logger.debug(u'%s: app %s is running.' % (fn, app_name))

            return True

        else:

            logger.debug(u'%s: app %s is not running.' % (fn, app_name))

            return False

    else:

        logger.error(u'%s: params is not set.' % fn)

def control_app(app_name=None, action=None):

    fn = sys._getframe().f_code.co_name

    logger.debug(u"%s()." % fn)

    if app_name and action:

        if action == 'start':

            if app_name == 'WeChat':

                p = subprocess.Popen(

                    ['osascript','%s%swechat_login.scpt' % (os.getcwd(), os.sep)],

                    stdout=subprocess.PIPE)

            else:

                p = subprocess.Popen(

                    ['osascript' '-e', 'tell "%s" to activate' % app_path],

                    stdout=subprocess.PIPE)

            logger.debug(u'%s: %s started.' % (fn, app_name))

        if action == 'stop':

            p = subprocess.Popen(

                ['osascript','-e','tell application "%s" to quit' % app_path]

                , stdout=subprocess.PIPE)

            logger.debug(u'%s: wechat stopped.' % fn)

    else:

        logger.error(u'%s: params is not set.' % fn)

def init_log(log_name='custom', log_level='info', log_files=3):

    '''

    Initialize the logger.

    '''

    log_file = u"%s%s%s.log" % (os.getcwd(), os.sep, log_name)

    logger = logging.getLogger(log_name)

    logger.setLevel(log_level.upper())

    handler = logging.handlers.RotatingFileHandler(log_file, \

        maxBytes = 1024*1024*50, backupCount = log_files)

    fmt = '%(asctime)s %(levelname)-6s %(filename)s:%(lineno)s - ' \

        + '%(message)s'

    formatter = logging.Formatter(fmt)

    handler.setFormatter(formatter)

    logger.addHandler(handler)

    return logger

prog_name = 'wechat_auto'

log_level = 'debug'

logger = init_log(prog_name, log_level)

app_name = 'WeChat'

app_path = '/Applications/WeChat.app'

main()

因為微信啟動時需要登錄,為了方便光涂,我們借助AppleScript的強(qiáng)大功能庞萍,去幫助我們點擊這個按鈕。


tell application "WeChat" to activate

delay 1

tell application "System Events"

    tell application process "WeChat"

        click button "登錄" of window "Window"

    end tell

end tell

隨后在terminal中執(zhí)行下述命令:


python wechat_auto.py &

如果執(zhí)行正常的話忘闻,腳本中的log_level就可以修改為'info'了钝计。

其他

在使用過程中遇到了兩個問題,解決如下齐佳,其實是很簡單的問題私恬。

無法打開指定文件


/usr/bin/python: can't open file './system_locked.py': [Errno 2] No such file or directory

解決很簡單,就是在shell腳本中使用絕對路徑就好了炼吴。

微信報錯

昨天在使用上述命令進(jìn)行微信的啟動和關(guān)閉測試時本鸣,會報一個錯,然后微信關(guān)閉硅蹦。

但是在后續(xù)測試中無法重現(xiàn)荣德,因此這里只是做一個記錄。

無法獲取CGSessionCopyCurrentDictionary

因為當(dāng)前進(jìn)程沒有對應(yīng)的Session童芹,比如我們通過crontab執(zhí)行就會出現(xiàn)這種問題命爬。

參考

  1. How can I quit the application opened from terminal in Mac OS X?

  2. Possible to run scripts on sleep and wake?

  3. How to Run an AppleScript On Wake Up

4. Open an application after wake from sleep

  1. OSX: check if the screen is locked

  2. How to check in Mac OSX with Python if a process is RUNNING or not

  3. python subprocess: how to run an app on OS X?

  4. Automating the User Interface

  5. 手把手教你用 AppleScript 模擬鼠標(biāo)鍵盤操作,實現(xiàn) macOS 系統(tǒng)的自動化操作

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辐脖,一起剝皮案震驚了整個濱河市饲宛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗜价,老刑警劉巖艇抠,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幕庐,死亡現(xiàn)場離奇詭異,居然都是意外死亡家淤,警方通過查閱死者的電腦和手機(jī)异剥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來絮重,“玉大人冤寿,你說我怎么就攤上這事∏嗌耍” “怎么了督怜?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長狠角。 經(jīng)常有香客問我号杠,道長,這世上最難降的妖魔是什么丰歌? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任姨蟋,我火速辦了婚禮,結(jié)果婚禮上立帖,老公的妹妹穿的比我還像新娘眼溶。我一直安慰自己,他們只是感情好晓勇,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布偷仿。 她就那樣靜靜地躺著,像睡著了一般宵蕉。 火紅的嫁衣襯著肌膚如雪酝静。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天羡玛,我揣著相機(jī)與錄音别智,去河邊找鬼。 笑死稼稿,一個胖子當(dāng)著我的面吹牛薄榛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播让歼,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼敞恋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谋右?” 一聲冷哼從身側(cè)響起硬猫,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啸蜜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坑雅,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年衬横,在試婚紗的時候發(fā)現(xiàn)自己被綠了裹粤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜂林,死狀恐怖遥诉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情噪叙,我是刑警寧澤矮锈,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站构眯,受9級特大地震影響愕难,放射性物質(zhì)發(fā)生泄漏早龟。R本人自食惡果不足惜惫霸,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葱弟。 院中可真熱鬧壹店,春花似錦、人聲如沸芝加。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藏杖。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熬的,已是汗流浹背咕村。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留来吩,地道東北人敢辩。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像弟疆,于是被迫代替她去往敵國和親戚长。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,100評論 1 32
  • 用兩張圖告訴你怠苔,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料同廉? 從這篇文章中你...
    hw1212閱讀 12,721評論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,097評論 25 707
  • 螢火蟲整理 、 第1章 趙 百家串,祟也恤溶。聲如塢乓诽,形似鼠,喜食童子耳油咒程,腦乳鸠天,涎水等物。 吳越國趙氏婦...
    東爺DY閱讀 172評論 0 0
  • 那些年錯過的大雨帐姻,那些年錯過的愛情稠集,好想告訴你,告訴你我沒有忘記…… ...
    竹溪晴雨閱讀 369評論 2 2