aber bei sachen wie cmd, explorer, calc, control und so funktioniert das nicht....
Wie kommst du denn dadrauf? ![]()
If FileExists(@SystemDir & '\cmd.exe') Then ConsoleWrite('OK' & @CRLF)
[/autoit]aber bei sachen wie cmd, explorer, calc, control und so funktioniert das nicht....
Wie kommst du denn dadrauf? ![]()
If FileExists(@SystemDir & '\cmd.exe') Then ConsoleWrite('OK' & @CRLF)
[/autoit]nach deiner beschreibung sollte er beim continueloop eigentlich bei While1 (programzeile1) erneut starten.
Und genau das passiert auch. Debugge einfach mal mit ConsoleWrite.
Hier siehst du, dass es genau so funktioniert:
$i = 0
$max = 10
While 1
$i += 1
If $i = $max Then ExitLoop
$z = Random(1,5,1)
ConsoleWrite('Random 1 = ' & $z & @CRLF)
Switch $z
Case 1, 2
ConsoleWrite($z & ' - ContinueLoop aus 1.Abfrage' & @CRLF)
ContinueLoop
Case 3, 4, 5
ConsoleWrite('weiter' & @CRLF)
EndSwitch
$z = Random(1,5,1)
ConsoleWrite('Random 2 = ' & $z & @CRLF)
Switch $z
Case 1, 2
ConsoleWrite($z & ' - ContinueLoop aus 2.Abfrage' & @CRLF)
ContinueLoop
Case 3, 4, 5
ConsoleWrite('weiter' & @CRLF)
EndSwitch
WEnd
Ich kann dir keine klare Antwort darauf geben, habe nur selber gerade bemerkt, dass die GUIRichEdit.au3 der Beta Probleme macht. Vielleicht sind diese Probleme ja nicht an die UDF gebunden, sondern diese Version der Beta ist einfach nur total buggy?
Zumindest solltest du dich nicht wundern, wenn Probleme in der Beta auftreten - deshalb ist es ja die Beta.
Ich denke die UDF ist veraltet. In der Beta von Autoit ist die GUIRichEdit.au3 enthalten
Die UDF aus der Beta kann man leider nicht nutzen. Nach Beenden eines Skriptes existiert der Prozeß autoit3.exe weiterhin mit CPU-Last von 98%!
Hab jetzt noch nicht weiter getestet, ob das nur diese UDF betrifft oder die Beta insgesamt so buggy ist. (Ich weiß schon, warum ich bei der Stable bleibe
)
Du mußt die Scrollmessage verwenden und dann selbst die sichtbaren Zeilen im Edit bewegen.
Ich hab hier im Bsp. den Scrollleisten-Style rausgenommen. Durch das Abfragen von WM_MOUSEWHEEL kann man aber das Scrollereignis auswerten.
Problem: Ich finde in der GUIRichEdit.au3 keine Möglichkeiten die erste sichtbare Zeile zu setzen. Diese Funktion ist nötig um dein eigenes Scrollen ohne Scrolleiste auszuführen.
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiRichEdit.au3>
Global Const $WM_MOUSEWHEEL = 0x20A
[/autoit] [autoit][/autoit] [autoit]$text = _
'Purpose' & @LF & _
'Microsoft Windows Firewall and Windows Firewall with Advanced Security protect computers on which they are running from unsolicited network traffic. The Windows Firewall and Windows Firewall with Advanced Security APIs make it possible to programmatically manage the features of Windows Firewall (formerly known as Internet Connection Firewall) by allowing applications to create, enable, and disable firewall exceptions. The Windows Firewall with Advanced Security is available only on Windows Vista.' & @LF & _
'Where Applicable' & @LF & _
'The Windows Firewall API is intended for situations in which a software application or setup program must operate with adjustments to the configuration of the networking environment in which it runs. For example, a service that needs to receive unsolicited traffic can use this API to create exceptions that allow the unsolicited traffic.' & @LF & _
'Developer Audience' & @LF & _
'The Windows Firewall API is designed for use by programmers using C/C++, Microsoft Visual Basic development system, Visual Basic Scripting Edition, and JScript development software. Programmers should be familiar with networking concepts such as stateful packet filtering, TCP/IP protocol concepts, and network address translation (NAT).' & @LF & _
'Run-Time Requirements' & @LF & _
'The Windows Firewall API is supported on Windows XP with Service Pack 2 (SP2). For more specific information about which operating systems support a particular programming element, refer to the Requirements sections in the documentation.' & @LF & _
'The Windows Firewall with Advanced Security API is available only on Windows Vista.'
$Form1 = GUICreate("Form2", 414, 502, 303, 219)
GUISetBkColor (0x0000FF)
$Edit = _GUICtrlRichEdit_Create($Form1, 6, 9, 403, 361,BitOR($ES_WANTRETURN, $ES_MULTILINE, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_SetOLECallback($Edit)
$Edit2 = GUICtrlCreateEdit("", 6, 375, 403, 91,$WS_VSCROLL+$ES_SUNKEN)
GUICtrlSetData(-1, $text)
$Button1 = GUICtrlCreateButton("Senden", 336, 471, 75, 25, 0)
Dim $Form1_AccelTable[1][2] = [["{ENTER}", $Button1]]
GUISetAccelerators($Form1_AccelTable)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_MOUSEWHEEL, '_MY_WM_MOUSE_WHEEL')
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_Senden()
EndSwitch
WEnd
Func _Senden()
Local $Read = GUICtrlRead ($Edit2)
GUICtrlSetData ($Edit2,"")
_GUICtrlRichEdit_AppendText($Edit,$Read & @CR)
EndFunc
Func _MY_WM_MOUSE_WHEEL($hWnd, $Msg, $wParam, $lParam)
Local $Delta = BitShift($wParam, 16), $posM[2], $overCtrl = 0, $Opt
Local $posC = ControlGetPos($Form1, '', $Edit)
Local $old = Opt('MouseCoordMode', 2)
Local $posM = MouseGetPos()
Opt('MouseCoordMode', $old)
If ($posM[0] >= $posC[0] And $posM[0] <= $posC[0]+$posC[2]) And _
($posM[1] >= $posC[1] And $posM[1] <= $posC[1]+$posC[3]) Then
$overCtrl = 1
EndIf
If Not $overCtrl Then Return $GUI_RUNDEFMSG
Local $rows = Abs($Delta) /120
Local $1stVisibleLine = _SendMessage($Edit, $EM_GETFIRSTVISIBLELINE)
ConsoleWrite('$1stVisibleLine = ' & $1stVisibleLine & @crlf)
If $Delta < 0 Then ; abwärts scrollen, Zeilen aufsteigend
ConsoleWrite('Runter Zeilen: ' & $rows & @CRLF)
; 1stVisible +Rows
Else ; hoch scrollen, Zeilen fallend
ConsoleWrite('Hoch Zeilen: ' & $rows & @CRLF)
; 1stVisible -Rows
EndIf
Return $GUI_RUNDEFMSG
EndFunc
@doc: Danke dir und auch alles Gute für dich.
Ähh..., darf ich auch mit deiner Frau Essen gehen? ![]()
Schonmal ein großes Dankeschön an alle Gratulanten.
Mit soviel Rückhalt kann ich getrost den kommenden 48 Jahren entgegensehen. ![]()
Die Idee ist ja nicht verkehrt. Ich mache das ähnlich, allerdings schreibe ich zusätzlich einen Eintrag in die Auto-Vervollständigung.
Setze den Hinweis mit dem Pfad um - dann paßt es ![]()
Deine Funktion wird wohl nur bei dir laufen.
Den Pfad mußt du schon aus dem Installationseintrag der Registry abfragen, damit es allgemeingültig ist.
$ScitePath = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SciTE.exe","")
[/autoit]Weiterhin hast du die falsche Datei gewählt, da die "..\au3.api" bei jedem SciTE-Update überschrieben wird. Eigene Einträge gehören in die "..\au3.user.calltips.api".
Du solltest bei Verwendung von nicht in AutoIt eingebundenen UDF's einen Link dazu angeben.
Ich habe auch eine "GuiRichEdit.au3", die enthält aber andere Funktionen. ![]()
Ich hab nix getestet - aber deine Funktion _onEvent arbeitet rekursiv. Kann mir nicht richtig vorstellen, wie das funktionieren soll.
Vielleicht liegt da das Problem? (oder ich hab nur grad 'nen Knoten im Hirn
)
Edit: Hast recht, nix Rekursion.
Da lag ich voll daneben. Also entweder Fernsehen oder Fragen beantworten ![]()
So z.B.
#include <TabConstants.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
Global Const $ODT_TAB = 101
Global Const $ODS_SELECTED = 0x0001
Global Const $ODA_DRAWENTIRE = 0x1
Global Const $ODS_FOCUS = 0x0010
Global $aColTabItem[3][2] = [['Item1',0x11AADD],["Item2",0xEEBB99],["Item3",0x4763FF]] ; [[TabItem-Bezeichnung,TabItem-Color]]
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Draw Tab", 300, 200)
$hTab = GUICtrlCreateTab(10, 10, 280, 180, $TCS_OWNERDRAWFIXED)
$TabItem_1 = GUICtrlCreateTabItem("Item1")
$TabItem_2 = GUICtrlCreateTabItem("Item2")
$TabItem_2 = GUICtrlCreateTabItem("Item3")
GUICtrlCreateTabItem("")
GUISetState()
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_DRAWITEM, "WM_DRAWITEM")
[/autoit] [autoit][/autoit] [autoit]_GUICtrlTab_SetCurSel($hTab, 2)
_GUICtrlTab_SetCurSel($hTab, 1)
_GUICtrlTab_SetCurSel($hTab, 0)
_GUICtrlTab_SetCurFocus($hTab, 1)
Do
Until GUIGetMsg() = -3
Func WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local $DRAWITEMSTRUCT = DllStructCreate("uint cType;uint cID;uint itmID;uint itmAction;uint itmState;" & _
"hwnd hItm;hwnd hDC;dword itmRect[4];dword itmData", $lParam)
If DllStructGetData($DRAWITEMSTRUCT, "cType") <> $ODT_TAB Then Return $GUI_RUNDEFMSG
If DllStructGetData($DRAWITEMSTRUCT, "itmAction") <> $ODA_DRAWENTIRE Then Return $GUI_RUNDEFMSG
Local $itmID = DllStructGetData($DRAWITEMSTRUCT, "itmID")
Local $hDC = DllStructGetData($DRAWITEMSTRUCT, "hDC")
Local $hItm = DllStructGetData($DRAWITEMSTRUCT, "hItm")
Local $itmText = $aColTabItem[$itmID][0], $iBrushColor = $aColTabItem[$itmID][1]
[/autoit] [autoit][/autoit] [autoit]DLLCall("gdi32.dll","int","SetBkMode", "hwnd", $hDC, "int", 1)
[/autoit] [autoit][/autoit] [autoit]Local $iBrush = DLLCall("gdi32.dll","hwnd","CreateSolidBrush", "int", $iBrushColor)
$iBrush = $iBrush[0]
DLLCall("user32.dll","int","FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "hwnd", $iBrush)
Local $tBuffer = DllStructCreate("char[256]")
DllStructSetData($tBuffer, 1, $itmText)
$itmText = DllStructGetData($tBuffer, 1)
DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 1) + 10, 1)
DllStructSetData($DRAWITEMSTRUCT, "itmRect", DllStructGetData($DRAWITEMSTRUCT, "itmRect", 2) + 5, 2)
DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "str", $itmText, "int", StringLen($itmText), _
"ptr", DllStructGetPtr($DRAWITEMSTRUCT, "itmRect"), "int", $DT_LEFT)
Return $GUI_RUNDEFMSG
EndFunc
In einer While/Do/For-Schleife kannst du jederzeit mit "ContinueLoop" an den Schleifenanfang springen. ![]()
Hier mal ein Bsp. - Sortierung durch Klick auf den Spaltenkopf.
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
$gui = GUICreate('test')
$lv = GUICtrlCreateListView('NR|Datum', 15,15,200,140)
$hlv = GUICtrlGetHandle(-1)
For $i = 1 to 15
GUICtrlCreateListViewItem($i & '|' & Random(2000,2009,1) & '-' & StringFormat('%02d', Random(1,12,1)) & '-' & _
StringFormat('%02d', Random(1,28,1)), $lv)
Next
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hlv)]
Do
Until GUIGetMsg() = -3
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
$hWndListView = $hlv
If Not IsHWnd($hWndListView) Then $hWndListView = GUICtrlGetHandle($hWndListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
EndIf
EndFunc ;==>WM_NOTIFY
Ich muss relativ oft mein System neu aufsetzten.
Wie wärs denn da mal mit einem Image? Kannst du inkrementell erweitern und eine kpl. Neuinstallation dauert max. 10 Minuten.
Und du brauchst auch nicht jedes mal Windows neu aktivieren.
Ich kann Acronis TrueImage wärmstens empfehlen, das läßt keine Wünsche offen.
Ein Datum (im Listview) ist perse nur ein String. Demzufolge ist das Format TT.MM.JJJJ nicht sortierbar. Deshalb greifen auch viele Anwendungen auf sortierbare Formate wie: JJJJ-MM-TT oder JJJJMMTT zurück.
Entweder du machst es ebenso oder du wandelst vor dem Sortieren und danach jeweils um.
Wir hatten es schon mehrfach erwähnt, dieses ist ein Skript-Forum. Sinn und Zweck: Wir teilen hier unsere Werke und zeigen somit Lösungswege auf.
Insofern wäre es schon sinnvoll, wenn du hier keinen Link zu deiner Seite, sondern deine Skripte selbst einstellst.
Kann denn keiner zu Frage 1 antworten?
Das Problem dabei:
- StandardControls geben beim Erstellen eine ID zurück. Mit dieser ID kann man per GuiCtrlSetState($ID, $GUI_HIDE) das Control ausblenden.
- Das RichEdit Control gibt ein Handle zurück. Mit dem Handle funktioniert dieses aber nicht.
Mir fällt im Moment dazu keine Lösung ein.
In Zeile 72: $msg = GUIGetMsg()
Wozu? Das wird a) nicht gebraucht und b) stört es dein Skript da du im OnEvent-Modus arbeitest. Eines geht nur.
Danke!
Ich hatte mich zusehr in der UDF BugFix festgefahren und du hast mir nen kleinen Denkanstoß gegeben
Werde damit jetzt mal ein bissel rumprobieren...
Von der UDF ist für dich nur wichtig das Einlesen und anschließende "Zerhackstückeln" in gleich große Pakete. In meinem Bsp. ist die Größe der Pakete gebunden an die max. Zeichenlänge je Codezeile. Du mußt die Paketgröße wählen, die du auch auf der Empfängerseite in TCPRecv festlegst.