前段時間本身想用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