Leaderboard
Popular Content
Showing content with the highest reputation on 11/07/2016 in all areas
-
How to append file path in Autoit
JLogan3o13 reacted to BrewManNH for a topic
Ignore the posts above, they're not helping you. You want to use EnvGet to retrieve an environment variable's value. So to get the value that qm_AttachmentsFile contains you'd use EnvGet("qm_AttachmentsFile") and that will return the value.1 point -
If you look at the Excel Constants it says: Edit: what are you looking for? Maybe some more info on the problem?1 point
-
1 point
-
Try this one: #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <WinAPIFiles.au3> #include <Array.au3> #include <File.au3> Example() Func Example() Local $aArray[16] $aArray[0] = ".asf" $aArray[1] = ".avi" $aArray[2] = ".divx" $aArray[3] = ".flv" $aArray[4] = ".mkv" $aArray[5] = ".mov" $aArray[6] = ".mp4" $aArray[7] = ".mpe" $aArray[8] = ".mpeg" $aArray[9] = ".mpg" $aArray[10] = ".ts" $aArray[11] = ".vob" $aArray[12] = ".wmv" $aArray[13] = ".xvid" $aArray[14] = ".h264" $aArray[15] = ".h265" For $vElement In $aArray $aFileList = _FileListToArray(@ScriptDir, "*" & $vElement) If @error Then ContinueLoop For $i = 1 To UBound($aFileList) - 1 Local $sFilePath = $aFileList[$i] & ".avs" If Not FileWrite($sFilePath, "LoadPlugin(" & '"' & "C:\Program Files (x86)\AviSynth+\plugins+\avssr.dll" & '"' & ")" & @CRLF) Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst writing the temporary file.") Return False EndIf Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND) If $hFileOpen = -1 Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst writing the temporary file2.") Return False EndIf FileWriteLine($hFileOpen, "# loading source: " & $aFileList[$i]) FileWriteLine($hFileOpen, "FFVideoSource(" & '"' & $aFileList[$i] & '"' & ")") FileWriteLine($hFileOpen, "dispWidth = 1920") FileWriteLine($hFileOpen, "dispHeight = 1080") FileWriteLine($hFileOpen, "mWidth = float(last.width)") FileWriteLine($hFileOpen, "mHeight = float(last.height)") FileWriteLine($hFileOpen, "ratio = (mWidth/mHeight)") FileWriteLine($hFileOpen, "newHeight= round(dispWidth/ratio)/2)*2") FileWriteLine($hFileOpen, "newHeight > dispHeight ? Eval(" & '"""') FileWriteLine($hFileOpen, "newHeight=dispHeight") FileWriteLine($hFileOpen, "newWidth=round((newHeight*ratio)/2)*2") FileWriteLine($hFileOpen, '"""' & ") : Eval(" & '"""') FileWriteLine($hFileOpen, "newWidth=dispWidth") FileWriteLine($hFileOpen, '"""' & ")") FileWriteLine($hFileOpen, "SR(newWidth,newHeight)") Next Next EndFunc ;==>Example EDIT: Use this one!1 point
-
I know it... Isn't it the behavior you wanted? EDIT: If you want to have an .avs file per selected file, you just have to include the script in a loop: For $i = 1 To $CmdLine[0] $sFilePath = $CmdLine[$i] & ".avs" If Not FileWrite($sFilePath, "LoadPlugin(" & '"' & "C:\Program Files (x86)\AviSynth+\plugins+\avssr.dll" & '"' & ")" & @CRLF) Then MsgBox($MB_SYSTEMMODAL, "", "An error occurred whilst writing the temporary file.") Return False EndIf ;the rest of the script Next1 point
-
Enumeration
czardas reacted to JLogan3o13 for a topic
@iamtheky you deserve remuneration for that enumeration elucidation1 point -
and in the IT/scripting sense, the literal is the most apt. It is a list of things, one by one. And enum is even more literal in that it assigns numbers to those items, putting some numeration on your numeration.1 point
-
^^ AutoitObject isn't maintained. The version I tested with was compiled by @AdmiralAlkex and I think x64 version isn't working. I'm not sure if he changed some compile options or is it something else. You actually don't need AutoItObject for simple tasks like this, because ObjCreateInterface() exist for some time now, so you can write: #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <string.au3> #include <array.au3> Global $tMyObject Global $g_idGUIEdit ; read html page from bottom of this script ; and write it to a file on disk CreateHtmlPage() Example() Exit Func Example() Local $hGUIMain = GUICreate("Event Test", 1000, 600) $g_idGUIEdit = GUICtrlCreateEdit("", 500, 405, 490, 175) GUICtrlSetFont(-1, 9, 400, -1, 'Courier New') GUICtrlCreateLabel("Below are some Browser events 'captured' from the above web page by AutoIt", 500, 385, 990, 20) Local $idGUIExit = GUICtrlCreateButton(" Close and exit", 5, 580, 990, 15) Local $hButton1 = GUICtrlCreateButton("Add an Item to timeline", 10, 400, 150, 40) GUISetState() ;Show GUI ; We prepare the Internet Explorer as our test subject Global $oIE = ObjCreate("Shell.Explorer.2") $hIE = GUICtrlCreateObj($oIE, 5, 5, 990, 380) ; <- embedd $oIE in the AutoIt GUI ; load our web page, javascript and css in the browser ToolTip("...downloading javascript, please wait") $oIE.navigate('file:///' & @ScriptDir & '\Page.html') Sleep(1000) ; Give it some time to load the web page ToolTip("") Do ; wait for document Sleep(250) $oDocument = $oIE.document Until IsObj($oDocument) ; https://msdn.microsoft.com/en-us/library/52f50e9t(v=vs.94).aspx ; $ohJS is a reference to the javascript Global Obj ; ------------------------------------------------- Global $ohJS = $oIE.document.parentwindow.JSglobal $ohJS.AutoIt = __ObjectFromTag("__MyInterface_", "write hresult(bstr)", $tMyObject) ; --- Setup catch of events --- ; https://msdn.microsoft.com/en-us/library/aa769764(v=vs.85).aspx ; HTMLDocumentEvents2 interface (catch OnClick, OnMouseOver, .... etc Global $oEventObject = ObjEvent($oDocument, "IEEvent2_", "HTMLDocumentEvents2") ; OK, this events are catched ; Attempt to catch events fired by the DataSet. ; items is the DataSet obj created in the Browser ;~ Global $oEventObject = ObjEvent($ohJS.items);, "OnDataSet_") ; ???? how to catch events from the DataSet <---- ????? ; ----------------------------- ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idGUIExit ExitLoop Case $hButton1 ; add a job to the timeline (a simple example just to test) ; to generate a unique ID I use the following: @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & @MSEC Local $result = $ohJS.eval("items.add([{id: " & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & @MSEC & ", content: '<b>item 4</b> Added at " & @HOUR & ":" & @MIN & ":" & @SEC & " ', start: '2014-01-19'}]);") ConsoleWrite("DataSet now contains " & $ohJS.items.length & " Items" & @CRLF) EndSwitch WEnd ; the end $oEventObject.Stop ; Tell IE we don't want to receive events. $oEventObject = 0 ; Kill the Event Object $oIE = 0 ; Remove IE from memory (not really necessary). ;__DeleteObjectFromTag($tMyObject) ; also not really necessary GUIDelete($hGUIMain) ; Remove GUI EndFunc ;==>Example ; --- event management zone --- ; A few Internet Explorer Event Functions ; below function are fired by events occurred in the browser Volatile Func IEEvent2_onClick($oEvent) ConsolePrint("mouse click: " & $oEvent.clientX & ',' & $oEvent.clientY & ' on ' & $oEvent.srcElement.NodeName & ' - ' & $oEvent.srcElement.ID) EndFunc ;==>IEEvent2_onClick Volatile Func IEEvent2_onDblClick($oEvent) ConsolePrint("mouse DoubleClick: @" & $oEvent.clientX & ',' & $oEvent.clientY) EndFunc ;==>IEEvent2_onDblClick Volatile Func OnDataSet_add($oEvent) ConsolePrint("!!!! event from DataSet " & IsObj($oEvent)) ; type EndFunc ;==>OnDataSet_add Func ConsolePrint($sMsg) Local Const $iMaxLines = 9 ; keep last 12 lines only $sMsg = @HOUR & ':' & @MIN & ':' & @SEC & ':' & @MSEC & @TAB & $sMsg & @CRLF $sMsg = StringReplace(GUICtrlRead($g_idGUIEdit) & $sMsg, @CR, @CR) If @extended > $iMaxLines Then ; more than $iMaxLines $sMsg = StringMid($sMsg, StringInStr($sMsg, @CR, 0, -1 * $iMaxLines) + 2) EndIf GUICtrlSetData($g_idGUIEdit, $sMsg) EndFunc ;==>ConsolePrint Func CreateHtmlPage() Local $sStart = @LF & "#cs;HTML" Local $sEnd = "#ce;HTML" & @CR Local $aArray = _StringBetween(FileRead(@ScriptFullPath), $sStart, $sEnd) Local $sPage = @ScriptDir & '\Page.html' Local $hFile = FileOpen($sPage, 2) ; $FO_OVERWRITE (2) = Write mode (erase previous contents) FileWrite($hFile, $aArray[0]) FileFlush($hFile) FileClose($hFile) EndFunc ;==>CreateHtmlPage Func __ObjectFromTag($sFunctionPrefix, $tagInterface, ByRef $tInterface, $bIsUnknown = Default, $sIID = "{00000000-0000-0000-C000-000000000046}") ; last param is IID_IUnknown by default If $bIsUnknown = Default Then $bIsUnknown = True Local $sInterface = $tagInterface ; copy interface description Local $tagIUnknown = "QueryInterface hresult(ptr;ptr*);" & _ "AddRef dword();" & _ "Release dword();" ; Adding IUnknown methods If $bIsUnknown Then $tagInterface = $tagIUnknown & $tagInterface ; Below line is really simple even though it looks super complex. It's just written weird to fit in one line, not to steal your attention Local $aMethods = StringSplit(StringTrimRight(StringReplace(StringRegExpReplace(StringRegExpReplace($tagInterface, "\w+\*", "ptr"), "\h*(\w+)\h*(\w+\*?)\h*(\((.*?)\))\h*(;|;*\z)", "$1\|$2;$4" & @LF), ";" & @LF, @LF), 1), @LF, 3) Local $iUbound = UBound($aMethods) Local $sMethod, $aSplit, $sNamePart, $aTagPart, $sTagPart, $sRet, $sParams, $hCallback ; Allocation $tInterface = DllStructCreate("int RefCount;int Size;ptr Object;ptr Methods[" & $iUbound & "];int_ptr Callbacks[" & $iUbound & "];ulong_ptr Slots[16]") ; 16 pointer sized elements more to create space for possible private props If @error Then Return SetError(1, 0, 0) For $i = 0 To $iUbound - 1 $aSplit = StringSplit($aMethods[$i], "|", 2) If UBound($aSplit) <> 2 Then ReDim $aSplit[2] $sNamePart = $aSplit[0] ; Replace COM types by matching dllcallback types $sTagPart = StringReplace(StringReplace(StringReplace(StringReplace($aSplit[1], "object", "idispatch"), "hresult", "long"), "bstr", "ptr"), "variant", "ptr") $sMethod = $sFunctionPrefix & $sNamePart $aTagPart = StringSplit($sTagPart, ";", 2) $sRet = $aTagPart[0] $sParams = StringReplace($sTagPart, $sRet, "", 1) $sParams = "ptr" & $sParams $hCallback = DllCallbackRegister($sMethod, $sRet, $sParams) DllStructSetData($tInterface, "Methods", DllCallbackGetPtr($hCallback), $i + 1) ; save callback pointer DllStructSetData($tInterface, "Callbacks", $hCallback, $i + 1) ; save callback handle Next DllStructSetData($tInterface, "RefCount", 1) ; initial ref count is 1 DllStructSetData($tInterface, "Size", $iUbound) ; number of interface methods DllStructSetData($tInterface, "Object", DllStructGetPtr($tInterface, "Methods")) ; Interface method pointers Return ObjCreateInterface(DllStructGetPtr($tInterface, "Object"), $sIID, $sInterface, $bIsUnknown) ; pointer that's wrapped into object EndFunc Func __DeleteObjectFromTag(ByRef $tInterface) For $i = 1 To DllStructGetData($tInterface, "Size") DllCallbackFree(DllStructGetData($tInterface, "Callbacks", $i)) Next $tInterface = 0 EndFunc Func __MyInterface_QueryInterface($pSelf, $pRIID, $pObj) Local $tStruct = DllStructCreate("ptr", $pObj) DllStructSetData($tStruct, 1, $pSelf) Return 0 ; $S_OK EndFunc Func __MyInterface_AddRef($pSelf) Return 1 EndFunc Func __MyInterface_Release($pSelf) Return 1 EndFunc volatile Func __MyInterface_write($pSelf, $pString) ConsolePrint(DllStructGetData(DllStructCreate("wchar[" & DllStructGetData(DllStructCreate("dword", $pString - 4), 1) / 2 & "]", $pString), 1)) Return 0 ; $S_OK EndFunc #cs;HTML <!DOCTYPE HTML> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/javascript"> var JSglobal = (1,eval)("this"), AutoIt; </script> <style type="text/css"> body, html { font-family: arial, sans-serif; font-size: 11pt; } </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.16.1/vis.min.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.16.1/vis.min.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="visualization" style="border-width:3px; border-color:yellow; border-style:double;"></div> <p></p> <div id="log"></div> <script type="text/javascript"> // DOM element where the Timeline will be attached var container = document.getElementById('visualization'); // Create an empty DataSet (allows two way data-binding) var items = new vis.DataSet({type: { start: 'ISODate', end: 'ISODate', notes: '' }}); // items.addEventListener('click',resetElements,true); // add items to the DataSet items.add([ {id: 1, content: 'item 1 <b>start</b>', start: '2014-01-23'}, {id: 2, content: 'item 2', start: '2014-01-18 00:00', end: '2014-01-18 23:59'}, {id: 3, content: 'item 3', start: '2014-01-21'}, {id: 5, content: 'item 5', start: '2014-01-28', type:'point'}, {id: 6, content: 'item 6', start: '2014-01-26'} ]); // Configuration for the Timeline var options = {orientation: 'top', editable: { add: true, remove: true, updateTime: true, updateGroup: true } }; // Create a Timeline var timeline = new vis.Timeline(container, items, options); // turn events on timeline.on('rangechange', function (properties) { logEvent('rangechange', properties); }); timeline.on('rangechanged', function (properties) { logEvent('rangechanged', properties); }); timeline.on('select', function (properties) { logEvent('select', properties); }); items.on('*', function (event, properties) { logEvent(event, properties); }); function logEvent(event, properties) { var log = document.getElementById('log'); var msg = document.createElement('div'); msg.innerHTML = 'event=' + JSON.stringify(event) + ', ' + 'properties=' + JSON.stringify(properties); log.firstChild ? log.insertBefore(msg, log.firstChild) : log.appendChild(msg); AutoIt.write(msg.innerHTML); } </script> </body> </html> #ce;HTML ;1 point
-
Hi @Lazegalli, It just so happens I created some functions for my script that you may find helpful. It gets the Local Admin Password and checks the expiration time. Everything outputs to the console. Feel free to use/modify to your liking. #include <AD.au3> #include <Array.au3> #include <Date.au3> Global $g_iAdminTime Global $g_sAdminPwd _Get_Local_Admin() Func _Get_Local_Admin() Local $aProperties, $aType[4] = ["3", "h", "n", "s"] Local $iDateCalc, $iAdminTime If @UserName = "Administrator" Then Return False _AD_Open() If @error Then _ArrayDisplay(_AD_GetLastADSIError(), "Error: _AD_Open", Default, 32) Else $aProperties = _AD_GetObjectProperties(@ComputerName & "$", "ms-Mcs-AdmPwd,ms-Mcs-AdmPwdExpirationTime") If Not @error Then $g_sAdminPwd = $aProperties[1][1] $g_iAdminTime = _Epoch2Date($aProperties[2][1]) $iAdminTime = _SwapDate($g_iAdminTime) ConsoleWrite(@ComputerName & "\Administrator" & @CRLF & $g_sAdminPwd & @CRLF & @CRLF) For $i = 1 To $aType[0] $iDateCalc = _DateDiff($aType[$i], _NowCalcDate() & " " & _NowTime(5), $iAdminTime) ConsoleWrite("Type: " & $aType[$i] & @CRLF & "_NowCalcDate: " & _NowCalcDate() & " " & _NowTime(5) & @CRLF & "$iAdminTime: " & _ $iAdminTime & @CRLF & "$g_iAdminTime: " & $g_iAdminTime & @CRLF) If Not @error Then Switch $iDateCalc Case 0 If $i <> $aType[0] Then ContinueLoop Else ExitLoop EndIf Case Else ConsoleWrite("Time Left: " & $iDateCalc & " " & $aType[$i] & @CRLF & "$g_iAdminTime: " & $g_iAdminTime & @CRLF) ExitLoop EndSwitch Else ConsoleWrite("_DateDiff Error:" & @error & @CRLF) ExitLoop EndIf Next Else ;|1 - $vObject could not be found ;|2 - No values for the specified property. The property in error is returned as the function result ;|3 - Error retrieving $vObject. @Extended is set to the error returned by LDAP ConsoleWrite("_AD_GetObjectProperties() Error: " & @error & @CRLF) EndIf EndIf _AD_Close() EndFunc ;==>__Get_Local_Admin Func _SwapDate($iTime) Local $aMyDate, $aMyTime $iTime = StringStripWS($iTime, 2) Local $sAMPM = StringRight($iTime, 2) _DateTimeSplit($iTime, $aMyDate, $aMyTime) If $sAMPM = "PM" Then $aMyTime[1] += 12 ElseIf $sAMPM = "AM" Then $aMyTime[1] = "0" & $aMyTime[1] EndIf For $i = 1 To $aMyDate[0] If StringLen($aMyDate[$i]) = 1 Then $aMyDate[$i] = "0" & $aMyDate[$i] Next For $i = 1 To $aMyTime[0] If StringLen($aMyTime[$i]) = 1 Then $aMyTime[$i] = "0" & $aMyTime[$i] Next Local $sMyTime = $aMyDate[3] & "/" & $aMyDate[1] & "/" & $aMyDate[2] & " " & $aMyTime[1] & ":" & $aMyTime[2] & ":" & $aMyTime[3] Return $sMyTime EndFunc ;==>SwapDate Func _Epoch2Date($iTime) Local $sOutput = "" Local $iPID = Run(@ComSpec & " /c " & "w32tm.exe /ntte " & $iTime, "", @SW_HIDE, 2) While 1 $sOutput &= StdoutRead($iPID) If @error Then ExitLoop WEnd $sOutput = StringSplit($sOutput, " - ", 2 + 1) Return $sOutput[1] EndFunc ;==>Epoch2Date _Get_Local_Admin.au31 point
-
You can pass the property to return to _AD_GetObjectProperties as well. The property seems to be encoded and only _AD_GetObjectProperties does the decoding for you.1 point
-
ImageSearch and MouseDrag in background window
SaeidN reacted to InunoTaishou for a topic
If I remember correctly there's an alternate ImageSearch function (in the dll) that takes a handle to a bitmap, the bitmap you can get by using CaptureScreen. Then you can use SendMessage to send $WM_LBUTTONDOWN, $WM_MOUSEMOVE $WM_LBUTTONUP #RequireAdmin Func CaptureWindow($iLeft = 0, $iTop = 0, $iWidth = -1, $iHeight = -1, Const $bSaveImage = False, Const $hWnd = WinGetHandle("[Active]")) Local $rect_window = WinGetPos($hWnd) Local $hDC = _WinAPI_GetWindowDC($hWnd) Local $hDestDC = _WinAPI_CreateCompatibleDC($hDC) Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $rect_window[2] - 16, $rect_window[3] - 38) Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap) Local $hSrcDC = _WinAPI_CreateCompatibleDC($hDC) Local $hBmp = _WinAPI_CreateCompatibleBitmap($hDC, $rect_window[2] - 16, $rect_window[3] - 38) Local $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hBmp) _WinAPI_PrintWindow($hWnd, $hSrcDC, True) ScreenToClient($hWnd, $iLeft, $iTop) If ($iWidth > 0 and $iHeight > 0) Then _WinAPI_BitBlt($hDestDC, $iLeft, $iTop, $iWidth, $iHeight, $hSrcDC, $iLeft, $iTop, $MERGECOPY) Else _WinAPI_BitBlt($hDestDC, $iLeft, $iTop, $rect_window[2] - 16 - $iLeft, $rect_window[3] - 38 - $iTop, $hSrcDC, $iLeft, $iTop, $MERGECOPY) EndIf _WinAPI_SelectObject($hDestDC, $hDestSv) _WinAPI_SelectObject($hSrcDC, $hSrcSv) _WinAPI_ReleaseDC($hWnd, $hDC) _WinAPI_DeleteDC($hDestDC) _WinAPI_DeleteDC($hSrcDC) _WinAPI_DeleteObject($hBmp) If ($image_search_tolerance < 50) Then $image_search_tolerance += 50 If ($image_search_tolerance > 80) Then $image_search_tolerance = 80 If ($bSaveImage) Then _ScreenCapture_SaveImage(@ScriptDir & "\CaptureWindow.jpg", $hBitmap, False) Return $hBitmap EndFunc ;==>CaptureWindow DllCall("ImageSearchDll.dll", "str", "ImageSearchExt", "int", $iLeft, "int", $iTop, "int", $iRight, "int", $iBottom, "int", $iTolerance, "ptr", $hHbitmapImageToFind, "ptr", $hHbitmapImageToSearch) Should get you started. Just put the DLLCall in your ImageSearch function. $hHBitmapImageToSearch is gonna be your CaptureWindow and $hHbitmapImage is a handle to a bitmap of the image to look for1 point -
SQLite semi Embedded database functionality in AutoIt
normanwashere reacted to ptrex for a topic
I see that a huge number of threads and post are available relating to the use and interface of SQLite I did some digging into the forum via the search, but never came across a user friendly solution. The only solution so far was via DllCall. Most important ones http://www.autoitscript.com/forum/index.ph...ic=9296&hl= http://www.autoitscript.com/forum/index.ph...amp;#entry61614 http://www.autoitscript.com/forum/index.ph...c=14886&hl= Before I post my solution, I want to give some background information, to those of you who don t know SQLite. That s why I think SQLite is the perfect marriage for AutoIT. Several Wrappers are available for different languages as well as ODBC drivers. SQLite has been integrated in several languages and platforms already like PHP, ASP, APACHE, PERL, Python, .NET, Windows CE, Nevertheless I still feel that SQLite should become an integral part of AutoIT. An Embedded Database functionality would boost the power of a Script tool like AutoIT !! I hope the Developers agree with this. Lets all hope that this will come in the near future. A good way to get started with SQLite is visiting these sites : http://www.sqlite.org/index.html & http://www.sqlite.org/cvstrac/wiki?p=Sqlit...&1054881949 http://www.fredshack.com/docs/sqlite.html http://www.newobjects.com/ or Google for SQLite Read my next post for the solution on how to use SQLite in AutoIT. This is how Native SQLite looks like in AutoIT Included export to Excel from ListView, see thumbnail pictures. The code has been updated in the second post Nwind.db in SQLite format to use as a test database. Removed SQLite_Gui.au3 New version update 19/05/06 to run latest Beta syntax till 3.2.8.x. SQLite_Gui_New.au3 New version update 18/12/07 to run latest Beta syntax 3.2.10.x and later. TO DO List : SQLite_GUI (uses LiteX ActiveX Component, see post #2 for more information) Bugs - Excel Object Jumps when windows resizes (and clicking in the Excel object) the 1st time. (Work around found see post #165) Fixes - Store SQL,VIEWS, TRIGGERS and Functions in a SYSTEM Table. Should be all in 1 table z_SQL_Log. Add field TYPE to filter. - The "FileOpenDialog" dialog should be able to select other formats like .DB3 or *.* - Datatype VARCHAR (size) does not work yet Features to Add - Option to use the ListView instead of Excel Com should be added - Add TABLE for storing TEMPLATE qry STATEMENTS. - Add SQLite ANALYZE function - Activate rename field name feature - Include the ATTACH DB function - Include the ROLLBACK (=undo) feature - Create a Sub GUI for working with FUNCTIONS and ExpressionS in SQL - Assign Function key F9 to execute a Query & ctrl+Tab for tab swithing - Load Database in memory to increase speed and performance TO DO's SQLite UDF : SQLite.au3 UDF (uses DLL call to access native SQLite) Bugs - DLL Call _SQLite_Get_Tables() give errors in line 432 when running. SQLite.Zip Latest version SQLite.au3 & downloads are found in there (for people that dont want to read all posts...) SQLite Downloads1 point