在游戏脚本制作方面,大家常常听说易语言、TC、按键精灵,可惜知python者甚少。
而本菜鸟就是这么钟爱python,那还能咋滴,花点时间研究研究python怎么为所欲为呗。
经过几天的努力,终究还是黄天不负有心人。python的快速制作gui界面问题解决,线程问题解决,热键注册问题解决
甚至,能够拿市场上较为牛逼的插件来用,又是手到擒来。我怎么甘心就一个大漠插件完事儿?
这不,经过个人的不懈努力,大漠插件,乐玩插件,甚至我还能直接把易语言用了模块编写的功能编译成dll直接给
python用。这下万事俱备,python也能为所欲为啦!
调用易语言直接编译的dll文件系列,直接上代码,本菜鸟准备后面把精易模块等好东西,造个python轮子出来:
下面这个代码是基础的底层知识支撑,弄明白了,就随便拿别人的dll玩,哈哈。最后,demo文件包含
一个py文件,一个编译好的dll文件以及与它对应的易语言源码程序在最下面。
#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# File : dlltypes.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2019/5/18
from ctypes import WinDLL
from ctypes import c_bool,c_int,c_float,c_double,c_char_p
class types:
def __init__(self,dllfile):
self.dll = WinDLL(dllfile)
self.bool = c_bool
self.int = c_int
self.float = c_float
self.double = c_double
self.str = c_char_p
def load(self,dllfile):
self.dll = WinDLL(dllfile)
#########输入参数值转换###########################
def cin2bool(self,text):
self.back = self.bool(bytes(text,'gbk'))
return self.back
def cin2int(self,text):
self.back = self.int(text)
return self.back
def cin2float(self,text):
self.back = self.float(text)
return self.back
def cin2double(self,text):
self.back = self.double(text)
return self.back
def cin2str(self,text):
self.back = self.str(bytes(text, 'gbk'))
return self.back
#########输出返回值转换###########################
def cout2bool(self,func):
func.restype = self.bool
def cout2int(self,func):
func.restype = self.int
def cout2float(self, func):
func.restype = self.float
def cout2double(self, func):
func.restype = self.float
def cout2str(self, func):
func.restype = self.str
#########调用windll测试程序###########################
def findwindow(self,title):
self.back = self.cin2str(title) #将Windll内findwindow函数的输入类型转为str型
self.cout2int(self.dll.findwindow)# 将Windll内findwindow函数的输出返回类型转为bool型
self.back = self.dll.findwindow(self.back)
return self.back
def string(self,text):
self.back = self.cin2str(text)#得到一个c_char_p(56136880)类型的指针
self.cout2str(self.dll.str)#设置windll内部str函数输出返回值类型为str型
self.back = self.dll.str(self.back).decode('gbk') #用于接收该返回值
return self.back
def booling(self,text):
if isinstance(text,str):
self.back = self.cin2bool(text)#得到一个c_char_p(56136880)类型的指针
else:
self.back = self.bool(bytes(text))
self.cout2bool(self.dll.bool)#设置windll内部str函数输出返回值类型为str型
self.back = self.dll.bool(self.back) #用于接收该返回值
return self.back
def inting(self,text):
if isinstance(text, str):
text = int(text)
self.back = self.cin2int(text)
self.cout2int(self.dll.int)#设置windll内部str函数输出返回值类型为str型
self.back = self.dll.int(self.back) #用于接收该返回值
return self.back
def floating(self,text):
if isinstance(text, str):
text = float(text)
self.back = self.cin2float(text)
self.cout2float(self.dll.float)#设置windll内部str函数输出返回值类型为str型
self.back = self.dll.float(self.back) #用于接收该返回值
return self.back
def doubleing(self,text):
self.back = self.cin2double(text)
self.cout2double(self.dll.double)#设置windll内部str函数输出返回值类型为str型
self.back = self.dll.double(self.back) #用于接收该返回值
return self.back
def open(self,index = 1):
self.dll.open(index)
def add(self,a=1,b=2):
self.back = self.dll.add(a,b)
return self.back
def init(self):
self.dll.init()
if __name__ == '__main__':
lw = types("leidian.dll")
ret = lw.findwindow("记事本")
print(ret)
ret = lw.string("技术")
print(ret)
ret = lw.booling('0')
print(ret)
ret = lw.inting('2')
print(ret)
ret = lw.floating(2.56)
print(ret)
ret = lw.doubleing(2.56)
print(ret)
ret = lw.add(1,5)
print(ret)
lw.init()