Заставить связанные ключевые функции работать даже за пределами фрейма tkinter

#python #tkinter

#python #tkinter

Вопрос:

Я попытался создать базовый кейлоггер, используя bind систему tkinter. Код работает, но я бы хотел, чтобы он работал, даже если фрейм tkinter не сфокусирован. Система работает так, что при нажатии определенной клавиши событие знает, какая клавиша нажата, и добавляет ее в список. Код работает очень хорошо.

Вот мой код:

 import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

listeOfKeys = []

def a(event):
   listeOfKeys.append("a")

root.bind('a',  a)


def b(event):
   listeOfKeys.append("b")

root.bind('b',  b)


def c(event):
   listeOfKeys.append("c")

root.bind('c',  c)


def d(event):
   listeOfKeys.append("d")

root.bind('d',  d)


def e(event):
   listeOfKeys.append("e")

root.bind('e',  e)


def f(event):
   listeOfKeys.append("f")

root.bind('f',  f)


def g(event):
   listeOfKeys.append("g")

root.bind('g',  g)


def h(event):
   listeOfKeys.append("h")

root.bind('h',  h)


def i(event):
   listeOfKeys.append("i")

root.bind('i',  i)


def j(event):
   listeOfKeys.append("j")

root.bind('j',  j)


def k(event):
   listeOfKeys.append("k")

root.bind('k',  k)


def l(event):
   listeOfKeys.append("l")

root.bind('l',  l)


def m(event):
   listeOfKeys.append("m")

root.bind('m',  m)


def n(event):
   listeOfKeys.append("n")

root.bind('n',  n)


def o(event):
   listeOfKeys.append("o")

root.bind('o',  o)


def p(event):
   listeOfKeys.append("p")

root.bind('p',  p)


def q(event):
   listeOfKeys.append("q")

root.bind('q',  q)


def r(event):
   listeOfKeys.append("r")

root.bind('r',  r)


def s(event):
   listeOfKeys.append("s")

root.bind('s',  s)


def t(event):
   listeOfKeys.append("t")

root.bind('t',  t)


def u(event):
   listeOfKeys.append("u")

root.bind('u',  u)


def v(event):
   listeOfKeys.append("v")

root.bind('v',  v)


def w(event):
   listeOfKeys.append("w")

root.bind('w',  w)


def x(event):
   listeOfKeys.append("x")

root.bind('x',  x)


def y(event):
   listeOfKeys.append("y")

root.bind('y',  y)


def z(event):
   listeOfKeys.append("z")

root.bind('z',  z)


label = tk.Label(root, text="")
label.pack()

root.mainloop()

print(listeOfKeys)

...
 

Ответ №1:

Вы спрашиваете о «глобальном перехвате», что невозможно с tkinter. Вы могли бы попробовать что-то вроде keyboard модуля.

https://pypi.org/project/keyboard/

Комментарии:

1. да, но смысл этого фрагмента кода в том, чтобы иметь возможность создавать кейлоггер с модулем, который вам не нужен pip install <arandommodule>

2. Хорошо, переоцените свою жизнь и разбогатейте, создав что-то менее злое, где вам не нужно скрывать свою работу.

Ответ №2:

Код работает, но я бы хотел, чтобы он работал, даже если фрейм tkinter не сфокусирован.

Вы не можете. Tkinter этого не поддерживает. Привязки работают только для виджетов tkinter и только для виджетов с фокусом клавиатуры. Вам нужно будет найти что-то специфичное для платформы, над которой вы работаете.

Комментарии:

1. Я знаю. Я просто спрашиваю, знает ли кто-нибудь модуль, который фиксирует нажатия клавиш и не требует pip install

2. @gnaboo: в вашем вопросе не запрашивается рекомендация модуля, а запрос рекомендаций библиотеки не по теме для Stackoverflow.