用fso刪除文件時不作任何提示直接刪除了,也不放入回收站,該如何解決?
下面看看如何解決用fso刪除文件時不作任何提示直接刪除了,也不放入回收站的問題
使用Win32 Api函數刪除文件,以下可以使用vba中:
'刪除文檔的API Private Declare Function SHFileOperation Lib "shell32.dll" _ Alias "SHFileOperationA" (lpFileOp As ToBin) As Long '清空回收站的API Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" _ Alias "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As Long Private Type ToBin hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long hNameMappings As Long lpszProgressTitle As Long End Type 'fFlag 常數 Const FOF_ALLOWUNDO = &H40 '允許 Undo 。 Const FOF_NOCONFIRMATION = &H10 '不顯示系統確認對話框。 Const FOF_NOCONFIRMMKDIR = &H200 '不提示是否新建目錄。 Const FOF_SILENT = &H4 '不顯示進度對話框。 Const FOF_FILESONLY = &H80 '執行通配符,只執行文件。 Const FOF_NOERRORUI = &H400 '當文件處理過程中出現錯誤時,不出現錯誤提示。 Const FOF_RENAMEONCOLLISION = &H8 '當已存在文件名時,對其進行更換文提示。 Public Const FO_DELETE = &H3 Public Const SHERB_NORMAL = &H0 Public Const SHERB_NOCONFIRMATION = &H1 '表示不顯示確認視窗 Public Const SHERB_NOPROGRESSUI = &H2 '表示不顯示清空資源回收站的動畫視窗 (經測試98原本已不會出現動畫) Public Const SHERB_NOSOUND = &H4 '表示清空資源回收站之后不出現聲音 Public Sub RunTest() DelFileToBin "d:\temp\aaa.xls" End Sub '=========================================================== ' 過程及函數名: DelFileToBin ' 版本號 : -- ' 說明 : 將文檔移至回收站。 ' 測試環境 : win2003+office2007 chs ' 引用 : -- ' 輸入參數 : fileFullName 文件全名,包括路徑 ' 輸出值 : -- ' 返回值 : API 執行的結果 ' 0 沒錯誤 ' 32 文件正在被占用 ' 1026 文件不存在 ' 調用演示 : DelFileToBin "d:\temp\aaa.xls" ' 最后修改日期: 2008-2-28 23:36:00 ' 作者 : cg1 ' 網站 : http://access911.net ' 電子郵件 : access911@gmail.com ' 版權 : 作者保留一切權力, ' 請在公布本代碼時將本段說明一起公布,謝謝! '=========================================================== Public Function DelFileToBin(ByVal fileFullName As String) As Long Dim objToBin As ToBin Dim strFile As String Dim lngResult As Long strFile = fileFullName With objToBin .wFunc = FO_DELETE .pFrom = strFile .fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION + FOF_NOERRORUI End With '注意,以下操作將會彈出對話框要求用戶確認 lngResult = SHFileOperation(objToBin) DelFileToBin = lngResult Select Case lngResult Case 1026 '該文件或者資源不存在 Case 0 '在未設置 FOF_NOCONFIRMATION 時可能有兩種情況 '刪除成功,或者用戶取消刪除。未出現錯誤都返回0 If Dir(strFile) <> "" Then '客戶取消了刪除 Else '刪除成功 End If Case 32 '需要刪除的文件正在被占用 Case Else '其他錯誤 End Select End Function '清空回收站 Private Sub ClsBin() Dim RetVal As Long RetVal = SHEmptyRecycleBin(0&, vbNullString, SHERB_NORMAL) End Sub 'ToBin 結構體說明: ' wFunc: ' FO_COPY: 拷貝文件pFrom到pTo 的指定位置? ' FO_RENAME: 將pFrom的文件名更名為pTo的文件名? ' FO_MOVE: 將pFrom的文件移動到pTo的地方? ' FO_DELETE: 刪除pFrom指定的文件? ' ' 使用該函數進行文件拷貝、移動或刪除時,如果需要的時間很長,則程序會自動在進行的過程中出現一個無模式的對話框(Windows操作系統提供的文件操作對話框),用來顯示執行的進度和執行的時間,以及正在拷貝、移動或刪除的文件名,此時結構中的成員lpszProgressTitle顯示此對話框的標題。fFlags是在進行文件操作時的過程和狀態控制標識。它主要有如下一些標識,也可以是其組合: ' fFlags: ' FOF_FILESONLY:執行通配符,只執行文件; ' FOF_ALLOWUNDO:保存UNDO信息,以便在回收站中恢復文件; ' FOF_NOCONFIRMATION:在出現目標文件已存在的時候,如果不設置此項,則它會出現確認是否覆蓋的對話框,設置此項則自動確認,進行覆蓋,不出現對話框。 ' FOF_NOERRORUI:設置此項后,當文件處理過程中出現錯誤時,不出現錯誤提示,否則會進行錯誤提示。 ' FOF_RENAMEONCOLLISION:當已存在文件名時,對其進行更換文提示。 ' FOF_SILENT: 不顯示進度對話框? ' FOF_WANTMAPPINGHANDLE:要求SHFileOperation()函數返回正處於操作狀態的實際文件列表,文件列表名柄保存在hNameMappings成員中。 ' SHFILEOPSTRUCT結構還包含一個SHNAMEMAPPING結構的數組,此數組保存由SHELL計算的每個處於操作狀態的文件的新舊路徑。 ' ' 注意:在使用該函數刪除文件時必須設置SHFILEOPSTRUCT結構中的神秘FOF_ALLOWUNDO標志,這樣才能將待刪除的文件拷到Recycle Bin,從而使用戶可以撤銷刪除操作。需要注意的是,如果pFrom設置為某個文件名,用FO_DELETE標志刪除這個文件並不會將它移到Recycle Bin,甚至設置FOF_ALLOWUNDO標志也不行,在這里你必須使用全路徑名,這樣SHFileOperation才會將刪除的文件移到Recycle Bin。
出處:http://www.access-cn.com/info/2029-cn.html
=======================================================================================
VBS調用系統API
如Beep的API聲明為
Public Declare Function Beep Lib “kernel32″ Alias “Beep” (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
則使用方法如下
'創建對象 Set Wrap = CreateObject("DynamicWrapper") '注冊API Wrap.Register "KERNEL32.DLL", "Beep", "i=ll", "f=s", "r=l" '調用API Wrap.Beep(500, 100)
其中注冊API中, “i=ll”是API的參數類型, “f=s”是調用方式, “r=l”是返回類型
這些可以參考下面的說明。
REM i: (Argument Type) REM 'a', sizeof(IDispatch*), VT_DISPATCH} // a IDispatch* REM 'c', sizeof(unsigned char), VT_I4} // c signed char REM 'd', sizeof(double), VT_R8} // d 8 byte real REM 'f', sizeof(float), VT_R4} // f 4 byte real REM 'k', sizeof(IUnknown*), VT_UNKNOWN} // k IUnknown* REM 'h', sizeof(long), VT_I4} // h HANDLE REM 'l', sizeof(long), VT_I4} // l long REM 'p', sizeof(void*), VT_PTR} // p pointer REM 's', sizeof(BSTR), VT_LPSTR} // s string REM 't', sizeof(short), VT_I2} // t short REM 'u', sizeof(UINT), VT_UINT} // u unsigned int REM 'w', sizeof(BSTR), VT_LPWSTR} // w wide string REM f: (Call Method) REM 'm' - DC_MICROSOFT 0x0000, Default REM 'b' - DC_BORLAND 0x0001, Borland compat REM 's' - DC_CALL_STD 0x0020, __stdcall REM 'c' - DC_CALL_CDECL 0x0010, __cdecl REM '4' - DC_RETVAL_MATH4 0x0100, Return value in ST REM '8' - DC_RETVAL_MATH8 0x0200, Return value in ST REM r: (Return Type) REM Same as i
示例:
'用機箱內的蜂鳴器播放音樂 Sub BeepMusic() Set Wrap = CreateObject("DynamicWrapper") Wrap.Register "KERNEL32.DLL", "Beep", "i=ll", "f=s", "r=l" res = Wrap.Beep(500, 100) res = Wrap.Beep(550, 100) res = Wrap.Beep(600, 100) res = Wrap.Beep(650, 100) res = Wrap.Beep(700, 700) WScript.Sleep 200 res = Wrap.Beep(700, 100) res = Wrap.Beep(650, 100) res = Wrap.Beep(600, 100) res = Wrap.Beep(550, 100) res = Wrap.Beep(500, 700) End Sub BeepMusic
'取前景窗體標題 Sub GetForeWindowCaption() Const WM_GETTEXT = &HD Set Wrap = CreateObject("DynamicWrapper") Wrap.Register "USER32.DLL", "GetForegroundWindow", "f=s", "r=l" Wrap.Register "USER32.DLL", "SendMessage", "i=lllr", "f=s", "r=l" Title = Space(100) res = Wrap.SendMessage(Wrap.GetForegroundWindow(), WM_GETTEXT , 100, Title) GetForeWindowCaption = Title End Sub MsgBox GetForeWindowCaption
'發送鍵盤消息,顯示桌面 Sub ShowDesktop() Const VK_LWIN = &H5B Const VK_D = &H44 Public Const KEYEVENTF_KEYUP = &H2 Set Wrap = CreateObject("DynamicWrapper") Wrap.Register "USER32.DLL", "keybd_event", "i=ccll", "f=s" Wrap.keybd_event VK_LWIN, 0, 0, 0 Wrap.keybd_event VK_D, 0, 0, 0 Wrap.keybd_event VK_D, 0, KEYEVENTF_KEYUP, 0 Wrap.keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0 End Sub ShowDesktop
出處:https://www.cnblogs.com/jinjiangongzuoshi/p/3907008.html
=======================================================================================
VBS調用windows api函數實現后台發送按鍵腳本
'==========================================================================
'
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0
'
' NAME:
'
' AUTHOR: Microsoft , Microsoft
' DATE : 2014/8/10
'
' COMMENT:
'
'===================定義變量,注冊API對象==================================
Dim UserWrap,hWnd
Set UserWrap = CreateObject("DynamicWrapper")
Set ws=WScript.CreateObject("wscript.shell")
WScript.Sleep 500
ws.Run "calc",0
WScript.Sleep 500
'Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
UserWrap.Register "USER32.DLL", "ShowWindow", "I=hl", "f=s", "R=l"
'Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
UserWrap.Register "USER32.DLL", "FindWindow", "I=ss", "f=s", "R=l"
'Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
UserWrap.Register "USER32.DLL", "SetWindowPos", "I=Hllllll", "f=s", "R=l"
'Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
UserWrap.Register "USER32.DLL", "PostMessage", "I=hlls", "f=s", "R=l"
'Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
UserWrap.Register "USER32.DLL", "SetWindowText", "I=Hs", "f=s", "R=l"
'Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
UserWrap.Register "USER32.DLL", "FindWindowEx", "I=llss", "f=s", "R=l"
'Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
UserWrap.Register "USER32.DLL", "SetCursorPos", "I=ll", "f=s", "R=l"
'===================查找控件或者窗體句柄===============================
hWnd = UserWrap.FindWindow(vbNullString,"計算器")
'hWnd = UserWrap.FindWindow("kugou_ui",vbNullString)
hWnd1 = UserWrap.FindWindowEx(hWnd,0,vbNullString,Edit)
'UserWrap.ShowWindow hWnd,SW_HIDE
'UserWrap.SetWindowText hWnd,"hello world"
' MsgBox hWnd
' MsgBox hWnd1
'UserWrap.SetWindowPos hWnd, -1, 0, 0, 0, 0, 3
'MsgBox "將鼠標移到左上角"
'UserWrap.SetCursorPos 0,0
'=================定義系統常量===========================
Private Const WM_KEYDOWN = &H100
Private Const wm_keyup= &H101
Private Const WM_CHAR = &H102
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
'=================發送F1按鍵=====================
UserWrap.PostMessage hWnd, WM_KEYDOWN, 112, 0
'=================發送1002========================
UserWrap.PostMessage hWnd,WM_KEYDOWN ,97,0
UserWrap.PostMessage hWnd,WM_KEYDOWN ,96,0
UserWrap.PostMessage hWnd,WM_KEYDOWN ,96,0
UserWrap.PostMessage hWnd,WM_KEYDOWN ,98,0
VBS調用windows api函數(postmessage)實現后台發送按鍵腳本的更多相關文章
- VBS調用Windows API函數
Demon's Blog 忘記了,喜歡一個人的感覺 Demon's Blog » 程序設計 » VBS調用Windows API函數 « 用VBS修改Windows用戶密碼 在VB中創建和使用 ...
- C#調用Windows API函數截圖
界面如下: 下面放了一個PictureBox 首先是聲明函數: //這里是調用 Windows API函數來進行截圖 //首先導入庫文件 [System.Runtime.InteropServices ...
- Python調用Windows API函數編寫錄音機和音樂播放器
功能描述: 1)使用tkinter設計程序界面: 2)調用Windows API函數實現錄音機和音樂播放器. . 參考代碼: 運行界面:
- MFC中調用Windows API函數的方式
windows aoi 函數的調用前面加::
- c#讓窗體永在最前 調用windows api 將窗體設為topmost
有時候應用程序需要將一個窗體始終位於屏幕的最前面,即使切換到其它窗體也能看到該窗體,這樣的窗體就叫做TopMost窗體. 用C#制作TopMost窗體之前,首先要了解如何聲明SetWindowPos函 ...
- Windows API 函數列表 附幫助手冊
所有Windows API函數列表,為了方便查詢,也為了大家查找,所以整理一下貢獻出來了. 幫助手冊:700多個Windows API的函數手冊 免費下載 API之網絡函數 API之消息函數 API之 ...
- WINDOWS API 函數(超長,值得學習)
一.隱藏和顯示光標 函數: int ShowCursor ( BOOL bShow ); 參數 bshow,為布爾型,bShow的值為False時隱藏光標,為True時顯示光標:該函數的返回值為整型 ...
- Windows API函數大全(精心總結)
WindowsAPI函數大全(精心總結) 目錄 1. API之網絡函數... 1 2. API之消息函數... 1 3. API之文件處理函數... 2 4. API之打印函數... 5 5. ...
- Windows API函數大全(完整)
Windows API函數大全,從事軟件開發的朋友可以參考下 1. API之網絡函數 WNetAddConnection 創建同一個網絡資源的永久性連接 WNetAddConnection2 創建同一 ...
隨機推薦
- [轉]C#讀寫TEXT文件
1.使用FileStream讀寫文件 文件頭: using System; using System.Collections.Generic; using System.Text; using Sys ...
- 使用jquery的delay方式模擬sleep
javascript中並沒有原生sleep函數可供調用,一般來說為了實現sleep功能,大都是采用SetTimeout來模擬,以下片段采用jquery的delay方法來模擬,也算是提供了另外一個視角吧 ...
- iOS學習筆記---c語言第十天
動態內存分配 一.存儲區划分 從低到高(內存地址小----內存地址大) : 代碼區---常量區---靜態區---堆區---棧區 棧內存 //凡是在函數體內定義的變量 都存儲在棧區(包括形參). ; ...
- Html table 實現Excel多格粘貼
Html table 實現Excel多格粘貼 電商網站的后台總少不了各種繁雜數據的錄入,旁邊的運營妹子錄完第138條商品的時候,終於忍不住轉身吼到:為什么后台的錄入表不能像Excel那樣多行粘貼!!! ...
- LATEX學習筆記1
LATEX源文件的結構分三大部分,依次為:文檔類聲明.序言(可選).正文. 文檔結構 \documentclass{article} \usepackage{amsmath} \usepackage{ ...
- 歐幾里德算法gcd及其拓展終極解釋
這個困擾了自己好久,終於找到了解釋,還有自己改動了一點點,耐心看完一定能加深理解 擴展歐幾里德算法-求解不定方程,線性同余方程. 設過s步后兩青蛙相遇,則必滿足以下等式: (x+m*s)-(y+n ...
- 最新VMware Workstation 10注冊碼,絕對可用!
最近公司要在solaris上測試產品,需要用到虛擬機,於是下載了最新的虛擬機VMware Workstation 10,並找到了破解碼,與大家共享: VMware workstation 10破解序列 ...
- 面向切面編程之cglib代理方式
思想: 和上一篇面向切面編程之手動JDK代理方式上的需求和開發模式一樣.不同的是目標類沒有接口,只有實現類,采用的是spring中提供的Enhancer類繼承目標類實現的代理方式. 需要導入的jar包 ...
- SDL2源代碼分析5:更新紋理(SDL_UpdateTexture())
===================================================== SDL源代碼分析系列文章列表: SDL2源代碼分析1:初始化(SDL_Init()) SDL ...
- JavaScript面向對象--多態
一.多態的概念 相同的函數作用於不同的對象,會得到不同的結果,這就是多態. 二.如果不用多態,會怎么樣? 這里有個淺顯易懂的例子,定義一個函數叫makeSound,傳入不同的對象,函數體里要寫不同的情 ...
出處:https://www.bbsmax.com/A/Ae5R1nDrJQ/
=======================================================================================
VBS動態注冊DLL和卸載DLL
主要是使用的CreateObject("Wscript.Shell").Run方法,實現執行命令的功能。
直接看代碼吧:
Set objShell=CreateObject("Wscript.Shell") objShell.Run "regsvr32 /s COM_Test.dll",,true Set obj=CreateObject("COM_Test.clsAdd") 'Set obj=CreateObject("Project1.clsAdd")'CreateObject的參數為"工程名.類模塊名",工程名不一定是工程文件名,類模塊名不一定是類模塊文件名 smsg="4+7=" & obj.Add2(4,7)'傳值 WScript.Echo smsg a=3 b=5 smsg="3+5=" & obj.Add2(a,b)'也是傳值 msgbox smsg smsg="3+5=" & obj.Add(3,5)'也是傳值 msgbox smsg Set obj = Nothing objShell.Run "regsvr32 /s /u COM_Test.dll" Set objShell=Nothing Set objShell=CreateObject("Wscript.Shell") objShell.Run "regsvr32 /s vbcomadvapi.dll",,true Set obj=CreateObject("vbcomadvapi.vbadvapi")'CreateObject的參數為"工程名.類模塊名",工程名不一定是工程文件名,類模塊名不一定是類模塊文件名 smsg="GetExtension2(C:\\TES2B3B.tmp0)=" & obj.GetExtension2("C:\\TES2B3B.tmp0") WScript.Echo smsg Set obj = Nothing objShell.Run "regsvr32 /s /u vbcomadvapi.dll" Set objShell=Nothing '32位整數版的階乘(VB/VC/VBS) 'Private Declare Function Factorial Lib "mydll.dll" (ByVal x As Long) As Long 'typedef int (*FACTORIAL)(int); api.Register "mydll.dll", "Factorial","f=s","i=l", "r=l" a=api.Factorial(10) MsgBox a 'Private Declare Function Summary Lib "mydll.dll" (ByVal x As Long) As Long 'typedef int (*SUMMARY)(int); 'Summary(10)=55=1+2+…+10 api.Register "mydll.dll", "Summary","f=s","i=l", "r=l" a=api.Summary(10) MsgBox a api.Register "DLL_Tutorial.dll", "Add","f=s","i=ll", "r=l" a=api.Add(10,23) MsgBox a float __stdcall Atn(float x); double __stdcall lfAtn(double x); float __stdcall Atn2(float y,float x); float __stdcall ReJT3(float zx, float zy,float tx, float ty); float __stdcall ImJT3(float zx, float zy,float tx, float ty); float __stdcall kq(float q); float __stdcall ckq(float q); api.Register "mydll.dll", "Atn","f=s","i=f", "r=f" a=api.Atn(1.333333) MsgBox a api.Register "mydll.dll", "lfAtn","f=s","i=d", "r=d" a=api.lfAtn(1.33333333333333) MsgBox a api.Register "mydll.dll", "Atn2","f=s","i=ff", "r=f" a=api.Atn2(-1,0) MsgBox a api.Register "mydll.dll", "ReJT3","f=s","i=ffff", "r=f" api.Register "mydll.dll", "ImJT3","f=s","i=ffff", "r=f" a=api.ReJT3(0,0,0,0.5) b=api.ImJT3(0,0,0,0.5) MsgBox a & "+i" & b api.Register "mydll.dll", "kq","f=s","i=f", "r=f" k=api.kq(.207879576350762) MsgBox "模k=" & k api.Register "mydll.dll", "ckq","f=s","i=f", "r=f" ck=api.ckq(.207879576350762) MsgBox "余模k'=" & ck ? 測試例子GetTickCount.vbs: Set objShell=CreateObject("Wscript.Shell") objShell.Run "regsvr32 /s DynamicWrapper.dll",,true 'msgbox 256*256 Set api= CreateObject("DynamicWrapper") api.Register "KERNEL32.DLL", "GetTickCount","f=s","r=l" a=api.GetTickCount msgbox "系統當前已運行" & a &"毫秒" '499000 objShell.Run "regsvr32 /s /u DynamicWrapper.dll" Set objShell=Nothing Set objShell=CreateObject("Wscript.Shell") objShell.Run "regsvr32 /s DynamicWrapper.dll",,true 'Example 1. 'Note: Calling format is: Microsoft compatible, Standard call, _stdcall."f=s"或"f=ms" Set api= CreateObject("DynamicWrapper") api.Register "KERNEL32.DLL", "GetTickCount","f=ms","r=l" a=api.GetTickCount msgbox "系統當前已運行" & a &"毫秒" '"f=s"或"f=ms"換成"f=mc8"或"f=ms8"就不對了 api.Register "RGBlib.dll", "GetRedValue", "f=ms", "i=l", "r=l" a=api.GetRedValue(256) msgbox "GetRedValue(256)=" & a a=api.GetRedValue(257) msgbox "GetRedValue(257)=" & a 'Example 2. 'Note: Calling format is: Microsoft C call, _cdecl, 8 byte real value. 'Register some functions from the Microsoft C Run-Time library."f=mc8"或"f=ms8" api.Register "MSVCRT.DLL", "sin", "f=ms8", "i=d", "r=d" api.Register "MSVCRT.DLL", "cos", "f=mc8", "i=d", "r=d" api.Register "MSVCRT.DLL", "sinh", "f=mc8", "i=d", "r=d" api.Register "MSVCRT.DLL", "cosh", "f=mc8", "i=d", "r=d" '"f=mc8"或"f=ms8"換成"ms"、"f=s"就不對了 ' typedef double(__stdcall *pR)(double x); api.Register "mathlib72.dll", "lsinn", "f=mc8", "i=d", "r=d" api.Register "mathlib72.dll", "lgam1", "f=mc8", "i=d", "r=d" api.Register "mathlib72.dll", "lexpp", "f=mc8", "i=d", "r=d" api.Register "mathlib72.dll", "lcoss", "f=mc8", "i=d", "r=d" 'typedef double(__stdcall *pR)(double a=μ,double d=σ,double x); api.Register "mathlib72.dll", "lgass", "f=mc8", "i=ddd", "r=d" a=api.sin(1) msgbox "sin(1)=" & a 'a=api.lsinn(1) 'msgbox "正弦積分Si(1)=lsinn(1)=" & a 'a=api.lsinn(0) 'msgbox "正弦積分Si(0)=lsinn(0)=" & a 'a=api.lsinn(1000) 'msgbox "正弦積分Si(1000)=lsinn(1000)=" & a 'a=api.lgam1(0.5) 'b=api.lgam1(0.5)*api.lgam1(0.5)/api.lgam1(1.0)'由伽馬函數表示的貝塔函數 'msgbox "伽馬函數Γ(0.5)=lgam1(0.5)=" & a 'msgbox "貝塔函數B(0.5,0.5)=" & b 'a=api.lexpp(0) 'msgbox "指數積分Ei(0)=" & a 'a=api.lexpp(0.5) 'msgbox "指數積分Ei(0.5)=" & a 'a=api.lexpp(1) 'msgbox "指數積分Ei(1)=" & a 'a=api.lexpp(1.5) 'msgbox "指數積分Ei(1.5)=" & a 'a=api.lexpp(1000) 'msgbox "指數積分Ei(1000)=" & a a=api.lcoss(0) msgbox "余弦積分Ci(0)=" & a a=api.lcoss(0.5) msgbox "余弦積分Ci(0.5)=" & a a=api.lcoss(1) msgbox "余弦積分Ci(1)=" & a a=api.lcoss(1.5) msgbox "余弦積分Ci(1.5)=" & a a=api.lcoss(1000) msgbox "余弦積分Ci(1000)=" & a 'a=api.lgass(0,1,-1) 'msgbox "標准正態分布函數lgass(0,1,-1)=" & a 'a=api.lgass(0,1,0) 'msgbox "標准正態分布函數lgass(0,1,0)=" & a 'a=api.lgass(0,1,1) 'msgbox "標准正態分布函數lgass(0,1,1)=" & a 'a=api.lgass(0,1,2) 'msgbox "標准正態分布函數lgass(0,1,2)=" & a 'a=api.lgass(1,1,2) 'msgbox "正態分布函數lgass(μ=1,σ=1,2)=" & a 'a=api.lgass(3,2,7) 'msgbox "正態分布函數lgass(μ=3,σ=2,7)=" & a objShell.Run "regsvr32 /s /u DynamicWrapper.dll" Set objShell=Nothing '************************************************ ' 測試例子MessageBoxA.vbs----VBScript調用標准DLL中的API '************************************************ Option Explicit Dim UserWrap Set UserWrap = CreateObject("DynamicWrapper") ' Call MessageBoxA(), first register the API function UserWrap.Register "USER32.DLL", "MessageBoxA", "I=HsSu","f=s", "R=l" ' 是|否|取消 UserWrap.MessageBoxA Null, "消息內容","消息標題", 3 測試例子MessageBoxW.vbs: Set objShell=CreateObject("Wscript.Shell") objShell.Run "regsvr32 /s dynwrapx.dll",,true 'msgbox 256*256 Set DX = CreateObject("DynamicWrapperX") ' Create an object instance. DX.Register "user32.dll", "MessageBoxW", "i=hwwu", "r=l" ' Register a dll function. '是|否 res = DX.MessageBoxW(0, "Hello, world!", "Test", 4) ' Call the function. objShell.Run "regsvr32 /s /u dynwrapx.dll" Set objShell=Nothing 測試例子dx.vbs: '涉及字符串輸入輸出參數返回值的API,DynamicWrapper.dll不支持,但dynwrapx.dll支持,add by Ivan_han 20130807 Set objShell=CreateObject("Wscript.Shell") objShell.Run "regsvr32 /s dynwrapx.dll",,true Set api= CreateObject("DynamicWrapperX") ' Create an object instance. api.Register "user32.dll", "MessageBoxW", "i=hwwu", "r=l" ' Register a dll function. '是|否 res = api.MessageBoxW(0, "Hello, world!", "Test", 4) ' Call the function. '對於下列API,DynamicWrapper.dll不支持,但dynwrapx.dll支持,add by Ivan_han 20130807 '"f=c"也可以 api.Register "month_name", "month_name", "f=s", "i=l", "r=s" a=api.month_name(8) msgbox a '對於下列API,DynamicWrapper.dll不支持,但dynwrapx.dll支持,add by Ivan_han 20130807 '"f=c"也可以 api.Register "BSTRlib.dll", "vcnb", "f=c", "i=l", "r=w" a=api.vcnb(-1046) msgbox a objShell.Run "regsvr32 /s /u dynwrapx.dll" Set objShell=Nothing Win7下不能跑的原因:DynamicWrapper庫是不支持64位的,所以我們的程序必須要使用32位WScript解釋器來執行,而Win7默認的vbs文件打開方式為64位WScript解釋器。 解決方法:Win7下強制使用32位WScript解釋器運行vbs腳本,執行一遍下面的vbs腳本即可。 '本腳本參考了木馬https://github.com/bluebitch/VbsHorse/blob/master/Unit%20Test/VbsHouseX64Test.vbs Const DEFAULT_VBS_OPEN_COMMAND_KEY = "HKLM\SOFTWARE\Classes\vbsfile\shell\open\command\" Const CUSTOM_VBS_OPEN_COMMAND_VALUE = """%SystemRoot%\SysWOW64\wscript.exe"" ""%1"" %*" Dim g_isRunningOnX86 g_isRunningOnX86 = False Call Main() Sub Main() '主函數,強制程序以32位WScript.exe解釋執行 If X86orX64() = "X64" Then If ReadReg(DEFAULT_VBS_OPEN_COMMAND_KEY) <> CUSTOM_VBS_OPEN_COMMAND_VALUE Then WScript.Echo("Using WScript.exe 64") Call SetVbsFileAss() '改變vbs格式文件關聯 Exit Sub End If End If g_isRunningOnX86 = True End Sub If g_isRunningOnX86 = True Then WScript.Echo("Using WScript.exe 32") End If Sub OpenFile(filePath) Dim objShell Set objShell = CreateObject("WScript.Shell") objShell.Run("explorer.exe " & filePath) '不使用CMD打開,防止產生黑框被用戶發覺 Set objShell = Nothing End Sub Sub SetVbsFileAss() '改變vbs格式文件關聯 Key = DEFAULT_VBS_OPEN_COMMAND_KEY Value = CUSTOM_VBS_OPEN_COMMAND_VALUE Call WriteReg(Key, Value, "REG_EXPAND_SZ") End Sub Sub WriteReg(key, value, typeName) '寫注冊表 Dim objShell Set objShell = CreateObject("WScript.Shell") If typeName = "" Then objShell.RegWrite key, value Else objShell.RegWrite key, value, typeName End If Set objShell = Nothing End Sub Function ReadReg(key) '讀取注冊表,搜索key,返回所在路徑 Dim objShell Set objShell = CreateObject("WScript.Shell") ReadReg = objShell.RegRead(key) Set objShell = Nothing End Function Function X86orX64() '判斷是X86架構還是X64架構 Dim objFileSystem, systemRootPath Set objFileSystem = CreateObject("Scripting.FileSystemObject") X86orX64 = "X86" systemRootPath = objFileSystem.GetSpecialFolder(0) & "\" If objFileSystem.FolderExists(systemRootPath & "SysWow64") Then X86orX64 = "X64" End if End Function
出處:https://blog.csdn.net/u010401391/article/details/50923327