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

Beiträge von teh_hahn

  • Frage zu HotKey

    • teh_hahn
    • 19. November 2007 um 11:22
    [autoit]

    #include <GUIConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    Global $h_gui = GUICreate("HotKey Test")
    HotKeySet("^a", "Test")
    GUISetState()

    While 1
    If GUIGetMsg() = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    Func Test()
    If WinGetHandle("") = $h_gui Then MsgBox (0, 'Test', 'Eine Testausgabe!')
    EndFunc

    [/autoit]
  • Brauche hilfe, beim Umschreiben, weiss nicht so recht ob alles richtig ist

    • teh_hahn
    • 18. November 2007 um 20:14

    Hi,

    kleinere Änderungen:
    1. Sleeptime im Funktionskopf.
    2. Prüfung zuerst auf @error und nicht auf not @error.
    3. Prüfung auf Not Mod und nicht Mod = 0.
    4. PixelSearch nun mittels Makros @Desktop... (für andere Auflösungen)
    5. MouseClick nun sofort (letzter Parameter = 0).
    6. Code einmal "getidyed".

    Spoiler anzeigen
    [autoit]

    Local $i_xval = 36, $i_yval = 284, $i_boxval = 0

    [/autoit] [autoit][/autoit] [autoit]

    Funktion($i_xval, $i_yval, $i_boxval)

    [/autoit] [autoit][/autoit] [autoit]

    Func Funktion($i_x, $i_y, $i_box, Const $I_SLEEP = 500)
    Local $i_id = 1

    [/autoit] [autoit][/autoit] [autoit]

    While $i_id < 5 And $i_box > 4
    MouseMove($i_x, $i_y, 0)
    Sleep($I_SLEEP)
    PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, 0xEDBA44)
    If @error Then
    MouseClick("left", 186, 722, 2, 0)
    MouseClick("left", $i_x, $i_y, 1, 0)
    Else
    Beep(100, 100)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If Not Mod($i_id, 4) Then
    $i_x += 36
    $i_y = 284
    $i_box += 1
    $i_id = 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $i_y += 44
    $i_id += 1
    WEnd
    EndFunc ;==>Funktion

    [/autoit]
  • DLL Verständniss verbessern

    • teh_hahn
    • 18. November 2007 um 20:02

    Hi,

    erste Anlaufstelle, damit man erst einmal versteht was DLLs überhaupt sind ist wie so oft MSDN: http://msdn2.microsoft.com/en-us/library/1ez7dh12(VS.80).aspx

    Um die Funktionen, die in einer DLL public sind herauszufinden benutzt man am Besten den Depencency Walker: http://www.dependencywalker.com/

    Nun braucht man in den meisten Fällen noch eine Dokumentation zu der DLL, in der die DLL-Funktionen beschrieben sind (Ohne Doku ist es oft schwer die Funktionen korrekt aufzurufen). Bei Microsoft DLLs MSDN benutzen, bei DLLs von Drittherstellern nachschauen, ob es ein PDF oder Ähnliches gibt.

    In AutoIt gestaltet sich die Implementation dann sehr einfach. Am besten öffnet man die DLL mittels OnAutoItStart-Funktion am Anfang mit DLLOpen und ruft die Funktionen dann mit DLLCall auf, wozu man sich am besten für jede Funktion eine UDF schreibt. Am Ende des Skriptes einmal DLLClose und fertig ists.

  • Systemvariablen setzen

    • teh_hahn
    • 14. November 2007 um 11:50

    Ja, dann geht bloß der Sinn der Ganzen Angelegenheit verloren. Ich möchte die Variable ja SYSTEMWEIT SOFORT zur Verfügung haben und nicht nur in meinem Skript...

  • Systemvariablen setzen

    • teh_hahn
    • 14. November 2007 um 09:33

    Hi,

    ich möchte gerne Systemvariablen setzen (keine temporären mit EnvSet!!!). Ich weiß, dass es das CMD-Tool setx gibt, möchte das ganze aber mit AutoIt-Mitteln lösen. habe dazu folgendes Skript geschrieben:

    [autoit]

    Func _EnvSetSys(Const $S_VAR, Const $V_VAL = "")
    Local $s_type = "REG_SZ"
    If StringInStr($V_VAL, "%") Then $s_type = "REG_MULTI_SZ"
    Return (RegWrite("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment", $S_VAR, $s_type, $V_VAL))
    EndFunc ;==>_EnvSetSys

    [/autoit][autoit][/autoit][autoit]

    _EnvSetSys("MyProgramFiles", "%PROGRAMFILES%\MyApps")
    MsgBox(64, "_EnvSetSys", EnvGet("MyProgramFiles"))

    [/autoit]


    Das Ganze wird auch wunderbar eingetragen und taucht auch unter "System->Eigenschaften->Umgebungsvariablen" auf, ich kann sie bloß nicht mittels EnvGet oder über Kommandozeile echo %MyProgramFiles% auslesen (vermute ein Neustart ist notwendig)!

    Weiß jemand, wie ich diese Restriktion umgehen kann, so dass die Variable sofort verfügbar ist?

  • Laufwerk umbenennen

    • teh_hahn
    • 13. November 2007 um 11:56

    Hi, gefällt mir gut. Habe das Ganze noch ein wenig modifiziert und hätte noch weitere Verbesserungsvorschläge:
    1. Funktion erwartet C und nicht C: oder C:\ (RegExp anpassen!)
    2. Wenn das Laufwerk bereits über den Explorer umbenannt wurde, hat dies keine Auswirkungen! (Herausfinden, wo dies abgespeichert wird und ggf. auch in der Registry ändern!) Wäre cool, wenn das noch jemand einbauen könnte.

    Hier das leicht modifizierte Skript von Huggy:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name.....: _DriveRename
    ; Description.......: Changes the default label of a drive.
    ; Version...........: 1.0
    ; Change Date.......: 2007-11-13
    ; AutoIt Version....: 3.2.8.1
    ;
    ; Parameter(s)......: $S_PATH - String containing the path of the drive to change the default label.
    ; Requirements(s)...: None
    ; Return Value(s)...: Success: Returns 1
    ; Failure: Returns 0 and set @error to:
    ; 1 = The specified path is invalid.
    ; 2 = Could not write in the registry.
    ;
    ; Author(s).........: Huggy <[email='affe1992@gmx.at'][/email]>
    ; Modified by: teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    ; Company...........: None
    ; URL...............: None
    ; Note(s)...........: None
    ;===============================================================================
    Func _DriveRename(Const $S_PATH, Const $S_LABEL)
    If Not StringRegExp($S_PATH, "[a-zA-Z]") Then Return (SetError(1, 0, 0))
    If Not RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\" & $S_PATH & _
    "\DefaultLabel", "", "REG_SZ", $S_LABEL) Then Return (SetError(2, 0, 0))
    Return (1)
    EndFunc ;==>_DriveRename

    [/autoit]
  • Button klick -> FileOpenDialog

    • teh_hahn
    • 31. Oktober 2007 um 11:30

    Hi,

    @^T!Tu$ zu Deinem Skript:
    1. Inkludiere nur die Dateien, die du wirklich benötigst.
    2. Benutze am besten Opt("MustDeclareVars", 1) oben im Skript.
    3. Setze die GUI besser erst auf sichtbar, wenn alle GUI-Elemente erzeugt wurden.
    4. Setze die Elemente der GUI erst auf enabled, wenn es Sinn ergibt. Vorher wäre Dein Skript auch mit leerem Inputfeld gestartet.
    5. Die Sleeps beim SoundPlay kannst Du Dir sparen, nutze lieber den Parameter "wait" der Funktion.
    6. Benutze wie angesprochen Timer.
    7. Benutze Tidy (in SciTE STRG+T) um dein Skript zu säubern und poste es dann.

    Hier nun das Skript:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    main()

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItStart()
    Opt("MustDeclareVars", 1)
    EndFunc ;==>OnAutoItStart

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    Local Const $S_CFGFILE = @ScriptDir & "\MyFile.ini"
    Local $n_timer = 0, $s_soundfile = "", $h_searchbt = 0, $h_pathinp = 0, _
    $h_startbt = 0, $h_savebt = 0, $h_exitbt = 0, $h_sdownchkbox = 0

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("MyGUI", 269, 105)
    $h_pathinp = GUICtrlCreateInput(IniRead($S_CFGFILE, "Settings", "Filepath", ""), 9, 21, 150, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $h_searchbt = GUICtrlCreateButton("Search File...", 171, 21, 85, 20)
    $h_startbt = GUICtrlCreateButton("Start", 184, 72, 80, 20)
    $h_savebt = GUICtrlCreateButton("Save", 97, 72, 80, 20)
    $h_exitbt = GUICtrlCreateButton("E&xit", 7, 72, 80, 20)
    $h_sdownchkbox = GUICtrlCreateCheckbox("Shutdown on DC", 9, 47, 102, 20)

    [/autoit] [autoit][/autoit] [autoit]

    If Not GUICtrlRead($h_pathinp) Then
    GUICtrlSetState($h_startbt, $GUI_DISABLE)
    GUICtrlSetState($h_savebt, $GUI_DISABLE)
    EndIf
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $h_exitbt
    INIWriteFilePath($S_CFGFILE, $h_pathinp)
    Exit
    Case $h_searchbt
    $s_soundfile = FileOpenDialog("Search Soundfile...", @WindowsDir, "Soundfile (*.mp3;*.wav)", 3)
    If $s_soundfile Then
    GUICtrlSetData($h_pathinp, $s_soundfile)
    GUICtrlSetState($h_startbt, $GUI_ENABLE)
    GUICtrlSetState($h_savebt, $GUI_ENABLE)
    EndIf
    Case $h_startbt
    GUICtrlSetData($h_startbt, "Stop")
    Do
    ToolTip('Script is "running"', 0, 0)
    If WinActive("SRO_Client") Then
    If PixelGetColor(495, 428) = 16710616 Then
    SoundSetWaveVolume(100)
    SoundPlay($s_soundfile, 1)
    MouseClick("left", 509, 422)
    If GUICtrlRead($h_sdownchkbox) = $GUI_CHECKED Then
    $n_timer = TimerInit()
    While 1
    If TimerDiff($n_timer) > 300000 Then Shutdown(5)
    WEnd
    EndIf
    EndIf
    EndIf
    Until GUIGetMsg() = $h_startbt
    ToolTip('Script is "paused"', 0, 0)
    GUICtrlSetData($h_startbt, "Start")
    Case $h_savebt
    INIWriteFilePath($S_CFGFILE, $h_pathinp)
    EndSwitch
    WEnd
    EndFunc ;==>main

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit()
    GUIDelete()
    EndFunc ;==>OnAutoItExit

    [/autoit] [autoit][/autoit] [autoit]

    Func INIWriteFilePath(Const $S_CONFIG, ByRef Const $H_CTRL)
    Local Const $S_PATH = GUICtrlRead($H_CTRL)
    If $S_PATH Then IniWrite($S_CONFIG, "Settings", "Filepath", $S_PATH)
    EndFunc ;==>INIWriteFilePath

    [/autoit]
  • GUI...

    • teh_hahn
    • 30. Oktober 2007 um 20:18

    Hi, absolut kein Schutz aber...

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    main()

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItStart()
    Opt("MustDeclareVars", 1)
    EndFunc ;==>OnAutoItStart

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    Local Const $S_WINWAIT = "Unbenannt"
    Local Const $S_PASSWORD = "test"
    Local Const $S_PROCESS = @ComSpec
    Local $h_userinp = 0, $h_passinp = 0, $h_okbt = 0, $h_cancelbt = 0

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Login", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    $h_userinp = GUICtrlCreateInput("", 10, 10, 115, 20)
    $h_passinp = GUICtrlCreateInput("", 10, 40, 115, 20)
    $h_okbt = GUICtrlCreateButton("&OK", 10, 75, 50, 20)
    $h_cancelbt = GUICtrlCreateButton("&Cancel", 75, 75, 50, 20)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If WinExists($S_WINWAIT) Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $h_cancelbt
    Exit
    Case $h_okbt
    If GUICtrlRead($h_passinp) = $S_PASSWORD Then
    MsgBox(64 + 262144, "Login", "The password is correct!", 1)
    ShellExecute($S_PROCESS)
    Else
    MsgBox(64 + 262144, "Login", "The password is incorrect!", 1)
    WinClose($S_WINWAIT)
    EndIf
    Exit
    EndSwitch
    WEnd
    EndFunc ;==>main

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit()
    GUIDelete()
    EndFunc ;==>OnAutoItExit

    [/autoit]


    Das nur für den Anfang. Du könntest Hotkeys z.B. noch abfangen oder Ähnliches...

  • CD-DVD-Wechsel erkennen

    • teh_hahn
    • 30. Oktober 2007 um 16:41

    Ne, CD-Laufwerk läuft dabei doch nicht an. Es wird doch nur Label und Status abgefragt. Ich hab mal eine etwas andere Variante gebaut:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    main()

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItStart()
    Opt("MustDeclareVars", 1)
    EndFunc ;==>OnAutoItStart

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    Local Const $S_CD = "D:"
    Local $as_cdc = ""
    _CDChanged($S_CD, $as_cdc)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    _CDChanged($S_CD, $as_cdc)
    Switch $as_cdc[0]
    Case 1
    ConsoleWrite($S_CD & " (Tray closed)" & @CR)
    Case 2
    ConsoleWrite($S_CD & " (Tray opened)" & @CR)
    Case 3
    ConsoleWrite($S_CD & " (Label changed)" & @CR)
    EndSwitch
    Sleep(500)
    WEnd
    EndFunc ;==>main

    [/autoit] [autoit][/autoit] [autoit]

    Func _CDChanged(Const $S_PATH, ByRef $as_cdc)
    If IsArray($as_cdc) Then
    ReDim $as_cdc[3]
    $as_cdc[0] = 0

    [/autoit] [autoit][/autoit] [autoit]

    Local $s_tmp = DriveGetLabel($S_PATH)
    If $s_tmp <> $as_cdc[1] Then
    $as_cdc[0] = 3
    $as_cdc[1] = $s_tmp
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $s_tmp = DriveStatus($S_PATH)
    If $s_tmp <> $as_cdc[2] Then
    If $s_tmp = "READY" Then $as_cdc[0] = 1
    If $s_tmp = "NOTREADY" Then $as_cdc[0] = 2
    $as_cdc[2] = $s_tmp
    EndIf
    Else
    Dim $as_cdc[3] = [0, DriveGetLabel($S_PATH), DriveStatus($S_PATH) ]
    EndIf
    EndFunc ;==>_CDChanged

    [/autoit]
  • NVIDIA nTune GPU-FanSpeed v1.0.3

    • teh_hahn
    • 30. Oktober 2007 um 14:35

    Hi,

    habe mal eben ein Skript geschrieben, dass es ermöglicht die GPU-Lüftergeschwindigkeit einer NVIDIA Grafikkarte mittels der Software nTune zu setzen.
    Es funktioniert wie folgt:
    Der erste Aufruf durch z.B.: nTuneFanSpeed.exe 65 setzt die GPU-Lüftergeschwindigkeit auf 65%, der zweite setzt sie wieder auf automatisch (Volllast).

    BENUTZT DAS SKRIPT AUF EURE EIGENE GEFAHR! EINE ZU NIEDRIGE LÜFTERGESCHWINDIGKEIT KANN ZU EINER ÜBERHITZUNG DER GPU UND SOGAR ZU EINER DEFEKTEN GRAFIKKARTE FÜHREN!!!

    Ich empfehle im Desktopbetrieb minimale Werte um die 60%. Zum Spielen sollte man das Skript erneut ausführen, damit der Lüfter wieder mit 100% arbeitet.

    Hier der SourceCode (v1.0.3:(

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\..\icons\nTuneService.ico
    #AutoIt3Wrapper_Outfile=..\release\nTuneFanSpeed.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Description=Sets the GPU fan speed of a NVIDIA videocard.
    #AutoIt3Wrapper_Res_Fileversion=1.0.3.0
    #AutoIt3Wrapper_Res_LegalCopyright=teh_hahn
    #AutoIt3Wrapper_Au3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #Tidy_Parameters=/pr /tc 0
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;===============================================================================
    ; Script Name.......: NVIDIA nTune GPU-FanSpeed
    ; Description.......: Sets the GPU fan speed of a NVIDIA videocard.
    ; Version...........: 1.0.3
    ; Change Date.......: 2008-06-30
    ; AutoIt Version....: 3.2.12.1
    ;
    ; Script File(s)....: nTuneFanSpeed.au3 - This script.
    ; Requirements(s)...: #include <GuiSlider.au3>
    ; #include <Misc.au3>
    ; #include "VarsConvs.au3"
    ; Exit Value(s).....: 0 - Application exited successful.
    ; 1 - Wrong number of parameters specified.
    ; 2 - <fan speed> is not an integer between 0 and 100.
    ; 3 - NVIDIA nTune is not installed on this system.
    ; 4 - The NVIDIA software may have an unsupported language version.
    ; 5 - There is no NVIDIA driver installed on this system.
    ; 6 - Application is already running.
    ;
    ; Author(s).........: teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    ; Company...........: None
    ; URL...............: None
    ; Note(s)...........: - TO USE THIS SCRIPT IN YOUR OWN SCRIPT(S), ASK FOR MY PERMISSION FIRST!
    ; - USE AT OWN RISK! SETTING THE GPU FAN SPEED TOO LOW CAN DAMAGE OR DESTROY YOUR VIDEO CARD!
    ;===============================================================================
    #include <GuiSlider.au3>
    #include "..\..\..\lib\AutoIt.au3"
    #include "..\..\..\lib\Dialogs.au3"
    #include "..\..\..\lib\VarsConvs.au3"

    [/autoit] [autoit][/autoit] [autoit]

    main()

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItStart()
    _AutoItRunOnce(6)
    Opt("MustDeclareVars", 1)
    EndFunc ;==>OnAutoItStart

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    Local Const $S_APPTITLE = "NVIDIA nTune GPU-FanSpeed v1.0.3"
    Local Const $S_WINTITLE = "NVIDIA Systemsteuerung"
    Local Const $I_SLEEP = 2500
    Local $i_perc = 100

    [/autoit] [autoit][/autoit] [autoit]

    If Not $cmdline[0] Then _MsgBoxOnExit(262208, "Syntax for " & $S_APPTITLE, _
    @ScriptName & " [<fan speed>]" & @CR & @CR & _
    "<fan speed> -- Specifies the target speed of the GPU fan in percent.", 0, 0, 1)

    [/autoit] [autoit][/autoit] [autoit]

    If Not StringIsDigit($cmdline[1]) Or Not _IsPercent($cmdline[1]) Then _MsgBoxOnExit(48, $S_WINTITLE, "WARNING: <fan speed> must be an integer between 0 and 100!", 0, 0, 2)
    $i_perc = $cmdline[1]

    [/autoit] [autoit][/autoit] [autoit]

    If Not WinExists($S_WINTITLE) Then
    If Not Run(@ProgramFilesDir & "\NVIDIA nTune Performance Application\Win64\nvCplUI.exe", "", @SW_MINIMIZE) Then _MsgBoxOnExit(48, $S_APPTITLE, "Warning: There is possibly no NVIDIA driver installed on this system!", 0, 0, 5)
    Else
    WinActivate($S_WINTITLE)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If Not WinWait($S_WINTITLE, "", $I_SLEEP) Then _MsgBoxOnExit(16, $S_APPTITLE, "Error: The NVIDIA software may have an unsupported language version!", 0, 0, 4)
    WinSetTrans($S_WINTITLE, "", 0)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Sleep(50)
    Until BitAND(WinGetState($S_WINTITLE), 2)
    Sleep($I_SLEEP)

    For $i = 1 To 99
    If ControlGetText($S_WINTITLE, "", "[CLASS:TaskLink32; INSTANCE:" & $i & "]") = "GPU-Einstellungen ändern" Then
    ControlClick($S_WINTITLE, "", "[CLASS:TaskLink32; INSTANCE:" & $i & "]")
    _nTuneGPUSetFanSpeed($i_perc)
    WinClose($S_WINTITLE)
    If WinExists("Änderungen übernehmen") Then ControlClick("Änderungen übernehmen", "", 6)
    Exit
    EndIf
    Next
    _MsgBoxOnExit(16, $S_APPTITLE, "Error: Could not determine the correct TaskLink!", 0, 0, 3)
    EndFunc ;==>main

    [/autoit] [autoit][/autoit] [autoit]

    Func _nTuneGPUSetFanSpeed(Const $I_SPEED)
    Local Const $S_WINTITLE = "NVIDIA Systemsteuerung"
    Local Const $S_WINTEXT = "GPU-Lüftereinstellungen"
    Local $i_ctrlid = 393

    [/autoit] [autoit][/autoit] [autoit]

    If ControlCommand($S_WINTITLE, $S_WINTEXT, $i_ctrlid, "IsChecked") Then $i_ctrlid += 1
    ControlClick($S_WINTITLE, $S_WINTEXT, $i_ctrlid)

    [/autoit] [autoit][/autoit] [autoit]

    If $i_ctrlid = 394 Then
    _GUICtrlSlider_SetPos(ControlGetHandle($S_WINTITLE, "", 365), $I_SPEED)
    ControlSend($S_WINTITLE, $S_WINTEXT, 365, "{UP}{DOWN}")
    ControlSend($S_WINTITLE, $S_WINTEXT, 1021, "!b")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return 1
    EndFunc ;==>_nTuneGPUSetFanSpeed

    [/autoit]


    Wäre schön, wenn jemand, der die englische Version von NVIDIA nTune nutzt, mir die entsprechenden WinTitles und WinTexts schicken könnte, damit das Tool auch dort funktioniert! Im Anhang befindet sich die kompilierte EXE in der Version 1.0.3!

    UPDATE:
    v1.0.3:
    - Update auf AutoIt Version 3.2.12.1.
    - Auffindung des korrekten TaskLinks nun zuverlässig.
    - Code-Optimierungen.

  • Controls mit Grafik "übermalen"

    • teh_hahn
    • 25. Oktober 2007 um 13:04

    Es geht darum, dass ich für HDDs einen Warning- und einen Alarmwert festlege. Diese möchte ich dann dementsprechend visuell darstellen. Die Lösung mti GUICtrlLabel und GUICtrlSetBkColor funktioniert aber auch.

  • Controls mit Grafik "übermalen"

    • teh_hahn
    • 25. Oktober 2007 um 12:54

    Ja, bloß was für eine? Ein Label drüber zu "kleben" halte ich führ etwas unschön, würde aber theoretisch ja auch gehen. ich probiers mal!

  • Controls mit Grafik "übermalen"

    • teh_hahn
    • 25. Oktober 2007 um 12:06

    Hi,

    habe folgendes Problem: Ich erstelle mir eine ProgressBar und möchte dort Schwellwerte per GUICtrlCreateGraphic einzeichnen. Aber was ich auch mache, die Grafik liegt immer "hinter" der ProgressBar (Obwohl der Z-Index der höchste ist!). Folgendes Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Overpaint Controls", 220, 150)
    GUICtrlCreateProgress(10, 10, 200, 30, $PBS_SMOOTH)
    GUICtrlCreateGraphic(60, 10, 5, 35)
    GuiCtrlSetState(-1, BitOR($GUI_DISABLE, $GUI_ONTOP))
    GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 0)
    GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 5)
    GUICtrlSetGraphic(-1, $GUI_GR_LINE, 0, 35)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Es funktioniert so aber nicht, wie man sieht. Weiß da jemand weiter?

  • Schleifen Probleme (aktualisieren von labels + events bei button betätigung)

    • teh_hahn
    • 23. Oktober 2007 um 21:51

    Sleep(500) aus der While 1-Schleife raus!. Du bist im MessageLoop-Modus, jedes Sleep unterbricht die Abfrage der GUI und ist ohnehin überflüssig!

    EDIT: Achso, dazu die Funktion refresh mit einem Timer aufrufen (siehe mein Skript oben!).

  • Schleifen Probleme (aktualisieren von labels + events bei button betätigung)

    • teh_hahn
    • 23. Oktober 2007 um 21:43

    Hi, schau Dir mal folgendes an:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIListView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    main()

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItStart()
    Opt("MustDeclareVars", 1)
    EndFunc ;==>OnAutoItStart

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    Local $h_listview = 0, $h_togglebt = 0
    Local $n_timer = 0
    Local $s_state = ""

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Dienste", 320, 240)
    $h_listview = GUICtrlCreateListView("Dienst|Status", 5, 5, 310, 200)
    $h_togglebt = GUICtrlCreateButton("An/Aus", 5, 215, 60, 20)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateListViewItem("Apache|an", $h_listview)
    GUICtrlCreateListViewItem("MySQL|aus", $h_listview)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $n_timer = TimerInit()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $h_togglebt
    SimulateToggleState(_GUICtrlListViewGetCurSel($h_listview), $h_listview)
    EndSwitch

    If TimerDiff($n_timer) > 3000 Then
    SimulateToggleState(Random(0, 1, 1), $h_listview)
    $n_timer = TimerInit()
    EndIf
    WEnd
    EndFunc ;==>main

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit()
    GUIDelete()
    EndFunc ;==>OnAutoItExit

    [/autoit] [autoit][/autoit] [autoit]

    Func SimulateToggleState(Const $I_INDEX, ByRef Const $H_LVIEW)
    Local $s_state = "an"
    If _GUICtrlListViewGetItemText($H_LVIEW, $I_INDEX, 1) = "an" Then $s_state = "aus"
    _GUICtrlListViewSetItemText($H_LVIEW, $I_INDEX, 1, $s_state)
    EndFunc ;==>SimulateToggleState

    [/autoit]


    Ich simuliere hier aber alle drei Sekunden das Ändern des Status eines (von mir ausgedachten Prozesses). Der Button wechselt hier den Status (natürlich nur den Text)!

    Lässt sich aber ja ganz einfach auf Deine Bedürfnisse anpassen!
    Und lass die Sleeps weg. Es gibt kaum ein Problem, was sich nicht auch ohne Sleeps lösen lässt. Sleeps sind das letzte, nur gut zum idlen!

  • WMI Memory Leaks

    • teh_hahn
    • 23. Oktober 2007 um 15:27

    Hi,

    ich möchte noch einmal auf das Thema Memory Leaks durch WMI Objekte kommen. Gibt es mittlerweile einen Workaround? Man schaue sich dazu folgendes Skript an:

    Spoiler anzeigen
    [autoit]

    While 1
    _OSSerialNumber()
    Sleep(1000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _OSSerialNumber()
    Local $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Local $colSettings = $objWMIService.ExecQuery ("Select SerialNumber from Win32_OperatingSystem")
    For $objOperatingSystem In $colSettings
    $objWMIService = 0
    Return ($objOperatingSystem.SerialNumber & '"')
    Next
    EndFunc ;==>_OSSerialNumber

    [/autoit]

    Die Zeile

    [autoit]

    $objWMIService = 0

    [/autoit]

    kann man sich auch sparen, bringt überhaupt nichts. Wenn man die AU3 nun kompiliert und laufen lässt, sieht man, dass sich der Speicherverbrauch kontinuierlich erhöht. Das ist natürlich völlig inakzeptabel und WMI ist so nicht für mich zu gebrauchen.

    Liegt das Problem an WMI oder an AutoIt (fehlerhafte Implementierung der Object-Functions)?

    Bin für jeden Vorschlag zu haben!

    PS: Sehe anhand meines Beispiels, dass die Synatx hervorhebung für Objekt-Methoden nicht richtig ist, dass nur nebenbei! :D

    EDIT: Habe auch folgendes probiert, aber auch kein Unterschied (Hätte ja sein können, das es am wiederholten Aufruf von ObjGet liegt, scheint aber mehr an den Queries zu liegen:

    Spoiler anzeigen
    [autoit]

    main()

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItStart()
    Opt("MustDeclareVars", 1)
    EndFunc ;==>OnAutoItStart

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    Local $objWMIService = _WMIInit()

    While 1
    _OSSerialNumber($objWMIService)
    Sleep(1000)
    WEnd
    EndFunc ;==>main

    [/autoit] [autoit][/autoit] [autoit]

    Func OnAutoItExit()
    GUIDelete()
    EndFunc ;==>OnAutoItExit

    [/autoit] [autoit][/autoit] [autoit]

    Func _OSSerialNumber(ByRef Const $objWMIService)
    Local $colSettings = $objWMIService.ExecQuery ("Select SerialNumber from Win32_OperatingSystem")
    For $objOperatingSystem In $colSettings
    Return ($objOperatingSystem.SerialNumber & '"')
    Next
    EndFunc ;==>_OSSerialNumber

    [/autoit] [autoit][/autoit] [autoit]

    Func _WMIInit()
    Return (ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"))
    EndFunc ;==>_WMIInit

    [/autoit]


    Das nervt mich ab. Mann kann zwar dadurch Dinge einmalig abfragen (was ja auch oftmals reicht), wirklich dynamische Sachen sind so aber nicht durchführbar!

  • Suche leute die mir Helfen können

    • teh_hahn
    • 23. Oktober 2007 um 12:12

    Hi,

    Du willst doch eigentlich nur eine Windows XP Unattended Installation machen, oder nicht? Und Du willst die Möglichkeit haben nach dem unattended Windows Setup Programme auszuwählen, die dann beim ersten hochfahren silent installiert werde, korrekt?
    Ist doch alles kein Problem: Bau Dir eine simple GUI, bastle für jede Applikation die Du installieren möchtest ein SilentSetup-Paket und führe die GUI beim ersten Start mit RunOnceEx aus. (Siehe diverse Unattended-Sites für den Einstieg!)

    Und ja, es ist nicht illegal, wenn er den Key rausnimmt und bei der Installation eine Aufforderung zur Eingabe erscheint (Standard bei Windows!) Sämtliche Applikationen müssen natürlich lizensiert sein, womit die Verbreitung aber auch ausgeschlossen ist (für Dich selbst natürlich ok). Also lieber alles ohne Keys installieren.

    Und habe ich hier gelesen, dass Du Java machst? Ich glaube da gab es ein Missverständnis. Du meinst das SilentSetup für die Java Environment Runtime, der Andere (grade zu faul zum nachschauen) dachte Du willst Dein eigenes Pseudo-OS bauen.

    Also für den Anfang einfach mal googlen, ist echt nicht schwer!

  • Anwendung-Unterstrich in Msgbox ?

    • teh_hahn
    • 20. Oktober 2007 um 20:37

    Du kannst keine Zeilenumbrüche mittels "_" erzeugen. Dieses Zeichen dient lediglich dazu den Source-Code übersichtlich zu gestalten. Was funktioniert ist folgendes:

    [autoit]

    MsgBox(2048, "Eine Messagebox mit Text", StringReplace("Lorem ipsum _dolor sit amet, consectetuer adipiscing elit. _Phasellus congue eleifend orci. Integer nec dolor ullamcorper _mi varius luctus. Pellentesque vitae sapien. Vivamus porttitor _laoreet quam. Sed sagittis augue sit amet eros. _Nulla facilisi. Integer lectus. Sed non purus. _Nam consequat sodales mi. Nunc urna justo, interdum ac, _volutpat eu, rhoncus eu, quam. Morbi aliquam magna eu est.", "_", @CR))

    [/autoit]


    Ergibt bloß keinen Sinn. Einzige Möglichkeit bleibt nun mal:

    [autoit]

    MsgBox(2048, "Eine Messagebox mit Text", "Lorem ipsum" & @CR & _
    "dolor sit amet, consectetuer adipiscing elit." & @CR & _
    "Phasellus congue eleifend orci. Integer nec dolor ullamcorper" & @CR & _
    "mi varius luctus. Pellentesque vitae sapien. Vivamus porttitor" & @CR & _
    "laoreet quam. Sed sagittis augue sit amet eros." & @CR & _
    "Nulla facilisi. Integer lectus. Sed non purus." & @CR & _
    "Nam consequat sodales mi. Nunc urna justo, interdum ac," & @CR & _
    "volutpat eu, rhoncus eu, quam. Morbi aliquam magna eu est.")

    [/autoit]
  • gui skins

    • teh_hahn
    • 20. Oktober 2007 um 20:27

    azunai,
    das Ändern der Farbe der Buttons funktioniert einwandfrei. Achte auch darauf, dass Du GUICtrlSetBkColor verwendest:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    main()

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    Local $h_quitbt = 0, $h_stylebt = 0

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("TestGUI", 100, 100)

    [/autoit] [autoit][/autoit] [autoit]

    $h_quitbt = GUICtrlCreateButton("Quit", 10, 10, 55, 25)
    GUICtrlSetBkColor(-1, 0xF4F4F0)
    GUICtrlSetColor(-1, 0x000080)
    $h_stylebt = GUICtrlCreateButton("Style", 10, 50, 55, 25)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetBkColor(0x000080)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $h_quitbt
    Exit
    Case $h_stylebt
    GUICtrlSetBkColor($h_quitbt, 0xFF00000)
    GUISetStyle($WS_POPUPWINDOW)
    EndSwitch
    WEnd
    EndFunc ;==>main

    [/autoit]
  • Shellexecute und _FileListToArray Problem

    • teh_hahn
    • 19. Oktober 2007 um 16:52

    Nein, kannst Du gleich vergessen!
    Das kann doch gar nicht funktionieren! Du hast in Deinem Ordner Verknüpfungen auf die Druckerverbindungen eines anderen Hosts. Wenn Du diese öffnest (lokal) dann gehst natürlich. Remote sieht das aber ganz anders aus. Du kannst nicht einfach die Druckereinstellungen eines anderen Hosts remote öffnen. Versuch mal die Verknüpfungen remote über den explorer zu öffnen. Da tut sich nix!!!

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™