前段时间本身想用python写一个关于截屏翻译的小功能,因此首先须要获取鼠标的坐标动做有按下、拖拽、释放。查找了不少资料
无非是pyhook或者用其余语言重写。可是本身用的是python3.65,第三方模块pyhook就不能很好的兼容了。
由于本身刚刚学习python困恼了一段时间。真的很想。。。。,以后再网上查找资料发现GetAsyncKeyState和
GetCursorPos 可以知足我部分的需求(C语言也是二把手,你懂的。)。忽然灵光一闪。因此就决定用c来获取
实时鼠标位置 和鼠标状态吧。说干就干,如今附上源码,代码太扎眼你们将就看吧。更重要的是一种解决
方法。这方面不错的大神也能够本身重写一下。发到下面这样也能够帮到更多人
#C:dllmain.c
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <string.h>
DLLIMPORT void HelloWorld()
{
MessageBox(0,"Hello World from DLL!\n","Hi",MB_ICONINFORMATION);
}
DLLIMPORT long int getMouseXYDownload()
{
POINT p;
GetCursorPos(&p);
SHORT st = GetAsyncKeyState(VK_LBUTTON);
long int jilu;
jilu=p.x*10000;
jilu=jilu+p.y;
if(st==-32768)
{
return jilu;
}
return 1;
}
DLLIMPORT long int getMouseXY(){
POINT p;
GetCursorPos(&p);
long int jilu;
jilu=p.x*10000;
jilu=jilu+p.y;
return jilu;
}
DLLIMPORT long int MouseState()
{python
SHORT st = GetAsyncKeyState(VK_LBUTTON);
return st;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
break;
}
case DLL_PROCESS_DETACH:
{
break;
}
case DLL_THREAD_ATTACH:
{
break;
}
case DLL_THREAD_DETACH:
{
break;
}
}
/* Return TRUE on success, FALSE on failure */
return TRUE;
}
#C:dll.hwindows
#ifndef _DLL_H_
#define _DLL_H_函数
#if BUILDING_DLL
#define DLLIMPORT __declspec(dllexport)
#else
#define DLLIMPORT __declspec(dllimport)
#endif学习
DLLIMPORT void HelloWorld();
DLLIMPORT long int getMouseXY();
DLLIMPORT long int getMouseXYDownload();
DLLIMPORT long int MouseState();
#endif
#生成Dll文件后,无非是在python处理dll传递过来的数据,我就不附上源码了。以避免扎到大神们的眼
我是用的DEV C++生成的Dll文件
python3.6.5 中须要导入模块
from ctypes import CDLL
get_mouse=CDLL('getmouse.dll')翻译
GetCursorPos,函数名。该函数检取光标的位置,以屏幕坐标表示。
https://baike.baidu.com/item/GetCursorPos/6369757get
GetAsyncKeyState是一个用来判断函数调用时指定虚拟键的状态,肯定用户当前是否按下了键盘上的一个键的函数。若是按下,则返回值最高位为1。 [1]
https://baike.baidu.com/item/GetAsyncKeyState/918387?fr=aladdin源码
经过以上两种win32方法能够获取实时鼠标,鼠标状态,以及通过筛选后,鼠标在按下、拖拽、释放处的鼠标坐标状态等string
但愿本身的这篇文件能够给你们一个方向,能够帮助到你们。 檐下听雨献上!it