มีวิธีในการตรวจจับโปรแกรมใดบ้างที่ขโมยโฟกัสไปที่ Mac ของฉัน?


23

ฉันมีปัญหากับแอพบางตัวใน Mac ของฉันขโมยโฟกัสของแป้นพิมพ์ (แถบชื่อเรื่องของหน้าต่างปัจจุบันไม่ทำงาน) อย่างไรก็ตามมันไม่ได้เป็นการวางหน้าต่างหรือแถบเมนูของมันขึ้นมาเองและไม่ตอบสนองต่อแป้นพิมพ์ลัด

มีวิธีในการพิจารณาว่าแอปพลิเคชันใดที่มีโฟกัสของแป้นพิมพ์แม้ว่าจะเป็นแอปพลิเคชันที่ไม่มีแถบเมนูหรือไอคอน Dock หรือไม่ ฉันรู้ถึงฟีเจอร์ในตัวที่เกือบจะเป็นแบบนี้ ไดอะล็อก Force Quit หากเรียกใช้จากแป้นพิมพ์จะเปิดขึ้นพร้อมกับแอปพลิเคชันที่โฟกัส อย่างไรก็ตามจะแสดงเฉพาะแอปพลิเคชั่น has-a-dock-icon ปกติดังนั้นจึงไม่ช่วยในกรณีนี้

สิ่งนี้เริ่มเกิดขึ้นในช่วงเวลาที่ฉันอัพเกรดจาก 10.8 เป็น 10.9; ฉันสงสัยว่าหนึ่งในแอพที่ฉันติดตั้งไว้แล้วหรืออัปเกรดพร้อมกับระบบปฏิบัติการกำลังทำงานผิดพลาดใหม่

ฉันเปิดให้โซลูชั่นที่เกี่ยวข้องกับการเขียนโปรแกรมจำนวนเล็กน้อย (หรือ AppleScript, พูด), การใช้เครื่องมือสำหรับนักพัฒนาและอื่น ๆ ; แต่ไม่ใช่อย่างเช่น "ถอนการติดตั้งสิ่งต่าง ๆ จนกว่ามันจะหายไป" เพราะนั่นจะทำให้เกิดความวุ่นวายมากเกินไปในขณะนี้ ฉันต้องการระบุแอปพลิเคชันอย่างชัดเจนและยื่นรายงานข้อผิดพลาดหรือแก้ไขการกำหนดค่า

การวิจัยของฉันเปิดใช้งานเธรดเพียงไม่กี่รายการที่ร้องขอแบบเดียวกันบน Apple Support Communities ซึ่งไม่มีคำตอบ


ฉันเห็นสิ่งนี้เช่นกัน 10.9.4 บางทีการแชร์แอพหลักที่ฉันใช้อยู่อาจจะเน้นความธรรมดา Chrome, Firefox, Safari, Wuala, Dropbox, Nitrous, 1Password, Google Hangouts, Evernote, Skitch, ไดรฟ์ของ Google, Time Machine, ตัวแทนสถานีฐานสนามบิน, ตัวแทนการถ่ายโอนไฟล์ Android มิฉะนั้น ... ไม่มีวิธีแก้ปัญหาง่ายๆที่ฉันรู้ ความสงสัยของฉันคือ G Hangouts
JezC

คำตอบ:


21

คุณสามารถค้นหาแอพที่ขโมยโฟกัสโดยการบันทึกรหัสต่อไปนี้ในfind_focus_stealer.pyไฟล์และเรียกใช้ผ่านทางpython find_focus_stealer.pyเทอร์มินัล

เริ่มเรียกใช้สคริปต์ - มันจะพิมพ์ชื่อแอพที่ใช้งานอยู่ทุก 3 วินาที ทำงานได้ตามปกติรอให้ปัญหาเกิดขึ้นและหลังจากนั้นไม่กี่วินาทีก็เห็นเอาต์พุตในเครื่อง คุณจะมีผู้ร้าย

ในกรณีของฉันมันเป็นแอพแบ็คกราวน์ของ Symantec Antivirus (SymUIAgent.app)

#!/usr/bin/python

from AppKit import NSWorkspace
import time
t = range(1,100)
for i in t:
    time.sleep(3)
    activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
    print activeAppName

เครดิตiMichael_ในแอปเปิ้ลหัวข้อสนทนานี้


ฉันลองใช้สคริปต์นี้ แปลกทุกครั้งที่เกิดเหตุการณ์ขโมยสคริปต์หยุดทำงาน คำสั่งบันทึกล่าสุดในหน้าต่างไม่แตกต่างจากคำสั่งบันทึกก่อนหน้านี้คือไม่มีผู้ร้ายที่ชัดเจน สคริปต์เพิ่งออกไม่มีข้อผิดพลาด
Diodeus - James MacFarlane

2
โปรแกรมไพ ธ อนนี้ใช้งานได้ดี แต่ฉันต้องใช้ Python ที่ติดตั้งของ Apple ฉันติดตั้ง Python 2.7.8 แล้วและโมดูล AppKit ไม่รวมอยู่ด้วย นอกจากนี้ในเครื่องของฉันแอพที่ถูกละเมิดคือ: SymUIAgent.app Symantec Quick Menu
Cameron Goodale

2
@Diodeus สาเหตุที่ทำให้การออกไม่ได้เป็นเพราะแอพที่ขโมยโฟกัสได้จบลงแล้ว แต่เพราะสิ่งนี้ถูกเขียนขึ้นเพื่อให้ทำงานได้เป็นระยะเวลา 100 วินาทีเท่านั้น เพื่อให้ทำงานจนกว่าฉันจะกด Ctrl + c ในหน้าต่างเทอร์มินัลนั้นฉันเปลี่ยนfor i in t:เป็นwhile 1:
CenterOrbit

1
ดี! สำหรับฉันมันคือ Google Drive.app ฉันได้อัปเดตสคริปต์ของคุณเล็กน้อยซึ่งฉันจะโพสต์ด้วยคำตอบแยกต่างหาก ขอบคุณ!
medmunds

1
ถ้าคุณพบno module named appkitเรียกใช้แล้วและeasy_install pip pip install pyobjcสำหรับฉันมันเป็นการGoogle Driveขโมยโฟกัสของฉัน
mihai

14

นี่คือการอัปเดตสคริปต์ของ @ Aceเล็กน้อยที่จะทำงานจนกว่าคุณจะฆ่ามันและจะพิมพ์ชื่อแอพเมื่อมีการเปลี่ยนแปลงเท่านั้น อีกครั้งบันทึกรหัสนี้ในแฟ้มแล้วลองใช้มันด้วยfind_focus_stealer.pypython find_focus_stealer.py

#!/usr/bin/python                                                                                                       

try:
    from AppKit import NSWorkspace
except ImportError:
    print "Can't import AppKit -- maybe you're running python from brew?"
    print "Try running with Apple's /usr/bin/python instead."
    exit(1)

from datetime import datetime
from time import sleep

last_active_name = None
while True:
    active_app = NSWorkspace.sharedWorkspace().activeApplication()
    if active_app['NSApplicationName'] != last_active_name:
        last_active_name = active_app['NSApplicationName']
        print '%s: %s [%s]' % (
            datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
            active_app['NSApplicationName'],
            active_app['NSApplicationPath']
        )
    sleep(1)

ฉันสามารถใช้สิ่งนี้เพื่อติดตาม“ Google Drive” ในฐานะผู้ร้ายที่มุ่งเน้นขโมยบน Mac ของฉัน


แสดงที่ดีครับ!
Bruno Bronosky

สิ่งนี้ใช้ได้สำหรับฉัน ในกรณีของฉันแอพปรับโฟกัสคือBetterTouchToolเวอร์ชั่น 2.636
Rory O'Kane

1

นี่คือเวอร์ชันที่ปรับปรุงของสคริปต์ที่กล่าวถึงในคำตอบของ @ Ace :

#!/usr/bin/python
# Prints current window focus.
# See: /apple//q/123730
from AppKit import NSWorkspace
import time
workspace = NSWorkspace.sharedWorkspace()
active_app = workspace.activeApplication()['NSApplicationName']
print('Active focus: ' + active_app)
while True:
    time.sleep(1)
    prev_app = active_app
    active_app = workspace.activeApplication()['NSApplicationName']
    if prev_app != active_app:
        print('Focus changed to: ' + active_app)

มันจะพิมพ์ชื่อของแอปพลิเคชันที่ใช้งานอยู่ซึ่งมีโฟกัสอยู่และจะตรวจสอบว่ามีการเปลี่ยนแปลงหรือไม่โดยตรวจสอบทุกวินาที

สคริปต์ที่เกี่ยวข้อง: ระบุแอพหรือกระบวนการที่กำลังขโมยโฟกัสไปที่ OSXที่ Gist

การใช้งาน:

  1. get_active_focus.pyบันทึกสคริปต์ข้างต้นลงในไฟล์
  2. กำหนดแอ็ตทริบิวต์การเรียกใช้งานด้วยchmod +x get_active_focus.pyคำสั่ง
  3. ./get_active_focus.pyเรียกใช้ไฟล์ที่มี

เอาท์พุท:

$ ./get_active_focus.py
Active focus: Terminal
Focus changed to: Google Chrome

0

บางทีการตรวจสอบกิจกรรมการตรวจสอบสำหรับกระบวนการที่ใช้งานอยู่? ทุกสิ่งในแอพ Nap สามารถตัดออกได้อย่างง่ายดายและมันอาจทำให้การล่าสั้นกว่ามาก


ใช่นั่นจะเป็นวิธีหนึ่งในการแจ้งการเดาว่าปัญหาคืออะไร แต่ฉันกำลังมองหาบางสิ่งที่ได้รับข้อมูลโดยตรง
Kevin Reid
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.