Von Burzelkind zu Burzelkind: Alles Gute! ![]()
Beiträge von BugFix
-
-
Ich bin so gerührt... (nicht geschüttelt :D).
Vielen Dank für eure Wünsche, Feiern ist dieses Jahr nicht, wird irgendwo zusammen mit Weihnachten mal abgewickelt.
Bin grad unterwegs auf Dienstfahrt, feiere mit mir selbst im Hotel.
-
-
Dieser Fehler sagt dir ímmer, dass die genannte Konstante bereits deklariert wurde - heißt über ein Include bereits vorhanden ist.
Also einfach weglassen die Deklaration. -
Nicht so kompliziert machen, so gehts am einfachsten:
[autoit]#include <WindowsConstants.au3>
[/autoit][autoit][/autoit][autoit]_Main()
[/autoit][autoit][/autoit][autoit]Func _Main()
[/autoit][autoit][/autoit][autoit]
Local $gui = GUICreate('Test', 400, 300, -1, -1, BitOR($WS_POPUP,$WS_BORDER))
GUICtrlCreateLabel('Irgendein Text' & @LF & @LF & 'Beenden nur mit: Strg+Numpad_Mult', 100, 100)
$cDummy = GUICtrlCreateDummy()
Local $aAcc[1][2] = [["^{NUMPADMULT}", $cDummy]]
GUISetAccelerators($aAcc)
GUISetState()Do
[/autoit]
Until GUIGetMsg() = $cDummy
Exit
EndFunc -
Du kannst dir einen zusätzlichen Button mit Hilfe eines Child-Windows auf den Header aufsetzen:
[autoit]#include <GuiListview.au3>
[/autoit][autoit][/autoit][autoit]
#include <GuiHeader.au3>
#include <WindowsConstants.au3>$hGui = GUICreate('1', 600, 400)
[/autoit][autoit][/autoit][autoit]
$LV = GuiCtrlCreateListView('A|B|C', 10, 10, 500, 200)
For $i = 1 To 40
GUICtrlCreateListViewItem('A ' & $i & '|B ' & $i & '|C ' & $i, $LV)
Next
$hLVHeader = _GUICtrlListView_GetHeader($LV)
$aHeaderPos = _GUICtrlHeader_GetItemRect($hLVHeader, 0)
$iHeaderHeight = $aHeaderPos[3] - $aHeaderPos[1]
$hChild = GUICreate('', $iHeaderHeight, $iHeaderHeight, 500-10-$iHeaderHeight, 10, $WS_POPUP, $WS_EX_MDICHILD, $hGui)
$bt = GUICtrlCreateButton('..', 0, 0, $iHeaderHeight, $iHeaderHeight)GUISetState(@SW_SHOW, $hGui)
[/autoit][autoit][/autoit][autoit]
GUISetState(@SW_SHOW, $hChild)Do
[/autoit]
Until GUIGetMsg() = -3 -
Und da die TE inzwischen nicht mehr Mitglied unserer Gemeinschaft ist, kann ich hier auch (endlich) das Schloß vorhängen.
-
Du meinst, weil es auf einem PC das Problem bringt und auf einem anderen nicht, kann das Skript selbst nicht Schuld haben.
Das ist eine irrige Annahme. Das Skript ist die erste Fehlerquelle. Und solange wir es nicht kennen, ist alles hier nur Stochern im Nebel.
Wenn du dein Skript nicht zeigen möchtest/kannst/darfst...:
- Zerlege es in einzelne Module
- Kompiliere die Module einzeln
==> dann hast du eine Chance dich an die Quelle des Übels heranzutasten. -
Na dann Raupi, auf ein Neues.
Genieße deine Geschenke (Taschentücher und Socken? :D) und freu dich, dass du nie genau so alt sein wirst, wie ich es gerade bin.
-
weil Windows 8 eine hohe Ausführungsgeschwindigkeit hat
Zählt nunmal gar nicht als Argument. Bin mir sicher, dass ein Win8-Rechner nicht spürbar schneller ist als mein Laptop. (max. 10 s von kalt bis kpl. hochgefahren und Ausführen von Anwendungen NOCH schneller??)Win 8 ist für Tablets konzipiert und eher das Vista-II. Wenn man Win7 hat gibt es keinen sinnvollen Grund zum Wechsel.
-
Unabhängig von deinem Problem: Mehr als das Anmelden darfst du auf dieser Seite auch nicht automatisieren.
Auszug AGB
Code8.5 Der Nutzer ist verpflichtet, die Dienste von Dshini® sachgerecht und nur zum bestimmungsgemäßen Zweck zu nutzen. Er ist daher verpflichtet, Dshini® ausschließlich persönlich, über die ihm von Dshini® bereit gestellten Dienste und über seinen persönlichen Account zu verwenden. Deshalb ist es insbesondere unzulässig, im Wege automatisierter Prozesse die Schaffung von Belohnungspunkten künstlich herbeizuführen. Dabei darf der Nutzer also vom Betreiber geschaltete Werbeanzeigen mit Hilfe technischer Maßnahmen weder insgesamt noch zeitlich eingeschränkt unterbinden, noch ohne vorherige schriftliche Zustimmung von Dshini® die vom Betreiber nicht zur freien Verfügung bestimmten und insoweit ausdrücklich gekennzeichneten Inhalte auf Webseiten sowie sonstige digitale Medien einstellen und derart zur Verwertung anbieten.Und somit macht auch das automatische Anmelden eigentlich kaum Sinn (einen Mausklick einsparen?).
Nebenbei verwundert es mich, dass die Seite noch nicht abgemahnt wurde. Sie verstößt dermassen gegen das TMG, dass einem die Augen tränen. Im TMG heißt es sinngemäß, dass das Impressum gut sichtbar und bei "normaler" Bildschirmauflösung für den User sofort! erreichbar ist. Jedoch wurde die Naviagationsleiste mit dem Impressum und den AGB hier unterhalb des Seiteninhalts platziert, der sich zudem ständig mit weiteren Inhalten nachlädt und somit die Navigationsleiste immer weiter nach unten verschiebt.
Wenn ich sonst nichts von Abmahnungen halte - hier wäre es mal angebracht. -
man kann sie aber auch in einer schleife für bestimmte Optionen deklarieren
Nein, innerhalb einer Schleife notwendige Variablen sollst du vor Schleifenbeginn deklarieren. Anderenfalls wird bei jedem Durchlauf völlig unnötig die Variable neu deklariert.Local Variablen deklariert man auch normalerweise am Scriptanfang
Auch nein. Locale Variablen sind, wie der Name sagt, nur in einem lokalen Umfeld, also innerhalb einer Funktion gültig. Somit erstellt man sie erst innerhalb einer Funktion.
Wird eine Variable am Skriptanfang mit Local deklariert ist sie dann trotzdem Global. -
Um das Syntaxhighlighting einzubinden einfach die angehängte ZIP-Datei in den Ordner:
"..\Sublime Text 2.0.1\Data\Packages" entpacken.Edit:
Die enthaltenen Color-Shemes, sind für uns SciTE-User recht gewöhnungsbedürftig. Ich übertrage gerade das "SciTE Old AutoIt"-Scheme in eine eigene Scheme-Datei für ST2. Jedenfalls soweit die geparsten Elemente übereinstimmen.
Werde ich dann hier posten, wenn es fertig ist.Edit2:
Also das Parsing ist unterirdisch. Die Hälfte der AutoIt-Syntax wird nicht mit der entsprechenden Zuordnung erkannt. Weder Operatoren noch Integer oder Hex werden erkannt. Sehr schlampige Umsetzung.
Da ich bisher keine Auflistung der verwendbaren scope-Begriffe gefunden habe, kann ich keinen eigenen Parser erstellen. Die Doku zu ST2 ist auch sehr beschränkt.
Insofern macht es auch keinen Sinn ein eigenes Farbschema zu erstellen. Halbwegs brauchbar ist noch das "Eiffel"-Theme.
Aber ohne ordentliches Syntaxhighlighting ist es kein noch so guter Editor wert, zu wechseln. Zumal hier noch alle PlugIns erstellt werden müssen für Syntaxcheck, Abbrevations, Run, Compile etc. pp.
Fazit:
Um diesen Editor AutoIt tauglich zu bekommen in der Form, dass er mindestens das bringt, was SciTE per se kann, wird noch viel Zeit ins Land gehen.Edit3:
Ha! Ich habs gefunden, wie man eine eigene Definitionsdatei erstellen kann. Erst muß man das Packet-Manager Plugin installieren, dann kann man sich die das Entwickler-Plugin einbinden und damit lassen sich die erforderlichen Snippets erstellen.
Werde mich da mal Step By Step mit einer sauberen Umsetzung für AutoIt-Syntax befassen. Wobei ich das gleich noch etwas erweitern werde - mir fehlte schon immer eine eigene Farbe für Hexzahlen, das läßt sich nun machen.
Die Programmbeschreibung ist doch besser als zuerst gedacht - man muss nur die richtigen Seiten erst mal aufstöbern.
===========================================================================================
Um eine vernünftige Arbeit mit AutoIt zu ermöglichen, bedarf es einer umfangreichen Arbeit.
Ich schreibe mal Einzelschritte, die mir einfallen, hier auf. Wer möchte kann ja dann sich ein Thema aufgreifen und abarbeiten (bitte dann im Thread vermerken).1. AutoIt.tmLanguage erstellen (erfordert als erstes "Sublime Snippets(Raw).JSON-tmLanguage" aus der anschließend die "AutoIt.tmLanguage" generiert wird.
(Die hier bereits angehängte Version eines unbekannten Autors berücksichtigt wenig AutoIt-Typisches, da nur mit den Standard-scopes gearbeitet wurde, die wenig differenzierend arbeiten.)[Hier bastel ich gerade dran rum]
10.05.2013: ERLEDIGT - Syntaxdefinitionsdatei basierend auf Standard-Scopes erstellt, s. Post #8 / #Post92. Min. ein Farbschema, das mit der AutoIt.tmLanguage zusammenarbeitet für ein ordentliches Highlighting. (dazu muss AutoIt.tmLanguage erstellt sein)
Optimal wäre gleich noch ein Konfigurator um eigene Anpassungen für die jeweilige Syntaxgruppe vornehmen zu können.Nicht machbar, geändert werden muß immer in der JSON-Datei aus der man dann die .tmTheme generiert.
10.05.2013: ERLEDIGT - Basierend auf SciTE-OldStyle + Hexzahlen u. Klammern extra, #Post93.
Python-Skript zum Erstellen der Funktionslisten (Nativ, Standard-UDF, User-UDF), mit automatischer Neuerstellung bei neuer AutoIt-VersionNur optional. Das Erstellen der Auflistung von Hand/AutoIt-Skript nimmt nur wenig Zeit in Anspruch.
Nur über diese Funktionslisten können die geparsten Funktionen auch der jeweiligen Rubrik zugeordnet werden und entsprechend ihr Highlighting bekommen.
Gleiches gilt auch für: Includes, Präprozessoranweisungen4. Autocomplete
5. Abbrevs
6. Calltip
7. Indent für Schleifen, Statements
8. die ganz ureigenen Dinge: Plugins für Syntaxcheck, Run, Compile
9.ff Und dann noch all jene Tools, die in Scite speziell für AutoIt enthalten sind (Tidy, DebugToConsole, usw. usf.)
Es ist recht komplex. Aber es sollte alles entweder mit Snippets oder Python-Skripten zu bewältigen sein.
Habe ich noch was vergessen? - Dann posten.
Vielleicht schaffen wir es ja ST2 und AutoIt erfolgreich zu vermählen. Verdient hätten es beide.
Btw.: Laut Menü ist die Konsole über "Ctrl+´" aufrufbar. Das ist aber Quatsch und kann nicht funktionieren.
Tragt einfach in der Datei: <Preferences><Key Bindings - User> ein:Code[ { "keys": ["ctrl+,"], "command": "show_panel", "args": {"panel": "console", "toggle": true} } ]Dann kann die Konsole mit "Ctrl+Komma" aufgerufen werden. Das kollidiert mit keinem anderen Hotkey und hat auch noch eine "Verwandschaft" im Namen.
Komma/Konsole -
Hi,
ihr kennt es sicher: Man benötigt in einem Funktionsaufruf den X-Wert des Cursors od. die ID über der der Cursor ist, einen Wert der Position eines Fensters oder eines Controls.
In jedem Fall habe ich keinen direkten Zugriff sondern muss mir mit dem Funktionsaufruf ein Array zurückgeben lassen und kann anschließend auf die einzelnen Werte zugreifen.
Solange ich mehrere Werte verwende ist das OK, aber bei einem einzelnen ist es eleganter, wenn ich den Funktionsaufruf zur Abfrage des Parameters direkt in meine Zielfunktion einsetzen kann.Ich habe folgende Funktionen etwas umgebaut:
• WinGetPos ==> _WinGetPos
• ControlGetPos ==> _CtrlGetPos
• GUIGetCursorInfo ==> _GUICursorInfound zusätzlich noch eine Funktion zur Statusabfrage:
• _WinHasStateAusserdem können alle Einzelparameter neben dem bekannten Index im Array auch über ihren Parameternamen abgefragt werden (s. Funktionsbeschreibungen), das erleichtert durchaus das Lesen des Codes und erspart Kommentare:
[autoit]
[/autoit]
$FensterBreite = _WinGetPos('w') ;== od. _WinGetPos(2)
$Ctrl_Hoehe = _CtrlGetPos('h', $hWnd, $ID) ;== od. _CtrlGetPos(3, $hWnd, $ID)
$ID_unter_Cursor = _GUICursorInfo('id') ;== od. _GUICursorInfo(4)
$Existiert = _WinHasState('exists', 'Firefox') ;== od. _WinHasState(1, 'Firefox')
Alles zusammen habe ich in der Datei "GuiPartialInfo.au3" gespeichert.Spoiler anzeigen
[autoit][/autoit] [autoit][/autoit] [autoit];===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _WinGetPos
; Description......: wie WinGetPos() - aber Einzelparameterabfrage möglich
; Parameter(s).....: $_vPart -1 (Standard) gibt das kpl. Array zurück, sonst Index im Array od. Parameter [ x,y,w,h ]
; .................: $_hWnd Handle des Fensters oder Titel, Standard "" - das aktive Fenster
; ...optional......: $_sText optionaler Text zur Fenster-Bestimmung
; Return Value(s)..: Erfolg Array mit Positionsdaten oder einzelner Positionswert
; .................: Fehler @error 1 - Fenster konnte nicht bestimmt werden
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WinGetPos($_vPart=-1, $_hWnd='', $_sText='')
Local $aHWnd = WinGetPos($_hWnd, $_sText)
If @error Then Return SetError(1,0,0)
Switch String($_vPart)
Case '-1'
Return $aHWnd
Case '0', 'x'
Return $aHWnd[0]
Case '1', 'y'
Return $aHWnd[1]
Case '2', 'w'
Return $aHWnd[2]
Case '3', 'h'
Return $aHWnd[3]
EndSwitch
EndFunc ;==>_WinGetPos;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _CtrlGetPos
; Description......: wie ControlGetPos - aber Einzelparameterabfrage möglich
; Parameter(s).....: $_vPart -1 (Standard) gibt das kpl. Array zurück, sonst Index im Array od. Parameter [ x,y,w,h ]
; .................: $_hWnd Handle des Fensters oder Titel
; .................: $_ID ID des Controls
; ...optional......: $_sText optionaler Text zur Fenster-Bestimmung
; Return Value(s)..: Erfolg Array mit Positionsdaten oder einzelner Positionswert
; .................: Fehler @error 1 - Control konnte nicht bestimmt werden
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _CtrlGetPos($_vPart, $_hWnd, $_ID, $_sText='')
Local $aCtrl = ControlGetPos($_hWnd, $_sText, $_ID)
If @error Then Return SetError(1,0,0)
Switch String($_vPart)
Case '-1'
Return $aCtrl
Case '0', 'x'
Return $aCtrl[0]
Case '1', 'y'
Return $aCtrl[1]
Case '2', 'w'
Return $aCtrl[2]
Case '3', 'h'
Return $aCtrl[3]
EndSwitch
EndFunc ;==>_CtrlGetPos;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GUICursorInfo
; Description......: wie GUIGetCursorInfo - aber Einzelparameterabfrage möglich
; Parameter(s).....: $_vPart -1 (Standard) gibt das kpl. Array zurück, sonst Index im Array od. Parameter [ x,y,primary,secondary,id ]
; .................: $_hWnd Handle des Fensters oder Titel
; Return Value(s)..: Erfolg Array mit Cursordaten oder einzelner Wert
; .................: Fehler @error 1 - Aufruf GUIGetCursorInfo() fehlerhaft
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICursorInfo($_vPart=-1, $_hWnd='')
Local $aCursor = GUIGetCursorInfo($_hWnd)
If @error Then Return SetError(1,0,0)
Switch String($_vPart)
Case '-1'
Return $aCursor
Case '0', 'x'
Return $aCursor[0]
Case '1', 'y'
Return $aCursor[1]
Case '2', 'primary'
Return $aCursor[2]
Case '3', 'secondary'
Return $aCursor[3]
Case '4', 'id'
Return $aCursor[4]
EndSwitch
EndFunc ;==>_GUICursorInfo;===============================================================================
[/autoit]
; Function Name....: _WinHasState
; Description......: Überprüft ob ein Fenster einen bestimmten Status hat
; Parameter(s).....: $_vState Der zu prüfende Status als numerischer Wert od. Parameter [ exists,visible,enabled,active,minimized,maximized ]
; .................: $_hWnd Handle des Fensters oder Titel, Standard "" - das aktive Fenster
; ...optional......: $_sText optionaler Text zur Fenster-Bestimmung
; Return Value(s)..: Erfolg True / False
; .................: Fehler @error 1 - Fenster konnte nicht bestimmt werden
; .................: @error 2 - übergebenes Statuswort gibt es nicht
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WinHasState($_vState, $_hWnd='', $_sText='')
If IsString($_vState) Then
Switch $_vState
Case 'exists'
$_vState = 1
Case 'visible'
$_vState = 2
Case 'enabled'
$_vState = 4
Case 'active'
$_vState = 8
Case 'minimized'
$_vState = 16
Case 'maximized'
$_vState = 32
EndSwitch
If IsString($_vState) Then Return SetError(2,0,0)
EndIf
If IsString($_hWnd) Then $_hWnd = WinGetHandle($_hWnd)
Local $iState = WinGetState($_hWnd, $_sText)
If @error Then Return SetError(1,0,0)
Return Not Not BitAND($iState, $_vState)
EndFunc ;==>_WinHasState -
Du solltest dieses Skript als Anregung nehmen.
- restliche Zeit ermittelst du ja bereits
- aus dieser Zeit ermittelst du in einem Select die Restzeit und wendest je nach Fall (noch Tage, Stunden, Minuten) das entsprechende StringFormat an -
BugFix Nein, aber da ich viel zu faul bin, so ein Tool zu benutzen...

Nein, man kann sich den Farbwert ja nunmal grob vorstellen, testen und ggf. anpassen, wenn's nicht auf Anhieb passt.
Außerdem lernt man so gleich, wie das ganze funktioniert.
lg chess
Muß ich widersprechen, das ist nicht effektiv möglich.
Ich brauchte eine Schattierung von gelb, klar hat man die Grundfarben im Kopf. Aber eine Anpassung, dass eine Mischfarbe (wie gelb) heller oder dunkler dargestellt wird wie du es willst, schaffst du vielleicht im zehnten Anlauf durch Probieren. Mit dem Tool ist es ein Aufruf.
Farben sind etwas Subjektives, ausser den Basisfarben kannst du mit den Zahlenwerten kaum ein klares Bild vom Ergebnis im Kopf modellieren.
-
Für mein ganzes programm ist die zeile nicht unsinn...aber egal....
Nee, nicht egal.
Du machst es dir nämlich durch diese Konstruktion unnütz schwer. Beim Erstellen des Controls erhältst du als Return die ID und fängst sie ja auch in einer Variablen auf. Dann benutze doch diese Variable für deine Folgeoperation (IniRead...). Der Schritt "$LastCtrlID = _WinAPI_GetDlgCtrlID(GUICtrlGetHandle(-1))" ist wirklich ohne jeden Wert. Statt "$LastCtrlID" die Variable des zuletzt erstellten Controls verwenden führt zu exakt demselben Ergebnis.
Btw.: Ein Control hat niemals die ID "0", das ist definitiv ausgeschlossen. -
@M@arc:
Bei dem recht grob skizzierten Sachverhalt ("nehmen wir mal an..") und der Sicherheitsrelevanz dieser Thematik, verbietet sich jede Mausklickerei von vornherein.
Wenn du berechtigten Zugriff auf die Systeme hast, kannst du das Problem mit sauberen Methoden lösen (Ansätze hier gezeigt).
Eine Mausklicklösung wird hierfür nicht supported, da sehe ich viel zu viel Gefährdungspotenzial. Solch Geklicke kann gewaltig nach hinten losgehen und ist als ernsthafte Lösung niemals in Betracht zu ziehen. -
Da brauchst du dann verschiedene Formatierung, habe ich z.B. bei _TimerDiffExt so gemacht. Vielleicht hilft dir das als Anregung.
-
Dann zeig doch mal, wie weit du schon "gebissen" hast.
Ohne Code kann man dir nicht helfen.