Handle windows events using Python

Asked

Viewed 2,098 times

8

I need to develop a Python application with Pop-up’s on Windows (like Avast, for example). In case, my application will be a keylogger that will pick up a string from a barcode reader. When the keylogger detects the code, a pop-up will pop up with the boleto information.

What Python tool can I use to manipulate this event?

  • 1

    Search for "python desktop notification". In that question from Soen, for example, there are some options - among them a multi-platform which seems very simple (uses the wx which, if I’m not mistaken, is included in Python). I’ve never used it myself, so I wouldn’t know if it’s good or not.

  • By the way, here at Stackoverflow we don’t usually use greetings and thanks in the questions, hence the suggested edition. See that post on meta for more details. P.S. One thing is unclear in your question: is it just user notifications that you’re interested in, or is there more? (e.g.: API calls, registry manipulation, COM, MFC...) " Windows events" seems to me a little too generic, could you please edit your question by putting more details?

  • Okay, sorry for the inconvenience. I added more details to my question.

2 answers

2


Because it is a script that will run in Windows, the function can be used Shell_NotifyIcon to show the popup.

Example:

from win32api import *
from win32gui import *
import win32con
import sys, os
import struct
import time

class WindowsBalloonTip:
    def __init__(self, title, msg):
        message_map = {
                win32con.WM_DESTROY: self.OnDestroy,
        }
        # Register the Window class.
        wc = WNDCLASS()
        hinst = wc.hInstance = GetModuleHandle(None)
        wc.lpszClassName = "PythonTaskbar"
        wc.lpfnWndProc = message_map # Também poderia especificar uma wndproc.
        classAtom = RegisterClass(wc)
        # Criar a Janela.
        style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
        self.hwnd = CreateWindow( classAtom, "Taskbar", style, \
                0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
                0, 0, hinst, None)
        UpdateWindow(self.hwnd)
        iconPathName = os.path.abspath(os.path.join( sys.path[0], "balloontip.ico" ))
        icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
        try:
           hicon = LoadImage(hinst, iconPathName, \
                    win32con.IMAGE_ICON, 0, 0, icon_flags)
        except:
          hicon = LoadIcon(0, win32con.IDI_APPLICATION)
        flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
        nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip")
        Shell_NotifyIcon(NIM_ADD, nid)
        Shell_NotifyIcon(NIM_MODIFY, \
                         (self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,\
                          hicon, "Balloon  tooltip",msg,200,title))
        # self.show_balloon(title, msg)
        time.sleep(10)
        DestroyWindow(self.hwnd)
    def OnDestroy(self, hwnd, msg, wparam, lparam):
        nid = (self.hwnd, 0)
        Shell_NotifyIcon(NIM_DELETE, nid)
        PostQuitMessage(0)

def balloon_tip(title, msg):
    w=WindowsBalloonTip(title, msg)

if __name__ == '__main__':
    balloon_tip("Título para o pop-up", "Corpo da mensagem aqui!")

Fonte

Regarding key capture, you can use the PyHook, is a wrapper which allows the technique of Hooking through a script in Python, in addition to being able to manipulate keyboard events, you can change the behavior of mouse events.

The example below captures keystrokes and prints on screen.

#!/usr/bin/python

import pyHook
import pythoncom

def OnKeyboardEvent(event):
        print event.Ascii

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()

while True:
        pythoncom.PumpMessages()

To close simply press the keys CTRL + C.

0

I’ve already made a python application that captures and sends windows events, in my case keyboard and mouse and used the pywin32

Although the name has version for python 64 bit also.

The library is basically a Binding, may have thing you will have to see the documentation of the windows api for C and set constants in your code.

To install I recommend you download the installer from his site, choose the latest version of the library and the version compatible with his python (eg: 2.7 64 bit)

To install inside a virtualenv you can use easy_install and pass the local path of the installer.exe or the url.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.