想通过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编辑过]
目前你遇到的问题金字塔都还暂时没法解决,因为VBS是不能像VB那样直接调用WINDOWS的API。
但是我们可以日后的升级版中加上你要求的函数和功能。你是否方便将金字塔目前你认为缺少的函数做一下列表说明呢?这样我们会在下个升级版中及时支持
目前需求优先级比较高的:
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)
除了SLEEP函数外,其他都可以加进去。
另外,金字塔的VBS语句并没有直接支持线程的东西,SLEEP函数你具体有何用途?
Sleep是在SendMessage后给一个延时再操作下一步,确保第三方进程出现预想的结果。
有些时候不是立即就能得到反馈结果,这样做的目的是提高操作成功率。
但是由于金字塔的VBS系统是不支持线程的,所以如果使用了SLEEP语句,那么会导致整个金字塔主程序都挂起来不能操作了
这个正是我所担心的,那就暂时放弃Sleep的需求。
加上也没事,你只要控制好时间就行了,比如SLEEP(1000)表示延时1秒,这样对操作影响不大
上周末抽一点小空试验了一下,还是没成功。
由于看不到最新的说明文档,依旧一头雾水。
能否给个样本代码说明如何调用下面这三个函数?
HWND FindWindow(LPCTSTR, LPCTSTR)
HWND GetWindow(HWND, UINT)
LRESULT SendMessage(HWND, UINT, WPARAM, LPARAM)