Moin,
noch eine Möglichkeit: String mit StringSplit(String, "1", 3) aufteilen und mit zufälligen Ersatzzeichen wieder zusammensetzen.
Guten Rutsch!
Moin,
noch eine Möglichkeit: String mit StringSplit(String, "1", 3) aufteilen und mit zufälligen Ersatzzeichen wieder zusammensetzen.
Guten Rutsch!
Moin,
noch ein paar Anmerkung zum Weihnachtsfest:
1. Die Funktion IniRead bietet - wie Du bereits generkt hast - die Möglichkeit, einen Defaultwert vorzugeben. Dieser Wert wird nicht nur dann genutzt, wenn der Schlüssel in der INI-Datei nicht gefunden wird, sondern auch dann, wenn die INI-Datei nicht existiert. An Stelle von -1 solltest Du deshalb den echten Standardwert eintragen.
2. Es scheint mir bei dem gegebenen Skript recht unwahrscheinlich, dass der Benutzer die Fenstergröße verändern kann. Es sollte deshalb reichen, sich die Fenterposition (X/Y) zu merken.
3. Wenn Du versuchst, die Werte schon vor dem GUICreate() zu ermitteln, kannst Du sie direkt verwenden und musst das Fenster nicht nachträglich verschieben.
Frohe Weihnachten und einen gutenRutsch!
Moin,
Deine Funktion _StandardPos versorgt ausschließlich lokale Variable, die außerhalb der Funktion nicht sichtbar sind. Das macht keinen Sinn, wenn Du sie nicht innerhalb der Funktion für ein WinMove benutzt (wie bei _GUIRestorePositions).
Außerdem wird nach der Funktion unbedingt immer _GUIRestorePositions aufgerufen. Das macht auch keinen Sinn, wenn es die Datei nicht gibt und man nicht die gewünschten Defaultwerte vorgibt.
Frohes Fest!
... dem schließe ich mich an!
Alles Gute, Velted
Moin,
das meinte ich nicht. Hast Du meinen Vorschlag mal ausprobiert?
Wenn Du einen Parameter in einer Verküpfung definierst, wem wir der wohl übergeben?
Moin,
wenn Du den Show-Status beim Start übergibst, kannst Du erst einmal
probieren. Wenn das nicht hilft, kannst Du versuchen, die Funktion _WinAPI_GetStartupInfo( ) aufzurufen.
Die Strukturbeschreibung für $tagSTARTUPINFO findest Du in im Include StructureConstants.au3.
Moin,
weil das konkrete Problem recht einfach mit einem Map-Objekt gelöst werden kann, gibt es noch einen späten Nachschlag:
#Include <Array.au3>
Local $aArray[5][5] = [[0, "Test1", 27, 1, 0], _
[1, "Test1", 27, 4, 2], _
[2, "Test2", 28, 1, 3], _
[3, "Test3", 29, 1, 0], _
[4, "Test4", 29, 4, 1]]
Local $mOfArrays = _SeparateByColumn($aArray, 2)
For $Key In MapKeys($mOfArrays)
_ArrayDisplay($mOfArrays[$Key])
Next
Func _SeparateByColumn(Const $aArr, $iCol)
Local $mOut[]
Local $iCols = UBound($aArr, 2)
For $I = 0 To UBound($aArr) - 1
$mOut[$aArr[$I][$iCol]] &= $I & " "
Next
For $Key In MapKeys($mOut)
$aRows = StringSplit(StringStripWS($mOut[$Key], 2), " ", 2)
Local $aTmp[UBound($aRows)][$iCols]
For $I = 0 To UBound($aRows) - 1
For $J = 0 To $iCols - 1
$aTmp[$I][$J] = $aArr[$aRows[$I]][$J]
Next
Next
$mOut[$Key] = $aTmp
Next
Return $mOut
EndFunc
Alles anzeigen
ich würde meinen, dass Microsoft eine recht große Mitverantwortung hat. Ich kenne viele Leute, die nicht wissen, dass so etwas wie 'Schnellstart' überhaupt existiert. Diese Option bei der Istallation ungefragt zu aktivieren, ist schon recht dreist.
Die Keylogger wird es aber freuen. Einmal ins System integriert wird der Logger immer wieder automatisch mitgeladen, ohne auffällige Veränderungen am System vornehmen zu müssen.
Frohen 2. Advent für Alle!
Velted
Alles anzeigenIch habe folgendes festgestellt.
Fahre ich den PC ohne die "Großschreibtaste" gedrück zu halten herunten und starte dann neu, stimmt die Zahl nicht, es kommt das vorletzte mal Herunterfahren aus Ausgabe.
Halte ich beim Herunterfahren die "Großschreibtaste", so simmt es auf die Minute.
Da sagt mir doch, das es zwischen diesen Beiden Arten des Herunterfahrens ein Unterschied gibt, der meiner Meinung nach nicht zu übersehen sein sollte.
Ich fahre immer mit der gehaltenden "Großschreibtaste" herunter. Der PC braucht danach nur nein paar Sekunden mehr, was aber nicht mal ein Schluck Kaffee wert ist.
Och ist das nur bei mir so, weil ich etwas vergessen habe ein/aus zu schalten? *kopfkratzen*
Ich bescheibe das mal für ein deutsches Win 10:
Es geht um die berühmt/berüchtigte Option 'Schnellstart aktivieren'. Die wird von Windows bei einer neuen Installation eingeschaltet, ohne dass der Benutzer gefragt wird. Es soll den Benutzer mit schnellen Startzeiten beeindrucken. Man erkauft sich das aber damit, dass das System nur auf Platte gespeichert im aktuellen Zustand bereitgehalten wird, ohne es richtig zu beenden (syspend to disk bzw.Hibernation).
Zur Einstellung führt folgender Weg:
1. System-App 'Einstellungen' öffnen.
2. 'Netzbetrieb und Energiesparmodus' öffnen.
3. Rechts auf 'Zusätzliche Energieeinstellungen' klicken.
4. Links 'Auswählen, was beim Drücken von Netzschaltern geschehen soll' klicken.
5. Jetzt siehst Du unter den Buttons die Checkbox 'Schnellstart aktivieren (empfohlen)'.
6. Wenn die angeschaltet aber ausgegraut ist, musst Du oben auf 'Einige Einstellungen sind momentan nicht verfügbar' klicken.
7. Jetzt solltest Du den Schnellstart abschalten können.
Wenn man sich den etwas unübersichtlichen Weg in Ruhe betrachtet, scheint Microsoft das Abschalten nicht zu mögen.
Mach damit, was Du willst!
Velted
Moin,
kannst Du einen Link auf die Anwendungsdoku einstellen oder die zu SQLite gehörenden Teile zitieren?
Edit:
Ich habe heute den kompletten connectingstring direkt ins letzte Feld geschrieben, dort auch den Driver definiert.
Würdest Du mal zeigen, was Du eingetragen hast?
Moin,
wenn ein Softwareanbieter zusichert, dass seine Anwendung mit SQLite-Datenbanken umgehen kann, sollte er auch dokumentieren oder zumindest auf Nachfrage konkret beschreiben können, wie man die Verbindung zur Datenbank herstellt.
Wenn die Anwendung eine integrierte Schnittstelle zur SQLite3.dll hat, sollte es reichen, der Anwendung den Pfad zur Datenbank (und evtl. auch den Pfad der DLL) zu übergeben. Andere Möglichkeiten wären die Einrichtung einer ODBC-Datenquelle mit Hilfe der App ' ODBC-Datenquellen Administrator' (Win 10) oder die Vorgabe eines 'Connection Strings' für eine Verbindung per OLEDB/ADODB.
Es macht allerdings meiner Meinung nach keinen Sinn blind herumzustochern, wenn Dir der Anbieter nicht verraten will oder kann, was Du brauchst.
Schade, bei mir (Win 10 pro) funktioniert es. Ich glaube aber mich zu erinnern, dass es mit $WM_CHANGEUISTATE nicht wirklich funktioniert.
Moin,
Func HideFocusBorder() ist eine Übersetzung aus meinem AHK-Pool. Meine anderen Versuche hatten keinen Erfolg.
#include <FontConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiTab.au3>
#include <StructureConstants.au3>
#include <WinAPIGdi.au3>
#include <WindowsConstants.au3>
#include <WinAPISysWin.au3>
Global $g_hGui = GUICreate('Test')
Global $g_hTab = GUICtrlGetHandle(GUICtrlCreateTab(10, 10, 380, 200, BitOR($TCS_MULTILINE,$TCS_OWNERDRAWFIXED)))
GUICtrlCreateTabItem('Alpha')
GUICtrlCreateTabItem('Beta')
GUICtrlCreateTabItem('Gamma')
GUICtrlCreateTabItem('Delta')
GUICtrlCreateTabItem('Epsilon')
GUICtrlCreateTabItem('Zeta')
GUICtrlCreateTabItem('Eta')
GUICtrlCreateTabItem('Theta')
GUICtrlCreateTabItem('Iota')
GUICtrlCreateTabItem('Kappa')
GUICtrlCreateTabItem('Lambda')
GUICtrlCreateTabItem('My')
GUICtrlCreateTabItem('Ny')
GUICtrlCreateTabItem('Xi')
GUICtrlCreateTabItem('Omikron')
GUICtrlCreateTabItem('Pi')
GUICtrlCreateTabItem('Rho')
GUICtrlCreateTabItem('Sigma')
GUICtrlCreateTabItem('Tau')
GUICtrlCreateTabItem('Ypsilon')
GUICtrlCreateTabItem('Phi')
GUICtrlCreateTabItem('Chi')
GUICtrlCreateTabItem('Psi')
GUICtrlCreateTabItem('Omega')
; Tab item color:
;~ Global $g_BGcolor = 0xCC483F ; hellblau
;~ Global $g_BGcolor = 0x409340 ; grün
;~ Global $g_BGcolor = 0x3030FF ; rot
;~ Global $g_BGcolor = 0xE3E3E3 ; dunkelgrau
Global $g_BGcolor = 0xF0F0F0 ; lichtgrau
;~ Global $g_BGcolor = 0x000000 ; schwarz
GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
GuiRegisterMsg($WM_UPDATEUISTATE, "HideFocusBorder")
HideFocusBorder($g_hTab)
GUISetState()
Do
Until GUIGetMsg() = -3
; ==============================================================================================
; Hides the focus border for the given GUI control or GUI and all of its children.
; Call the function passing the HWND of the control / GUI in $hWnd as only parameter.
; WM_UPDATEUISTATE -> https://learn.microsoft.com/en-us/windows/win32/menurc/wm-updateuistate
; WM_UPDATEUISTATE = 0x0128
; The Old New Thing -> https://devblogs.microsoft.com/oldnewthing/20130516-00/?p=4343
; ==============================================================================================
Func HideFocusBorder($hWnd, $iMsg = Default, $wParam = Default, $lParam = Default)
Static $Affected[] ; affected controls / GUIs
Static $HideFocus = 0x00010001 ; UIS_SET << 16 | UISF_HIDEFOCUS
Switch $iMsg
Case $WM_UPDATEUISTATE ; called by message handler
Select
Case $wParam = $HideFocus
$Affected[$hWnd] = True
Case $Affected[$hWnd]
_WinAPI_PostMessage($hWnd, 0x0128, $HideFocus, 0)
EndSelect
Case Else
If IsHwnd($hWnd) Then _WinAPI_PostMessage($hWnd, 0x0128, $HideFocus, 0)
EndSwitch
EndFunc
Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local Const $ODT_TAB = 101
Local Const $ODA_DRAWENTIRE = 0x1
Local $DIS = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam) ; DRAWITEMSTRUCT
If $DIS.hItm <> $g_hTab Then Return $GUI_RUNDEFMSG
If BitAND($DIS.cType, $ODT_TAB) <> $ODT_TAB Then Return $GUI_RUNDEFMSG
If BitAND($DIS.itmAction, $ODA_DRAWENTIRE) <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
Local $tRect = DllStructCreate($tagRECT, DllStructGetPtr($DIS, 'itmRect'))
Local $bFocus = (_GUICtrlTab_GetCurFocus($DIS.hItm) = $DIS.itmID)
Local $itmText = _GUICtrlTab_GetItemText($DIS.hItm, $DIS.itmID)
Local $hFont = _WinAPI_CreateFont(14.5, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Lucida Sans Unicode Standard')
Local $hOldFont = _WinAPI_SelectObject($DIS.hDC, $hFont)
; draw and fill rect
Local $hBrush = _WinAPI_CreateSolidBrush($g_BGcolor)
Local $hOldBrush = _WinAPI_SelectObject($DIS.hDC, $hBrush)
_WinAPI_Rectangle($DIS.hDC, $tRect)
; draw text
_WinAPI_SetTextColor($DIS.hDC, _GuiCtrl_GetColorContrast($g_BGcolor))
_WinAPI_SetBkColor($DIS.hDC, $g_BGcolor)
; move text rect by focus
If $bFocus Then
_WinAPI_InflateRect($tRect, 0, -2) ; reduce rectangle
_WinAPI_OffsetRect($tRect, 0, 2) ; move rectangle down by 2px
EndIf
_WinAPI_DrawText($DIS.hDC, $itmText, $tRect, BitOR($DT_BOTTOM,$DT_CENTER))
; clear ressources
_WinAPI_SelectObject($DIS.hDC, $hOldFont)
_WinAPI_DeleteObject($hFont)
_WinAPI_SelectObject($DIS.hDC, $hOldBrush)
_WinAPI_DeleteObject($hBrush)
Return 0
EndFunc
; #FUNCTION# =======================================================================================
; Name ..........: _GuiCtrl_GetColorContrast
; Description ...: The appropriate contrast color for the text is determined depending
; ...............: on the brightness of the BG color.
; Parameter(s)...: $_BkCol The background color
; ....[optional].: $_ColOnDark The text color if BG is dark (Default: -1, almost white)
; ....[optional].: $_ColOnBright The text color if BG is bright (Default: -1, very deep blue)
; Return values .: Text color
; Author ........: BugFix
; ==================================================================================================
Func _GuiCtrl_GetColorContrast($_BkCol, $_ColOnDark=-1, $_ColOnBright=-1)
$_ColOnDark = $_ColOnDark = -1 ? 0xFAFAFA : $_ColOnDark
;~ $_ColOnBright = $_ColOnBright = -1 ? 0x000088 : $_ColOnBright ; RGB
$_ColOnBright = $_ColOnBright = -1 ? 0x440000 : $_ColOnBright ; BGR
; get contrast
Local $R = BitAND(BitShift($_BkCol, 16), 0xFF)
Local $G = BitAND(BitShift($_BkCol, 8), 0xFF)
Local $B = BitAND($_BkCol, 0xFF)
Local $Brightness = Sqrt($R^2*0.299 + $G^2*0.587 + $B^2*0.114)
Return ($Brightness < 140 ? $_ColOnDark : $_ColOnBright)
EndFunc
Alles anzeigen
Moin,
wenn Du mit Fehlercode = 1 meinst, dass @error = 1 ist, kann der Fehler aus
in _SQLite_Exec() stammen. Dann müsste $SQLiteResult den Wert 21 enthalten und in @extended sollte der ursprünglich vom DllCall gesetzte Fehler zu finden sein. Hast Du das mal geprüft?
Bei von SQLite gelieferten Fehlern sollte @error auf -1 gesetzt sein und eine Fehlermeldung per ConsoleWrite() erstellt werden, wenn das Skript nicht compiliert ist,
Moin,
das mag mit dem Problem nicht viel zu tun haben, aber ich verstehe Folgendes nicht:
Func _MouseHoversTab()
Local Static $iHoverLast = 1 ; bei Programmstart muss Verlassen des Item simuliert werden
...
If $isHover = 1 And $iHoverLast = 0 Then
$iHoverLast = 1
ElseIf $isHover = 0 And $iHoverLast = 1 Then
$iHoverLast = 1
Return _DrawTabItem()
EndIf
EndFunc
Wenn die Variable $iHoverLast eine Funktion haben soll, sollte es dann im ElseIf nicht eher $iHoverLast = 0 sein?
Stimmt auffallend.
Dort ist die gleiche Vermischung aus Wert und Kodierung.
Jetzt würde mich nur noch interessieren, welchen Wert die Funktion Deiner Meinung nach liefern sollte.
Moin,
gut, einigen wir uns auf 'Bug'. Solange die Entwickler anderer Meinung bleiben, ist es sowieso egal.
Die Konsequenz wäre auch für mich, "Hexadezimalzahlen" mit 8 Stellen und einem Wert >= 8 in der führenden Stelle immer als Int64 zu behandeln. Ich wäre auch ziemlich sicher, dass diese Korrektur kaum Schaden in bestehenden Skripten anrichten würde.
Hosianna!