[在我接触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相关推荐

  1. 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程

    标 题: [原创]使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. 作 者: shayi 时 间: 2015-02-12,05:19:54 链 ...

  2. 案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程。 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下:

    案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下: 1 ...

  3. lua运行外部程序_Lua 协同程序(coroutine)

    coroutine.creat方法只要建立了一个协程 ,那么这个协程的状态默认就是suspend.使用resume方法启动后,会变成running状态:遇到yield时将状态设为suspend:如果遇 ...

  4. Delphi 调用外部程序并等待其运行结束

    如何让Delphi调用外部程序并等待其运行结束 函数一: uses Windows, SysUtils, Classes, ShellAPI; function RunAndWait(FileName ...

  5. java魔法堂_Java魔法堂:调用外部程序

    前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...

  6. Delphi调用外部程序的集中方法

    Delphi调用外部程序 WinExec主要运行EXE文件.如:WinExec('Notepad.exe Readme.txt', SW_SHOW); WinExec(   lpCmdLine: LP ...

  7. Python使用标准库subprocess调用外部程序

    Python标准库subprocess中提供了很多调用外部程序创建子进程的对象,本文重点演示Popen对象的stdin和stdout属性的用法. 假设有一个程序externProgram.py,内容如 ...

  8. C# 使用Process调用外部程序中所遇到的参数问题

    在使用Process.Start 调用外部程序时,除了程序的地址之外,是可以传递参数的,Process.Start 也有多个重载: 1 // 2 // 摘要: 3 // 启动由包含进程启动信息(例如, ...

  9. PHP调用外部程序的方法解析

    很多情况下需要php调用其他程序如shell命令.shell脚本.可执行程序等等,此时需要使用到诸如exec/system/popen/proc_open等函数,每种函数有各自适合使用的场景以及需要注 ...

最新文章

  1. 基于html5海贼王单页视差滚动特效
  2. jQuery 第二章
  3. 安卓开发日记(1) - 安装 Android 开发环境和 first app
  4. ITK:二进制XOR两个图像
  5. 使用OC语言批量修改文件名称
  6. MySQL 字段约束 null, not null, default, auto_increment
  7. 《图解Http》 2-6章: 基础,报文,状态码,首部。
  8. python判断奇数偶数
  9. JavaScript异步加载与同步加载
  10. Java JDK新特性探究-精简的JRE
  11. 上海车展自动驾驶产业链盘点
  12. 【路径规划】基于狼群算法之三维路径规划matlab源码
  13. 基于SIFT特征提取的图像拼接算法matlab仿真
  14. python设置excel表样式
  15. 跳槽季,你该如何写简历,简历准备好了吗?
  16. Android Glide加载Base64圆形图
  17. 如何解决算百分比,加起来不是100%的问题
  18. 网络工程师2017上半年上午试题答案
  19. Android 软件开发时用到的一些有用软件列表
  20. metamask 最新版官方版

热门文章

  1. SSH中直接运行php文件
  2. 通过IPv4网络访问IPv6网络 ISATAP隧道配置方法
  3. Struts入门经验(二)
  4. 解决方案-CMake error: error in configuration process, project files may be invalid(WindowsVS可参考)
  5. 接手一手机android app维护 如何快速进入,快速上手Android开发,学会这三点就够了!...
  6. 孪生神经网络_驾驶习惯也能识人?基于时空孪生神经网络的轨迹识别
  7. Mysql多表关联查询
  8. bio linux 创建_Linux设备驱动--块设备之概念和框架以及相关结构体
  9. 部署系统到linux服务器,若依管理系统部署到linux(上)
  10. DaNet: Decompose-and-aggregate Network for 3D Human Shape and Pose Estimation