Lefiya Posted May 31, 2019 Share Posted May 31, 2019 (edited) If NOT $abb = 0 THe MSGBOX(0,0,'test') FileChangeDir(@ScriptDir) #NoTrayIcon #RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Version=Beta #AutoIt3Wrapper_Icon=C:\Program Files (x86)\AutoIt3\Aut2Exe\Icons\icon.ico #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_Res_Comment=三益釀造-客戶資料管理系統 #AutoIt3Wrapper_Res_Description=三益釀造-客戶資料管理系統 #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y #AutoIt3Wrapper_Res_LegalCopyright=Copyright © 2008-2017 sanyi.com.tw 版權所有。保留一切權利。 #AutoIt3Wrapper_Res_Language=1028 #AutoIt3Wrapper_Res_requestedExecutionLevel=highestAvailable #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** 好的代碼: expandcollapse popup#include <Date.au3> 昏暗的$ code ='' $ code&='“use strict”; var sjcl = {cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function (a){this.toString = function(){return“CORRUPT:”+ this.message}; this.message = a},invalid:function(a){this.toString = function(){return“INVALID:” + this.message}; this.message = a},bug:function(a){this.toString = function(){return“BUG:”+ this.message}; this.message = a},notReady:function( a){this.toString = function(){return“NOT READY:”+ this.message}; this.message = a}}};' $ code&='“undefined”!= typeof module && module.exports &&(module.exports = sjcl);' $ code&='sjcl.bitArray = {bitSlice:function(a,b,c){a = sjcl.bitArray.g(a.slice(b / 32),32-(b&31))。slice(1); return void 0 === c?a:sjcl.bitArray.clamp(a,cb)},extract:function(a,b,c){var d = Math.floor(-bc&31); return((b + c) -1 ^ b) - 32 [b / 32 | 0] << 32-d ^ A [b / 32 + 1 | 0] >>> d:一個並[b / 32 | 0] >>> d? )&(1 << c)-1},concat:function(a,b){if(0 === a.length || 0 === b.length)返回a.concat(b); var c = a [a.length-1],d = sjcl.bitArray.getPartial(c);返回32 === d?a.concat(b):sjcl.bitArray.g(b,d,c | 0,a .slice(0,a.length-1))},bitLength:function(a){var b = a.length; return 0 ===' $ code&='b?0:32 *(b-1)+ sjcl.bitArray.getPartial(a [b-1])},clamp:function(a,b){if(32 * a.length <b )返回a; a = a.slice(0,Math.ceil(b / 32)); var c = a.length; b&= 31; 0 <c && b &&(a [c-1] = sjcl.bitArray.partial( b,a [c-1]&2147483648 >> b-1,1));返回a},partial:function(a,b,c){return 32 === a?b:(c?b | 0: b << 32-a)+ 0x10000000000 * a},getPartial:function(a){return Math.round(a / 0x10000000000)|| 32},equal:function(a,b){if(sjcl.bitArray.bitLength) (a)!== sjcl.bitArray.bitLength(b))return!1; var c = 0,d; for(d = 0; d <a.length; d ++)c | = a [d] ^ b [ d];返回0 ===' $ code&='c},g:function(a,b,c,d){var e; e = 0; for(void 0 === d &&(d = []); 32 <= b; b- = 32)d.push(c),c = 0; if(0 === b)返回d.concat(a); for(e = 0; e <a.length; e ++)d.push(c |一個並[e] >>> b),C = A [E] << 32-b; E =則為a.length一個[則為a.length-1]:0; A = sjcl.bitArray.getPartial(E); d.push(sjcl.bitArray.partial(b + a&31,32 <b + a?c:d.pop(),1)); return d},j:function(a,b){return [a [0 ] ^ b [0],A [1] ^ b [1],A [2] ^ b [2],[3] ^ b [3]]}};' $ code&='sjcl.codec.base32 = {e:“ABCDEFGHIJKLMNOPQRSTUVWXYZ234567”,fromBits:function(a,b){var c =“”,d,e = 0,g = sjcl.codec.base32.e,f = 0,K = sjcl.bitArray.bitLength(A);對於(d = 0; 5 * c.length <K)C + = g.charAt((F ^ A [d] >>> E)>>> ?27),5> E(F = A [d] << 5-E,E + = 27,d ++):(˚F<< = 5,E-= 5);對於(;!c.length&5 && b;) c + =“=”;返回c},toBits:function(a){a = a.replace(/ \ s | = / g,“”)。toUpperCase(); var b = [],c,d = 0 ,E = sjcl.codec.base32.e,G = 0,F;對於(C = 0;ç<則為a.length; C ++){F = e.indexOf(a.charAt(c)中);如果(0> f)拋出新的sjcl.exception.invalid(“這不是base32!”); 27 <d?(d- =' $ code&='27,b.push(g ^ f >>> d),g = f << 32-d):( d + = 5,g ^ = f << 32-d)} d&56 && b.push( sjcl.bitArray.partial(d&56,g,1)); return b}}; sjcl.hash.sha1 = function(a){a?(this.d = adslice(0),this.b = abslice(0) ,this.a = aa):this.reset()}; sjcl.hash.sha1.hash = function(a){return(new sjcl.hash.sha1).update(a).finalize()};' $ code&='sjcl.hash.sha1.prototype = {blockSize:512,reset:function(){this.d = this.h.slice(0); this.b = []; this.a = 0; return this},update:function(a){“string”=== typeof a &&(a = sjcl.codec.utf8String.toBits(a)); var b,c = this.b = sjcl.bitArray.concat(this .B,A); b = this.a; A = this.a = b + sjcl.bitArray.bitLength(A);對於(b = this.blockSize + b&-this.blockSize,b <= A; b + = this.blockSize)n(this,c.splice(0,16)); return this},finalize:function(){var a,b = this.b,c = this.d,b = sjcl.bitArray.concat (b,[sjcl.bitArray.partial(1,1)]);用於:(a = b.length個+ 2; A&15; ++)b.push(0);' $ code&='b.push(Math.floor(this.a / 0x100000000)); for(b.push(this.a | 0); b.length;)n(this,b.splice(0,16) )); this.reset(); return c},h:[1732584193,4023233417,2562383102,271733878,3285377520],i:[1518500249,1859775393,2400959708,3395469782]};' $ code&='function n(a,b){var c,d,e,g,f,k,m,l = b.slice(0),h = ad; e = h [0]; g = H [1]; F = H [2]; K為H [3]; M = H [4];對於(C = 0; 79> = C; C ++)16 <= C &&(升[C] =(升[C-3] ^ L [C-8] ^升並[c-14] ^升並[c-16])<< 1 |(L [C-3] ^ L [C-8] ^升並[c -14] ^升並[c-16])>>> 31),d = 19> = C G&F |〜克&K:39> = C G ^ F ^ K:?59> = C G&F | G&K | F&K :79> = c?g ^ f ^ k:void 0,d =(e << 5 | e >>> 27)+ d + m + l [c] + ai [Math.floor(c / 20)] | 0,M = K,K = F,F = G << 30 | G 2 >>>,G = E,E = d; H [0] = H [0] + E | 0; H [1] = H [1] + G | 0; H [2] = H [2] + F | 0; H [3] = H [3] + K | 0; H [4] = H [4] + M | 0}“ $ code&='sjcl.misc.hmac = function(a,b){this.f = b = b || sjcl.hash.sha256; var c = [[],[]],d,e = b。 prototype.blockSize / 32; this.c = [new b,new b]; a.length> e &&(a = b.hash(a)); for(d = 0; d <e; d ++)c [0] [d] = A [d] ^ 909522486,C [1] [d] = A [d] ^ 1549556828; this.c [0] .update(C [0]); this.c [1] .update( c [1])}; sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function(a){a =(new this.f(this.c [0]))。update (a).finalize(); return(new this.f(this.c [1]))。update(a).finalize()};' $ code&='function HOTP(K,C)' $ code&='{' $ code&='var key = sjcl.codec.base32.toBits(K);' $ code&='var count = [((C&0xffffffff00000000)>> 32),C&0xffffffff];' $ code&='var otplength = 6;' $ code&='var hmacsha1 = new sjcl.misc.hmac(key,sjcl.hash.sha1);' $ code&='var code = hmacsha1.encrypt(count);' $ code&='var offset = sjcl.bitArray.extract(code,152,8)&0x0f;' $ code&='var startBits = offset * 8;' $ code&='var endBits = startBits + 4 * 8;' $ code&='var slice = sjcl.bitArray.bitSlice(code,startBits,endBits);' $ code&='var dbc1 = slice [0];' $ code&='var dbc2 = dbc1&0x7fffffff;' $ code&='var otp = dbc2%Math.pow(10,otplength);' $ code&='var result = otp.toString();' $ code&='while(result.length <otplength)' $ code&='{' $ code&=“result ='0'+結果;” $ code&='}' $ code&='返回結果;' $ code&='}' 昏暗$ K ='LFLFMU2SGVCUIUCZKBMEKRKLIQ' Dim $ unixTime = _GetUnixTimeUTC() Dim $ counter = Int($ unixTime)/ 30 昏暗$ C =樓層($ counter) $ nJS = ObjCreate(“MSScriptControl.ScriptControl”) $ nJS.language =“JavaScript” $ nJS.addcode($代碼) $ nRegCreatePng = $ nJS.eval('HOTP(“'&$ K&'”,“'&$ C&'”)') MSGBOX(0,0,$ nRegCreatePng) Func _GetUnixTimeUTC() ; 返回自EPOCH以來的UTC秒數 本地$ aSysTimeInfo = _Date_Time_GetTimeZoneInformation() 本地$ utcTime =“” 本地$ sDate = _NowCalc() 如果$ aSysTimeInfo [0] = 2那麼 $ utcTime = _DateAdd('n',$ aSysTimeInfo [1] + $ aSysTimeInfo [7],$ sDate) 其他 $ utcTime = _DateAdd('n',$ aSysTimeInfo [1],$ sDate) 萬一 返回_DateDiff('s',“1970/01/01 00:00:00”,$ utcTime) ENDFUNC =============================================== 你好, 我怎樣才能在au3中使用這個js來創建totp?(沒有HTML,沒有hotp) 我嘗試使用JS但錯誤... 非常感謝〜 --------------- JavaScript的創建TOTP sjcl.js “嚴格使用”; var sjcl = {cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this .toString = function( ){return“CORRUPT:”+ this.message}; this.message = a},invalid:function(a){this.toString = function(){return“INVALID:”+ this.message}; this.message = a},bug:function(a){this.toString = function(){return“BUG:”+ this.message}; this.message = a},notReady:function(a){this。toString = function(){return“NOT READY:”+ this.message}; this.message = a}}}; “undefined”!= typeof module && module.exports &&(module.exports = sjcl); sjcl.bitArray = {bitSlice:function(a,b,c){a = sjcl.bitArray.g(a.slice(b / 32),32-(b&31))。slice(1); return void 0 == = c?a:sjcl.bitArray.clamp(a,cb)},extract:function(a,b,c){var d = Math.floor(-bc&31); return((b + c-1 ^ b) &-32一個並[b / 32 | 0] << 32-d ^ A [b / 32 + 1 | 0] >>> d:一個並[b / 32 | 0] >>> d)&(1 < <c)-1},concat:function(a,b){if(0 === a.length || 0 === b.length)返回a.concat(b); var c = a [a。 length-1],d = sjcl.bitArray.getPartial(c); return 32 === d?a.concat(b):sjcl.bitArray.g(b,d,c | 0,a.slice(0, a.length-1))},bitLength:function(a){var b = a.length; return 0 === b?0:32 *(b-1)+ sjcl.bitArray.getPartial(a [b-1])},clamp:function(a,b){if(32 * a.length <b)返回a; a = a.slice(0,Math.ceil(b / 32)); var c = a.length; b&= 31; 0 <c && b &&(a [c-1] = sjcl.bitArray.partial(b,a [c -1]&2147483648 >> b-1,1));返回a},partial:function(a,b,c){return 32 === a?b:(c?b | 0:b << 32- a)+ 0x10000000000 * a},getPartial:function(a){return Math.round(a / 0x10000000000)|| 32},等於:function(a,b){if(sjcl.bitArray.bitLength(a)!= = sjcl.bitArray.bitLength(b))return!1; var c = 0,d; for(d = 0; d <a.length; d ++)c | = a [d] ^ b [d];返回0 === c},g:函數(a,b,c,d){var e; e = 0; for(void 0 === d &&(d = []); 32 <= b; b- = 32)d。 push(c),c = 0; if(0 === b)返回d.concat(a); for(e = 0; e <a.length; e ++)d.push(c | a [e]> >> b),C = A [E] << 32-b; E =則為a.length一個[則為a.length-1]:0; A = sjcl.bitArray.getPartial(E); d.push(sjcl .bitArray.partial(b + a&31,32 <b + a?c:d.pop(),1)); return d},j:function(a,b){return [a [0] ^ b [0 ],A [1] ^ b [1],A [2] ^ b [2],[3] ^ b [3]]}}; sjcl.codec.base32 = {e:“ABCDEFGHIJKLMNOPQRSTUVWXYZ234567”,fromBits:function(a,b){var c =“”,d,e = 0,g = sjcl.codec.base32.e,f = 0,k = sjcl.bitArray.bitLength(A);對於(d = 0; 5 * c.length <K)C + = g.charAt((F ^ A [d] >>> E)>>> 27),5> ΔE(F = A [d] << 5-E,E + = 27,d ++):(˚F<< = 5,E-= 5);對於(; c.length&5 && b;!)C + =“=” ; return c},toBits:function(a){a = a.replace(/ \ s | = / g,“”)。toUpperCase(); var b = [],c,d = 0,e = sjcl。 codec.base32.e,g = 0,f; for(c = 0; c <a.length; c ++){f = e.indexOf(a.charAt(c)); if(0> f)拋出新的sjcl .exception.invalid(“這不是base32!”); 27 <d?(d- = 27,b.push(克^ F >>> d)中,g = F << 32-d):( d + = 5,G ^ = F << 32-d)} d&56 && b.push(sjcl.bitArray.partial (d&56,g,1)); return b}}; sjcl.hash.sha1 = function(a){a?(this.d = adslice(0),this.b = abslice(0),this.a = aa):this.reset()}; sjcl.hash.sha1.hash = function(a){return(new sjcl.hash.sha1).update(a).finalize()}; sjcl.hash.sha1.prototype = {blockSize:512,reset:function(){this.d = this.h.slice(0); this.b = []; this.a = 0; return this},update :function(a){“string”=== typeof a &&(a = sjcl.codec.utf8String.toBits(a)); var b,c = this.b = sjcl.bitArray.concat(this.b,a) ; b = this.a; A = this.a = b + sjcl.bitArray.bitLength(A);對於(b = this.blockSize + b&-this.blockSize,b <= A; b + = this.blockSize)N (this,c.splice(0,16)); return this},finalize:function(){var a,b = this.b,c = this.d,b = sjcl.bitArray.concat(b,[sjcl .bitArray.partial(1,1)]);用於:(a = b.length個+ 2; A&15; ++)b.push(0); b.push(Math.floor(this.a / 0x100000000));對於(b.push(this.a | 0); b.length個;)N(此,b.splice(0,16));此。 reset(); return c},h:[1732584193,4023233417,2562383102,271733878,3285377520],i:[1518500249,1859775393,2400959708,3395469782]}; 函數n(a,b){var c,d,e,g,f,k,m,l = b.slice(0),h = ad; e = h [0]; g = h [1]; F = H [2]; K為H [3]; M = H [4];對於(C = 0; 79> = C; C ++)16 <= C &&(升並[c] =(L [C-3 ] ^ L [C-8] ^升並[c-14] ^升並[c-16])<< 1 |(L [C-3] ^ L [C-8] ^升並[c-14] ^升[C-16])>>> 31),d = 19> = C G&F |〜克&K:39> = C G ^ F ^ K:59> = C G&F | G&K | F&K:?79> = C ?g ^ f ^ k:void 0,d =(e << 5 | e >>> 27)+ d + m + l [c] + ai [Math.floor(c / 20)] | 0,m = K,K = F,F = G << 30 | G 2 >>>,G = E,E = d; H [0] = H [0] + E | 0; H [1] = H [1] + G | 0; H [2] = H [2] + F | 0; H [3] = H [3] + K | 0; H [4] = H [4] + M | 0} sjcl.misc.hmac = function(a,b){this.f = b = b || sjcl.hash.sha256; var c = [[],[]],d,e = b.prototype.blockSize / 32 ; this.c = [new b,new b]; a.length> e &&(a = b.hash(a)); for(d = 0; d <e; d ++)c [0] [d] = a [d] ^ 909522486,C [1] [d] = A [d] ^ 1549556828; this.c [0] .update(C [0]); this.c [1] .update(C [1]) sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function(a){a =(new this.f(this.c [0]))。update(a).finalize (); return(new this.f(this.c [1]))。update(a).finalize()}; totp.js expandcollapse popup(功能() { “嚴格使用”; / *全局文檔,sjcl * / 功能HOTP(K,C) { var key = sjcl.codec.base32.toBits(K); // Count是64位長。請注意JavaScript按位操作 //在這種情況下,MSB實際上是0。 var count = [((C&0xffffffff00000000)>> 32),C&0xffffffff]; var otplength = 6; var hmacsha1 = new sjcl.misc.hmac(key, sjcl.hash.sha1); var code = hmacsha1.encrypt(count); var offset = sjcl.bitArray.extract(code, 152, 8) & 0x0f; var startBits = offset * 8; var endBits = startBits + 4 * 8; var slice = sjcl.bitArray.bitSlice(code, startBits, endBits); var dbc1 = slice[0]; var dbc2 = dbc1 & 0x7fffffff; var otp = dbc2 % Math.pow(10, otplength); var result = otp.toString(); while (result.length < otplength) { result = '0' + result; } return result; } // // UI Functions // function GenerateHOTP() { var secret = document.getElementById('secret').value; var counterEl = document.getElementById('hotpcounter'); var counter = parseInt(counterEl.value, 10); var otp = HOTP(secret, counter); var passwordEl = document.getElementById('hotpresult'); while (passwordEl.hasChildNodes()) { passwordEl.removeChild(passwordEl.firstChild); } passwordEl.textContent = "HOTP: " + otp; counterEl.value = counter + 1; } function GenerateTOTP() { var secret = document.getElementById('secret').value; var ctime = Math.floor((new Date() - 0) / 30000); var counterEl = document.getElementById('totpcounter'); counterEl.value = ctime; var otp = HOTP(secret, ctime); var passwordEl = document.getElementById('totpresult'); while (passwordEl.hasChildNodes()) { passwordEl.removeChild(passwordEl.firstChild); } passwordEl.textContent = "TOTP: " + otp; } function ConfigureHandlers() { var el = document.getElementById('generateotp'); el.addEventListener('click', GenerateHOTP, false); setInterval(GenerateTOTP, 1000); GenerateHOTP(); GenerateTOTP(); } document.addEventListener('DOMContentLoaded', ConfigureHandlers, false); } )(); index.html expandcollapse popup<!DOCTYPE html> <html manifest="hotp.appcache"> <head> <meta charset="UTF-8"/> <title>HOTP/TOTP Demonstration</title> <script src="sjcl.js"></script> <script src="totp.js"></script> <style> label { display: inline-block; min-width: 12em; } input { min-width: 30em !important; } .hotpresult:before { content: "HOTP: "; } .totpresult:before { content: "TOTP: "; } </style> </head> <body> <form id="otpinputs"> <label for="secret">Secret (Base32)</label> <input id="secret" type="text" value="LFLFMU2SGVCUIUCZKBMEKRKLIQ"/> <br /> <label for="hotpcounter">HOTP Counter (next value)</label> <input id="hotpcounter" type="text" value="0"/> <br /> <label for="totpcounter">TOTP Counter</label> <input id="totpcounter" type="text" value=""/> </form> <button id="generateotp">Generate HOTP</button> <div id="hotpresult"> </div> <div id="totpresult"> </div> </body> </html> -------------------- my try code1: $nJS.addcode($code) $nJS^ ERROR expandcollapse popupMsgBox(0,0,Totp_JS('LFLFMU2SGVCUIUCZKBMEKRKLIQ')) Func Totp_JS($Key) Local $code $code &= '(function()' & @CRLF $code &= '{' & @CRLF $code &= '"use strict";' & @CRLF $code &= 'function GenerateTOTP()' & @CRLF $code &= '{' & @CRLF $code &= "var secret =" & $Key & ";" & @CRLF $code &= 'var ctime = Math.floor((new Date() - 0) / 30000);' & @CRLF $code &= "var counterEl = document.getElementById('totpcounter');" & @CRLF $code &= 'counterEl.value = ctime;' & @CRLF $code &= 'var otp = HOTP(secret, ctime);' & @CRLF $code &= "var passwordEl = document.getElementById('totpresult');" & @CRLF $code &= 'while (passwordEl.hasChildNodes())' & @CRLF $code &= '{' & @CRLF $code &= 'passwordEl.removeChild(passwordEl.firstChild);' & @CRLF $code &= '}' & @CRLF $code &= 'passwordEl.textContent = "TOTP: " + otp;' & @CRLF $code &= '}' & @CRLF $code &= 'function ConfigureHandlers()' & @CRLF $code &= '{' & @CRLF $code &= "var el = document.getElementById('generateotp');" & @CRLF $code &= "el.addEventListener('click', GenerateHOTP, false);" & @CRLF $code &= 'setInterval(GenerateTOTP, 1000);' & @CRLF $code &= 'GenerateTOTP();' & @CRLF $code &= '}' & @CRLF $code &= "document.addEventListener('DOMContentLoaded', ConfigureHandlers, false);" & @CRLF $code &= '}' & @CRLF $code &= ')();' & @CRLF $nJS = ObjCreate("ScriptControl") $nJS.language = "JavaScript" $nJS.addcode($code) $nTotp_JS = $nJS.Run("GenerateTOTP") Return $nTotp_JS EndFunc my try code2: $nJS.addcode($code) $nJS^ ERROR #include <Date.au3> Func js() Local $code ;;TOTP(K,C) ;;K = Key ;;C = (T - T0) / X ;;T = Unix ;; T0 = 0 ;; X = 30(秒) $ T = _DateDiff('s',“1970/01/01 08:00:00”,_ NowCalc()) $ X = 30 $ K ='LFLFMU2SGVCUIUCZKBMEKRKLIQ“ $ C = $ T / $ X. $ code = FileRead(“totp.js”) $ nJS = ObjCreate(“MSScriptControl.ScriptControl”) $ nJS.language =“JavaScript” $ nJS.addcode($代碼) $ nReg = $ nJS.eval('function HOTP(“'&$ K&'”,“'&$ C&'”)') 返回$ nReg ENDFUNC; ==> js MSGBOX(0,0,JS()) Edited September 20, 2019 by Lefiya Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted May 31, 2019 Moderators Share Posted May 31, 2019 Moved to the appropriate forum. Moderation Team Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Danp2 Posted May 31, 2019 Share Posted May 31, 2019 Maybe this will help you. Latest Webdriver UDF Release Webdriver Wiki FAQs Link to comment Share on other sites More sharing options...
Lefiya Posted June 1, 2019 Author Share Posted June 1, 2019 20 hours ago, Danp2 said: 也許這會對你有所幫助。 hi I have used this UDF But not working properly... Link to comment Share on other sites More sharing options...
Developers Jos Posted June 1, 2019 Developers Share Posted June 1, 2019 2 hours ago, Lefiya said: But not working properly... Which means what exactly? Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
Lefiya Posted June 1, 2019 Author Share Posted June 1, 2019 2 hours ago, Jos said: 這究竟是什麼意思? 喬斯 I mean, I use this UDF to create an OTP, but it produces a value that is not equal to the OTP 6 digits generated by the google authenticator. I also wrote a message below the article, but it still has not been resolved. So I want to call JS to complete it. Sorry, my English is not good, I am using GOOGLE translation... Link to comment Share on other sites More sharing options...
Developers Jos Posted June 1, 2019 Developers Share Posted June 1, 2019 3 minutes ago, Lefiya said: I am using GOOGLE translation... Understand, but please do not translate a quoted text as it doesn't make sense to the original poster anymore! SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now