Có cách nào để phát hiện chương trình nào đang đánh cắp trọng tâm trên máy Mac của tôi không?


23

Tôi đã gặp sự cố với một số ứng dụng trên máy Mac của mình khi lấy cắp bàn phím (thanh tiêu đề của cửa sổ hiện tại không hoạt động). Tuy nhiên, nó không thực sự đưa lên bất kỳ cửa sổ hoặc thanh menu nào và nó không phản hồi rõ ràng với các phím tắt.

Có cách nào để xác định ứng dụng nào có tiêu điểm bàn phím ngay cả khi đó là một trong những ứng dụng không có thanh menu hoặc biểu tượng Dock không? Tôi biết một tính năng tích hợp gần như thực hiện điều này; hộp thoại Force Quit, nếu được gọi từ bàn phím, sẽ mở với ứng dụng tập trung được chọn. Tuy nhiên, nó chỉ liệt kê các ứng dụng có biểu tượng bình thường, vì vậy nó không giúp ích gì trong trường hợp này.

Điều này bắt đầu xảy ra vào khoảng thời gian khi tôi nâng cấp từ 10.8 lên 10.9; Tôi nghi ngờ rằng một trong những ứng dụng tôi đã cài đặt hoặc nâng cấp cùng với HĐH là mới hoạt động sai.

Tôi sẵn sàng cho các giải pháp liên quan đến một lượng nhỏ lập trình (hoặc AppleScript, giả sử), sử dụng các công cụ dành cho nhà phát triển, v.v.; nhưng không phải những thứ như Gỡ cài đặt mọi thứ cho đến khi nó biến mất vì điều đó sẽ gây rối quá mức vào lúc này. Tôi muốn xác định rõ ràng ứng dụng và gửi báo cáo lỗi hoặc sửa cấu hình của nó.

Nghiên cứu của tôi chỉ đưa ra một số chủ đề yêu cầu giống nhau trên Cộng đồng hỗ trợ của Apple mà không có câu trả lời.


Tôi cũng đang thấy điều này. 10.9.4. Có lẽ chia sẻ các ứng dụng chính tôi đang chạy có thể làm nổi bật một điểm chung? Chrome, Firefox, Safari, Wftime, Dropbox, Nitpy, 1Password, Google Hangouts, Evernote, Skitch, Google drive, Time Machine, Airport Base Station Agent, Android File Transfer Agent. Nếu không ... không có giải pháp dễ dàng mà tôi biết. Sự nghi ngờ của tôi là G Hangouts.
JezC

Câu trả lời:


21

Bạn có thể tìm thấy ứng dụng đánh cắp tiêu điểm bằng cách lưu mã sau vào một find_focus_stealer.pytệp và chạy nó python find_focus_stealer.pytrong một thiết bị đầu cuối.

Bắt đầu chạy tập lệnh - nó sẽ in ra tên của ứng dụng đang hoạt động cứ sau 3 giây. Tiếp tục làm việc như bình thường, đợi sự cố xảy ra và sau vài giây sẽ thấy đầu ra trong thiết bị đầu cuối. Bạn sẽ có thủ phạm của bạn.

Trong trường hợp của tôi, đó là một ứng dụng nền 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

Tín dụng cho iMichael_ trong chuỗi thảo luận Apple này .


Tôi đã thử kịch bản này. Kỳ lạ thay, mỗi khi sự kiện ăn cắp xảy ra, kịch bản sẽ ngừng chạy. Câu lệnh log cuối cùng trong cửa sổ không khác gì câu lệnh log trước đó, tức là không có thủ phạm rõ ràng. Kịch bản chỉ thoát, không có lỗi.
Diodeus - James MacFarlane

2
Chương trình python này hoạt động rất tốt, nhưng tôi phải sử dụng Python đã cài đặt của Apple. Tôi đã cài đặt Python 2.7.8 và không bao gồm mô-đun AppKit. Ngoài ra trên máy của tôi, ứng dụng vi phạm là: SymUIAgent.app Symantec Quick Menu.
Cameron Goodale

2
@Diodeus lý do tại sao thoát này không phải vì ứng dụng lấy trộm tập trung đã kết thúc nó, mà bởi vì điều này được viết để chỉ chạy trong khoảng thời gian 100 giây. Để làm cho nó chạy cho đến khi tôi nhấn Ctrl + c trong cửa sổ đầu cuối đó, tôi đã đổi for i in t:thànhwhile 1:
CenterOrbit

1
Tốt đẹp! Đối với tôi, đó là Google Drive.app. Tôi đã thực hiện một bản cập nhật nhỏ cho kịch bản của bạn mà tôi sẽ đăng trong một câu trả lời riêng. Cảm ơn!
medmunds

1
nếu bạn gặp phải no module named appkit, sau đó chạy easy_install pippip install pyobjc. Đối với tôi, nó đã Google Driveđánh cắp sự tập trung của tôi
mihai

14

Đây là một bản cập nhật nhỏ cho tập lệnh của @ Ace chạy cho đến khi bạn giết nó và chỉ in tên ứng dụng khi nó thay đổi. Một lần nữa, lưu mã này trong một tệp find_focus_stealer.pyvà sau đó thử chạy nó với python 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)

Tôi đã có thể sử dụng điều này để theo dõi Google Google Drive là thủ phạm đánh cắp tiêu điểm trên máy Mac của tôi.


Buổi diễn hay đấy, thưa ngài!
Bruno Bronosky

Điều này làm việc cho tôi. Trong trường hợp của tôi, ứng dụng đánh cắp tiêu điểm là BetterTouchTool phiên bản 2.636.
Rory O'Kane

1

Đây là phiên bản cải tiến của tập lệnh được đề cập trong câu trả lời của @ 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)

Nó sẽ in tên của ứng dụng đang hoạt động có tiêu điểm và sẽ phát hiện nếu nó thay đổi bằng cách kiểm tra mỗi giây.

Kịch bản liên quan: Xác định ứng dụng hoặc quy trình nào đang đánh cắp sự tập trung vào OSX tại Gist

Sử dụng:

  1. Lưu tập lệnh trên vào một tập tin get_active_focus.py.
  2. Gán các thuộc tính thực thi với chmod +x get_active_focus.pylệnh.
  3. Chạy tập tin với ./get_active_focus.py.

Đầu ra:

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

0

Có lẽ kiểm tra Activity Monitor cho các quy trình hoạt động? Bất cứ điều gì trong trạng thái App Nap có thể dễ dàng bị loại trừ, và nó có thể làm cho cuộc săn ngắn hơn rất nhiều.


Vâng, đó sẽ là một cách để thông báo dự đoán về vấn đề là gì, nhưng tôi đang tìm kiếm thứ gì đó thực sự có được thông tin trực tiếp.
Kevin Reid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.