.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:\repos\Dll_5\Debug\Dll_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;
}

在python中发送自定义消息的更多相关文章

  1. python中发送post请求时,报错“Unrecognized token 'xxxx': was expecting ('true', 'false' or 'null')”

    解决办法: 如请求参数为 data={“user”=“aaa”,“pwd”=“123456”,sign=“00000000000000”} 需要将参数data先做处理,调用函数datas=datajs ...

  2. python中发送get或post请求

    示例 get import httplib import uuid import time url = "/KM/test.php?time=" url += str(int(ti ...

  3. 在Python中使用SMTP发送电子邮件

    Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作.第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写 ...

  4. MFC中不同对话框间使用SendMessage发送自定义消息的具体实现

    1. 基本知识 SendMessage的基本结构如下: SendMessage(     HWND hWnd,  //消息传递的目标窗口或线程的句柄.     UINT Msg, //消息类别(这里可 ...

  5. python中的IO多路复用

    在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...

  6. Python中实现异步并发查询数据库

    这周又填了一个以前挖下的坑. 这个博客系统使用Psycopy库实现与PostgreSQL数据库的通信.前期,只是泛泛地了解了一下SQL语言,然后就胡乱拼凑出这么一个简易博客系统. 10月份找到工作以后 ...

  7. Python中的threading

    Python中的threading RLock--重入锁 RLock在Python中的实现是对Lock的封装,具体在类中维护了一个重入次数的变量.一旦一个线程获得一个RLock,该线程再次要求获得该锁 ...

  8. Python中的参数

    Python中的参数 1. python函数参数有多重形式: * test(arg1,arg2,`*args`) * test(arg1,arg2,`*args`,`**kwargs`) 2. 其中比 ...

  9. python中的进程、线程(threading、multiprocessing、Queue、subprocess)

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  10. Python 中的进程、线程、协程、同步、异步、回调

    进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...

随机推荐

  1. shell补遗_一个巨简单的保证服务存活的脚本

    Shell补遗 背景 公司一台机器总是会在没有更新补丁的情况下启动失败. 查看所有的配置都没有问题. 但是就是不启动 没办法,准备写一个检查进行启动. 最近写shell很少. 所以总结一下. 思路 判 ...

  2. [转帖]iptables命令详解和举例(完整版)

    1.防火墙概述 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底 ...

  3. [转帖]开源软件项目中BSD、MIT许可证合规问题探析

    https://www.allbrightlaw.com/CN/10475/3be2369275d19e9e.aspx   [摘要]本文将探析BSD开源许可证(Berkeley Software Di ...

  4. [转帖] Linux命令拾遗-入门篇

    https://www.cnblogs.com/codelogs/p/16060394.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 之前出过很多和 ...

  5. docker -- images镜像消失问题排查

    1. 问题描叙 安装model-serving组件时,错误日志输出push时对应的tag不存在,导致镜像推送失败 2. 问题排查 # 找到对应镜像,尝试手动推送 docker images|grep ...

  6. 【计数,DP】ABC306Ex Balance Scale

    Problem Link 现在有 \(n\) 个球,每个球有一个重量,重量未知.接下来会进行 \(m\) 次称重,每次给定 \(a_i\) 和 \(b_i\),比较这两个球的重量,结果可能是 \(&g ...

  7. 【小优化】golang中取两个字符串的公共前缀的长度

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 在VM的merge部分的代码中发现这样一个函数: func ...

  8. 【0基础学爬虫】爬虫基础之自动化工具 Pyppeteer 的使用

    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...

  9. word文档删除空白页

    记住两个快捷键 CTRL+Backspace Shift+Backspace 鼠标箭头放在空白的页面 按住键盘上的快捷键 就可以成功删除了不要天天看营销号设置什么磅值,全选删除啥的 效果如下

  10. 获取Unity和UGUUI内置组件的属性名

    需求来源 在阅读UGUI的源码时,发现Unity对于私有字段才加了[[SerializeField]]标签,而public的没有,且在Editor扩展中,也是查找带序列化标签的私有字段进行修改,那么在 ...