zoukankan      html  css  js  c++  java
  • 在python中发送自定义消息

    .py

    import win32api, win32con, win32gui 
    import win32gui_struct 
    import ctypes 
    from ctypes import * 
    GUID_DEVINTERFACE_USB_DEVICE = "{A5DCBF10-6530-11D2-901F-00C04FB951ED}" 
    WM_RETICULATE_SPLINES =  (win32con.WM_USER + 0x0001)
    class MyWindow: 
     
        def __init__(self): 
            win32gui.InitCommonControls() 
            self.hinst = win32api.GetModuleHandle(None) 
            className = 'MyWndClass' 
            message_map = { 
            win32con.WM_DESTROY: self.OnDestroy, 
            win32con.WM_DEVICECHANGE: self.OnDeviceChange, 
            win32con.WM_CREATE: self.OnCreate, 
            WM_RETICULATE_SPLINES: self.RETICULATE, 
            } 
            className = 'MyWndClass' 
            wc = win32gui.WNDCLASS() 
            wc.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW 
            wc.lpfnWndProc = message_map 
            wc.lpszClassName = className 
            win32gui.RegisterClass(wc) 
            style = win32con.WS_OVERLAPPEDWINDOW 
            self.hwnd = win32gui.CreateWindow(className,'My win32api app',style,win32con.CW_USEDEFAULT,win32con.CW_USEDEFAULT,300,300,0,0,self.hinst,None) 
            # register for a device notification - we pass our service handle 
            # instead of a window handle. 
            filter = win32gui_struct.PackDEV_BROADCAST_DEVICEINTERFACE(GUID_DEVINTERFACE_USB_DEVICE) 
            self.hdn = win32gui.RegisterDeviceNotification(self.hwnd, filter, 4) 
            win32gui.ShowWindow(self.hwnd, win32con.SW_SHOW) 
            win32gui.UpdateWindow(self.hwnd)    
        def OnDestroy(self, hwnd, message, wparam, lparam): 
            win32gui.UnregisterDeviceNotification(self.hdn)    
            win32gui.PostQuitMessage(0) 
            return True 
        def OnDeviceChange(self, hwnd, message, wparam, lparam): 
            ctypes.windll.user32.MessageBoxW(0, "DeviceChange", "Message", 1) 
            return True 
        def OnCreate(self, hwnd, message, wparam, lparam): 
            ctypes.windll.user32.MessageBoxW(0, "Create", "Message", 1) 
            return True 
        def RETICULATE(self, hwnd, message, wparam, lparam): 
            x = lparam & 0xffff
            y = (lparam >> 16) & 0xffff
            print(x,y)
            return True 
        
     
    w = MyWindow() 
    lib = cdll.LoadLibrary(r'D:
    eposDll_5DebugDll_5.dll')
    res = lib.SetHook()
    win32gui.PumpMessages()
    lib.UnHook()

    .dll

    // dllmain.cpp : Defines the entry point for the DLL application.
    #include "stdafx.h"
    
    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    
    #define WM_RETICULATE_SPLINES (WM_USER + 0x0001)
    
    HHOOK tHook;
    HMODULE hinstDLL;
    static POINT pt;
    
    LRESULT CALLBACK meconnect(int code, WPARAM wParam, LPARAM lParam) {
    //    BOOL EnableMouseInPointer = TRUE;
        if (code == HC_ACTION) {
            LPMSG data = (LPMSG)lParam;
            if (data->message == WM_LBUTTONUP) {
                PostMessage(data->hwnd, WM_RETICULATE_SPLINES, data->wParam, data->lParam);
    
            }
        }
        return(CallNextHookEx(tHook, code, wParam, lParam));
    }
    extern "C" __declspec(dllexport) BOOL SetHook()
    {
        tHook = SetWindowsHookEx(WH_GETMESSAGE, meconnect, hinstDLL, 0);
    
        if (tHook == NULL)
            return FALSE;
        else
            return TRUE;
    }
    extern "C" __declspec(dllexport) BOOL UnHook()
    {
        return UnhookWindowsHookEx(tHook);
    }
    
    
    BOOL APIENTRY DllMain(HMODULE hModule,
        DWORD  ul_reason_for_call,
        LPVOID lpReserved
    )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
            hinstDLL = hModule;
            break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }
  • 相关阅读:
    扩展的局域网
    参数估计
    以太网的 MAC 层
    poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数
    tarjan算法--求解无向图的割点和桥
    spfa负环判断
    codeforce 489d bfs分层处理
    并查集优化——压缩路径——秩优化
    SPFA_queue_链式前向星最短路 & HDU2433
    POJ3046选蚂蚁创建集合_线性DP
  • 原文地址:https://www.cnblogs.com/strive-sun/p/12516206.html
Copyright © 2011-2022 走看看