Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// test.uws ///====================================
- call win32_error.uws
- call win32_file.uws
- PUBLIC pub_scriptname_without_ext = COPY( GET_UWSC_NAME, 1, LENGTH(GET_UWSC_NAME)-LENGTH(".uws")) // スクリプト名(パス無し)から拡張子を除いたもの
- DIM sTest = "0123456789abcdefghij0123456789abcdefghij0123456789"
- DIM i
- DIM start1, end1
- DIM start2, end2
- start1 = GETTIME()
- FOR i=1 TO 500
- AddToLog0(sTest)
- NEXT
- end1 = GETTIME()
- start2 = GETTIME()
- FOR i=1 TO 500
- AddToLog(sTest)
- NEXT
- end2 = GETTIME()
- MSGBOX("UWSC "+ (end1-start1) + "秒")
- MSGBOX("WinAPI "+ (end2-start2) + "秒")
- // end
- FUNCTION AddLineToClosingFile(path, name, ext, data)
- RESULT = FALSE
- DIM sLogNameExt = name+"."+ext
- DIM hFile, nError
- DIM cnt = 0
- REPEAT
- hFile = CreateFileA( path+"\"+ sLogNameExt, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
- IFB INVALID_HANDLE_VALUE = hFile THEN
- nError = GetLastError()
- IFB 5 = nError OR 32 = nError THEN
- // 5 アクセス拒否
- // 32 他のプロセスがオープン
- cnt = cnt+1
- sLogNameExt = name+"."+cnt+ "."+ext
- ELSE
- MSGBOX("CreateFile() - " +" (Error:"+nError+")<#CR>"+ GetErrorMessage(nError))
- BREAK
- ENDIF
- ELSE
- // open success
- BREAK
- ENDIF
- IFB 9<cnt THEN
- EXIT
- ENDIF
- UNTIL INVALID_HANDLE_VALUE <> hFile
- DIM nFilePoint
- nFilePoint = SetFilePointer(hFile, 0, 0, FILE_END)
- MessageIfErrorOccurred("SetFilePointer() - ", INVALID_SET_FILE_POINTER=nFilePoint)
- DIM nResult
- DIM bSuccess = WriteFileStr(hFile, data+ "<#CR>", LENGTHB(data+ "<#CR>"), nResult)
- MessageIfErrorOccurred("WriteFileStr() - ", FALSE=bSuccess)
- bSuccess = CloseHandle(hFile);
- MessageIfErrorOccurred("CloseHandle() - ", FALSE=bSuccess)
- RESULT = TRUE
- FEND
- FUNCTION AddToLog(sData)
- RESULT = 0
- GETTIME( )
- DIM sLogLine = DateTimeFormat1( G_TIME_YY _ // 年
- ,G_TIME_MM _ // 月
- ,G_TIME_DD _ // 日
- ,G_TIME_HH _ // 時
- ,G_TIME_NN _ // 分
- ,G_TIME_SS ) _ // 秒
- +", "+sData
- RESULT = AddLineToClosingFile(GET_CUR_DIR, pub_scriptname_without_ext, "txt", sLogLine)
- FEND
- FUNCTION DateTimeFormat1(y, m, d, h, n, s)
- DEF_DLL wsprintfA(var STRING,STRING,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD):int:user32.dll
- DIM f = " "
- wsprintfA(f,"%04d/%02d/%02d %02d:%02d:%02d", y, m, d, h, n, s)
- RESULT=f
- FEND
- ///====================================
- /// LogTool0.uws ///====================================
- FUNCTION AddLineToClosingFile0(path, name, ext, data)
- RESULT = FALSE
- DIM sLogNameExt = name+"."+ext
- DIM idFile
- DIM cnt = 0
- WHILE 1
- idFile = FOPEN( path+"\"+ sLogNameExt, F_READ or F_WRITE )
- IFB -1 = idFile THEN
- cnt = cnt+1
- sLogNameExt = name+"."+cnt+ "."+ext
- ELSE
- // open success
- BREAK
- ENDIF
- IFB 9<cnt THEN
- EXIT
- ENDIF
- WEND
- FPUT(idFile, data)
- FCLOSE( idFile )
- RESULT = TRUE
- FEND
- FUNCTION AddToLog0(sData)
- RESULT = 0
- DIM path = GET_CUR_DIR
- DIM name = pub_scriptname_without_ext + "0"
- DIM ext = "txt"
- GETTIME( )
- DIM sLogLine = "" + ZeroFilltoDigit(G_TIME_YY, 4) _ // 年
- +"/" + ZeroFilltoDigit(G_TIME_MM, 2) _ // 月
- +"/" + ZeroFilltoDigit(G_TIME_DD, 2) _ // 日
- +" " + ZeroFilltoDigit(G_TIME_HH, 2) _ // 時
- +":" + ZeroFilltoDigit(G_TIME_NN, 2) _ // 分
- +":" + ZeroFilltoDigit(G_TIME_SS, 2) _ // 秒
- +", "+sData
- RESULT = AddLineToClosingFile0(path, name, ext, sLogLine)
- FEND
- FUNCTION ZeroFilltoDigit(n, digit)
- RESULT = REPLACE(FORMAT(n, digit)," ", "0")
- FEND
- ///====================================
- /// Win32api_Kernel32.uws ///====================================
- PUBLIC HANDLE_IS_LONG=0
- // 0 でHANDLE は DWORD
- // 1 でHANDLE は LONG
- // 本来HANDLE は LONG_PTR
- //DWORD GetLastError(VOID);
- //Kernel32.lib
- DEF_DLL GetLastError( ):DWORD:Kernel32.dll
- //BOOL CloseHandle(
- // HANDLE hObject // オブジェクトのハンドル
- //);
- //Kernel32.lib
- // CloseHandle()はファイル専用の関数ではないことに注意
- IFB 0=HANDLE_IS_LONG THEN
- DEF_DLL CloseHandle(DWORD):BOOL:Kernel32.dll
- ELSE
- DEF_DLL CloseHandle(LONG):BOOL:Kernel32.dll
- ENDIF
- //HANDLE CreateFile(
- // LPCTSTR lpFileName, // ファイル名
- // DWORD dwDesiredAccess, // アクセスモード
- // DWORD dwShareMode, // 共有モード
- // LPSECURITY_ATTRIBUTES lpSecurityAttributes, // セキュリティ記述子
- // DWORD dwCreationDisposition, // 作成方法
- // DWORD dwFlagsAndAttributes, // ファイル属性
- // HANDLE hTemplateFile // テンプレートファイルのハンドル
- //);
- //Kernel32.lib
- //#define GENERIC_READ (0x80000000L)
- //#define GENERIC_WRITE (0x40000000L)
- //#define FILE_SHARE_READ (0x00000001) /* from WINNT.H */
- //#define FILE_SHARE_WRITE (0x00000002) /* from WINNT.H */
- //#define CREATE_NEW 1
- //#define CREATE_ALWAYS 2
- //#define OPEN_EXISTING 3
- //#define OPEN_ALWAYS 4
- //#define TRUNCATE_EXISTING 5
- //#define FILE_ATTRIBUTE_READONLY 0x00000001
- //#define FILE_ATTRIBUTE_HIDDEN 0x00000002
- //#define FILE_ATTRIBUTE_SYSTEM 0x00000004
- //#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
- //#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
- //#define FILE_ATTRIBUTE_DEVICE 0x00000040
- //#define FILE_ATTRIBUTE_NORMAL 0x00000080
- //#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
- //#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
- //#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
- //#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
- //#define FILE_ATTRIBUTE_OFFLINE 0x00001000
- //#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
- //#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
- //#define FILE_ATTRIBUTE_VIRTUAL 0x00010000
- //
- // File creation flags must start at the high end since they
- // are combined with the attributes
- //
- //#define FILE_FLAG_WRITE_THROUGH 0x80000000
- //#define FILE_FLAG_OVERLAPPED 0x40000000
- //#define FILE_FLAG_NO_BUFFERING 0x20000000
- //#define FILE_FLAG_RANDOM_ACCESS 0x10000000
- //#define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000
- //#define FILE_FLAG_DELETE_ON_CLOSE 0x04000000
- //#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000
- //#define FILE_FLAG_POSIX_SEMANTICS 0x01000000
- //#define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000
- //#define FILE_FLAG_OPEN_NO_RECALL 0x00100000
- //#define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000
- PUBLIC INVALID_HANDLE_VALUE
- IFB 0=HANDLE_IS_LONG THEN
- DEF_DLL CreateFileA(STRING, DWORD, DWORD, DWORD, DWORD, DWORD, LONG):DWORD:Kernel32.dll
- DEF_DLL CreateFileW(Wstring, DWORD, DWORD, DWORD, DWORD, DWORD, LONG):DWORD:Kernel32.dll
- //エラー時戻り値 = 4294967295($FFFFFFFF)
- INVALID_HANDLE_VALUE = $FFFFFFFF
- // SDK では
- // #define INVALID_HANDLE_VALUE ((HANDLE)((LONG_PTR)-1))
- ELSE
- DEF_DLL CreateFileA(STRING, DWORD, DWORD, DWORD, DWORD, DWORD, LONG):LONG:Kernel32.dll
- DEF_DLL CreateFileW(Wstring, DWORD, DWORD, DWORD, DWORD, DWORD, LONG):LONG:Kernel32.dll
- //エラー時戻り値 = -1($FFFFFFFFFFFFFFFF)
- INVALID_HANDLE_VALUE = -1
- // SDK では
- // #define INVALID_HANDLE_VALUE ((HANDLE)((LONG_PTR)-1))
- ENDIF
- // for CreateFile()
- CONST GENERIC_READ = $80000000
- CONST GENERIC_WRITE = $40000000
- CONST FILE_SHARE_READ = $00000001
- CONST FILE_SHARE_WRITE = $00000002
- CONST CREATE_NEW = 1
- CONST CREATE_ALWAYS = 2
- CONST OPEN_EXISTING = 3
- CONST OPEN_ALWAYS = 4
- CONST TRUNCATE_EXISTING = 5
- CONST FILE_ATTRIBUTE_READONLY = $00000001
- CONST FILE_ATTRIBUTE_HIDDEN = $00000002
- CONST FILE_ATTRIBUTE_SYSTEM = $00000004
- CONST FILE_ATTRIBUTE_DIRECTORY = $00000010
- CONST FILE_ATTRIBUTE_ARCHIVE = $00000020
- CONST FILE_ATTRIBUTE_DEVICE = $00000040
- CONST FILE_ATTRIBUTE_NORMAL = $00000080
- CONST FILE_ATTRIBUTE_TEMPORARY = $00000100
- CONST FILE_ATTRIBUTE_SPARSE_FILE = $00000200
- CONST FILE_ATTRIBUTE_REPARSE_POINT = $00000400
- CONST FILE_ATTRIBUTE_COMPRESSED = $00000800
- CONST FILE_ATTRIBUTE_OFFLINE = $00001000
- CONST FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000
- CONST FILE_ATTRIBUTE_ENCRYPTED = $00004000
- CONST FILE_ATTRIBUTE_VIRTUAL = $00010000
- CONST FILE_FLAG_WRITE_THROUGH = $80000000
- CONST FILE_FLAG_OVERLAPPED = $40000000
- CONST FILE_FLAG_NO_BUFFERING = $20000000
- CONST FILE_FLAG_RANDOM_ACCESS = $10000000
- CONST FILE_FLAG_SEQUENTIAL_SCAN = $08000000
- CONST FILE_FLAG_DELETE_ON_CLOSE = $04000000
- CONST FILE_FLAG_BACKUP_SEMANTICS = $02000000
- CONST FILE_FLAG_POSIX_SEMANTICS = $01000000
- CONST FILE_FLAG_OPEN_REPARSE_POINT = $00200000
- CONST FILE_FLAG_OPEN_NO_RECALL = $00100000
- CONST FILE_FLAG_FIRST_PIPE_INSTANCE = $00080000
- DEF_DLL WriteFile(DWORD, var DWORD, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
- DEF_DLL ReadFile(DWORD, var DWORD, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
- DEF_DLL DeleteFileA(STRING):BOOL:Kernel32.dll
- DEF_DLL DeleteFileW(WSTRING):BOOL:Kernel32.dll
- DEF_DLL CreateDirectoryA(STRING,DWORD):BOOL:Kernel32.dll
- DEF_DLL CreateDirectoryW(WSTRING,DWORD):BOOL:Kernel32.dll
- DEF_DLL SetFilePointer(DWORD,LONG,Var LONG,DWORD):DWORD:Kernel32.dll
- // for SetFilePointer()
- CONST FILE_BEGIN = 0
- CONST FILE_CURRENT = 1
- CONST FILE_END = 2
- // SetFilePointer() retuen
- CONST INVALID_SET_FILE_POINTER = $FFFFFFFF
- //typedef struct _FILETIME { /* ft */
- // DWORD dwLowDateTime;
- // DWORD dwHighDateTime;
- //} FILETIME;
- //typedef struct _SYSTEMTIME { /* st */
- // WORD wYear;
- // WORD wMonth;
- // WORD wDayOfWeek;
- // WORD wDay;
- // WORD wHour;
- // WORD wMinute;
- // WORD wSecond;
- // WORD wMilliseconds;
- //} SYSTEMTIME;
- //DWORD GetFileAttributes(
- // LPCTSTR lpFileName // ファイルまたはディレクトリの名前
- //);
- //Kernel32.lib
- DEF_DLL GetFileAttributes(STRING):DWORD:Kernel32.dll
- //DWORD GetFileSize(
- // HANDLE hFile, // ファイルのハンドル
- // LPDWORD lpFileSizeHigh // ファイルサイズの上位ワード
- //);
- //Kernel32.lib
- IFB 0=HANDLE_IS_LONG THEN
- DEF_DLL GetFileSize(DWORD, {DWORD}):DWORD:Kernel32.dll
- ELSE
- DEF_DLL GetFileSize(LONG, {DWORD}):DWORD:Kernel32.dll
- ENDIF
- //※4G以上のファイルサイズは2番めのパラメータの戻り値があるので注意
- //参照GetFileSizeEx
- //BOOL GetFileTime(
- // HANDLE hFile, // ファイルのハンドル
- // LPFILETIME lpCreationTime, // 作成日時
- // LPFILETIME lpLastAccessTime, // 最終アクセス日時
- // LPFILETIME lpLastWriteTime // 最終更新日時
- //);
- //Kernel32.lib
- IFB 0=HANDLE_IS_LONG THEN
- DEF_DLL GetFileTime(DWORD, {DWORD, DWORD}, {DWORD, DWORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
- ELSE
- DEF_DLL GetFileTime(LONG, {DWORD, DWORD}, {DWORD, DWORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
- ENDIF
- //BOOL FileTimeToLocalFileTime(
- // CONST FILETIME *lpFileTime, // 変換するべき UTC のファイル時刻
- // LPFILETIME lpLocalFileTime // 変換後のファイル時刻
- //);
- //Kernel32.lib
- DEF_DLL FileTimeToLocalFileTime({DWORD, DWORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
- //BOOL LocalFileTimeToFileTime(
- // CONST FILETIME *lpLocalFileTime, // ローカルのファイル時刻
- // LPFILETIME lpFileTime // UTC ファイル時刻
- //);
- //Kernel32.lib
- DEF_DLL LocalFileTimeToFileTime({DWORD, DWORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
- //BOOL SystemTimeToFileTime(
- // CONST SYSTEMTIME *lpSystemTime, // システム日時
- // LPFILETIME lpFileTime // ファイル時刻
- //);
- //Kernel32.lib
- DEF_DLL SystemTimeToFileTime({WORD,WORD,WORD,WORD,WORD,WORD,WORD,WORD}, {DWORD, DWORD}):BOOL:Kernel32.dll
- //BOOL FileTimeToSystemTime(
- // CONST FILETIME *lpFileTime, // 変換するべきファイル時刻
- // LPSYSTEMTIME lpSystemTime // システム日時が格納される構造体
- //);
- //Kernel32.lib
- DEF_DLL FileTimeToSystemTime({DWORD, DWORD}, {WORD,WORD,WORD,WORD,WORD,WORD,WORD,WORD}):BOOL:Kernel32.dll
- //DWORD GetEnvironmentVariable(
- // LPCTSTR lpName, // 環境変数の名前
- // LPTSTR lpBuffer, // 変数の値が格納されるバッファ
- // DWORD nSize // バッファのサイズ
- //);
- DEF_DLL GetEnvironmentVariableA(STRING, Var STRING, WORD ):DWORD:Kernel32.dll
- DEF_DLL GetEnvironmentVariableW(WSTRING, Var WSTRING, WORD ):DWORD:Kernel32.dll
- ///// Win32API エラー関連
- // for FormatMessage()
- // _Post_equals_last_error_ DWORD GetLastError();
- DEF_DLL GetLastError(VOID):DWORD:Kernel32.dll
- // DWORD FormatMessage(
- // DWORD dwFlags, /* ソースおよび処理オプション */
- // LPCVOID lpSource, /* ソース メッセージのアドレス */
- // DWORD dwMessageId, /* 要求するメッセージ識別子 */
- // DWORD dwLanguageId, /* 要求されたメッセージの言語識別子 */
- // LPTSTR lpBuffer, /* メッセージ バッファのアドレス */
- // DWORD nSize , /* メッセージ バッファの最大サイズ */
- // va_list *Arguments /* メッセージ挿入句の配列のアドレス */
- // );
- DEF_DLL FormatMessageA(DWORD,DWORD,DWORD,DWORD, Var STRING,DWORD,DWORD):DWORD:Kernel32.dll
- DEF_DLL FormatMessageW(DWORD,DWORD,DWORD,DWORD, Var WSTRING,DWORD,DWORD):DWORD:Kernel32.dll
- CONST FORMAT_MESSAGE_FROM_SYSTEM = $00001000
- CONST FORMAT_MESSAGE_IGNORE_INSERTS = $00000200
- ///====================================
- /// Win32_file.uws ///====================================
- call win32api_Kernel32.uws
- /////
- FUNCTION IsExistFileA(sFullpathName)
- DIM hFile = CreateFileA(sFullpathName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
- CloseHandle(hFile)
- RESULT = (INVALID_HANDLE_VALUE <> hFile)
- FEND
- FUNCTION IsExistFileW(sFullpathName)
- DIM hFile = CreateFileW(sFullpathName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
- CloseHandle(hFile)
- RESULT = (INVALID_HANDLE_VALUE <> hFile)
- FEND
- FUNCTION IsExistDirectoryA(sFullpathName)
- RESULT = IsExistFileA(sFullpathName+"\NUL")
- FEND
- FUNCTION IsExistDirectoryW(sFullpathName)
- RESULT = IsExistFileW(sFullpathName+"\NUL")
- FEND
- // 文字列を書き込む
- // hFile: CreateFile()でオープンされているファイルハンドル
- // str: () 書き込む文字列
- // nWrite:書き込み文字数
- // UWSCで 書き込むべきShift_JIS文字数はLENGTH()ではなくLENGTHB()なので注意
- // nResult:処理後書き込まれた文字数
- FUNCTION WriteFileStr(hFile, str, nWrite, var nResult)
- DEF_DLL WriteFile(DWORD, STRING, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
- RESULT = WriteFile(hFile, str, nWrite, nResult, 0)
- FEND
- // 文字列を読み込む
- // hFile: CreateFile()でオープンされているファイルハンドル
- // str: 読み込み先文字列 読み込むサイズ以上の文字数をセットして渡すこと
- // nWnRead:読み込み文字数
- // UWSCで 読み込むべきShift_JIS文字数はLENGTH()ではなくLENGTHB()なので注意
- // nResult:処理後読み込まれた文字数
- FUNCTION ReadFileStr(hFile, var str, nRead, var nResult)
- DEF_DLL ReadFile(DWORD, var STRING, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
- DIM n
- DIM buf = str
- FOR n=1 TO nRead-LENGTHB(str)
- buf = buf + " "
- NEXT
- RESULT = ReadFile(hFile, buf, nRead, nResult, 0)
- str = COPYB(buf, 1, nResult)
- FEND
- // 数値を1~4バイト分書き込む
- // hFile: CreateFile()でオープンされているファイルハンドル
- // num4B:書き込む数値
- // UNSIGNED_LONG(DWRD) の FFFFFFFF は4294967295 なのでそれより大きな値は変化することに注意
- // 負数はLONG_MIN = -2147483648 までは書き込み可能だが読み込み時に注意が必要
- // 読み出し時には符号なしLONGとして読み込まれるため符号付きに変換する必要がある
- // wsprintfA(buffer,"%ld",number);signed_number = VAL(buffer)などとすることで可能
- // (wsprintfA()はuser32.dllの関数)
- // nWrite : 書き込みバイト数 1~4
- // num4B が $01234567 のとき
- // nWrite=1 なら 67、2なら 4567、3なら 234567 の部分が書き込まれる
- // ファイルには上位バイトと下位バイト、上位ワードと下位ワードが逆転して書き込まれる点に注意
- // $01234567 を1から4バイト書き込んだときのイメージは
- // 「67」, 「67 45」, 「67 45 23」, 「67 45 23 01」
- FUNCTION WriteFileNum4B(hFile, var num4B, nWrite, var nResult)
- DEF_DLL WriteFile(DWORD, var DWORD, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
- IFB 0 > nWrite THEN
- nWrite = 0
- ELSEIF 4 < nWrite THEN
- nWrite = 4
- ENDIF
- RESULT = WriteFile(hFile, num4B, nWrite, nResult, 0)
- FEND
- // 負数はLONG_MIN = -2147483648 までは書き込み可能だが読み込み時に注意が必要
- // 読み出し時には符号なしLONGとして読み込まれるため符号付きに変換する必要がある
- // wsprintfA(buffer,"%ld",number);signed_number = VAL(buffer)などとすることで可能
- // (wsprintfA()はuser32.dllの関数)
- // 数値を1~4バイト分読み込む
- // nRead : 1-4
- FUNCTION ReadFileNum4B(hFile, var num4B, nRead, var nResult)
- DEF_DLL ReadFile(DWORD, var DWORD, DWORD,var DWORD,DWORD):BOOL:Kernel32.dll
- IFB 0 > nRead THEN
- nRead = 0
- ELSEIF 4 < nRead THEN
- nRead = 4
- ENDIF
- num4B = 0
- RESULT = ReadFile(hFile, num4B, nRead, nResult, 0)
- FEND
- ///====================================
- /// Win32_error.uws ///====================================
- call win32api_Kernel32.uws
- FUNCTION MessageIfErrorOccurred( point = "", condition = TRUE)
- DIM nError = GetLastError()
- IFB TRUE = condition AND 0 < nError THEN
- MSGBOX(point +" error:"+nError+"(0x"+FORMAT(nError,1,-1)+")<#CR>"+ GetErrorMessage(nError))
- ENDIF
- RESULT = nError
- FEND
- FUNCTION GetErrorMessage(iErrorNumber)
- DIM strErrorMessage="000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"+_
- "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"+_
- "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM+FORMAT_MESSAGE_IGNORE_INSERTS, 0, iErrorNumber, 0, strErrorMessage, 300, 0)
- RESULT=strErrorMessage;
- FEND
- ///====================================
Add Comment
Please, Sign In to add comment