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. BugFix

Beiträge von BugFix

  • auf ein Icon in Systray klicken

    • BugFix
    • 20. Oktober 2015 um 14:00
    Zitat von AutoMit

    Wie kann ich mit Autoit auf ein bestimmtes Icon im Systray unter Windows 8/64 klicken?


    Zusätzliche Besonderheit – die Startleiste ist automatisch ausgeblendet.

    Dann ist doch "klicken" ziemlicher Quatsch, denn du weißt ja was sich hinter dem Icon verbirgt. Also rufe das entsprechende Programm direkt auf.
    Falls das (warum auch immer) nicht realisierbar ist, mußt du die TrayIcon der Toolbar (Window-Class "Shell_TrayWnd") auslesen und vermutlich per SendMessage ansprechen. Aber ich meine mich zu erinnern, dass es zu diesem Thema vor ca. 1-2 Monaten einen umfangreichen Thread gab.

  • Automatische Installation von USB Stick unter Win XP

    • BugFix
    • 20. Oktober 2015 um 13:52

    Windows-konforme Controls (nach denen schaut es aus) kannst du mit ControlCommand-Befehlen bearbeiten. Schau mal in die Hilfe.
    Aber bevor du dich quälst :D - prüfe mal ob das zu installierende Programm nicht mit einem Schalter für Silent Installation versehen ist.

  • UDF für Mehrsprachige Programme und SciTE String Export Tool

    • BugFix
    • 19. Oktober 2015 um 11:44
    Zitat von mataran

    Dann die LanguageTransmitter.exe Datei in den Scite Ordner einfügen.

    Davon rate ich ab. Bei einem Update wird der alte SciTE-Ordner kpl. gelöscht. User-Einträge sind alle ausgelagert nach: C:\Users\USER\AppData\Local\AutoIt v3\SciTE und bleiben erhalten
    Einfach in SciTEUser.properties eine eigene Propertie für Tools anlegen, z.B. user.tools.path=C:\MeineTools und dort das Skript speichern und darauf verweisen. $(user.tools.path)\LanguageTransmitter.exe "$(CurrentSelection)"

  • Fragen zu StringRegExp - Array in mehreren Spalten und leere Zeilen

    • BugFix
    • 16. Oktober 2015 um 22:28
    Zitat von horphi

    das ist doch eine allgemein gehaltene Frage.

    Kann man die so nicht beantworten?

    In Sachen RegExp - eher NEIN. Reguläre Ausdrücke beziehen sich immer auf ganz spezielle Einsätze (z.B. Selektieren von eMail-Adressen etc.). Es geht darum ein Muster zu erkennen, welches über den regulären Ausdruck definiert wird. Und eben deshalb benötigt man immer einen Anwendungsfall und kann keine "allgemeinen" Fragen lösen. ;)

  • RegExp - alles auser Zitate

    • BugFix
    • 14. Oktober 2015 um 21:32
    Zitat von AutoItfreak

    Das Problem ist das Ich die Nicht-Zitate auslesen verarbeiten wollte
    und diese dann wiederum in diesem String verarbeitet einsetzen wollte

    Und warum sagst du das nicht schon im Startpost? 8| Das ist doch ein völlig anderer Ansatz, du solltest dann mit einer Callbackfunktion die "Nichtzitate" bearbeiten und im String ersetzen.
    Wie das geht, findest du in etlichen Beiträgen hier im Forum.

  • RegExp - alles auser Zitate

    • BugFix
    • 14. Oktober 2015 um 21:03

    Wenn! alle Zitate in doppelte Anführungszeichen eingefasst sind kannst du das auch so lösen:

    AutoIt
    $string = '"Zitat1" Kein-Zitat "Zitat2" auch keines "Zitat3"'
    $result = StringRegExpReplace($string, '("[^"]+")', '')
    ConsoleWrite($result & @CRLF)
  • Powershell und Autoit

    • BugFix
    • 14. Oktober 2015 um 14:10

    Kannst aber auch mal mit icacls probieren. Mußt dann das Ergebnis noch durchsortieren. Vielleicht geht das schneller.

    AutoIt
    $aRights = _GetRights('C:\Code_AutoIt')
    _ArrayDisplay($aRights)
    
    
    Func _GetRights($sPathOrFile)
    	Local $sCMD = "icacls " & $sPathOrFile
    	Local $iPID = Run(@ComSpec & " /c " & $sCMD, "", @SW_HIDE, $STDOUT_CHILD)
    	ProcessWaitClose($iPID)
    	Local $sOutput = StdoutRead($iPID)
    	Return StringSplit(StringTrimRight(StringStripCR($sOutput), StringLen(@CRLF)), @CRLF)
    EndFunc
    Alles anzeigen
  • Powershell und Autoit

    • BugFix
    • 14. Oktober 2015 um 12:29

    kann ich dir aus dem Kopf nicht sagen. Starte mal Scriptomatic und schau nach, welche Methoden dir die einzelnen Klassen bieten.

    Edit:
    Soweit ich das nachgelesen habe, existiert keine interne Möglichkeit um kurz und knackig die Zugriffsrechte von Usern für eine Verzeichnisstruktur abzufragen.
    Also musst du auf externe Mittel zugreifen: AccessEnum von Sysinternals

  • Powershell und Autoit

    • BugFix
    • 14. Oktober 2015 um 12:13
    Zitat von DasIch

    doch nur Rechner verwalten bzw. lokal angelegte user, oder?!

    Ich arbeite nicht regelmäßig mit WMI. Du kannst Remoteabfragen tätigen ($strComputer = "." <-- bedeutet localhost, da kannst du anderen Rechner angeben).
    Ich weiß nicht sicher, inwiefern Gruppenrichtlinien bestimmte Abfragen unterbinden, einfach testen. ;)

  • Powershell und Autoit

    • BugFix
    • 14. Oktober 2015 um 11:51

    Wozu Powershell? Wenn ich das richtig verstanden habe, kannst du alles erforderliche per WMI abfragen. Falls das Bsp. nicht alle Daten enthält kannst du das anpassen. Details zu WMI findest du bei MSDN.

    AutoIt
    $strComputer = "."
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", Default,48)
    For $objItem in $colItems
        ConsoleWrite("-----------------------------------" & @LF)
        ConsoleWrite("Win32_UserAccount instance" & @LF)
        ConsoleWrite("-----------------------------------" & @LF)
        ConsoleWrite("AccountType: " & $objItem.AccountType & @LF)
        ConsoleWrite("Caption: " & $objItem.Caption & @LF)
        ConsoleWrite("Description: " & $objItem.Description & @LF)
        ConsoleWrite("Disabled: " & $objItem.Disabled & @LF)
        ConsoleWrite("Domain: " & $objItem.Domain & @LF)
        ConsoleWrite("FullName: " & $objItem.FullName & @LF)
        ConsoleWrite("InstallDate: " & $objItem.InstallDate & @LF)
        ConsoleWrite("LocalAccount: " & $objItem.LocalAccount & @LF)
        ConsoleWrite("Lockout: " & $objItem.Lockout & @LF)
        ConsoleWrite("Name: " & $objItem.Name & @LF)
        ConsoleWrite("PasswordChangeable: " & $objItem.PasswordChangeable & @LF)
        ConsoleWrite("PasswordExpires: " & $objItem.PasswordExpires & @LF)
        ConsoleWrite("PasswordRequired: " & $objItem.PasswordRequired & @LF)
        ConsoleWrite("SID: " & $objItem.SID & @LF)
        ConsoleWrite("SIDType: " & $objItem.SIDType & @LF)
        ConsoleWrite("Status: " & $objItem.Status & @LF)
    Next
    Alles anzeigen

    Edit:
    Ich habe mal Scriptomatic4AutoIt zum einfachen Generieren von WMI-Code angehängt.

    Dateien

    Scriptomatic4Autoit.zip 4,56 MB – 425 Downloads
  • Übersetzung Hilfe 3.3.8.1

    • BugFix
    • 14. Oktober 2015 um 10:12
    Zitat von Tweaky

    Einfach die 3 Hilfedateien in den Ordner "C:\Program Files (x86)\AutoIt3\" kopieren.
    Dann in SciTE F1 drücken.
    Dann sind dort alle Befehle aufgelistet.

    Mal zum besseren Verständnis:
    Intern greift SciTe ausschließlich per F1 auf die AutoIt3Help.exe zu. Diese fungiert als Wrapper und greift auf die *.chm im selben Pfad zu.
    Die Anweisung in SciTE lautet:
    # Commands to for Help F1
    command.help.$(au3)=$(SciteDefaultHome)\..\Autoit3Help.exe "$(CurrentWord)"
    command.help.subsystem.$(au3)=2

    Um z.B. Hilfe Dateien der Form *.chm direkt nutzen zu können, ist ein anderes Subsystem erforderlich. Hier mal am Bsp. meiner Python Installation:
    command.help.$(file.patterns.py)=$(CurrentWord)!C:\Python27\Doc\python274.chm
    command.help.subsystem.$(file.patterns.py)=4

    Aber wie gesagt: Der AutoIt-Hilfe-Wrapper erledigt das für dich, nur falls du noch andere Sprachen in SciTE verwalten möchtest ist das von Relevanz.

  • Read file -> return Zeilennummer

    • BugFix
    • 14. Oktober 2015 um 09:51

    Hier ein kurzes Bsp., wie man mit Dateihandle arbeitet:

    AutoIt
    ; Datei öffnen per Handle
    $hFileOpen = FileOpen($sFilePath, $FO_READ)
    
    
    ; Zeilenweise lesen bis Dateiende
    While True
    	$sLine = FileReadLine($hFileOpen)
    	If @error Then ExitLoop
    	ConsoleWrite($sLine & @CRLF)
    WEnd
    
    
    ; Dateihandle schliessen
    FileClose($hFileOpen)
    Alles anzeigen
  • PixelSearch Problem

    • BugFix
    • 29. September 2015 um 16:25

    PixelSearch ( left, top, right, bottom, color [, shade-variation = 0 [, step = 1 [, hwnd]]] )
    Wie unschwer erkennbar, sind 5 Parameter zwingend. Wenn du nur 2 übergibst, geht das natürlich in die Hose.

  • Taskleiste automatisch ausblenden

    • BugFix
    • 29. September 2015 um 11:14

    @Racer
    DAS ist doch viel zu einfach. :rofl:

    Aber wenn schon kurz, dann will ich auch Einzeiler :P

    AutoIt
    ; Hide
    BitOR(WinSetState("[Class:Shell_TrayWnd]","",@SW_HIDE),WinSetState("Start","",@SW_HIDE))
    ; Show
    BitOR(WinSetState("[Class:Shell_TrayWnd]","",@SW_SHOW),WinSetState("Start","",@SW_SHOW))
  • Taskleiste automatisch ausblenden

    • BugFix
    • 29. September 2015 um 10:24
    Zitat von Bitnugger

    Damit auch der Start-Button verschwindet, wenn die Taskleiste ausgeblendet wird, habe ich noch ein paar Zeilen hinzugefügt... ich verstehe nur nicht, wieso das Fenster des Start-Button erst nach einem MouseMove wieder sichbar wird.

    Weil der Startbutton nicht die Position 0,0 besitzt.
    Hier mal die Funktion, bei der es dann auch egal ist, wo die Taskbar angedockt ist:

    AutoIt
    Func _TrayVisible($_fVisible) ; True/False
    	Local Const $SWP_SHOWWINDOW = 0x40
    	Local Const $SWP_HIDEWINDOW = 0x80
    	Local $hTray = _WinAPI_FindWindow("Shell_TrayWnd", "")
    ;~ 	Local $hStart = _WinAPI_FindWindow("ClassicShell.CStartButton", "")  ; bei Benutzung Classic.Shell
    	Local $hStart = _WinAPI_FindWindow("Button", "Start")
    	Local $aTray = WinGetPos($hTray), $aStart = WinGetPos($hStart)
    	Local $iFlag = $_fVisible ? $SWP_SHOWWINDOW : $SWP_HIDEWINDOW
    	_WinAPI_SetWindowPos($hTray, 0, $aTray[0], $aTray[1], $aTray[2], $aTray[3], $iFlag)
    	_WinAPI_SetWindowPos($hStart, 0, $aStart[0], $aStart[1], $aStart[2], $aStart[3], $iFlag)
    EndFunc
    Alles anzeigen

    Edit:
    Oder vielleicht besser allgemeingültig mit Vorbelegung Standard-Windows-Button

    AutoIt
    ; Classic Shell:
    ;~ _TrayVisible(False, "ClassicShell.CStartButton", "")
    ;~ Sleep(2000)
    ;~ _TrayVisible(True, "ClassicShell.CStartButton", "")
    
    
    ; Standard:
    _TrayVisible(False)
    Sleep(2000)
    _TrayVisible(True)
    
    
    Func _TrayVisible($_fVisible, $_sDefButtonClass='Button', $_sDefButtonText='Start') ; True/False
    	Local Const $SWP_SHOWWINDOW = 0x40
    	Local Const $SWP_HIDEWINDOW = 0x80
    	Local $hStart = _WinAPI_FindWindow($_sDefButtonClass, $_sDefButtonText)
    	Local $aTray = WinGetPos($hTray), $aStart = WinGetPos($hStart)
    	Local $iFlag = $_fVisible ? $SWP_SHOWWINDOW : $SWP_HIDEWINDOW
    	_WinAPI_SetWindowPos($hTray, 0, $aTray[0], $aTray[1], $aTray[2], $aTray[3], $iFlag)
    	_WinAPI_SetWindowPos($hStart, 0, $aStart[0], $aStart[1], $aStart[2], $aStart[3], $iFlag)
    EndFunc
    Alles anzeigen
  • Probleme beim Script für ein Lexware Backup

    • BugFix
    • 29. September 2015 um 09:50
    Zitat von WebBuddha

    Der 7-zip Befehl passt soweit, dieser läuft manuell in der cmd sauber durch.

    Läuft der Befehl denn auch, wenn du ihn mal allein von einem Skript mit RunWait startest? Evtl. auch mal mit opt_flag $RUN_CREATE_NEW_CONSOLE probieren.

    Edit:
    Vielleicht ist es auch günstiger nur einmal eine Konsole zu öffnen und dann alle Befehle in diese Konsole abzusetzten (StdinWrite StdoutRead)

  • Prüfen, ob ein Fenster eine bestimmte MESSAGE erhalten hat

    • BugFix
    • 28. September 2015 um 19:58

    Hier mal ein Bsp. von mir zum Hooken von Messages. Ist kommentiert und sollte verständlich sein.

    AutoIt
    ;-- TIME_STAMP   2014-07-30 17:37:42
    
    
    #cs
    	WM_ -Message Hook
    	- Nachricht wird erst in einer eigenen Funktion ausgewertet
    	- dann an das System zurückgegeben (auswertbar mit GUIRegisterMsg)
    	- oder verworfen ("Return 0" nach Msg-Auswertung in _WinProc, s. Zeile 76)
    #ce
    
    
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    
    
    ;~ Local Const $GWL_WNDPROC = -4
    
    
    $hGui = GUICreate("Test", 400, 400)
    $hListView = _GUICtrlListView_Create($hGui, "Listview", 10, 10, 380, 380)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
    
    
    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)
    
    
    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)
    
    
    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
    GUISetState()
    
    
    ;
    $hProc = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')         ; == hier registriere ich die Funktion "_WinProc" als Callback, Returntype ist "ptr", Parametertypen
    $hHook = _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, DllCallbackGetPtr($hProc))     ; == hier wird dem Fenster die Adresse der Callback-Prozedur übergeben, diese ersetzt jetzt die Standard-Window-Prozedur
    
    
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
    
    
    
    
    While GUIGetMsg() <> -3
        Sleep(10)
    WEnd
    
    
    _WinAPI_SetWindowLong($hGui, $GWL_WNDPROC, $hHook)                                 ; == nach Programmende: originale WinProc wiederherstellen
    DllCallbackFree($hProc)
    
    
    Func _WinProc($hWnd, $iMsg, $iwParam, $ilParam)                                    ; == die Prozedur soll ausschließlich WM_NOTIFY auswerten
    	; wenn nicht die gewünschte Msg kommt - Rückgabe an System                     ; == andere Messages werden gleich durchgereicht ans System zur Auswertung
        If $iMsg <> $WM_NOTIFY Then Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
    
    
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
        $hWndListView = $hListView
        If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    
    
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
            Case $hWndListView
                Switch $iCode
                    Case $LVN_COLUMNCLICK ; A column was clicked                       ; == Ich möchte nicht, dass diese Msg verwertet werden kann und verwerfe sie
                        $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    					ConsoleWrite('MyProc: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    					Return 0 ; <== Nachricht wird jetzt verworfen und kann über GUIRegisterMsg nicht verwertet werden
    
    
                    Case $NM_CLICK                                                     ; == Diese Msg lasse ich durch ans System
                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    					ConsoleWrite("MyProc: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    											"  -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
                EndSwitch
        EndSwitch
    	; jetzt wird die normale WinProc aufgerufen, die man mit GuiRegisterMsg auswerten kann
        Return _WinAPI_CallWindowProc($hHook, $hWnd, $iMsg, $iwParam, $ilParam)
    EndFunc   ;==>_WinProc
    
    
    
    
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    	$hWndListView = $hListView
    	If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    	$iCode = DllStructGetData($tNMHDR, "Code")
    	Switch $hWndFrom
    		Case $hWndListView
    			Switch $iCode
    				Case $LVN_COLUMNCLICK ; A column was clicked <== Diese Nachricht erreicht die Funktion nicht mehr
    					Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    					ConsoleWrite('GUIRegisterMsg: $LVN_COLUMNCLICK -->Column: ' & DllStructGetData($tInfo, "SubItem") & @CRLF)
    				Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    					Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    					ConsoleWrite("GUIRegisterMsg: $NM_CLICK " & "-->Index: " & DllStructGetData($tInfo, "Index") & _
    											"  -->SubItem: " & DllStructGetData($tInfo, "SubItem") & @CRLF)
    			EndSwitch
    	EndSwitch
    	Return 0
    EndFunc   ;==>WM_NOTIFY
    Alles anzeigen
  • Probleme beim Script für ein Lexware Backup

    • BugFix
    • 28. September 2015 um 10:56
    Zitat von WebBuddha

    Local $lexdst = ("I:\XXX\_BACKUP\_LEXWARE")

    Das ist quatsch. Weise der Variablen nur den Pfad zu: Local $lexdst = "I:\XXX\_BACKUP\_LEXWARE"
    Wobei Klammern, die zuviel sind, eigentlich ignoriert werden.

    EDIT:
    Der Fehler liegt woanders: Du erstellst die Variable zu einem Zeitpunkt, wo es Laufwerk I: noch gar nicht gibt! Also einfach erst DriveMappAdd, danach die Variable definieren.

  • Taskleiste automatisch ausblenden

    • BugFix
    • 24. September 2015 um 22:55
    Zitat

    Das Googeln von TrayVisible brachte auch keine wirklichen Ergebnisse

    Die Funktion habe ich auch gerade erst erstellt. ;)
    Das ist eine Funktion, die du mit _TrayVisible(True) oder _TrayVisible(False) aufrufen musst.

  • Taskleiste automatisch ausblenden

    • BugFix
    • 24. September 2015 um 22:26
    Zitat von matthias87

    Ich weiß das geht bestimmt um einiges eleganter

    Ja, und das sollte man dann auch versuchen, statt irgendwelche Send-Konstrukte zu nehmen.

    AutoIt
    #include <WinAPI.au3>
    
    
    Func _TrayVisible($_fVisible) ; True/False
    	Local Const $SWP_SHOWWINDOW = 0x40
    	Local Const $SWP_HIDEWINDOW = 0x80
    	Local $hTray = _WinAPI_FindWindow("Shell_TrayWnd", "")
    	Local $iFlag = $_fVisible ? $SWP_SHOWWINDOW : $SWP_HIDEWINDOW
    	_WinAPI_SetWindowPos($hTray, 0, 0, 0, 0, 0, $iFlag)
    EndFunc

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™