Danke, das geht super und ist auch noch schneller als die vorherige Lösung! ![]()
Beiträge von funkey
-
-
Danke Bugfix, so erhalte ich 4 Tabellen wobei die erste den Namen "tbl_name" hat. Wenn man das noch verhindern könte wäre schön, muss aber nicht sein.
[autoit]
Aber eigentlich bin ich mit der Lösung schon sehr zufrieden.
Pragma hatte ich auch schon versucht, bin aber auf keinen grünen Zweig gekommen.Func _SQLite_GetTableNames($hDB = -1)
[/autoit]
Local $aResult, $iRows, $iColumns
_SQLite_GetTable(-1, "SELECT tbl_name FROM sqlite_master WHERE type='table';", $aResult, $iRows, $iColumns)
Return $aResult
EndFunc -
Hallo!
Ich versuche die Tabellennamen aller Tabellen einer Datenbank zu bekommen. Ich habe zwar eine Lösung mittels _SQLite_SQLiteExe gefunden, bin damit aber nicht zufrieden, da es damit Schwierigkeiten gibt, wenn die Tabellennamen Leerzeichen enthalten.
Ich würde eine Lösung mit _SQLite_Exec bevorzugen, wenn möglich und das muss es ja wohl sein.Spoiler anzeigen
[autoit]#include <SQLite.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <SQLite.dll.au3>Local $sDB = @ScriptDir & "\Test.db"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_SQLite_Startup()
[/autoit] [autoit][/autoit] [autoit]_SQLite_Open($sDB)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_SQLite_Exec(-1, 'CREATE TABLE "Test1" (T11, T12, T13, T14, T15);')
_SQLite_Exec(-1, 'CREATE TABLE "Test 2" (T21, T22, T23, T24, T25);')
_SQLite_Exec(-1, 'CREATE TABLE "Test 3" (T31, T32, T33, T34, T35);')_SQLite_Close ()
[/autoit] [autoit][/autoit] [autoit]Local $sTableNames = _SQLite_GetTableNames($sDB)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($sTableNames & @CRLF)_SQLite_Shutdown ()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
FileDelete($sDB)Func _SQLite_GetTableNames($sDB)
[/autoit]
Local $sTable
_SQLite_SQLiteExe($sDB, ".tables", $sTable)
Return $sTable
EndFuncVielen Dank für Vorschläge und Lösungen.
-
Hab mal schnell was gebastelt.
Spoiler anzeigen
[autoit]#include <Constants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <SendMessage.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>Global Enum _
[/autoit] [autoit][/autoit] [autoit]
$i_Start_Row = -1, _
$i_hGUI_Row, $i_hPic_Row, $i_hCB_Row, _
$i_Total_Rows
Global $aTrnsChckBxs_DATA[1][$i_Total_Rows]$hGUI = GUICreate("Test transparent checkbox replacement", 400, 200)
[/autoit] [autoit][/autoit] [autoit]$nRadio1 = _GUICtrlTransRadio_Create($hGUI, "TransparentRadio1", 200, 33)
[/autoit] [autoit][/autoit] [autoit]
$nRadio2 = _GUICtrlTransRadio_Create($hGUI, "TransparentRadio2", 200, 53)$nPic = GUICtrlCreatePic(@AutoItExe & "\..\Examples\GUI\msoobe.jpg", 0, 0, 400, 200, 0)
[/autoit] [autoit][/autoit] [autoit]$nCB1 = _GUICtrlTransCheckbox_Create($hGUI, $nPic, "TransparentCheckbox 1", 10, 30)
[/autoit] [autoit][/autoit] [autoit]
$nCB2 = _GUICtrlTransCheckbox_Create($hGUI, $nPic, "TransparentCheckbox 2", 10, 50)GUISetState(@SW_SHOW, $hGUI)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nGUIMsg = GUIGetMsg()Switch $nGUIMsg
[/autoit] [autoit][/autoit] [autoit]
Case $GUI_EVENT_CLOSE
Exit
Case $nCB1, $nCB2
ConsoleWrite("CheckBox [" & GUICtrlRead($nGUIMsg, 1) & "] checked = " & (GUICtrlRead($nGUIMsg) = $GUI_CHECKED) & @LF)
Case $nRadio1
GUICtrlSetState($nRadio2, 4)
Case $nRadio2
GUICtrlSetState($nRadio1, 4)
EndSwitch
WEndFunc _GUICtrlTransRadio_Create($hGUI, $sText, $iLeft, $iAbove, $iWidth = -1, $iHeight = -1)
[/autoit] [autoit][/autoit] [autoit]
Local $hRadioChild = GUICreate("", 13, 13, $iLeft, $iAbove, 0x40000000, 0x20, $hGUI)
Local $nRadio = GUICtrlCreateRadio("", 0, 0, 13, 13)
Local $rgn = _WinAPI_CreateRoundRectRgn(1, 1, 13, 13, 10, 10)
_WinAPI_SetWindowRgn($hRadioChild, $rgn)
_WinAPI_DeleteObject($rgn)GUISetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUISwitch($hGUI)
GUICtrlCreateLabel($sText, $iLeft + 18, $iAbove, $iWidth, $iHeight, -1, 0x28)
GUICtrlSetBkColor(-1, -2)
Return $nRadio
EndFunc ;==>_GUICtrlTransRadio_CreateFunc _GUICtrlTransCheckbox_Create($hGUI, $nBackPic, $sText, $iLeft, $iAbove, $iWidth = -1, $iHeight = -1, $iStyle = -1, $iExStyle = 0)
[/autoit] [autoit][/autoit] [autoit]
Local $nCB = GUICtrlCreateCheckbox($sText, $iLeft, $iAbove, $iWidth, $iHeight, $iStyle, $iExStyle)
Local $hCB = GUICtrlGetHandle($nCB)
Local $hPic = GUICtrlGetHandle($nBackPic)If $aTrnsChckBxs_DATA[0][0] = 0 Then
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_NOTIFY, '_TrnsChckBx_WM_NOTIFY')
EndIf$aTrnsChckBxs_DATA[0][0] += 1
[/autoit] [autoit][/autoit] [autoit]
ReDim $aTrnsChckBxs_DATA[$aTrnsChckBxs_DATA[0][0] + 1][$i_Total_Rows]$aTrnsChckBxs_DATA[$aTrnsChckBxs_DATA[0][0]][$i_hGUI_Row] = $hGUI
[/autoit] [autoit][/autoit] [autoit]
$aTrnsChckBxs_DATA[$aTrnsChckBxs_DATA[0][0]][$i_hPic_Row] = $hPic
$aTrnsChckBxs_DATA[$aTrnsChckBxs_DATA[0][0]][$i_hCB_Row] = $hCBReturn $nCB
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_GUICtrlTransCheckbox_CreateFunc _GUICtrlTransCheckbox_Delete($nChckBx)
[/autoit] [autoit][/autoit] [autoit]
Local $hCB = GUICtrlGetHandle($nChckBx)
Local $aTmp[$aTrnsChckBxs_DATA[0][0]][$i_Total_Rows]GUICtrlDelete($nChckBx)
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To $aTrnsChckBxs_DATA[0][0]
[/autoit] [autoit][/autoit] [autoit]
If $aTrnsChckBxs_DATA[$i][$i_hCB_Row] <> $hCB Then
$aTmp[0][0] += 1$aTmp[$aTmp[0][0]][$i_hGUI_Row] = $aTrnsChckBxs_DATA[$i][$i_hGUI_Row]
[/autoit] [autoit][/autoit] [autoit]
$aTmp[$aTmp[0][0]][$i_hPic_Row] = $aTrnsChckBxs_DATA[$i][$i_hPic_Row]
$aTmp[$aTmp[0][0]][$i_hCB_Row] = $aTrnsChckBxs_DATA[$i][$i_hCB_Row]
EndIf
NextReDim $aTmp[$aTmp[0][0] + 1][$i_Total_Rows]
[/autoit] [autoit][/autoit] [autoit]
$aTrnsChckBxs_DATA = $aTmpReturn $aTmp[0][0]
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_GUICtrlTransCheckbox_DeleteFunc _TrnsChckBx_WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $tNMHDR
Local Const $tagNMCUSTOMDRAW = 'hwnd hWndFrom;uint_ptr IDFrom;int_ptr Code;dword DrawStage;hwnd hDC;' & $tagRECT & ';dword_ptr ItemSpec;uint ItemState;lparam ItemlParam'
Local Const $STM_GETIMAGE = 0x0173Local $tNMCD = DllStructCreate($tagNMCUSTOMDRAW, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom = DllStructGetData($tNMCD, 'hWndFrom')
Local $iCode = BitOR(DllStructGetData($tNMCD, 'Code'), 0)
Local $DrawStage = DllStructGetData($tNMCD, 'DrawStage')
Local $ItemSpec = DllStructGetData($tNMCD, 'ItemSpec')
Local $hDC = DllStructGetData($tNMCD, 'hDC')
Local $hPic, $aPos, $hMemDC, $hBitmap, $hPrev
Local $iAbove, $iBeneath, $iBoxSize = 13
For $i = 1 To $aTrnsChckBxs_DATA[0][0]
If $hWndFrom = $aTrnsChckBxs_DATA[$i][$i_hCB_Row] Then
Switch $iCode
Case $NM_CUSTOMDRAW
Switch $DrawStage
Case $CDDS_PREPAINT
$hPic = $aTrnsChckBxs_DATA[$i][$i_hPic_Row]
$aPos = ControlGetPos($hWnd, '', $hWndFrom)If @error Then
[/autoit] [autoit][/autoit] [autoit]
ExitLoop
EndIfIf $aPos[3] < $iBoxSize Then $iBoxSize = $aPos[3]
[/autoit] [autoit][/autoit] [autoit]
$iAbove = Floor(($aPos[3] - $iBoxSize) / 2)
$iBeneath = $iAbove + $iBoxSize$hMemDC = _WinAPI_CreateCompatibleDC($hDC)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _SendMessage($hPic, $STM_GETIMAGE, $IMAGE_BITMAP, 0)
$hPrev = _WinAPI_SelectObject($hMemDC, $hBitmap)
_WinAPI_BitBlt($hDC, 0, 0, $iBoxSize, $iAbove, $hMemDC, $aPos[0], $aPos[1], $SRCCOPY) ;field above checkbox
_WinAPI_BitBlt($hDC, 0, $iBeneath, $iBoxSize, $iBeneath - $iAbove, $hMemDC, $aPos[0], $aPos[1] + $iBeneath, $SRCCOPY) ;field beneath checkbox
_WinAPI_BitBlt($hDC, $iBoxSize, 0, $aPos[2] - $iBoxSize, $aPos[3], $hMemDC, $aPos[0] + $iBoxSize, $aPos[1], $SRCCOPY) ;checkbox text field
_WinAPI_SelectObject($hMemDC, $hPrev)
_WinAPI_DeleteDC($hMemDC)
Return $CDRF_DODEFAULT
EndSwitch
EndSwitchExitLoop
[/autoit] [autoit][/autoit] [autoit]
EndIf
NextReturn $GUI_RUNDEFMSG
[/autoit]
EndFunc ;==>_TrnsChckBx_WM_NOTIFY -
Also bei mir flackert da nichts mit der "editbox.au3" und auch sonst nichts.
-
Ich weiß es nicht, aber vllt hilft ja auch das: http://www.autoitscript.com/forum/topic/79…-by-their-name/
-
Wenn sich die ID und die Instanznummer ändern, dann kannst du immer noch über Position und/oder Größe des Controls einen Controlclick ausführen.
[autoit]
Irgendetwas muss ja gleich bleiben.
[/autoit]
ControlClick("Dingens", "", "[CLASS:WindowsForms10.BUTTON.app.0.2e0c681; X:11; Y:11; W:528; H:20]") -
Wenn jemand von euch eine Siemens LOGO! (Version 0BA4, 0BA5, 0BA6) im Einsatz hat, könnte er sich bitte bei mir melden. Ich habe mit AutoIt einige kleine Funktionen geschrieben, um den Status der Ein-, Ausgänge, Merker,... über die COM-Schnittstelle und das Programmierkabel auszulesen. Ich kann aber leider nur mit der Version 0BA5 testen und hätte gerne Feedback ob es auch auf den anderen Versionen funktioniert.
Gruß funkey
-
Hier mal ein Beispiel mittels CbtHook aus meiner FunSkin-UDF:
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]Local $hProcMsgBox = DllCallbackRegister("CbtHookProcMsgBox", "int", "int;int;int")
[/autoit] [autoit][/autoit] [autoit]
Local $TIDMsgBox = _WinAPI_GetCurrentThreadId()
Local $hHookMsgBox = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($hProcMsgBox), 0, $TIDMsgBox)Local $iRet = MsgBox(34, "Select example", "Please select the skin you want to try")
[/autoit] [autoit][/autoit] [autoit]_WinAPI_UnhookWindowsHookEx($hHookMsgBox)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
DllCallbackFree($hProcMsgBox)#region Just for fun!!
[/autoit] [autoit][/autoit] [autoit]
;##########################################################
Func CbtHookProcMsgBox($nCode, $wParam, $lParam)
Local $RET = 0, $hBitmap = 0, $xWnd = 0
If $nCode < 0 Then
$RET = _WinAPI_CallNextHookEx($hHookMsgBox, $nCode, $wParam, $lParam)
Return $RET
EndIf
Switch $nCode
Case 5 ;5=HCBT_ACTIVATE
_WinAPI_SetDlgItemText($wParam, 3, "1")
_WinAPI_SetDlgItemText($wParam, 4, "2")
_WinAPI_SetDlgItemText($wParam, 5, "3")
EndSwitch
Return
EndFunc ;==>CbtHookProcMsgBoxFunc _WinAPI_SetDlgItemText($hDlg, $nIDDlgItem, $lpString)
[/autoit] [autoit][/autoit] [autoit]
Local $aRet = DllCall('user32.dll', "int", "SetDlgItemText", _
"hwnd", $hDlg, _
"int", $nIDDlgItem, _
"str", $lpString)
Return $aRet[0]
EndFunc ;==>_WinAPI_SetDlgItemText;##########################################################
[/autoit]
#endregion Just for fun!! -
Wieso benutzt du ShellExecuteEx un nicht ShellExecute? Und wie verwendest du es?
Hab gelesen, dass das Problem gelöst werden kann, wenn man .NET aktualisiert.
-
Also ich muss die Include-Datei nicht vorher öffnen, damit Strg+j funktioniert.
-
Du hast recht Oscar. Dann muss man eben schwerere Geschütze auffahren und eine Richedit nehmen, da EM_SETEVENTMASK nur für Richedit vorgesehen ist.
Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GuiRichEdit.au3>
#include <RichEditConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiRichEdit.au3>Global $hGui = GUICreate("Editor", 500, 500)
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg(0x0111, "_WM_COMMAND")Global $LineCounter = GUICtrlCreateEdit("1", 0, 0, 40, 500, 0x6)
[/autoit] [autoit][/autoit] [autoit]
Global $hLineCounter = GUICtrlGetHandle(-1)
GUICtrlSetBkColor(-1, 0xCCCCCC)Global $hEdit = _GUICtrlRichEdit_Create($hGui, "", 40, 0, 460, 500, BitOR($ES_MULTILINE, $WS_VSCROLL, $WS_HSCROLL))
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlRichEdit_SetEventMask($hEdit, BitOR($ENM_SCROLL, $ENM_SCROLLEVENTS))GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3
_GUICtrlRichEdit_Destroy($hEdit)Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit]
$nNotifyCode = BitShift($wParam, 16)
$nID = BitAND($wParam, 0x0000FFFF)
$hCtrl = $lParam
Switch $hCtrl
Case $hLineCounter
;~ GUICtrlSetState($nEdit, $GUI_FOCUS)
Case $hEdit
Local $nline = _GUICtrlRichEdit_GetLineCount($hEdit)
Local $sCounter
For $i = _GUICtrlRichEdit_GetNumberOfFirstVisibleLine($hEdit) To $nline
$sCounter &= $i & @CRLF
Next
If GUICtrlRead($LineCounter) <> $sCounter Then GUICtrlSetData($LineCounter, $sCounter)
EndSwitch
EndFunc ;==>_WM_COMMANDEdit: _GUICtrlRichEdit_SetEventMask wird für den Scroll-Event anscheinend gar nicht gebraucht!? Es funktioniert auch so.
-
Ich hätte es auch so gemacht wie Oscar, nur eben ohne Timer.
Spoiler anzeigen
[autoit]#include <EditConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>GUICreate("Editor", 500, 500)
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg(0x0111, "_WM_COMMAND")Global $LineCounter = GUICtrlCreateEdit("1", 0, 0, 40, 500, 0x6)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetBkColor(-1, 0xCCCCCC)Global $nEdit = GUICtrlCreateEdit("", 40, 0, 460, 500)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetLimit(-1, 99999999)GUISetState()
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit]
$nNotifyCode = BitShift($wParam, 16)
$nID = BitAND($wParam, 0x0000FFFF)
$hCtrl = $lParam
Switch $nID
Case $LineCounter
GUICtrlSetState($nEdit, $GUI_FOCUS)
Case $nEdit
Local $nline = GUICtrlSendMsg($nEdit, $EM_GETLINECOUNT, -1, 0)
Local $sCounter
For $i = GUICtrlSendMsg($nEdit, $EM_GETFIRSTVISIBLELINE, 0, 0) + 1 To $nline
$sCounter &= $i & @CRLF
Next
If GUICtrlRead($LineCounter) <> $sCounter Then GUICtrlSetData($LineCounter, $sCounter)
EndSwitch
EndFunc ;==>_WM_COMMAND -
Spoiler anzeigen
[autoit]#Include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]$aUDF = _GetFunctionFromUDF(StringReplace(@AutoItExe, "autoit3.exe", "") & "Include\Array.au3")
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit
ConsoleWrite($aUDF[Random(0, UBound($aUDF) - 1)] & @cr)Func _GetFunctionFromUDF($sUDF)
[/autoit]
;funkey 04.03.2011
Local $hFile = FileOpen($sUDF, 0)
Local $sFile = FileRead($hFile)
FileClose($hFile)
Local $aFile = StringSplit($sFile, @CRLF, 3)
$aRegExp = StringRegExp($sFile, "(?!End)Func \b.+[\w\W]+?EndFunc", 3)
If @error Then Return SetError(1, 0, "")
Local $aTemp, $sTemp, $sTemp2
For $i = 0 To UBound($aRegExp) -1
$aTemp = StringSplit($aRegExp[$i], @CRLF, 3)
For $j = 0 To UBound($aFile) - 1
If $aTemp[0] = $aFile[$j] Then
$sTemp = StringLeft(StringStripWS($aFile[$j - 1], 1), 1)
$sTemp2 = StringLeft(StringStripWS($aFile[$j - 2], 1), 1)
If $sTemp = ";" Or $sTemp2 = ";" Then
For $k = $j - 1 To 0 Step -1
If StringLeft(StringStripWS($aFile[$k], 1), 1) = ";" Or $k = $j - 1 Then
$aRegExp[$i] = $aFile[$k] & @CRLF & $aRegExp[$i]
Else
ExitLoop
EndIf
Next
EndIf
EndIf
Next
Next
Return $aRegExp
EndFunc -
Ich wünsche dir auch alles Gute zum Geburtstag! Feier schön!!

[Blockierte Grafik: http://geeksontheinside.files.wordpress.com/2010/04/birthday-hamster.jpg]
-
Wenn $aSplit vorher ein normaler String ist, dann:
[autoit]$aSplit = StringSplit($aSplit & @CRLF & GUICtrlRead($GUILizNetzVerteiltServerName), @CRLF, 3)
[/autoit] -
Ich erhalte nur beim dreifachen eine gültige Lösung.
-
Auch ich wünsche dir alles Gute zu deinem Geburtstag!! [Blockierte Grafik: http://www.greensmilies.com/smile/smiley_emoticons_zauberer.gif]
Bleib so wie du bist! -
-
Vielen Dank UEZ für die 2 Skripte. Hab mir mal die Hauptfunktion von Tail für mich passend umgeschrieben.
Spoiler anzeigen
[autoit]
[/autoit]
Func _GetTailOfFile($filename, $bytes = 512, $save = 0)
Local $nBytes, $data, $em, $hSave
Local Const $fsize = FileGetSize($filename)
If FileGetSize($filename) < $bytes Then $bytes = $fsize
If $bytes > 0x7FFFFF Then $bytes = 512
Local $tBuffer = DllStructCreate("byte[" & $bytes & "]")
Local $hFile = _WinAPI_CreateFile($filename, 2, 2)
If Not $hFile Then
$em = "ERROR: unable to open file. Might be open by another process."
Return SetError(1, "", $em)
EndIf
_WinAPI_SetFilePointer($hFile, -$bytes, 2)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), $bytes, $nBytes)
_WinAPI_CloseHandle($hFile)
$data = BinaryToString(DllStructGetData($tBuffer, 1))
$tBuffer = ""
If $save Then
$hSave = FileOpen($save, 2)
If $hSave = -1 Then
$em = "ERROR: " & $save & " could not be created!"
Return SetError(1, "", $em)
EndIf
FileWrite($hSave, $data)
FileClose($hSave)
EndIf
Return $data
EndFunc ;==>GetTailOfFile