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

Beiträge von Oscar

  • Hilfe beim Auslesen und zuordnen

    • Oscar
    • 27. Oktober 2008 um 15:39

    Zum einen würde ich sagen, Du hast den Dateinamen der Inidatei vergessen ($path = @ScriptDir & "\daten\" & ".ini") und zum anderen musst Du den Wert, den IniRead zurückgibt auch einer Variablen zuweisen oder mit GUICtrlSetData einem GUI-Element.

  • Zählen während der Eingabe

    • Oscar
    • 27. Oktober 2008 um 15:32

    Zum erstellen der Liste, dann aber eher so:

    [autoit]


    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    ConsoleWrite(BitShift($wParam, 16)&@LF)
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]

    Dann musst Du Dir "nur" noch eine GUI basteln mit allen GUI-Elementen und diese dann alle anklicken, und... :D

  • Zählen während der Eingabe

    • Oscar
    • 27. Oktober 2008 um 15:12

    FireFlyer: In dem Fall musst Du erst das HIWORD in den unteren Bereich "shiften", um es dann mit $CBN_DROPDOWN zu vergleichen. Oder um es mit meinem Beispielscript zu erklären:

    Spoiler anzeigen
    [autoit]


    #include<ComboConstants.au3>
    #include<EditConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<WindowsConstants.au3>

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

    Global $count
    GUICreate(" My GUI", 350, 180)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp2 = GUICtrlCreateInput("", 10, 25, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp3 = GUICtrlCreateInput("", 10, 45, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $combo = GUICtrlCreateCombo("item1", 10, 100, 80, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "item2|item3", "item3")

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

    $label1 = GUICtrlCreateLabel("0", 320, 5, 30, 20)
    $label2 = GUICtrlCreateLabel("0", 320, 25, 30, 20)
    $label3 = GUICtrlCreateLabel("0", 320, 45, 30, 20)

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

    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    If BitShift($wParam, 16) = $CBN_DROPDOWN Then
    $count += 1
    ToolTip($count & ' ' & GUICtrlRead($combo))
    EndIf
    Switch BitAND($wParam, 0xFFFF)
    Case $inp1
    GUICtrlSetData($label1, StringLen(GUICtrlRead($inp1)))
    Case $inp2
    GUICtrlSetData($label2, StringLen(GUICtrlRead($inp2)))
    Case $inp3
    GUICtrlSetData($label3, StringLen(GUICtrlRead($inp3)))
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]

    Ob es eine Liste gibt, kann ich nicht sagen. Entzieht sich meiner Kenntnis, aber auf den msdn-Seiten (msdn.microsoft.com) findet man eine ganze Menge dazu. Google ist auch immer wieder Dein Freund. ;)

    Bei "IsHWnd" wird geprüft, ob die Variable ein Handle enthält. Wenn nicht wird mit GUICtrlGetHandle das Handle der Combobox geholt und der Variablen zugewiesen. Das ist oft bei den ganzen UDFs (beginnen mit einem Unterstrich) nötig. Die funktionieren oft nur, wenn das Handle angegeben wird. Die "normalen" Befehle geben ja immer "nur" eine Control-ID zurück. Im Gegensatz zu den meisten UDFs reicht denen die ID aber auch aus.

  • Zählen während der Eingabe

    • Oscar
    • 27. Oktober 2008 um 04:28

    Tweaky: Wenn man in einem LONGWORD ($wParam) zwei Parameter "einbettet", dann kann man mit BitAND($wParam, 0xFFFF) das LOW WORD und mit BitAND($wParam, 0xFFFF0000) das HIGH WORD ansprechen. Die jeweils anderen Bits werden ausgeblendet. Im Falle von WM_COMMAND befindet sich im LOW WORD die Control-ID der letzten User-Aktion.

    Edit: Man kann mein Beispiel auch noch auf mehrere Inputs ausbauen:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    GUICreate(" My GUI", 350, 120)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp2 = GUICtrlCreateInput("", 10, 25, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp3 = GUICtrlCreateInput("", 10, 45, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $label1 = GUICtrlCreateLabel("0", 320, 5, 30, 20)
    $label2 = GUICtrlCreateLabel("0", 320, 25, 30, 20)
    $label3 = GUICtrlCreateLabel("0", 320, 45, 30, 20)

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

    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Switch BitAND($wParam, 0xFFFF)
    Case $inp1
    GUICtrlSetData($label1, StringLen(GUICtrlRead($inp1)))
    Case $inp2
    GUICtrlSetData($label2, StringLen(GUICtrlRead($inp2)))
    Case $inp3
    GUICtrlSetData($label3, StringLen(GUICtrlRead($inp3)))
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]
  • Zählen während der Eingabe

    • Oscar
    • 26. Oktober 2008 um 19:03

    Oder so:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $inp1

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

    GUICreate(" My GUI", 320, 120)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    ToolTip(StringLen(GUICtrlRead($inp1)))
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    If BitAND($wParam, 0xFFFF) = $inp1 Then ToolTip(StringLen(GUICtrlRead($inp1)))
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]
  • Bildschirm-Lineal (mm/cm)

    • Oscar
    • 26. Oktober 2008 um 13:55

    Klasse Idee! :thumbup:
    Habe ich in die neue Version gleich mal eingebaut (siehe Post #1).

  • Bildschirm-Lineal (mm/cm)

    • Oscar
    • 26. Oktober 2008 um 13:06

    Ich habe das Script noch etwas erweitert. Mit der Tooltip-Anzeige der relativen Mausposition kannst Du nun auch vertikal "messen".

  • Bildschirm-Lineal (mm/cm)

    • Oscar
    • 25. Oktober 2008 um 23:53

    Die neue Version ist fertig (siehe Post #1).

    Dort habe ich das Einstellungsfenster in das Programm integriert und noch etwas erweitert. Danke, progandy! :thumbup:

  • zulaessige werte fuer eine variable definieren

    • Oscar
    • 24. Oktober 2008 um 22:57

    Für solche Aufgaben benutze ich lieber StringInStr(). Dort kann man als dritten Parameter auch angeben, ob CaseSensitive oder nicht.

    [autoit]


    $meine_variable = 't'
    If StringInStr('MDTH', $meine_variable, 0) Then
    MsgBox(0, '', 'ok')
    Else
    MsgBox(0, '', 'error')
    Exit
    EndIf

    [/autoit]
  • Maus-Meter

    • Oscar
    • 24. Oktober 2008 um 22:04

    Ich habe die Vorschläge von Greenhorn bezüglich WMI mal in zwei Funktionen gepackt, womit man dann die DPI-Zahl für die momentan eingestellte Auflösung erhält:

    Spoiler anzeigen
    [autoit]


    ;~ MsgBox(0, 0, 'Höchste Auflösung: ' & _GetMaxResolution())
    ;~ MsgBox(0, 0, 'DPI: ' & _GetLogPixels())
    $MaxRes = _GetMaxResolution()
    $DPI = _GetLogPixels() / Number(StringLeft($MaxRes, StringInStr($MaxRes, ' '))) * @DesktopWidth
    MsgBox(0, 0, $DPI)

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

    Func _GetLogPixels()
    Local $LogPixels
    Local $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DisplayConfiguration', 'WQL', 0x30)
    If IsObj($colItems) then
    For $objItem In $colItems
    $LogPixels = $objItem.LogPixels
    Next
    Return $LogPixels
    Endif
    Return SetError(1, 0, 0)
    EndFunc

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

    Func _GetMaxResolution()
    Local $Output
    Local $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_VideoSettings', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output &= $objItem.Setting & @CRLF
    Next
    EndIf
    Local $aOut = StringRegExp($Output, '="(\d+ x \d+)', 3), $tmp
    If IsArray($aOut) Then
    For $i = 0 To UBound($aOut) - 2
    For $j = $i + 1 To UBound($aOut) - 1
    If Number(StringLeft($aOut[$i], StringInStr($aOut[$i], ' '))) <= Number(StringLeft($aOut[$j], StringInStr($aOut[$j], ' '))) Then
    If Number(StringMid($aOut[$i], StringInStr($aOut[$i], 'x ') + 1)) <= Number(StringMid($aOut[$j], StringInStr($aOut[$j], 'x ') + 1)) Then
    $tmp = $aOut[$i]
    $aOut[$i] = $aOut[$j]
    $aOut[$j] = $tmp
    EndIf
    EndIf
    Next
    Next
    Return $aOut[0]
    Else
    Return SetError(1, 0, 0)
    EndIf
    EndFunc

    [/autoit]

    Das entspricht zwar nicht 100-prozentig den tatsächlichen Abmessungen, aber für das Maus-Meter reicht's völlig. :)

  • Bildschirm-Lineal (mm/cm)

    • Oscar
    • 24. Oktober 2008 um 20:22

    Coole Sache! :)
    So kann man den ppcm-Wert am schnellsten rauskriegen. Und dann einfach in die Inidatei eintragen.

    Danke Dir!

  • Maus-Meter

    • Oscar
    • 24. Oktober 2008 um 17:12

    Hatte neulich den Effekt bei einem Notebook, an dem zusätzlich ein 22" Monitor dranhing. Beide Screens waren per Clone-Modus in Betrieb, aber die höhere Auflösung des 22"-Monitors war eingestellt. Auf dem Display des Notebooks konnte man dann den Bildschirm hin- und herscrollen.
    Das ist also auch noch eine Option.

  • Bildschirm-Lineal (mm/cm)

    • Oscar
    • 23. Oktober 2008 um 22:02

    Ich kann euch nun mein neuestes Werk präsentieren: ein Bildschirm-Lineal mit mm/cm Einteilung.

    Das Script:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=Bildschirm-Lineal.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Description=Bildschirm-Lineal (mm/cm)
    #AutoIt3Wrapper_Res_Fileversion=1.5.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=by Oscar (http://www.autoit.de)
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #NoTrayIcon
    #include<ButtonConstants.au3>
    #include<EditConstants.au3>
    #include<Misc.au3>
    #include<WindowsConstants.au3>
    #include<SliderConstants.au3>
    #include<StaticConstants.au3>
    #include<GUIConstantsEx.au3>

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

    Opt('GUIOnEventMode', 1)

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

    Global $sTitle = 'Bildschirm-Lineal v1.5', $bStart = False, $hLenght
    Global $ppcm = IniRead(@ScriptDir & '\Bildschirm-Lineal.ini', 'PixelPerZentimeter', @DesktopWidth & 'x' & @DesktopHeight, -1)
    Global $cm = IniRead(@ScriptDir & '\Bildschirm-Lineal.ini', 'Länge', 'cm', 20)
    Global $PosX = IniRead(@ScriptDir & '\Bildschirm-Lineal.ini', 'Position', 'X', -1)
    Global $PosY = IniRead(@ScriptDir & '\Bildschirm-Lineal.ini', 'Position', 'Y', -1)
    Global $Trans = IniRead(@ScriptDir & '\Bildschirm-Lineal.ini', 'Transparenz', 'Wert', 100)
    Global $bInfo = Execute(IniRead(@ScriptDir & '\Bildschirm-Lineal.ini', 'Mausposition', 'anzeigen', False))
    If $ppcm = -1 Then _PPCMSetup()
    If $cm < 10 Then $cm = 10

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

    Global $width = $ppcm * $cm + 30
    Global $height = 170
    Global $max = Int((@DesktopWidth - 40) / $ppcm)

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

    GUICreate($sTitle, $width, $height, $PosX, $PosY, $WS_POPUPWINDOW, $WS_EX_DLGMODALFRAME)
    GUISetBkColor(0xEEEEEE) ; Hintergrundfarbe

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

    Global $hLabel = GUICtrlCreateLabel('', 0, 0, $width, $height, Default, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    Global $hContext = GUICtrlCreateContextMenu($hLabel)
    Global $hMInfo = GUICtrlCreateMenuItem('Mausposition anzeigen', $hContext)
    GUICtrlSetOnEvent(-1, '_Mausinfo')
    GUICtrlCreateMenuItem('PPCM-Einstellung', $hContext)
    GUICtrlSetOnEvent(-1, '_PPCMSetup')
    GUICtrlCreateMenuItem('', $hContext)
    GUICtrlCreateMenuItem('Programm beenden', $hContext)
    GUICtrlSetOnEvent(-1, '_End')
    Switch $bInfo
    Case True
    GUICtrlSetState($hMInfo, $GUI_CHECKED)
    Case False
    GUICtrlSetState($hMInfo, $GUI_UNCHECKED)
    EndSwitch

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

    Global $hLenght = GUICtrlCreateInput($cm, 16, 80, 30, 26, $ES_Center)
    GUICtrlSetFont(-1, 12, 600, 0, 'Times New Roman')
    GUICtrlSetBkColor(-1, 0xEEEEEE)
    GUICtrlSetOnEvent(-1, '_EnterInput')
    GUICtrlSetState(-1, $GUI_ONTOP)

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

    GUICtrlCreateLabel('cm', 50, 80, 28, 24, Default, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman')

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

    Global $hSlider = GUICtrlCreateSlider($width / 2 - 110, 80, 255, 30, $TBS_AUTOTICKS)
    GUICtrlSetData(-1, $Trans)
    GUICtrlSetBkColor(-1, 0xEEEEEE)
    GUICtrlSetState(-1, $GUI_ONTOP)
    GUICtrlSetOnEvent(-1, '_SetTrans')

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

    GUICtrlCreateLabel('Transparenz-Einstellung', $width / 2 - 110, 110, 260, 30, $SS_CENTER, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 12, 400, 0, 'Times New Roman')

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

    GUICtrlCreateLabel($sTitle, $width / 2 - 110, 50, 260, 30, $SS_CENTER, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 18, 400, 0, 'Times New Roman')

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

    GUICtrlCreateLabel('mm/cm', 8, 44, 60, 30, Default, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 12, 400, 0, 'Times New Roman')

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

    GUICtrlCreateLabel('Pixel', 8, $height - 50, 60, 30, Default, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 12, 400, 0, 'Times New Roman')

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

    Global $hGraph = GUICtrlCreateGraphic(14, 0, $width - 26, $height)
    For $i = 0 To $cm
    GUICtrlSetGraphic($hGraph, $GUI_GR_MOVE, 3 + $i * $ppcm, 0)
    GUICtrlSetGraphic($hGraph, $GUI_GR_LINE, 3 + $i * $ppcm, 40)
    GUICtrlCreateLabel($i, $i * $ppcm, 28, 12, 16, $SS_RIGHT)
    Next
    For $i = 0 To $cm * 10
    GUICtrlSetGraphic($hGraph, $GUI_GR_MOVE, 3 + $i * $ppcm / 10, 0)
    GUICtrlSetGraphic($hGraph, $GUI_GR_LINE, 3 + $i * $ppcm / 10, 15 + 6 * ($i / 5 = Int($i / 5)))
    Next
    For $i = 0 To $width - 26 Step 10
    GUICtrlSetGraphic($hGraph, $GUI_GR_MOVE, 3 + $i, $height - 8 - 22 * ($i / 100 = Int($i / 100)))
    GUICtrlSetGraphic($hGraph, $GUI_GR_LINE, 3 + $i, $height)
    If ($i / 100 = Int($i / 100)) Then GUICtrlCreateLabel($i, $i - 18, $height - 30, 30, 16, $SS_RIGHT)
    Next

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

    Global $hEnd = GUICtrlCreateButton('X', $width - 38, 80, 26, 26, $BS_CENTER)
    GUICtrlSetFont(-1, 14, 600, 0, 'Arial')
    GUICtrlSetState(-1, $GUI_ONTOP)
    GUICtrlSetOnEvent(-1, '_End')

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

    GUICtrlSetState($hLenght, $GUI_FOCUS)
    GUISetState()

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

    WinSetTrans($sTitle, '', 215 / 100 * $Trans + 40)

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

    Global $aWPos, $sMsg, $oldDisplayMode = @DesktopWidth & 'x' & @DesktopHeight
    While True
    Sleep(20)
    If $bInfo Then
    GUISetCursor(3, 1)
    $aWPos = WinGetPos($sTitle)
    $sMsg = 'rel. Maus-Position (Bezugspunkt: 0 cm): ' & @CRLF & @CRLF
    $sMsg &= @TAB & ' X' & @TAB & ' Y' & @CRLF
    $sMsg &= 'Pixel:' & @TAB & MouseGetPos(0) - $aWPos[0] - 20 & @TAB & MouseGetPos(1) - $aWPos[1] - 3 & @CRLF
    $sMsg &= 'cm: ' & @TAB & StringFormat('%.1f', (MouseGetPos(0) - $aWPos[0] - 20) / $ppcm) & @TAB & StringFormat('%.1f', (MouseGetPos(1) - $aWPos[1] - 3) / $ppcm)
    Else
    GUISetCursor(2, 1)
    $sMsg = ''
    EndIf
    ToolTip($sMsg, Default, Default, $sTitle, 1)
    If @DesktopWidth & 'x' & @DesktopHeight <> $oldDisplayMode Then
    _ReadPPCM()
    $oldDisplayMode = @DesktopWidth & 'x' & @DesktopHeight
    EndIf
    WEnd

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

    Func _End()
    If WinActive($sTitle) Then
    Local $aPos = WinGetPos($sTitle)
    IniWrite(@ScriptDir & '\Bildschirm-Lineal.ini', 'Länge', 'cm', GUICtrlRead($hLenght))
    IniWrite(@ScriptDir & '\Bildschirm-Lineal.ini', 'Position', 'X', $aPos[0])
    IniWrite(@ScriptDir & '\Bildschirm-Lineal.ini', 'Position', 'Y', $aPos[1])
    EndIf
    IniWrite(@ScriptDir & '\Bildschirm-Lineal.ini', 'PixelPerZentimeter', @DesktopWidth & 'x' & @DesktopHeight, $ppcm)
    If $bStart Then
    If @Compiled Then
    Run(@AutoItExe)
    Else
    Run('"' & @AutoItExe & '" /ErrorStdOut "' & @ScriptFullPath & '"')
    EndIf
    EndIf
    Exit
    EndFunc ;==>_End

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

    Func _ReadPPCM()
    $ppcm = IniRead(@ScriptDir & '\Bildschirm-Lineal.ini', 'PixelPerZentimeter', @DesktopWidth & 'x' & @DesktopHeight, -1)
    If $ppcm = -1 Then _PPCMSetup()
    $bStart = True
    _End()
    EndFunc

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

    Func _SetTrans()
    $Trans = GUICtrlRead($hSlider)
    WinSetTrans($sTitle, '', 215 / 100 * $Trans + 40)
    IniWrite(@ScriptDir & '\Bildschirm-Lineal.ini', 'Transparenz', 'Wert', $Trans)
    GUICtrlSetState($hLenght, $GUI_FOCUS)
    EndFunc ;==>_SetTrans

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

    Func _Mausinfo()
    $bInfo = Not $bInfo
    Switch $bInfo
    Case True
    GUICtrlSetState($hMInfo, $GUI_CHECKED)
    Case False
    GUICtrlSetState($hMInfo, $GUI_UNCHECKED)
    EndSwitch
    IniWrite(@ScriptDir & '\Bildschirm-Lineal.ini', 'Mausposition', 'anzeigen', $bInfo)
    EndFunc ;==>_Mausinfo

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

    Func _EnterInput()
    If GUICtrlRead($hLenght) < 10 Then GUICtrlSetData($hLenght, 10)
    If GUICtrlRead($hLenght) > $max Then GUICtrlSetData($hLenght, $max)
    $bStart = True
    _End()
    EndFunc ;==>_EnterInput

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

    Func _PPCMSetup()
    Opt('GUIOnEventMode', 0)
    Local $dll = DllOpen('user32.dll')
    GUICreate('PPCM-Einstellung', 620, 180, -1, -1, $WS_POPUPWINDOW, $WS_EX_DLGMODALFRAME)
    Local $msg = '"Pixel pro Zentimeter" - Einstellung' & @CRLF & @CRLF
    $msg &= 'Legen Sie ein Lineal an den Startpunkt und klicken Sie exakt bei 10 cm auf die grüne Linie.'
    GUICtrlCreateLabel($msg, 10, 10, 600, 40)
    $End = GUICtrlCreateLabel('', 10, 73, 600, 3)
    GUICtrlSetBkColor(-1, 0x00FF00)
    GUICtrlCreateLabel('', 10, 66, 1, 17)
    GUICtrlSetBkColor(-1, 0x000000)
    $Start = GUICtrlCreateLabel('', 2, 74, 18, 1)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlCreateLabel('Startpunkt', 15, 80, 120, 16)
    GUICtrlCreateLabel('Mit den Pfeiltasten können Sie den Mauszeiger um einen Pixel nach links bzw. rechts bewegen.', 10, 110, 600, 16)
    GUICtrlCreateLabel('Die [Return]-Taste ist mit einem Mausklick identisch', 10, 130, 600, 16)
    GUICtrlCreateLabel('und die [ESC]-Taste schließt dieses Fenster ohne eine Änderung vorzunehmen.', 10, 150, 600, 16)
    $pos = WinGetPos(GUICtrlGetHandle($Start))
    $pos[0] += Floor($pos[2] / 2)
    GUISetState()
    GUISetCursor(3, 1)
    _MouseTrap($pos[0], $pos[1], $pos[0] + 600, $pos[1] + 1)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then
    GUIDelete()
    GUISetCursor(2, 1)
    _MouseTrap()
    Opt('GUIOnEventMode', 1)
    DllClose($dll)
    ToolTip('')
    Return
    EndIf
    If _IsPressed('25', $dll) Then
    MouseMove(MouseGetPos(0) - 1, MouseGetPos(1))
    While _IsPressed('25', $dll)
    Sleep(5)
    WEnd
    EndIf
    If _IsPressed('27', $dll) Then
    MouseMove(MouseGetPos(0) + 1, MouseGetPos(1))
    While _IsPressed('27', $dll)
    Sleep(5)
    WEnd
    EndIf
    If _IsPressed('0D', $dll) Or $msg = $End Then
    $pixels = MouseGetPos(0) - $pos[0]
    _MouseTrap()
    ToolTip('')
    ExitLoop
    EndIf
    ToolTip((MouseGetPos(0) - $pos[0]) / 10)
    WEnd
    GUIDelete()
    $ppcm = $pixels / 10
    $bStart = True
    DllClose($dll)
    _End()
    EndFunc ;==>_PPCMSetup

    [/autoit]

    Edit ( 26.10.08 :( Version 1.5

    - Die Länge des Lineals kann man durch Eingabe einer Zentimeter-Zahl bestimmen.
    - Die Einstellungen ("PixelProZentimeter", Länge des Lineals und die letzte Position) werden in einer Inidatei gespeichert.
    - Beim ersten Start wird ein Einstellungsfenster geöffnet, indem man die "Pixel pro Zentimeter" einstellen kann. Dieses kann man später auch per Kontextmenü aufrufen.
    - Die Transparenz des Fensters ist nun einstellbar.
    - Zusätzliche Skala mit Pixelanzeige.
    - Im Kontextmenü kann man nun die "rel. Mausposition" als Tooltip aktivieren.
    - Die "Pixel pro Zentimeter"-Werte werden nun für jede Auflösung extra gespeichert und beim Auflösungs-Wechsel automatisch eingelesen.

  • Maus-Meter

    • Oscar
    • 23. Oktober 2008 um 16:59

    FireFlyer: Achso, Du hattest da schon alles durch? Hatte ich nicht mehr in Erinnerung. :rolleyes:
    Ich wollte schon immer mal ein "Lineal-Programm" erstellen, also das man z.B. ein Blatt Papier an den Bildschirm halten kann und dann die Maße des Papiers in mm/cm sehen kann. Mein Lineal hat nämlich die dumme Angewohnheit, immer dann unauffindbar zu sein, wenn ich es brauche. Ich habe auch schonmal überlegt, so einen "Schlüssel-Wiederfind-Piepser" an dem Lineal anzubringen, aber letztendlich wäre so ein Programm doch besser. ;)
    Muss ich halt mit einem manuellen Korrekturfaktor arbeiten... :S

  • Limit möchte nicht arbeiten (GUICtrlSetLimit)

    • Oscar
    • 23. Oktober 2008 um 16:47

    Mit Xeno's Hilfe habe ich mal das hier programmiert:

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $inp1, $inp2, $inp3

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

    GUICreate(" My GUI", 320, 120)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp2 = GUICtrlCreateInput("", 10, 35, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp3 = GUICtrlCreateInput("", 10, 65, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $pos, $stringL, $stringR, $len, $count, $rest
    Local $controlID = BitAND($wParam, 0xFFFF)
    Switch $controlID
    Case $inp2, $inp3
    Local $string = GUICtrlRead($controlID)
    $string = StringRegExpReplace($string, '[^0123456789,]', '')
    $pos = StringInStr($string, ',', 0, -1)
    $stringR = StringMid($string, $pos)
    $stringL = $string
    If $pos Then $stringL = StringLeft($string, $pos - 1)
    $len = StringLen($stringL) - 1
    $count = Int($len / 3)
    $rest = Mod($len, 3)
    If $count > 0 Then
    For $i = 0 To $count - 1
    $stringL = _StringInsert($stringL, '.', $i * 4 + $rest + 1)
    Next
    EndIf
    GUICtrlSetData($controlID, $stringL & $stringR)
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]


    Dort werden in den beiden unteren Inputs die Tausenderpunkte während der Eingabe gesetzt.

  • Problem bei erneutem Schließen eines GUIs

    • Oscar
    • 23. Oktober 2008 um 16:43

    Du kannst Dir ja mal mein Programm anschauen: Desktopsperre - USB-Stick zum ent-/sperren des Desktop

  • Maus-Meter

    • Oscar
    • 23. Oktober 2008 um 04:37

    Ja, damit hast Du wohl Recht und für Dein Maus-Meter ist diese Grundsatz-Diskussion auch übertrieben. Von daher OffTopic, aber es würde mich schon interessieren, ob es irgendwie eine Möglichkeit gibt, die angezeigte Auflösung und die dazugehörige DPI-Zahl auszulesen oder zu berechnen.

    Dabei fällt mir gerade ein: Wenn die ausgelesene DPI-Zahl für die max. Auflösung steht. Gibt es dann nicht irgendwo einen Eintrag, welches die max. Auflösung ist?
    Dann hätte man doch einen Umrechnungsfaktor und könnte die DPI-Zahl selbst errechnen... :S

  • Problem bei erneutem Schließen eines GUIs

    • Oscar
    • 23. Oktober 2008 um 04:21

    Noobyn00b: Dein Script ist vom Konzept her falsch. Du missbrauchst die Funktionen als GoTo-Befehl und das führt früher oder später zum beenden Deines Scripts, weil die Anzahl der rekursiven Aufrufe (5100) erreicht ist.

  • PDF´s in Reihenfolge drucken.

    • Oscar
    • 22. Oktober 2008 um 18:10

    Auf den MSDN-Seiten habe ich das hier gefunden: FindFirstPrinterChangeNotification

    Kann man das nicht irgendwie mit AutoIt umsetzen? Dll-Profis vortreten, bitte! :)

  • Maus-Meter

    • Oscar
    • 22. Oktober 2008 um 17:46

    Ahh! Wir kommen der Sache schon näher.
    Aber...
    Wenn ich die native Auflösung verwende und dieses Script hier ausführe:

    [autoit]


    #include <WinAPI.au3>

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

    $ScreenDC = _WinAPI_GetDC(0)
    $width = _WinAPI_GetDeviceCaps($ScreenDC, 4) ; width in mm
    $pixelsX = _WinAPI_GetDeviceCaps($ScreenDC, 8) ; x pixels
    $pixelsY = _WinAPI_GetDeviceCaps($ScreenDC, 10) ; height in mm
    $height = _WinAPI_GetDeviceCaps($ScreenDC, 6) ; Y pixels
    _WinAPI_ReleaseDC(0, $ScreenDC)

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

    MsgBox(0, '', $width & ' x ' & $height & ' mm (' & $pixelsX & ' x ' & $pixelsY & ')')

    [/autoit]

    Wird die Höhe und Breite (fast) richtig angezeigt: 512x320 mm. Nachgemessen sind es 518x325 mm.
    Wenn ich jedoch auf eine geringere Auflösung ( z.B. 1024x768 ) runterschalte, dann zeigt mir obiges Script 426x320 mm an. :?::?::?:

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™