Beiträge von Crys
-
-
Danke, aber der Reg-Pfad bringt mir nicht viel ... nur einen Schlüssel rein packen (wie es die meisten Programme machen) reicht nicht.
NSIS ist nicht schlecht, aber wieder ein extra Programm, neue Befehle lernen und mit neuen Einschränkungen zurecht kommen.
Das selbe geht auch in AutoIt ... mir fehlen ja nur die Reg-Befehle! Und wenn man installieren kann, dann ist deinstallieren die leichteste Übung.
-
Ich möchte ein paar größere AutoIt Projekte von mir richtig in Windows installieren, dass die Programme unter "Programme und Funktionen" in der "Systemsteuerung" gelistet werden!
Doch da hapert es, was muss ich wo in der Registry eingeben?
Und wie mache ich das am geschicktesten mit AutoIt?Der Rest klappt: GUI, Verzeichnis wählen und Dateien dort hin kopieren, Verknüpfungen in Autostart, Startmenü und Desktop.
Fehlt sonst noch was?Oder gibt es dafür schon ein fertiges Skript?
Wenn nicht, könnt ihr mir mit der Registry bitte helfen! -
Danke, das ist es doch
Jetzt brauche ich den Befehl nur z.B. ausführen lassen, wenn man das Programm schließt und schon bleibt die Datenbank immer klein.
Dieser Befehl braucht bei einer 10MB Datei auch nur 0,1s ... meine SQLite -> sql-Datei -> SQLite Aktion hat 30s gebraucht
-
Wenn ich mit SQLite Daten hantiere, dann passiert es hin und wieder, dass ich große Datenmengen löschen muss.
Dabei passt sich die SQLite nicht mehr den neuen Inhalt an, das heißt sie hat noch immer die selbe physische Größe!Ein Beispiel:
[autoit]
Ich habe eine SQLlite Datei (auf meinem PC), die 10,38MB groß ist, dann lösche ich eine riesige Tabelle ..._SQLite_Exec(-1, "DROP TABLE `tabelle`;")
[/autoit]... was 90% der Daten in der Datei entspricht. Die SQLite-Datei bleibt aber genau 10,38MB groß!
Wenn ich den Inhalt der SQLite-Datei in eine sql-Datei exportiere und eine neue SQLite-Datei erzeuge, dann ist diese nur noch 1MB groß!Gibt es eine Möglichkeit, dass ich die Größe der SQLite-Datei anpasse, ohne das ich eine neue Datei erstelle?
Notiz
Ich weiß, dass das wahrscheinlich kein AutoIt Problem ist, aber nur mit AutoIt arbeite ich mit SQLite.
Und lösen möchte ich das ja auch mit AutoIt-Befehlen
-
Davor noch schwarz machen _GUICtrlRichEdit_SetCharColor($hRichEdit, 0x000000), dann ist es perfekt!
Danke
-
Danke ThPfund
Habe immer unter _GUICtrlRichEdit_Set... geschaut, das hab ich nicht gesehen.Aber die Funktion ist verbuggt: wenn man die GUI minimiert und wieder hoch holt, dann kann man den Text wieder markieren :wacko:
Und der Cursor wird auch immer blinkend im Textfeld angezeigt ...Aber erst mal passt das ja ... vielleicht finde ich zu den Bugs ja auch noch ne Lösung .. oder jemand Anderes

-
Bei mir geht dein Skript, mit den Verbesesrungen von Cheater!
Kommt bei dir noch der selbe Fehler?Du solltest dir mal den AutoIt Syntax genauer anschauen!
-
Danke, kannte ich bisher nicht!
Edit1:
Also ich komme damit überhaupt nicht zurecht ... ich möchte dass das RichEdit Element genauso wie ein Label aussieht und sich auch so verhält.
Es soll keinen Rahmen haben, keine Hintergrundfarbe, der Text soll nicht markierbar und editierbar sein und ich möchte eben bestimmte Wörter fett haben.Edit2:
[autoit]
Ich bekomme es nicht hin, dass man den Text nicht markieren kann, dass das Control keinen Rahmen hat und das die GUI-Farbe der RichEdit-Farbe entspricht!#include <GuiRichEdit.au3>
[/autoit][autoit][/autoit][autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Local $gui, $iMsg, $hRichEdit, $text, $farbe = 0x99B4D1
[/autoit][autoit][/autoit][autoit]$text = "{\rtf1"
[/autoit][autoit][/autoit][autoit]
$text &= "Das ist {\b der} erste Absatz."
$text &= "\par Und das {\b ist der} zweite Absatz."
$text &= "}"$gui = GUICreate("Beispiel", 320, 350, -1, -1)
[/autoit][autoit][/autoit][autoit]
GUISetBkColor($farbe)
$hRichEdit = _GUICtrlRichEdit_Create($gui, $text, 10, 10, 300, 220)
_GUICtrlRichEdit_SetBkColor($hRichEdit, $farbe)
GUISetState()While True
[/autoit]
$iMsg = GUIGetMsg()
Select
Case $iMsg = $GUI_EVENT_CLOSE
;_GUICtrlRichEdit_Destroy($hRichEdit)
GUIDelete()
Exit
EndSelect
WEndZitat_GUICtrlRichEdit_Destroy() muss aufgerufen werden bevor das Script endet.
Quelle! Wieso eigentlich, merke keinen Unterschied, wenn nicht!
-
Es klingt simpel, aber ich bekomme es nicht hin:
[autoit]
Wie kann man einen Teil von einem Text z.B. in meinem Label fett machen?GUICtrlCreateLabel("Dieser Satz soll normal sein. Dieser Satz hier soll fett sein.", -1, -1)
[/autoit]
Der Text ist dynamisch, ich kann nicht einfach das, was fett sein soll, noch mal fett überzeichnen.Geht das überhaupt in AutoIt?
Wenn ja, wie? -
Danke Bert, so klappt es erst mal!
Leider geht dadurch das Mausscrollen im Child kaputt, wieso auch immer ... aber mit den Scrollbars hab ich eh mehr Probleme als Nutzen! -
Danke euch allen!
Jetzt habe ich viele funktionierende Möglichkeiten!

-
Danke, bis auf das letztere (was auch nicht funktioniert) kannte ich die Funktionen schon.
Nur denke ich das es per Datei nicht ganz optimal in der Ausführung und Performace funktioniert und per TCP habe ich es mit Einschränkungen bei mir zum laufen bekommen. Ich danke das kann man auf einen fremden Rechner vergessen.Ich hatte es so per ini gelöst:
[autoit='asdasd']while 1
[/autoit]
if $zeit < (@HOUR & @MIN & @SEC & @MSEC) then
GUICtrlSetData($ctrl_p1, IniRead($ini_datei, "prozess", "param1", "###"))
GUICtrlSetData($ctrl_p2, IniRead($ini_datei, "prozess", "param2", "###"))
$zeit = (@HOUR & @MIN & @SEC & @MSEC) + 500
endif
wendEs wird alle 0,5s die ini abgefragt ... die CPU-Auslastung ist nicht merkbar.
Wenn jemand doch noch eine andere Lösung im Ärmel hat, nur her damit

-
Ich möchte an ein laufendes Programm/Skript Parameter übergeben (selbst geschrieben).
Per "start.exe p1 p2" kann man an die Anwendung start.exe ja bekanntlich die Parameter p1 und p2 übergeben.
Das Programm start.exe ist aber schon gestartet und soll neue Parameter erhalten (ohne es zu beenden und neu zu starten)!Ist das Möglich?
Wenn ja, wie? -
Ich habe eine GUI die eine Child-GUI enthält.
Wenn man auf die Child-GUI klickt verliert die Parent-GUI den Fokus.
Wie kann man das verhindern?minimal Beispiel
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>$parent = GUICreate("Form1", 688, 466, 192, 124)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("Parent", 176, 10, 35, 17)$child = GUICreate("", 668, 406, 10, 50, BitOR($WS_POPUP, $WS_GROUP, $WS_VSCROLL, $WS_CLIPSIBLINGS), $WS_EX_MDICHILD, $parent)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0xc0d8f1)
GUICtrlCreateLabel("Child", 176, 64, 35, 17)GUISetState(@SW_SHOW, $parent)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $child)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitEndSwitch
[/autoit]
WEnd -
Danke Greenhorn!
Jetzt klappt's ...Ich habe es jetzt noch einmal mit _GUIScrollBars_SetScrollRange() probiert und habe etwas festgestellt: Der "Zahlenwert" darf nicht kleiner sein, als die Höhe der Child-GUI!
Wenn man einen kleineren Wert einsetzt, passiert gar nichts.
Mit "Zahlenwert" meine ich die Zahlen, die bei $nMinPos und $nMaxPos in _GUIScrollBars_SetScrollRange() (und andere _GUIScrollBars_Set[...]() Funktionen) eingesetzt wird!Durch ausprobieren habe ich herausgefunden, dass dieser "Zahlenwert" ungefähr ein 16tel der Pixel entspricht.
In einen anderen Skript von mir ist die Child-GUI 432px hoch und ab einen "Zahlenwert" von 27 verändert sich nichts mehr mit _GUIScrollBars_SetScrollRange()! 437 / 27 => 16!Was ist das für ein "Zahlenwert", denn man in die _GUIScrollBars_Set[...]()-Funktionen einsetzt?
-
Ok und wie löse ich das Problem?

-
Ich meinte das Beispiel aus der AutoIt-Hilfe: _GUIScrollBars_Init
Das ist schon ein Triviales Beispiel (ironie) und ich weiß auch nicht, ob das so aussehen soll:
[Blockierte Grafik: http://saved.im/mtg2mjm5d2tq_vs/autoit_scrollbar_beispiel.png]
Zumindest sieht es so bei mir aus ... aber dort is ja alles wie in meinem Beispiel ...
... und nichts mit neu berechnen der Scrollbar-Größe!Beispiele in der MSDN findest Du hier: Using Scroll Bars
Ich finde da immer noch keine AutoIt Beispiele ...
EDIT: Warum soll Dein Skript nicht unter 64bit laufen ?
Wer hat das behauptet?
Das Maus-Scrollen funktioniert in meiner Version nicht, wenn das Skript als x64 kompiliert wurde. -
Die Grundlagen kenn ich ja, meine Scrollbar(s) funktionieren ja!
Ich kann zwar recht gut englisch, das meiste verstehe ich, kenne aber nur wenige IT-Fachbegriffe auf deutsch ... noch weniger auf englisch, habe da ein paar Probleme.
Auch finde ich da kein Beispiel ...Ich denke, dass es am $WS_VSCROLL Parameter von Windows liegt, denn tut der nicht aktualisieren ...
Wenn ich "crys_scroll()" bzw "_GUIScroll_Init()" ein weiteres mal aufrufe, sollte AutoIt ja $WS_VSCROLL neu bestimmen, macht der aber irgendwie nicht. -
Ich habe nur Probleme mit den Scrollbars in meinen GUIs ...
Was ich möchte:
Das ich die Größe der Scrollbar-GUI ändern kann. Nicht die Scrollbar selbst, auch nicht die Child-GUI, sondern der eigentliche Bereich in der Child-GUI!
Wenn ich den Inhalt in der Child-Gui ändere, soll sich der scrollbare Bereich dazu auch anpassen!Hier mal zwei Systeme, wie ich die Scrollbar anwende:
Mein Zusammengeschusterttes Skript
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiScrollBars.au3>
#include <ScrollBarConstants.au3>$gui_db = GUICreate("Test", 500, 300, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
$knopf = GUICtrlCreateButton("Neuordnen", 10, 260, 100, 30)$gui_db_scroll = GUICreate("", 500, 200, 0, 50, BitOR($WS_POPUP, $WS_GROUP, $WS_VSCROLL, $WS_CLIPSIBLINGS), $WS_EX_MDICHILD, $gui_db)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0xc0d8f1)local $Label[20]
[/autoit] [autoit][/autoit] [autoit]
for $n=0 to 19
$Label[$n] = GUICtrlCreateLabel("Label" & $n+1, 10, $n*30+10)
nextcrys_scroll()
[/autoit] [autoit][/autoit] [autoit]
_GUIScrollBars_Init($gui_db_scroll, -1, 40)
_GUIScrollBars_ShowScrollBar($gui_db_scroll, $SB_HORZ, False)GUISetState(@SW_SHOW, $gui_db)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $gui_db_scroll)while 1
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
case $GUI_EVENT_CLOSE
exitloop
case $knopf
for $x=5 to 19
GUICtrlDelete($Label[$x])
next
crys_scroll()
_GUIScrollBars_Init($gui_db_scroll, -1, 10)
_GUIScrollBars_ShowScrollBar($gui_db_scroll, $SB_HORZ, False)
EndSwitch
wend; ### Scrollen mit Mausrad ermöglichen ###
[/autoit] [autoit][/autoit] [autoit]
Func crys_scroll()
; kein scollen unter 64bit
if @AutoItX64 then
MsgBox(48, "Achtung", "Kein Maus-scollen in der 64bit Version dieses Programmes möglich!", 2)
endif
;MsgBox(0, "", "Scrollen gestartet!", 1)
GUIRegisterMsg($WM_SIZE, "crys_scroll_size")
GUIRegisterMsg($WM_VSCROLL, "crys_scroll_vscroll")
if @AutoItX64 = 0 then GUIRegisterMsg($WM_MOUSEWHEEL, "crys_scroll_mouse")
EndFunc
Func crys_scroll_mouse($hWnd, $Msg, $wParam, $lParam)
#forceref $Msg, $wParam
If $wParam == "0x00780000" then
for $i = 0 To 4 Step 1
crys_scroll_vscroll($hWnd, 0x0, 0x00000000, 0) ;1 mal kurz nach oben Scrollen - selber Effekt wie auf den Pfeil klicken
Next
ElseIf $wParam == "0xFF880000" then
for $i = 0 To 4 Step 1
crys_scroll_vscroll($hWnd, 0x0, 0x00000001, 0) ;1 mal kurz nach unten Scrollen - selber Effekt wie auf den Pfeil klicken
Next
EndIf
EndFunc
Func crys_scroll_size($hWnd, $msg, $wParam, $lParam)
#forceref $Msg, $wParam
Local $index = -1, $yChar, $xChar, $xClientMax, $xClient, $yClient, $ivMax
For $x = 0 To UBound($aSB_WindowInfo) - 1
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$xClientMax = $aSB_WindowInfo[$index][1]
$xChar = $aSB_WindowInfo[$index][2]
$yChar = $aSB_WindowInfo[$index][3]
$ivMax = $aSB_WindowInfo[$index][7]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
[/autoit] [autoit][/autoit] [autoit]; Retrieve the dimensions of the client area.
[/autoit] [autoit][/autoit] [autoit]
$xClient = BitAND($lParam, 0x0000FFFF)
$yClient = BitShift($lParam, 16)
$aSB_WindowInfo[$index][4] = $xClient
$aSB_WindowInfo[$index][5] = $yClient; Set the vertical scrolling range and page size
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE, $SIF_POS))
DllStructSetData($tSCROLLINFO, "nMin", 0)
DllStructSetData($tSCROLLINFO, "nMax", $ivMax)
DllStructSetData($tSCROLLINFO, "nPage", $yClient / $yChar)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO); Set the horizontal scrolling range and page size
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE, $SIF_POS))
DllStructSetData($tSCROLLINFO, "nMin", 0)
DllStructSetData($tSCROLLINFO, "nMax", 2 + $xClientMax / $xChar)
DllStructSetData($tSCROLLINFO, "nPage", $xClient / $xChar)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)Return $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]
EndFunc
Func crys_scroll_vscroll($hWnd, $msg, $wParam, $lParam)
#forceref $Msg, $wParam, $lParam
Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
Local $index = -1, $yChar, $yPos
Local $Min, $Max, $Page, $Pos, $TrackPosFor $x = 0 To UBound($aSB_WindowInfo) - 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$yChar = $aSB_WindowInfo[$index][3]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0; Get all the vertial scroll bar information
[/autoit] [autoit][/autoit] [autoit]
Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
$Min = DllStructGetData($tSCROLLINFO, "nMin")
$Max = DllStructGetData($tSCROLLINFO, "nMax")
$Page = DllStructGetData($tSCROLLINFO, "nPage")
; Save the position for comparison later on
$yPos = DllStructGetData($tSCROLLINFO, "nPos")
$Pos = $yPos
$TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")Switch $nScrollCode
[/autoit] [autoit][/autoit] [autoit]
Case $SB_TOP ; user clicked the HOME keyboard key
DllStructSetData($tSCROLLINFO, "nPos", $Min)Case $SB_BOTTOM ; user clicked the END keyboard key
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Max)Case $SB_LINEUP ; user clicked the top arrow
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)Case $SB_LINEDOWN ; user clicked the bottom arrow
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)Case $SB_THUMBTRACK ; user dragged the scroll box
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
EndSwitch;~ // Set the position and then retrieve it. Due to adjustments
[/autoit] [autoit][/autoit] [autoit]
;~ // by Windows it may not be the same as the value set.DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
[/autoit] [autoit][/autoit] [autoit]
_GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
_GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
;// If the position has changed, scroll the window and update it
$Pos = DllStructGetData($tSCROLLINFO, "nPos")If ($Pos <> $yPos) Then
[/autoit] [autoit][/autoit] [autoit]
_GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
$yPos = $Pos
EndIfReturn $GUI_RUNDEFMSG
[/autoit]
EndFuncIch verstehe nicht, was ich bei _GUIScrollBars_Init() für die Seitenhöhe eingeben soll ... ich habe "40" eingetippt, dass sind aber weder Pixel noch Zoll ...
Wenn man auf den Button "Neuordnen" klickt, passiert nicht was wahre mit der Scrollbar, die verändert sich, wird aber nicht kleiner!Nach Großvater
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include "GuiScroll.au3"$gui_db = GUICreate("Test", 500, 300, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
$knopf = GUICtrlCreateButton("Neuordnen", 10, 260, 100, 30)$gui_db_scroll = GUICreate("", 500, 200, 0, 50, BitOR($WS_POPUP, $WS_GROUP, $WS_VSCROLL, $WS_CLIPSIBLINGS), $WS_EX_MDICHILD, $gui_db)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0xc0d8f1)local $Label[20]
[/autoit] [autoit][/autoit] [autoit]
for $n=0 to 19
$Label[$n] = GUICtrlCreateLabel("Label" & $n+1, 10, $n*30+10)
next_GUIScroll_Init($gui_db_scroll, 1, 1, 20)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $gui_db)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $gui_db_scroll)while 1
[/autoit]
Switch GUIGetMsg()
case $GUI_EVENT_CLOSE
exitloop
case $knopf
for $x=5 to 19
GUICtrlDelete($Label[$x])
next
_GUIScroll_Init($gui_db_scroll, 1, 1, 20)
EndSwitch
wendWenn man hier auf den Button "Neuordnen" klickt, passiert überhaupt nichts!
Und es gibt den Bug, dass man auch die Haupt-GUI scrollen kann ... wieso auch immer!Btw.: Wenn ich gerade dabei bin...
... kann man es verhindern, dass wenn man etwas in der Child-GUI anklickt, die Haupt-GUI den Fokus verliert?
Und das die Haupt-Gui von der Startleiste so einen Effekt macht, wenn man das Programm startet ... es wird von der Startleiste her größer .. wie jedes Programm, das man ab Vista von der Startleiste holt. Weil die Child-GUI poppt immer ohne Effekt vorher an der stelle hin, bevor die Haupt-GUI da angekommen ist!