以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  高级功能研发区  (http://222.73.7.161/bbs/list.asp?boardid=5)
----  遇到两个实现上的问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=5&id=88)

--  作者:Marcus
--  发布时间:2009/10/11 11:45:04
--  遇到两个实现上的问题
 想通过VBS实现WINDOWS API的两个功能,目前全部失败。

1. Sleep(100),实现线程暂时挂起。根据网上搜索的经验set   WshShell  =  CreateObject("WScript.Shell"),返回424, 缺少对象"Wscript\'。请问金字塔用什么方法可以实现这个功能?

2. 用SendMessage和PostMessage向一个句柄发送关闭指令,即call Application.SendMessage(hwnd, WM_CLOSE, 0, 0), 返回 450, 错误的参数个数或无效的参数属性值: \'Application.SendMessage\'。没有找到文档中的相关范例,不知道该怎么修改才能通过。用这两个函数的终极目的是向第三方进程发送带文本参数的指令,希望能够方便地实现。

初学VBS,发现金字塔的这个二次开发平台潜力十分强大,目前的问题就是不熟悉。
[此贴子已经被作者于2009-10-11 11:45:56编辑过]

--  作者:admin
--  发布时间:2009/10/11 12:09:46
--  

目前你遇到的问题金字塔都还暂时没法解决,因为VBS是不能像VB那样直接调用WINDOWS的API。

但是我们可以日后的升级版中加上你要求的函数和功能。你是否方便将金字塔目前你认为缺少的函数做一下列表说明呢?这样我们会在下个升级版中及时支持


--  作者:Marcus
--  发布时间:2009/10/11 15:02:33
--  
 目前需求优先级比较高的:
VOID      Sleep(DWORD)  //只需要暂时挂起正在运行的宏,不影响其他金字塔线程
LRESULT SendMessage(HWND, UINT, WPARAM, LPARAM)
LRESULT PostMessage(HWND, UINT, WPARAM, LPARAM)
HWND     FindWindow(LPCTSTR, LPCTSTR)

需求优先级比较低的
HWND FindWindowEx(HWND, HWND, LPCTSTR, LPCTSTR)
HWND GetWindow(HWND, UINT)
HWND GetWindowText(HWND, LPSTR, int)


--  作者:admin
--  发布时间:2009/10/11 16:50:18
--  

除了SLEEP函数外,其他都可以加进去。

另外,金字塔的VBS语句并没有直接支持线程的东西,SLEEP函数你具体有何用途?


--  作者:Marcus
--  发布时间:2009/10/11 18:09:46
--  
Sleep是在SendMessage后给一个延时再操作下一步,确保第三方进程出现预想的结果。
有些时候不是立即就能得到反馈结果,这样做的目的是提高操作成功率。

--  作者:admin
--  发布时间:2009/10/11 18:47:12
--  

但是由于金字塔的VBS系统是不支持线程的,所以如果使用了SLEEP语句,那么会导致整个金字塔主程序都挂起来不能操作了


--  作者:Marcus
--  发布时间:2009/10/12 9:47:21
--  
 这个正是我所担心的,那就暂时放弃Sleep的需求。
--  作者:admin
--  发布时间:2009/10/12 9:52:28
--  
加上也没事,你只要控制好时间就行了,比如SLEEP(1000)表示延时1秒,这样对操作影响不大
--  作者:admin
--  发布时间:2009/10/12 9:55:37
--  

http://blog.163.com/raubin@126/blog/static/710419882009089373244/

这个帖子能解决VBS使用WIN API的问题


--  作者:Marcus
--  发布时间:2009/11/3 23:12:04
--  
上周末抽一点小空试验了一下,还是没成功。
由于看不到最新的说明文档,依旧一头雾水。

能否给个样本代码说明如何调用下面这三个函数?
HWND     FindWindow(LPCTSTR, LPCTSTR)
HWND     GetWindow(HWND, UINT)
LRESULT SendMessage(HWND, UINT, WPARAM, LPARAM)