1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. SmileMan

Beiträge von SmileMan

  • Nach drücken eines mittels HotKeySet gesetzten Hotkeys bleiben eben diese Tasten gedrückt

    • SmileMan
    • 2. Januar 2016 um 13:31
    Zitat von BugFix

    Um dieses Verhalten zu umgehen musst du die korrekte Tastenfolge simulieren:CTRLDOWN + SHIFTDOWN + F2 + SHIFTUP + CTRLUP

    BTW: Etwas Code, um dein Problem zu zeigen, schadet nie. :rolleyes:

    Ich bin noch nicht dazu gekommen, dies zu testen. Was ich aber nicht verstehe: Wenn ich den Weg über die Zwischenablage gehe, tritt dieses Problem ja nicht auf. Warum tritt es nur auf, wenn ich den Text aus der Datenbank direkt über den Befehl Send() einfügen lasse?

    Weiß jemand, wodurch das verursacht wird? Und gibt es wirklich keinen anderen Weg, dass dieses Problem nicht auftritt?

  • Nach drücken eines mittels HotKeySet gesetzten Hotkeys bleiben eben diese Tasten gedrückt

    • SmileMan
    • 31. Dezember 2015 um 14:59

    Mit diesen Zeilen wereden die Texte aus der Datenbank gelesen und und die Hotkeys registriert:

    Spoiler anzeigen
    AutoIt
    Global $oDict = ObjCreate("Scripting.Dictionary")
    		_SQLite_Query($hDB, "SELECT text,key,dreizeiler From texte WHERE active='1'", $aQuery)
    		; Auslesen der nächsten Zeile
    		While _SQLite_FetchData($aQuery, $aRow, False, False) = $SQLITE_OK
    			$aRow[1] = StringReplace($aRow[1], "+", "")
    			$aRow[1] = StringReplace($aRow[1], "STRG", "^")
    			$aRow[1] = StringReplace($aRow[1], "ALT", "!")
    			$aRow[1] = StringReplace($aRow[1], "Shift", "+")
    			$oDict($aRow[1]) = $aRow[0] ;((key)) : text
    			If $aRow[2] = "Ja" Then
    				HotKeySet($aRow[1], "ssf")
    			Else
    				HotKeySet($aRow[1], "ssfod")
    			EndIf
    		WEnd
    Alles anzeigen

    Hier jetzt die eigentlichen Funktionsaufrufe (hierbei der Weg über die 'Zwischenablage, was einwandfrei funktioniert):

    Spoiler anzeigen
    AutoIt
    Func ssf()
    	$First3Lines1 = $First3Lines
    	$First3Lines1 = StringReplace($First3Lines1, "%datum%", _NowDate())
    	$First3Lines1 = StringReplace($First3Lines1, "%zeit%", $g_zeit)
    	$First3Lines1 = StringReplace($First3Lines1, "%name%", @UserName)
    	_ClipBoard_SetData($First3Lines1 & $oDict(@HotKeyPressed) & @CRLF)
    	If $sPaste = "1" Then
    		Send("^v")
    	EndIf
    EndFunc   ;==>ssf
    Func ssfod()
    	_ClipBoard_SetData($oDict(@HotKeyPressed) & @CRLF)
    	If $sPaste = "1" Then Send("^v")
    EndFunc   ;==>ssfod
    Alles anzeigen


    Hier der Weg mit direktem einfügen, bei dem das Problem auftritt:

    Spoiler anzeigen
    AutoIt
    Func ssf()
    	$First3Lines1 = $First3Lines
    	$First3Lines1 = StringReplace($First3Lines1, "%datum%", _NowDate())
    	$First3Lines1 = StringReplace($First3Lines1, "%zeit%", $g_zeit)
    	$First3Lines1 = StringReplace($First3Lines1, "%name%", @UserName)
    	If $sPaste = "1" Then
    		Send($First3Lines1)
    		Send($oDict(@HotKeyPressed))
    	EndIf
    EndFunc   ;==>ssf
    
    
    Func ssfod()
    	If $sPaste = "1" Then Send($oDict(@HotKeyPressed) & @CRLF)
    EndFunc   ;==>ssfod
    Alles anzeigen
  • Nach drücken eines mittels HotKeySet gesetzten Hotkeys bleiben eben diese Tasten gedrückt

    • SmileMan
    • 31. Dezember 2015 um 13:44

    Hallo zusammen,

    ich habe folgendes Problem:

    Ich habe eine SQLite Datenbank, in der Texte mit zugehörigen Hotkeys gespeichert sind. Mein Script liest diese aus der Datenbank aus und registriert mit HotKeySet die entsprechenden Hotkeys. Sobald man diese drückt, wird der entsprechende Text aus der Datenbank, zu dem der Hotkey zugeordnet ist, ausgelesen und in einem aktiven Eingabefeld eingefügt.

    Bisher habe ich dies so gemacht, dass der Text in die Zwischenablage gelegt wurde und dann mittels Send Befehl und STRG-v im Eingabefeld eingefügt wurde.
    Nun wollte ich das Script so umbauen, dass es nicht mehr den Weg über die Zwischenablage geht, sondern den entsprechenden Text mittels Send() sofort in das aktive Eingabefeld einfügt, was als solches auch problemlos funktioniert.

    Jetzt kommt aber das Problem: Wenn ich den Text direkt so einfügen lasse, bleibt der Hotkey nach dem einfügen gedrückt. Heisst also: Wenn ich z. b. STRG+SHIFT+F2 als Hotkey drücke, wird der entsprechende Text direkt ins Eingabefeld geschrieben und danach werden die Tasten STRG + SHIFT gedrückt und bleiben auch gedrückt. Erst wenn ich direkt auf der Tastatur diese beiden Tasten dann jeweils einmal drücke, sind die Tasten wieder freigegeben.

    Ich habe schon ausprobiert, mittels Send() die beiden Tasten nochmals danach zu senden um das notwendige manuelle tippen auf der Tastatur zu simulieren, was aber keine Abhilfe schafft. Auch habe ich versucht, vor einfügen des Textes, den HotKey zu deregistrieren, den text einzufügen und dann den HotKey wieder zu registrieren. Der Fehler tritt aber auch dabei auf.


    Kann mir jemand verraten, warum dieser Fehler auftritt oder wie ich diesen umgehen kann?
    Sicher kann ich das Script weiterhin mit dem Umweg über die Zwischenablage laufen lassen, was aber nicht so elegant ist, wie den Text direkt einfügen zu lassen. zudem möchte ich das Script damit auch insofern erweitern, als dass ich dies auch als kleines Macro Tool verwenden kann, was aber mit dem Weg über die Zwischenablage nicht möglich ist.

  • PHP Regex Problem

    • SmileMan
    • 9. September 2015 um 14:05

    Super klasse, funktioniert perfekt.

    Herzlichen Dank :)

  • PHP Regex Problem

    • SmileMan
    • 9. September 2015 um 12:39

    Hallo zusammen,

    ich bin total am verzweifeln. Ich nutze für ein AutoIT Projekt die Net::Ping Klasse von Pear, was mit Ipv4 perfekt funktioniert. Ich wollte diese Klasse nun für IPv6 anpassen, wa sich aber leider nicht hinbekomme.

    Das Problem ist das auslesen der IP Adresse aus dem Ping Result. Dazu gibt es in der Pear Klasse folgenden Part:

    Spoiler anzeigen
    PHP
    function _parseResultDetailTargetIp($upper)
        {
            // Grab the first IP addr we can find. Most ping flavors
            // put the target IP on the first line, but some only list it
            // in successful ping packet lines.
            for ( $i=0; $i<count($upper); $i++ ) {
                if ( preg_match('/(\d+\.\d+\.\d+\.\d+)/', $upper[$i], $matches) ) {
                    return( $matches[0] );
                }
            }
            // no idea...
            return( NULL );
        }
    Alles anzeigen

    Ich habe nun versucht, dies folgendermassen anzupassen:

    Spoiler anzeigen
    PHP
    function _parseResultDetailTargetIp($upper)
        {
            // Grab the first IP addr we can find. Most ping flavors
            // put the target IP on the first line, but some only list it
            // in successful ping packet lines.
            for ( $i=0; $i<count($upper); $i++ ) {
                if ( preg_match('/(\d+\.\d+\.\d+\.\d+)/', $upper[$i], $matches) ) {
                    return( $matches[0] );
                }
                if (  preg_match('/^(((?=(?>.*?(::))(?!.+3)))3?|([dA-F]{1,4}(3|:(?!$)|$)|2))(?4){5}((?4){2}|(25[0-5]|(2[0-4]|1d|[1-9])?d)(.(?7)){3})z/i', $upper[$i], $matches) ) {
                    return( $matches[0] );
                }
            }
    
    
            // no idea...
            return( NULL );
        }
    Alles anzeigen

    Die zweite "if (preg_match" Abfrage soll die IPv6 Adresse von der Pingabfrage auslesen und wiedergeben.

    Das Pingergebnis sieht so aus:

    Spoiler anzeigen


    PING google.de (2a00:1450:4013:c00::5e) 56 bytes of data.
    56 bytes from google.de (2a00:1450:4013:c00::5e): icmp_seq=1 ttl=55 time=15.65 ms
    56 bytes from google.de (2a00:1450:4013:c00::5e): icmp_seq=2 ttl=55 time=16.24 ms


    --- google.de ping statistics ---
    2 packets transmitted, 2 received, 0.00% packet loss, time 31.9ms
    rtt min/avg/max/sdev = 15.650/15.945/16.240/0.417 ms


    Hat jemand evtl. eine Ahnung, was im Regex der zweiten preg_match geändert werden, damit PHP die V6 Adresse findet und wiedergeben kann?

  • Problem mit OwnTab.au3

    • SmileMan
    • 7. September 2015 um 14:47

    Perfekt!! Super klasse, genau das wars :)

    Herzlichen Dank.

  • Problem mit OwnTab.au3

    • SmileMan
    • 7. September 2015 um 09:47

    Hallo zusammen,

    ich wollte in meinem Script Tabs benutzen, wollte diese aber auch entsprechend designtechnisch anpassen, daher habe ich mir mal das OwnTab.au3 von funkey aus dem englischen Forum angeschaut.

    Um das ganze erst einmal auszuprobieren und z schauen, ob ich es für mich verwenden kann, habe ich ein Beispielscript gebastelt, was auch absolut einwandfrei funktioniert:

    Spoiler anzeigen
    AutoIt
    #include "OwnTab.au3"
    
    
    Local $hGui = GUICreate("TAB (in) TAB", 800, 450)
    GUISetBkColor(0x000000)
    
    
    ;$OwnTab_Style = 1
    ;   "CADASTRO","RELATÓRIOS","FERRAMENTAS","LABORATÓRIO","BACKUP","SAIR"
    Local $aTabText[3] = [" MENU 01 ", " MENU 02 ", " MENU 03 "]
    Local $aTabIcons[3][2] = [[""],[""],[""]]
    Global $aCtrlTab = _OwnTab_Create($hGui, $aTabText, 10, 10, 780, 400, 30, 0x000000, 0x000000, 0x000000, $aTabIcons)
    Local $aTabTip[3] = ["Dica Menu 01", "Dica Menu 02", "Dica Menu 03"]
    _OwnTab_SetTip($aCtrlTab, $aTabTip) ;set the tooltips for the OwnTab-control
    
    
    #Region Tab1
    _OwnTab_Add($aCtrlTab) ;Start controls tab1
    GUICtrlCreateLabel("Etiqueta 01", 15, 55, 769, 20)
    GUICtrlSetColor(-1, 0xFFB400)
    
    
    ;$OwnTab_Style = 0
    #EndRegion Tab1
    
    
    #Region Tab2
    _OwnTab_Add($aCtrlTab) ;Start controls tab2
    GUICtrlCreateLabel("Etiqueta 02", 15, 43, 769, 20)
    #EndRegion Tab2
    
    
    #Region Tab3
    _OwnTab_Add($aCtrlTab) ;Start controls tab3
    GUICtrlCreateLabel("Etiqueta 03", 15, 43, 769, 20)
    #EndRegion Tab3
    
    
    _OwnTab_End($aCtrlTab) ;new: end control-definition AND inizialize the OwnTab
    _OwnTab_SetFontCol($aCtrlTab, 0xFFB400) ;new: set font-color
    
    
    GUISetState()
    _OwnTab_Hover($aCtrlTab, 0x333333,0,200) ;start hover-function if you want
    
    
    Local $msg
    
    
    While 1
        $msg = GUIGetMsg()
        For $a = 1 To UBound($aCtrlTab, 1) - 1
            If $msg = $aCtrlTab[$a][0] Then
                _OwnTab_Switch($aCtrlTab, $a)
            EndIf
        Next
        Switch $msg
            ;Case $Button1
            ;   _OwnTab_SetAlarm($aCtrlTab, 4, 0xFF0000)
            ;Case $Button4
            ;   _OwnTab_ResetAlarm($aCtrlTab, 4)
            ;Case $BtnSet
            ;   _OwnTab_SetAlarm($aCtrlTab2, 2, 0x5050FF)
            ;Case $BtnReset
            ;   _OwnTab_ResetAlarm($aCtrlTab2, 2)
            ;Case $Button5
            ;   _OwnTab_Enable($aCtrlTab, 3)
            ;Case $Button6
            ;   _OwnTab_Disable($aCtrlTab, 3)
            ;Case $Button7
            ;   _OwnTab_Hide($aCtrlTab, 2)
            ;Case $Button8
            ;   _OwnTab_Show($aCtrlTab, 2)
            ;Case $Box1
            ;   If GUICtrlRead($Box1) = 1 Then
            ;       _OwnTab_Hover($aCtrlTab, 0xFFFF88, GUICtrlRead($Input1))
            ;   Else
            ;       _OwnTab_Hover($aCtrlTab, 0xFFFF88, 0)
            ;   EndIf
            ;Case $Input1
            ;   If GUICtrlRead($Box1) = 1 Then _OwnTab_Hover($aCtrlTab, 0xFFFF88, GUICtrlRead($Input1))
            Case -3
                Exit
        EndSwitch
        Sleep(10)
    WEnd
    Alles anzeigen

    Die OwnTab.au3 habe ich als Anhang beigefügt.

    Wie gesagt, dieses Testscript funktioniert einwandfrei.
    'Ich habe anschließend das Testscript auf mein eigentliches Script übertragen. Dei Tabs werden zwar einwandfrei angezeigt, allerdings funktioniert das Umschalten zwischen den einzelnen Tabs nicht. Ich habe alle möglichen Varianten getestet, aber egal wie ichs mache, die Umschaltung funktioniert einfach nicht.

    Im Englischen Forum bekomme ich leider seit Wochen keine Antwort, daher hoffe ich nun, dass vielleicht einer der Experten hier mal drüber schaut und evtl. eine Lösung für mich findet.

    Hier mein Script:

    Spoiler anzeigen
    AutoIt
    #NoTrayIcon
    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Clipboard.au3>
    #include <Date.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPIShellEx.au3>
    #include <GuiMenu.au3>
    #include <WinAPI.au3>
    #include <TrayConstants.au3>
    #include ".\settings.au3"
    ;#include ".\newentry.au3"
    ;#include ".\editentry.au3"
    ;#include ".\delentry.au3"
    ;#include ".\drucken.au3"
    ;#include ".\update.au3"
    ;#include ".\ping.au3"
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <StaticConstants.au3>
    #include <Array.au3>
    #include <GuiListView.au3>
    #include <String.au3>
    #include <Timers.au3>
    #include <OwnTab.au3>
    
    
    FileInstall("hilfe.gif", @TempDir & "\")
    FileInstall("sqlite3.dll", @TempDir & "\")
    
    
    
    
    
    
    Opt("GUIOnEventMode", 1)
    Opt('TrayOnEventMode', 1)
    Opt('TrayMenuMode', 1)
    
    
    Global $g_idExit, $aQuery, $aRow, $listview, $aResult, $iRows, $iColumns, $iRval, $sItem, $ttest, $setfunc, $sethkey, $manueltext, $okey, $otext, $resettings, $e_newEntry, $e_editEntry, $replace, $g_zeit, $First3Lines1, $vQuery, $vRow, $version, $guiversion
    Global Enum $e_ftasten = 1000, $e_idOpen, $e_idSave, $e_idExit, $e_options, $e_idCopy, $e_idPaste, $e_idAbout, $fprint, $e_UpdateDB, $e_hilfe
    
    
    
    
    _Main()
    
    
    Func _Main()
    
    
    	Global $hGUI = GUICreate("Smile Tool", 600, 520, -1, $WS_EX_ACCEPTFILES)
    	GUISetBkColor(0x000000)
    
    
    	GUICtrlSetDefBkColor(0x000000)
    	GUICtrlSetDefColor(0xFFB400)
    
    
    	; Create File menu
    	$hFile = _GUICtrlMenu_CreateMenu()
    	_GUICtrlMenu_InsertMenuItem($hFile, 0, "F-Tasten drucken", $e_ftasten)
    	_GUICtrlMenu_InsertMenuItem($hFile, 1, "", 0)
    	_GUICtrlMenu_InsertMenuItem($hFile, 2, "Beenden", $e_idExit)
    
    
    	; Create Options menu
    	$hOptions = _GUICtrlMenu_CreateMenu()
    	_GUICtrlMenu_InsertMenuItem($hOptions, 0, "Optionen", $e_options)
    
    
    	; Create Help menu
    	$hHelp = _GUICtrlMenu_CreateMenu()
    	_GUICtrlMenu_InsertMenuItem($hHelp, 0, "Hilfe", $e_hilfe)
    	_GUICtrlMenu_InsertMenuItem($hHelp, 1, "About", $e_idAbout)
    
    
    	; Create Main menu
    	$hMain = _GUICtrlMenu_CreateMenu()
    	_GUICtrlMenu_InsertMenuItem($hMain, 0, "&File", 0, $hFile)
    	_GUICtrlMenu_InsertMenuItem($hMain, 1, "&Einstellungen", 0, $hOptions)
    	_GUICtrlMenu_InsertMenuItem($hMain, 2, "&Help", 0, $hHelp)
    
    
    	; Set window menu
    	_GUICtrlMenu_SetMenu($hGUI, $hMain)
    
    
    	Local $aTabText[3] = [" Texte ", " Ping ", " Traceroute "]
    	Local $aTabIcons[3][2] = [[""],[""],[""]]
    	Global $aCtrlTab = _OwnTab_Create($hGui, $aTabText, 5, 5, 590, 48, 30, 0x000000, 0x000000, 0x000000, $aTabIcons)
    	Local $aTabTip[3] = ["Texte", "Ping", "Traceroute"]
    	_OwnTab_SetTip($aCtrlTab, $aTabTip) ;set the tooltips for the OwnTab-control
    
    
    	#Region Tab1
    	_OwnTab_Add($aCtrlTab) ;Start controls tab1
    
    
    	GUICtrlCreateLabel("Nachfolgend werden alle bisher eingerichteten Texte mit entsprechendem HotKey angezeigt." & @CRLF & "Um die Texte nutzen zu können, einfach den entsprechenden HotKey auf der Tastatur drücken.", 10, 50)
    	$listview = GUICtrlCreateListView("Name|Text|Hotkey|3Zeiler", 5, 60, 590, 400)
    	GUICtrlSetColor(-1, 0xFFB400)
    	GUICtrlSetBkColor(-1, 0x000000)
    	_GUICtrlListView_SetColumnWidth($listview, 0, 150)
        _GUICtrlListView_SetColumnWidth($listview, 1, 295)
        _GUICtrlListView_SetColumnWidth($listview, 2, 50)
    	_GUICtrlListView_SetColumnWidth($listview, 3, 50)
    
    
    	; Hilfe
    	;Global $hilfepic = GUICtrlCreatePic(@TempDir & "\hilfe.gif", 570, 5, 20, 20)
    	;GUICtrlSetOnEvent($hilfepic, "_Hilfe")
    	;GUICtrlSetCursor($hilfepic, 4)
    
    
    	; Button unten links
    	$e_newEntry = GUICtrlCreateButton("Neuen Eintrag hinzufügen", 50, 450, 150, 30)
    	GUICtrlSetOnEvent($e_newEntry, "o_NewEntry")
    	$e_editEntry = GUICtrlCreateButton("Eintrag bearbeiten", 220, 450, 150, 30)
    	GUICtrlSetOnEvent($e_editEntry, "o_EditEntry")
    	$e_DelEntry = GUICtrlCreateButton("Eintrag löschen", 390, 450, 150, 30)
    	GUICtrlSetOnEvent($e_DelEntry, "o_DelEntry")
    	#EndRegion Tab1
    
    
    	#Region Tab2
    	_OwnTab_Add($aCtrlTab) ;Start controls tab2
    
    
    	; Rechte Seite, Ping und Traceroute
    	GUICtrlCreateLabel("Im nachfolgenden kannst Du ein Pingtest auf einen Host oder eine IP durchführen:" & @CRLF & "(Bitte beachte, Ergebnis erscheint erst nach vollständigem Pingtest)", 10, 50, 400, 30)
    	GUICtrlCreateLabel("Bitte Host oder IP eingeben", 10, 90, 200, 15)
    	GUICtrlSetColor(-1, 0xFFB400)
    	Global $host = GUICtrlCreateInput("", 10, 110, 200, 20)
    	GUICtrlCreateLabel("Bitte Anzahl der Pings angeben", 10, 140, 200, 15)
    	GUICtrlSetColor(-1, 0xFFB400)
    	Global $count = GUICtrlCreateInput("", 10, 160, 200, 20)
    	Global $e_pingtest = GUICtrlCreateButton("Ping ausführen", 10, 190, 150, 30)
    	GUICtrlSetOnEvent($e_pingtest, "o_pingtest")
    	;Global $pingergebnis = GUICtrlCreateEdit("", 650, 190, 500, 250, $ES_AUTOVSCROLL + $WS_VSCROLL)
    	GUICtrlCreateLabel("Ergebnis des Pings zu:", 10, 220, 130, 15)
    	Global $e_ip = GUICtrlCreateLabel("na", 140, 220, 120, 20)
    	GUICtrlSetFont(-1, 8.5, 700, 4)
    	#EndRegion Tab2
    
    
    	#Region Tab3
    	_OwnTab_Add($aCtrlTab) ;Start controls tab3
    	GUICtrlCreateLabel("Etiqueta 03", 15, 43, 400, 20)
    	#EndRegion Tab3
    
    
    	_OwnTab_End($aCtrlTab) ;new: end control-definition AND inizialize the OwnTab
    	_OwnTab_SetFontCol($aCtrlTab, 0xFFB400) ;new: set font-color
    
    
    
    
    	; Copyright
    	GUICtrlCreateLabel("© 2015 - Erstellt von: Stefan Streif", 180, 485, 200, 15)
    	$guiversion = GUICtrlCreateLabel("", 390, 485, 150, 15)
    	GUICtrlSetColor(-1, 0xFFB400)
    
    
    	; Exit und Minimize
    	GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    	GUISetOnEvent($GUI_EVENT_MINIMIZE, '_Minimize')
    	TraySetOnEvent(-7, '_Restore')
    
    
    
    
    
    
    	GUISetState() ; display the GUI
    	_OwnTab_Hover($aCtrlTab, 0x333333,0,200) ;start hover-function if you want
    	GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    
    
    	_SETTINGS($resettings = "0")
    
    
    	_Timer_SetTimer($hGUI, 1000, "_UpdateClock") ; create timer
    
    
    	Local $msg
    
    
    	While 1
    		$msg = GUIGetMsg()
    		For $a = 1 To UBound($aCtrlTab, 1) - 1
    			If $msg = $aCtrlTab[$a][0] Then
    				_OwnTab_Switch($aCtrlTab, $a)
    			EndIf
    		Next
    		Switch $msg
    			Case $GUI_EVENT_CLOSE
    				ExitLoop
    		EndSwitch
    		Sleep(1000)
    	WEnd
    EndFunc   ;==>_Main
    
    
    Func _SETTINGS($resettings)
    	If $resettings = "1" Then
    		_GUICtrlListView_DeleteAllItems($listview)
    	EndIf
    	_SQLite_Startup(@TempDir & "\sqlite3.dll", False, 1)
    	;_SQLite_Startup()
    	If @error Then Exit MsgBox(16, "SQLite Fehler", "SQLite.dll konnte nicht geladen werden!")
    	If FileExists("settings.sqlite") Then
    		$hDB = _SQLite_Open("settings.sqlite")
    		If @error Then Exit MsgBox(16, "SQLite Fehler", "1 - Kann die Datenbank nicht öffnen!")
    
    
    		; DB Abfrage der Version aus "settings"
    		_SQLite_Query($hDB, "SELECT version FROM settings", $vQuery)
    		If @error Then
    			MsgBox(16, "SQLite Fehler", "Die Datenbank ist nicht mehr aktuell. Nach Klick auf Ok, wird diese aktualisiert!")
    			_UpdateDB()
    			_NeustartNachDrucken()
    		Else
    				While _SQLite_FetchData($vQuery, $vRow, False, True) = $SQLITE_OK
    					If $vRow[0] < "2.0" Then
    						MsgBox(16, "SQLite Fehler", "Die Datenbank ist nicht mehr aktuell. Nach Klick auf Ok, wird diese aktualisiert!")
    						_UpdateDB2()
    						_NeustartNachDrucken()
    					EndIf
    				WEnd
    		EndIf
    
    
    		_SQLite_Query($hDB, "SELECT * FROM settings", $aQuery)
    		; Auslesen der nächsten Zeile
    		While _SQLite_FetchData($aQuery, $aRow, False, True) = $SQLITE_OK
    			Global $uLine1 = $aRow[1]
    			Global $uLine2 = $aRow[2]
    			Global $uLine3 = $aRow[3]
    			Global $sPaste = $aRow[4]
    			Global $version = "Version " & $aRow[5]
    		WEnd
    		GUICtrlSetData($guiversion, $version)
    		If _SQLite_GetTable2d($hDB, "Select subject,text,key,dreizeiler From texte WHERE active='1'", $aResult, $iRows, $iColumns) = $SQLITE_OK Then
    			For $iR = 1 To $iRows
    				$sItem = ""
    				For $iC = 0 To $iColumns - 1
    					;$replace = $aResult[$iR][$iC]
    					;$replace = StringReplace($replace, "{", "")
    					;$replace = StringReplace($replace, "}", "")
    					$sItem &= $aResult[$iR][$iC] & "|"
    				Next
    				GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $listview)
    			Next
    		Else
    			MsgBox($MB_SYSTEMMODAL, "SQLite Error: " & _SQLite_ErrMsg())
    		EndIf
    		Global $First3Lines = $uLine1 & @CRLF & $uLine2 & @CRLF & $uLine3 & @CRLF
    		;Am Skriptanfang
    		Global $oDict = ObjCreate("Scripting.Dictionary")
    		_SQLite_Query($hDB, "SELECT text,key From texte WHERE active='1'", $aQuery)
    		; Auslesen der nächsten Zeile
    		While _SQLite_FetchData($aQuery, $aRow, False, False) = $SQLITE_OK
    			$aRow[1] = StringReplace($aRow[1], "+", "")
    			$aRow[1] = StringReplace($aRow[1], "STRG", "^")
    			$aRow[1] = StringReplace($aRow[1], "ALT", "!")
    			$aRow[1] = StringReplace($aRow[1], "Shift", "+")
    			$oDict($aRow[1]) = $aRow[0] ;((key)) : text
    			HotKeySet($aRow[1], "ssf")
    		WEnd
    		_SQLite_QueryFinalize($aQuery)
    		_SQLite_Close()
    		_SQLite_Shutdown()
    	Else
    		MsgBox(16, "SQLite Fehler", "Die Datenbank wurde nicht gefunden!" & @CRLF & "Es werden nun die 'Einstellungen' geöffnet," & @CRLF & "um eine neue Datenbank zu erstellen!")
    		_OPTIONS()
    	EndIf
    EndFunc   ;==>_SETTINGS
    
    
    ; Handle menu commands
    Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg, $lParam
    	Switch _WinAPI_LoWord($wParam)
    		Case $e_ftasten
    			fprint()
    		Case $e_idExit
    			Exit
    		Case $e_options
    			_OPTIONS()
    		Case $e_hilfe
    			_Hilfe()
    		Case $e_idAbout
    			MsgBox(BitOR($MB_OK, $MB_ICONINFORMATION, $MB_DEFBUTTON1, $MB_SYSTEMMODAL, $MB_SETFOREGROUND), 'About', 'Dieses Tool wurde geschrieben von:' & @CRLF & @CRLF & 'Stefan Streif' & @CRLF & 'Technical Support' & @CRLF & 'NL Villingen-Schwenningen' & @CRLF & 'Tel: 07721 6806 29470' & @CRLF & @CRLF & $version)
    	EndSwitch
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_COMMAND
    
    
    ; --------------- Functions ---------------
    Func _UpdateClock($hWnd, $iMsg, $iIDTimer, $iTime)
        #forceref $hWnd, $iMsg, $iIDTimer, $iTime
        Global $g_zeit = StringFormat("%02d:%02d", @HOUR, @MIN)
    	;MsgBox(0, "Zeit", "Aktuelle Zeit ist: "& $g_zeit, 2)
    EndFunc   ;==>_UpdateClock
    
    
    Func ssf()
    	$First3Lines1 = $First3Lines
    	$First3Lines1 = StringReplace($First3Lines1, "%datum%", _NowDate())
    	$First3Lines1 = StringReplace($First3Lines1, "%zeit%", $g_zeit)
    	$First3Lines1 = StringReplace($First3Lines1, "%name%", @UserName)
    	_ClipBoard_SetData($First3Lines1 & $oDict(@HotKeyPressed) & @CRLF)
    	;_ClipBoard_SetData($uline1 & _NowDate() &" / "& $g_zeit &" / "& @UserName & @CRLF & $oDict(@HotKeyPressed) & @CRLF)
    	If $sPaste = "1" Then Send("^v")
    EndFunc   ;==>ssf
    
    
    Func fprint()
    	Local $iMsgBoxAnswer
    	$iMsgBoxAnswer = MsgBox(4145, "F-Tastenbelegung drucken", "Wenn du auf 'OK' klickst, wird der Druckauftrag sofort gestartet und auf dem in Windows definierten Standard Drucker gedruckt.")
    	Select
    		Case $iMsgBoxAnswer = 1 ;OK
    			d_ftasten()
    		Case $iMsgBoxAnswer = 2 ;Cancel
    	EndSelect
    EndFunc   ;==>fprint
    
    
    Func _Hilfe()
    	MsgBox(BitOR($MB_ICONQUESTION, $MB_SYSTEMMODAL), 'Generelle Hilfe', 'Du befindest im Hauptprogramm.' & @CRLF & @CRLF & 'Hier bekommst Du die aktuell eingerichteten Texte mit den entsprechenden Hotkeys angezeigt.' & @CRLF & @CRLF & _
    			'Um diese nutzen zu können, einfach die entsprechend angezeigte HotKey Kombination auf der Tastatur drücken.' & @CRLF & 'Des Weiteren kannst Du in diesem Bereich auch neue Texte anlegen, bestehende bearbeiten oder löschen.' & @CRLF & @CRLF & _
    			'"Bearbeiten"' & @CRLF & 'Um ein bestehenden Text zu bearbeiten, diesen in der Auflistung anklicken und den Button "Eintrag bearbeiten" betätigen.' & @CRLF & @CRLF & _
    			'"Löschen"' & @CRLF & 'Um ein bestehenden Text zu löschen, diesen in der Auflistung anklicken und den Button "Eintrag löschen" betätigen.' & @CRLF & @CRLF & _
    			'Solltest Du weitergehende Hilfe brauchen, dann klicke im Menü oben auf "Hilfe" -> "About" und kontaktiere den dort angegebenen Autor dieses Tools.')
    EndFunc   ;==>_Hilfe
    
    
    Func _NeustartNachDBErstellung()
    	MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL), 'Information', 'Die Datenbank wurde erstellt. Das Tool wird nach drücken des "OK" Buttons neu gestartet, damit die eben erstellte Datenbank eingelesen und die Einstellungen übernommen werden können.')
    	Exit Run(@ScriptFullPath)
    EndFunc   ;==>_NeustartNachDBErstellung
    
    
    Func _NeustartNachDrucken()
    	Exit Run(@ScriptFullPath)
    EndFunc   ;==>_NeustartNachDrucken
    
    
    Func OnExit()
    	Exit
    EndFunc   ;==>OnExit
    
    
    Func o_NewEntry()
    	_NewEntry()
    EndFunc   ;==>o_NewEntry
    
    
    Func o_EditEntry()
    	Local $editItem_id = _GUICtrlListView_GetSelectionMark($listview)
    	If $editItem_id = -1 Then
    		MsgBox(0, "Fehler", "Du hast vergessen, zuvor einen Eintrag auszuwählen. Sowas ist natürlich ganz schlecht, wenn Du etwas bearbeiten willst!")
    	Else
    		Global $editItem = _GUICtrlListView_GetItemText($listview, $editItem_id, 2)
    		_EditEntry($editItem)
    	EndIf
    EndFunc   ;==>o_EditEntry
    
    
    Func o_DelEntry()
    	Local $DelItem_id = _GUICtrlListView_GetSelectionMark($listview)
    	If $DelItem_id = -1 Then
    		MsgBox(0, "Fehler", "Du hast vergessen, zuvor einen Eintrag auszuwählen. Sowas ist natürlich ganz schlecht, wenn Du etwas löschen willst!")
    	Else
    		Global $DelItem = _GUICtrlListView_GetItemText($listview, $DelItem_id, 2)
    		_DelEntry($DelItem)
    	EndIf
    EndFunc   ;==>o_DelEntry
    
    
    Func _Minimize()
    	TraySetState(1)
    	GUISetState(@SW_HIDE)
    EndFunc   ;==>_Minimize
    
    
    Func _Restore()
    	TraySetState(2)
    	GUISetState(@SW_SHOW)
    EndFunc   ;==>_Restore
    
    
    Func o_pingtest()
    	Local $p_host = GUICtrlRead($host)
    	Local $p_count = GUICtrlRead($count)
    	_ping($p_count, $p_host)
    EndFunc   ;==>o_pingtest
    Alles anzeigen

    Ich habe einige eigene au3 Scripts auskommentiert, da diese zum testen der Tabs nicht notwendig sind. Aber egal ob diese mit eingebunden sind oder nicht, es geht so oder so nicht.

    Um die sqlite3.dll mit anhängen zu können, habe ich ein .txt angehängt. Um diese zu nutzen also einfach das .txt wieder entfernen.

    Bilder

    • hilfe.gif
      • 1,18 kB
      • 20 × 20

    Dateien

    OwnTab.au3 19,5 kB – 293 Downloads sqlite3.dll.txt 513,54 kB – 309 Downloads settings.au3 10,75 kB – 381 Downloads
  • Rahmenfarbe beim OwnTAB-Control von funkey ändern

    • SmileMan
    • 19. August 2015 um 15:03

    Hallo zusammen,

    ich habe mir mal das OwnTab-Control von funkey https://www.autoitscript.com/forum/topic/10…control/?page=1 angeschaut ud finde es sehr nützlich.

    Nun habe ich aber eine Frage: hat das schon mal jemand eingesetzt und weiß zufällig, wie ich die Rahmenfarbe ändern kann? Alles andere konnte ich farblich ändern, nur für die Rahmen finde ich keine Möglichkeit.

  • Programm zum durchsuchen von .inf Datein

    • SmileMan
    • 20. Juli 2015 um 14:51

    Um die gefundene Line aus der Datei in Deiner GUI anzeigen zu lassen, musst Du noch ein zusätzlliches GUICtrlCreateLabel an die Stelle setzen, wo das Ergebnis angezeigt werden soll.

    Bei der Suchfunktion kannst Du dann das Ergebnis mit GUICtrlSetData in das extra dafür erstellte Label schreiben.

  • Tabellenstruktur einer SQlite Datenbank ändern - Hinzufügen einer Spalte

    • SmileMan
    • 20. Juli 2015 um 13:27

    Ah ok, dankeschön.

  • Tabellenstruktur einer SQlite Datenbank ändern - Hinzufügen einer Spalte

    • SmileMan
    • 17. Juli 2015 um 10:26

    Naja, eines der ersten Ergebnisse bei Google, als ich nach der Syntax für den ALTER Befehl in SQLite gesucht hatte, war eben, dass es diesen nicht geben würde. Aber egal, es hat einwandfrei funktioniert und ich bin zufrieden.

    Was ich dabei aber herausgefunden habe ist, dass Spaltennamen nicht mti einer Zahl beginnen dürfen. Aus "3zeiler" muss also z. B. "zeiler3" oder "dreizeiler" gemacht werden.

  • Tabellenstruktur einer SQlite Datenbank ändern - Hinzufügen einer Spalte

    • SmileMan
    • 15. Juli 2015 um 12:12
    Zitat von AspirinJunkie

    Ich verstehe die Frage nicht ganz - warum willst du eine Alternative dazu haben - kommst du mit dem Befehl nicht klar?So sollte es doch funktionieren?:

    SQL
    ALTER TABLE Texte ADD COLUMN 3zeiler TEXT;

    Wie bereits geschrieben: Laut meinen bisherigen Recherchen, soll es bei SQLite diesen ALTER Befehl nicht geben. Daher hab ich es so auch nie getestet. Da du nun aber etwas anderes sagst, werde ich Dein Beispiel gleich mal testen.

  • Tabellenstruktur einer SQlite Datenbank ändern - Hinzufügen einer Spalte

    • SmileMan
    • 15. Juli 2015 um 11:55

    Hallo zusammen,

    ich stehe vor einem großen Problem und finde einfach nichts in diesem forum oder über Google über dieses Thema.

    Ich habe ein kleines Tool, dass mit einer SQLite Datenbank arbeitet. Nun möchte ich eine weitere Funktion mit einbauen, dazu sollte aber die Tabellenstruktur der SQLite Datenbank geändert werden, es sollte in einer Tabelle eine Spalte hinzugefügt werden. Die aktuelle Struktur sieht so aus:

    Tabelle: Texte
    -> Spalte: ID
    -> Spalte: Subject
    -> Spalte: Text
    -> Spalte: Key
    -> Spalte: Active

    Hier soll jetzt über eine Art Updatefunktion die Struktur geändert werden und zwar soll eine zusätzliche Spalte namens "3zeiler" nach Active hinzugefügt werden. Einfach die vorhandene Datenbank löschen und eine neue anlegen, ist keine Option, da mein Tool bei mehreren Usern aktiv in Benutzung ist und jeder seine individuellen Texte in seiner Datenbank gespeichert hat. Ein mir eingefallener Weg wäre, alle Daten aus der DB auszulesen, in einem Array zu speichern, anschließend die alte DB löschen und eine neue Anlegen. Anschließend dann die Daten aus dem Array in die neue DB schreiben. Allerdings ist dies, zumindest für mich als totaler Neuling, eine verdammt schwere Aufgabe. Wenn es also ein leichteren Weg gäbe, wie Beispielsweise der "ALTER" Befehl in MySQL, wäre ich unglaublich erleichtert.

    Kennt jemand eine Alternative zum "ALTER" Befehl oder hat eine anderen, nicht ganz so schweren Lösungsweg für mich? Oder, falls es doch nicht anders geht: Hat vielleicht jemand bereits so eine DB Änderung durchgeführt und hat dazu noch ein kleines Script irgendwo rum fliegen?

  • HotKey dynamisch aus Datenbankabfrage erstellen

    • SmileMan
    • 2. Januar 2015 um 20:31

    Nachdem ich nun den gesamten Tag nur für dieses eine Problem aufgeopfert habe, habe ich es schlussendlich geschafft :D

    Dein letzter Code Vorschlag war soweit schon richtig, nur die Schleife war die falsche. Ich musste das ganze in eine While, anstatt in eine For Schleife setzen.

    Der funktionierende Code sieht nun so aus:

    Der funktionierende Code
    [autoit]


    ;Am Skriptanfang
    Global $oDict = ObjCreate("Scripting.Dictionary")
    _SQLite_Query($hDB, "SELECT text,key From texte WHERE active='1'", $aQuery)
    ; Auslesen der nächsten Zeile
    While _SQLite_FetchData($aQuery, $aRow, False, False) = $SQLITE_OK
    ;$aRow[2] = StringLower($aRow[2])
    $aRow[1] = StringReplace($aRow[1], "+", "")
    $aRow[1] = StringReplace($aRow[1], "STRG", "^")
    $aRow[1] = StringReplace($aRow[1], "ALT", "!")
    $aRow[1] = StringReplace($aRow[1], "Shift", "+")
    $oDict($aRow[1]) = $aRow[0] ;((key)) : text
    HotKeySet($aRow[1], "ssf")
    WEnd
    _SQLite_QueryFinalize($aQuery)
    _SQLite_Close()
    _SQLite_Shutdown()

    [/autoit]
  • HotKey dynamisch aus Datenbankabfrage erstellen

    • SmileMan
    • 2. Januar 2015 um 12:05

    Grundsätzlich habe ich Dein Vorschlag verstanden. Nur leider stehe ich jetzt vor dem Problem, dass ich die Arrays nicht korrekt befüllt bekomme, um mit denen dann arbeiten zu können. Ich habe nun den Code Bereich folgendermaßen geändert:

    Spoiler anzeigen
    [autoit]


    If _SQLite_GetTable2d($hDB, "Select text From texte WHERE active='1'", $aResult, $iRows, $iColumns) = $SQLITE_OK Then
    For $iR = 1 To $iRows
    For $iC = 0 To $iColumns - 1
    $otext &= $aResult[$iR][$iC]
    Next
    Next
    Else
    MsgBox($MB_SYSTEMMODAL, "SQLite Error: " & _SQLite_ErrMsg())
    EndIf
    If _SQLite_GetTable2d($hDB, "Select key From texte WHERE active='1'", $aResult, $iRows, $iColumns) = $SQLITE_OK Then
    For $iR = 1 To $iRows
    For $iC = 0 To $iColumns - 1
    $okey &= $aResult[$iR][$iC]
    Next
    Next
    Else
    MsgBox($MB_SYSTEMMODAL, "SQLite Error: " & _SQLite_ErrMsg())
    EndIf
    For $i = 0 To UBound($okey)
    ;Exit MsgBox(0, "Test", $otext & @CRLF & $okey)
    ;Dictionary erstellen
    Global $oDict = ObjCreate("Scripting.Dictionary")
    $okey[$i] = StringLower($okey[$i])
    $okey[$i] = StringReplace($okey[$i], "+", "")
    $okey[$i] = StringReplace($okey[$i], "strg", "^")
    $okey[$i] = StringReplace($okey[$i], "shift", "+")
    $okey[$i] = StringReplace($okey[$i], "alt", "!")
    $oDict($okey[$i]) = $otext[$i]
    HotKeySet($okey[$i], HotKeyHandler)
    ;Exit MsgBox(0, "Test", $otext[$i] & @CRLF & $okey[$i])
    Next

    [/autoit]

    Allerdings werden die Daten aus der Datenbankabfrage aneinandergereiht in die Arrays geschrieben und bilden damit im Prinzip nur ein einziges Element im Array.

    Ich bekomme es einfach nicht, bei der Datenbankabfrage die Arrays korrekt zu befüllen und hoffe nochmals auf Hilfe von den Profis hier :)

  • HotKey dynamisch aus Datenbankabfrage erstellen

    • SmileMan
    • 1. Januar 2015 um 15:28

    Wie ich mit assoziativen Arrays umgehe, weiß ich einigermaßen. Ich habe aber im Moment überhaupt kein plan, wie ich Deinen Vorschlag umsetzen soll. Entweder hab ich einfach noch viel zu wenig Ahnung oder ich stehe verdammt fest aufem Schlauch :)

    Könntest Du mir ein Beispiel geben?

  • HotKey dynamisch aus Datenbankabfrage erstellen

    • SmileMan
    • 1. Januar 2015 um 14:56

    Nachfolgend mal das gesamte Script und die Datenbank im Anhang:

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #include <Constants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Clipboard.au3>
    #include <Date.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPIShellEx.au3>
    #include <GuiMenu.au3>
    #include <WinAPI.au3>
    #include <TrayConstants.au3>
    ;#include "C:\Users\streif.stefan\Desktop\install\test2\settings.au3"
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <StaticConstants.au3>
    #include<Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;FileInstall("hilfe.gif", @TempDir & "\")
    ;FileInstall("Win Makros.rtf", @TempDir & "\")
    ;FileInstall("sqlite3.dll", @TempDir & "\")
    Opt("GUIOnEventMode", 1)
    Opt('TrayOnEventMode', 1)
    Opt('TrayMenuMode', 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $g_idExit, $aQuery, $aRow, $listview, $aResult, $iRows, $iColumns, $iRval, $sItem, $ttest, $setfunc, $sethkey, $manueltext
    Global Enum $e_ftasten = 1000, $e_idOpen, $e_idSave, $e_idExit, $e_options, $e_idCopy, $e_idPaste, $e_idAbout, $fprint
    Global $g_date = @MDAY & "." & @MON & "." & @YEAR
    Global $g_time = @HOUR & ":" & @MIN

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("Smile Autokommentar Tool V.2", 600, 600, -1, $WS_EX_ACCEPTFILES)
    ;GUISetBkColor(0x000000)

    [/autoit] [autoit][/autoit] [autoit]

    ;GUICtrlSetDefBkColor(0x666666)
    ;GUICtrlSetDefColor(0xFFB400)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Bitte ein Button anklicken oder die entsprechende F-Tasten Kombination drücken" & @CRLF & "(STRG + Shift + die auf den Button angezeigten F-Tasten)", 10, 10)
    $listview = GUICtrlCreateListView("Subject |Text|Hotkey", 10, 50, 500, 400)
    ;GUICtrlSetColor(-1, 0xFFB400)
    ;GUICtrlSetBkColor(-1, 0x000000)

    [/autoit] [autoit][/autoit] [autoit]

    ; Create File menu
    $hFile = _GUICtrlMenu_CreateMenu()
    _GUICtrlMenu_InsertMenuItem($hFile, 0, "F-Tasten drucken", $e_ftasten)
    _GUICtrlMenu_InsertMenuItem($hFile, 1, "", 0)
    _GUICtrlMenu_InsertMenuItem($hFile, 2, "Beenden", $e_idExit)

    [/autoit] [autoit][/autoit] [autoit]

    ; Create Options menu
    $hOptions = _GUICtrlMenu_CreateMenu()
    _GUICtrlMenu_InsertMenuItem($hOptions, 0, "Optionen", $e_options)

    [/autoit] [autoit][/autoit] [autoit]

    ; Create Help menu
    $hHelp = _GUICtrlMenu_CreateMenu()
    _GUICtrlMenu_InsertMenuItem($hHelp, 0, "&About", $e_idAbout)

    [/autoit] [autoit][/autoit] [autoit]

    ; Create Main menu
    $hMain = _GUICtrlMenu_CreateMenu()
    _GUICtrlMenu_InsertMenuItem($hMain, 0, "&File", 0, $hFile)
    _GUICtrlMenu_InsertMenuItem($hMain, 1, "&Einstellungen", 0, $hOptions)
    _GUICtrlMenu_InsertMenuItem($hMain, 2, "&Help", 0, $hHelp)

    [/autoit] [autoit][/autoit] [autoit]

    ; Set window menu
    _GUICtrlMenu_SetMenu($hGUI, $hMain)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hilfepic = GUICtrlCreatePic(@TempDir & "\hilfe.gif", 570, 5, 20, 20)
    GUICtrlSetOnEvent($hilfepic, "_Hilfe")
    GUICtrlSetCursor($hilfepic, 4)
    GUICtrlCreateLabel("© 2014 - Tool erstellt von: Stefan Streif", 10, 325, 300, 15)
    GUICtrlSetColor(-1, 0xFFB400)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, '_Minimize')
    TraySetOnEvent(-7, '_Restore')
    GUISetState() ; display the GUI
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

    [/autoit] [autoit][/autoit] [autoit]

    _SETTINGS()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd
    While 1
    Sleep(1000)
    WEnd
    EndFunc ;==>_Main
    Func _SETTINGS()
    _SQLite_Startup()
    If @error Then Exit MsgBox(16, "SQLite Fehler", "SQLite.dll konnte nicht geladen werden!")
    If FileExists("settings.sqlite") Then
    $hDB = _SQLite_Open("settings.sqlite")
    If @error Then Exit MsgBox(16, "SQLite Fehler", "1 - Kann die Datenbank nicht öffnen!")
    ; DB Abfrage der gesamten Tabelle "settings"
    _SQLite_Query($hDB, "SELECT * FROM settings", $aQuery)
    ; Auslesen der nächsten Zeile
    While _SQLite_FetchData($aQuery, $aRow, False, True) = $SQLITE_OK
    Global $uLine1 = $aRow[1]
    Global $uLine2 = $aRow[2]
    Global $uLine3 = $aRow[3]
    Global $sPaste = $aRow[4]
    WEnd
    If _SQLite_GetTable2d($hDB, "Select subject,text,key From texte WHERE active='1'", $aResult, $iRows, $iColumns) = $SQLITE_OK Then
    For $iR = 1 To $iRows
    $sItem = ""
    For $iC = 0 To $iColumns - 1
    $sItem &= $aResult[$iR][$iC] & "|"
    Next
    GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $listview)
    Next
    Else
    MsgBox($MB_SYSTEMMODAL, "SQLite Error: " & _SQLite_ErrMsg())
    EndIf
    $uLine2 = StringReplace($uLine2, "%datum%", $g_date)
    $uLine2 = StringReplace($uLine2, "%zeit%", $g_time)
    $uLine2 = StringReplace($uLine2, "%name%", @UserName)
    $First3Lines = $uLine1 & @CRLF & $uLine2 & @CRLF & $uLine3 & @CRLF
    _SQLite_Query($hDB, "SELECT subject,text,key From texte WHERE active='1'", $aQuery)
    ; Auslesen der nächsten Zeile
    While _SQLite_FetchData($aQuery, $aRow, False, True) = $SQLITE_OK
    $aRow[2] = StringReplace($aRow[2], "+", "")
    $aRow[2] = StringReplace($aRow[2], "STRG", "^")
    $aRow[2] = StringReplace($aRow[2], "Shift", "+")
    $aRow[2] = StringReplace($aRow[2], "ALT", "!")
    Local $hkeyfunc = "ssf("&$manueltext=$aRow[1]&")"
    HotKeySet($aRow[2], $hkeyfunc)
    WEnd
    _SQLite_Close()
    _SQLite_Shutdown()
    Else
    MsgBox(16, "SQLite Fehler", "Die Datenbank wurde nicht gefunden!" & @CRLF & "Es werden nun die 'Einstellungen' geöffnet," & @CRLF & "um eine neue Datenbank zu erstellen!")
    _OPTIONS()
    EndIf
    EndFunc ;==>_SETTINGS
    ; Handle menu commands
    Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $lParam
    Switch _WinAPI_LoWord($wParam)
    Case $e_ftasten
    fprint()
    Case $e_idExit
    Exit
    Case $e_options
    _OPTIONS()
    Case $e_idAbout
    MsgBox(BitOR($MB_OK, $MB_ICONINFORMATION, $MB_DEFBUTTON1, $MB_SYSTEMMODAL, $MB_SETFOREGROUND), 'About', 'Dieses Tool wurde geschrieben von:' & @CRLF & @CRLF & 'Stefan Streif' & @CRLF & 'Technical Support' & @CRLF & 'NL Villingen-Schwenningen' & @CRLF & 'Tel: 07721 6806 29470')
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit] [autoit][/autoit] [autoit]

    ; --------------- Functions ---------------
    Func ssf($manueltext)
    ;_ClipBoard_SetData($uLine1 & @CRLF & $uLine2 & @CRLF & $uLine3 & @CRLF & $manueltext)
    ;If $sPaste = "1" Then Send("^v")
    MsgBox(0, "Test", "Funktionsaufruf hat wohl geklappt.")
    EndFunc ;==>ssf

    [/autoit] [autoit][/autoit] [autoit]

    Func fprint()
    Local $iMsgBoxAnswer
    $iMsgBoxAnswer = MsgBox(4145, "F-Tastenbelegung drucken", "Wenn du auf 'OK' klickst, wird der Druckauftrag sofort gestartet und auf dem in Windows definierten Standard Drucker gedruckt.")
    Select
    Case $iMsgBoxAnswer = 1 ;OK
    $printfile = @TempDir & "\Win Makros.rtf"
    _WinAPI_ShellExecute($printfile, '', '', 'print')
    If @error Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to open "' & $printfile & '".' & @CRLF & @CRLF & @extended)
    EndIf
    Case $iMsgBoxAnswer = 2 ;Cancel
    EndSelect
    EndFunc ;==>fprint
    Func _Hilfe()
    MsgBox(BitOR($MB_ICONQUESTION, $MB_SYSTEMMODAL), 'Information', 'Eine generelle Hilfe gibt es aktuell nicht' & @CRLF & @CRLF & 'Falls bei einer Funktion eine Erklärung notwendig ist,' & @CRLF & @CRLF & 'dann wird bei dieser Funktion ein entsprechendes Hilfezeichen sein.' & @CRLF & @CRLF & 'Solltest Du weitergehende Hilfe brauchen, dann klicke im Menü oben auf "Hilfe" -> "About" und kontaktiere den dort angegebenen Autor dieses Tools.')
    EndFunc ;==>_Hilfe
    Func _NeustartNachDBErstellung()
    MsgBox(BitOR($MB_ICONINFORMATION, $MB_SYSTEMMODAL), 'Information', 'Die Datenbank wurde erstellt. Das Tool wird nach drücken des "OK" Buttons neu gestartet, damit die eben erstellte Datenbank eingelesen und die Einstellungen übernommen werden können.')
    Exit Run(@ScriptFullPath)
    EndFunc ;==>_NeustartNachDBErstellung
    Func OnExit()
    Exit
    EndFunc ;==>OnExit
    Func _Minimize()
    TraySetState(1)
    GUISetState(@SW_HIDE)
    EndFunc ;==>_Minimize
    Func _Restore()
    TraySetState(2)
    GUISetState(@SW_SHOW)
    EndFunc ;==>_Restore

    [/autoit]

    Ich habe es nun hinbekommen, dass die HiotKEySet Funktionen gesetzt werden. Nun stehe ich aber vor einem neuen Problem:

    ich möchte beim Funktionsaufruf der hotkeys, dass in der Funktion Variablen mitgegeben werden, die aus euinem Text bestehen, also so:

    [autoit]


    Local $hkeyfunc = "ssf("&$aRow[1]&")"
    HotKeySet($aRow[2], $hkeyfunc)

    [/autoit]

    Wenn ich die Funktion "ssf" ohne Variable aufrufe, funktioniert es einwandfrei. Sobald ich es aber so umsetze, dass es mit Variable aufgerufen wird, funktioniert der Funktionsaufruf nicht mehr.

    Was mache ich dabei falsch?

  • HotKey dynamisch aus Datenbankabfrage erstellen

    • SmileMan
    • 1. Januar 2015 um 13:28

    Hallo zusammen,

    ich möchte mehrere Hotkeys erstellen, die dynamisch aus Werten einer Datenbankabfrage zusammengestellt werden. Wieviele es am Ende sid, ist ganz unterschiedlich und vorher nicht bekannt.

    Hier ist mein bisheriger Versuch:

    Spoiler anzeigen
    [autoit]


    _SQLite_Query($hDB, "SELECT subject,text,key From texte WHERE active='1'", $aQuery)
    ; Auslesen der nächsten Zeile
    _SQLite_FetchData($aQuery, $aRow, False, True)
    For $fi = 0 To UBound($aRow)-1
    $aRow[2] = StringReplace($aRow[2], "+", "")
    $aRow[2] = StringReplace($aRow[2], "STRG", "^")
    $aRow[2] = StringReplace($aRow[2], "Shift", "+")
    $aRow[2] = StringReplace($aRow[2], "ALT", "!")
    $sethkey &= HotKeySet($aRow[2], "ssf")
    $fi+1
    Next
    _SQLite_Close()
    _SQLite_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func ssf()
    MsgBox(0, "Test", "Funktionsaufruf durch HotKey hat wohl geklappt.")
    EndFunc ;==>ssf

    [/autoit]

    Der Wert "key" aus der Datenbank enthält z. B. "STRG+Shift+F2". Dieser wird dann durch StringReplace in die richtige Form gebracht, was auch einwandfrei funktioniert.

    Nur kriege ich es nicht hin, dann die HotKeySet Funktionen entsprechend gesetzt werden, sodass diese am Ende funktioneren.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™