做游戏辅助,易语言做界面部分,python做数据处理
两个进程,可以有很多方式通讯
甚至可以创建个TXT文本进行通讯。
这里有一个解决方案,可以参考一下
这是我自己写的一个函数,里面是精易模块的方法
这个函数会做成dll供python调用。
可以给易语言发消息!
原理是通过管道
下面是python
import sys,os
from ctypes import CDLL,string_at,c_char_p,byref
os.add_dll_directory(sys.path[0])
dll = CDLL('进程通信库.dll')
def SendData(hwnd,str01,str02):
# 易语言传参是文本型,这里需要编码为utf-8
str01 = c_char_p(str01.encode('utf-8'))
str02 = c_char_p(str02.encode('utf-8'))
# 返回值是逻辑型
info = dll.SendData(hwnd,str01,str02)
return info
这里python封装一下就可以直接用了
SendData(5379482,"mypipe","684564564654646128922124")
可以这样调用,中间那个"mypipe"名字必须保持一致,最好跟我弄一样的。这是管道名字,如果不小心搞错了是收不到消息的!!!
这个句柄就是易语言的窗口句柄,可以用大漠插件获取或者其他各种方式获取hwnd
后面的就是需要传送的文本,中文要小心编码问题,最好不用中文!
易语言里面这样写,就可以接收到数据了。同样是精易模块
这里有个小重点:精易模块需要回调函数,咱们python没法弄。
所以只能自己写win32API管道来获取信息
而精易模块的发送信息与python的win32API管道无法对接!
所以易语言这边用了另一种库,用来发送数据给python
自带的这个库,很简单
这就是个按钮事件,忽略即可,重点看里面的四行!!!
这样就可以发数据了。
下面是python怎么接收数据!
import win32file
import win32pipe
while True:
named_pipe = win32pipe.CreateNamedPipe(r'\\.\Pipe\mypipe',
win32pipe.PIPE_ACCESS_DUPLEX,
win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_WAIT | win32pipe.PIPE_READMODE_MESSAGE,
win32pipe.PIPE_UNLIMITED_INSTANCES,
65535,
65535, 500, None)#缓冲区大小
print(named_pipe)
try:
while True:
try:
win32pipe.ConnectNamedPipe(named_pipe, None)
data = win32file.ReadFile(named_pipe, 65535, None)#缓冲区大小
if data is None or len(data) < 2:
continue
print('receive msg:', data)
except BaseException as e:
print("exception:", e)
break
finally:
try:
win32pipe.DisconnectNamedPipe(named_pipe)
except:
pass
可以自己写函数来收数据。
总结一下:
#python发送数据用的精易模块的dll
#接受数据用的win32API
#易语言发送数据用的自带通讯模块
#易语言接受数据用的精易模块