lua运行外部程序_Lua通过COM调用外部程序excel及调用windows api
[在我接触JNA之前一直以为调用本地链接库函数的时候一定要借助JNI或者SWT来实现,一日中无意看到JNA,发现它也可以实现这类调用,于是下回来按网站上的例子试试了 还不错,
为了方便起见,最好安装lua for windows,里面已经包含了很多有用的第三方模块。
require(’luacom’) — luacom
ie = luacom.CreateObject(”InternetExplorer.Application”)
ie:Navigate2(”http://sunxiunan.com”)
ie.Visible = true
使用lua调用excel,然后往cell里面填一些数据。
require(’luacom’) — luacom
– Excelの起動
excel = luacom.CreateObject(”Excel.Application”)
excel.Visible = true — 可視状態に
– ワークブックを追加
local book = excel.Workbooks:Add()
local sheet = book.Worksheets(1)
– 適当な値を100個書き込む
for row=1,100 do
sheet.Cells(row, 1).Value2 = math.floor(math.random() * 20)
end
稍微复杂一些的代码
require “luacom”
excel = luacom.CreateObject(”Excel.Application”)
local book = excel.Workbooks:Add()
local sheet = book.Worksheets(1)
excel.Visible = true
– 適当な値を書き込む
for row=1,30 do
for col=1,30 do
sheet.Cells(row, col).Value2 = math.floor(math.random() * 100)
end
end
– 値を調べて50以上のものを黄色でマークする
local range = sheet:Range(”A1″)
for row=1,30 do
for col=1,30 do
local v = sheet.Cells(row, col).Value2
if v > 50 then
local cell = range:Offset(row-1, col-1)
cell:Select()
excel.Selection.Interior.Color = 65535
end
end
end
excel.DisplayAlerts = false — 終了確認を出さないようにする
excel:Quit()
excel = nil
如果想给excel加个图表该怎么做?[ 云风的 BLOG 思绪来的快去的也快,偶尔会在这里停留
require “luacom”
excel = luacom.CreateObject(”Excel.Application”)
local book = excel.Workbooks:Add()
local sheet = book.Worksheets(1)
excel.Visible = true
for row=1,30 do
sheet.Cells(row, 1).Value2 = math.floor(math.random() * 100)
end
local chart = excel.Charts:Add()
chart.ChartType = 4 — xlLine
local range = sheet:Range(”A1:A30″)
chart:SetSourceData(range)
如果想调用windows api,可以用下面的代码
require “alien”
MessageBox = alien.User32.MessageBoxA
MessageBox:types{ret = ‘long’, abi = ’stdcall’, ‘long’, ’string’,
’string’, ‘long’ }
MessageBox(0, “title for test”, “LUA call windows api”, 0)
如何实现回调函数呢?下面的例子展示了回调。
require ‘alien’
–声明了两个函数EnumWindows和GetClassName
EnumWindows = alien.user32.EnumWindows
EnumWindows:types {”callback”, “pointer”, abi=”stdcall”}
GetClassName = alien.user32.GetClassNameA
GetClassName:types {”long”, “pointer”, “int”, abi=”stdcall” }
local buf = alien.buffer(512)
– 会被EnumWindows反复调用,传入windows的handle
local function enum_func(hwnd, p)
GetClassName(hwnd, buf, 511)
print (hwnd..”:”..tostring(buf))
return 1
end
local callback_func = alien.callback(
enum_func,
{”int”, “pointer”, abi=”stdcall”})
EnumWindows(callback_func, nil)
其中函数原型是
BOOL EnumWindows(WNDENUMPROC lpEnumFunc
, LPARAM lParam
);
int GetClassName(HWND hWnd
, LPTSTR lpClassName
, int nMaxCount
);
其中EnumWindows第一个参数的原型为,这个函数是客户调用时候传入,EnumWindows用它返回
BOOL CALLBACK EnumWindowsProc(HWND hwnd
, LPARAM lParam
);
其他复杂的使用方法可以参考alien的文档。
[Lua是一个轻量级脚本语言,在C++中可以方便的调用、运行Lua脚本。下面的示例参考http://gamedevgeek.com/2006/05/04/lua-tutorials/,在运行示例之前,需要先配置Visual C
lua运行外部程序_Lua通过COM调用外部程序excel及调用windows api相关推荐
- 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程
标 题: [原创]使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. 作 者: shayi 时 间: 2015-02-12,05:19:54 链 ...
- 案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程。 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下:
案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下: 1 ...
- lua运行外部程序_Lua 协同程序(coroutine)
coroutine.creat方法只要建立了一个协程 ,那么这个协程的状态默认就是suspend.使用resume方法启动后,会变成running状态:遇到yield时将状态设为suspend:如果遇 ...
- Delphi 调用外部程序并等待其运行结束
如何让Delphi调用外部程序并等待其运行结束 函数一: uses Windows, SysUtils, Classes, ShellAPI; function RunAndWait(FileName ...
- java魔法堂_Java魔法堂:调用外部程序
前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...
- Delphi调用外部程序的集中方法
Delphi调用外部程序 WinExec主要运行EXE文件.如:WinExec('Notepad.exe Readme.txt', SW_SHOW); WinExec( lpCmdLine: LP ...
- Python使用标准库subprocess调用外部程序
Python标准库subprocess中提供了很多调用外部程序创建子进程的对象,本文重点演示Popen对象的stdin和stdout属性的用法. 假设有一个程序externProgram.py,内容如 ...
- C# 使用Process调用外部程序中所遇到的参数问题
在使用Process.Start 调用外部程序时,除了程序的地址之外,是可以传递参数的,Process.Start 也有多个重载: 1 // 2 // 摘要: 3 // 启动由包含进程启动信息(例如, ...
- PHP调用外部程序的方法解析
很多情况下需要php调用其他程序如shell命令.shell脚本.可执行程序等等,此时需要使用到诸如exec/system/popen/proc_open等函数,每种函数有各自适合使用的场景以及需要注 ...
最新文章
- 基于html5海贼王单页视差滚动特效
- jQuery 第二章
- 安卓开发日记(1) - 安装 Android 开发环境和 first app
- ITK:二进制XOR两个图像
- 使用OC语言批量修改文件名称
- MySQL 字段约束 null, not null, default, auto_increment
- 《图解Http》 2-6章: 基础,报文,状态码,首部。
- python判断奇数偶数
- JavaScript异步加载与同步加载
- Java JDK新特性探究-精简的JRE
- 上海车展自动驾驶产业链盘点
- 【路径规划】基于狼群算法之三维路径规划matlab源码
- 基于SIFT特征提取的图像拼接算法matlab仿真
- python设置excel表样式
- 跳槽季,你该如何写简历,简历准备好了吗?
- Android Glide加载Base64圆形图
- 如何解决算百分比,加起来不是100%的问题
- 网络工程师2017上半年上午试题答案
- Android 软件开发时用到的一些有用软件列表
- metamask 最新版官方版
热门文章
- SSH中直接运行php文件
- 通过IPv4网络访问IPv6网络 ISATAP隧道配置方法
- Struts入门经验(二)
- 解决方案-CMake error: error in configuration process, project files may be invalid(WindowsVS可参考)
- 接手一手机android app维护 如何快速进入,快速上手Android开发,学会这三点就够了!...
- 孪生神经网络_驾驶习惯也能识人?基于时空孪生神经网络的轨迹识别
- Mysql多表关联查询
- bio linux 创建_Linux设备驱动--块设备之概念和框架以及相关结构体
- 部署系统到linux服务器,若依管理系统部署到linux(上)
- DaNet: Decompose-and-aggregate Network for 3D Human Shape and Pose Estimation