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.
Beiträge von Oscar
-
-
Zum erstellen der Liste, dann aber eher so:
[autoit]
[/autoit]
Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
ConsoleWrite(BitShift($wParam, 16)&@LF)
EndFunc ;==>MY_WM_COMMANDDann musst Du Dir "nur" noch eine GUI basteln mit allen GUI-Elementen und diese dann alle anklicken, und...

-
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]
[/autoit] [autoit][/autoit] [autoit]
#include<ComboConstants.au3>
#include<EditConstants.au3>
#include<GUIConstantsEx.au3>
#include<WindowsConstants.au3>Global $count
[/autoit] [autoit][/autoit] [autoit]
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")$label1 = GUICtrlCreateLabel("0", 320, 5, 30, 20)
[/autoit] [autoit][/autoit] [autoit]
$label2 = GUICtrlCreateLabel("0", 320, 25, 30, 20)
$label3 = GUICtrlCreateLabel("0", 320, 45, 30, 20)GUISetState()
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
[/autoit]
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_COMMANDOb 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.
-
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]
[/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>GUICreate(" My GUI", 350, 120)
[/autoit] [autoit][/autoit] [autoit]
$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)GUISetState()
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
[/autoit]
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 -
Oder so:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $inp1GUICreate(" My GUI", 320, 120)
[/autoit] [autoit][/autoit] [autoit]
$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_CLOSEFunc MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
[/autoit]
If BitAND($wParam, 0xFFFF) = $inp1 Then ToolTip(StringLen(GUICtrlRead($inp1)))
EndFunc ;==>MY_WM_COMMAND -
Klasse Idee!
Habe ich in die neue Version gleich mal eingebaut (siehe Post #1). -
Ich habe das Script noch etwas erweitert. Mit der Tooltip-Anzeige der relativen Mausposition kannst Du nun auch vertikal "messen".
-
Die neue Version ist fertig (siehe Post #1).
Dort habe ich das Einstellungsfenster in das Programm integriert und noch etwas erweitert. Danke, progandy!

-
Für solche Aufgaben benutze ich lieber StringInStr(). Dort kann man als dritten Parameter auch angeben, ob CaseSensitive oder nicht.
[autoit]
[/autoit]
$meine_variable = 't'
If StringInStr('MDTH', $meine_variable, 0) Then
MsgBox(0, '', 'ok')
Else
MsgBox(0, '', 'error')
Exit
EndIf -
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]
[/autoit] [autoit][/autoit] [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)Func _GetLogPixels()
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _GetMaxResolution()
[/autoit]
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
EndFuncDas entspricht zwar nicht 100-prozentig den tatsächlichen Abmessungen, aber für das Maus-Meter reicht's völlig.

-
Coole Sache!
So kann man den ppcm-Wert am schnellsten rauskriegen. Und dann einfach in die Inidatei eintragen.Danke Dir!
-
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. -
Ich kann euch nun mein neuestes Werk präsentieren: ein Bildschirm-Lineal mit mm/cm Einteilung.
Das Script:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [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>Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]Global $sTitle = 'Bildschirm-Lineal v1.5', $bStart = False, $hLenght
[/autoit] [autoit][/autoit] [autoit]
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 = 10Global $width = $ppcm * $cm + 30
[/autoit] [autoit][/autoit] [autoit]
Global $height = 170
Global $max = Int((@DesktopWidth - 40) / $ppcm)GUICreate($sTitle, $width, $height, $PosX, $PosY, $WS_POPUPWINDOW, $WS_EX_DLGMODALFRAME)
[/autoit] [autoit][/autoit] [autoit]
GUISetBkColor(0xEEEEEE) ; HintergrundfarbeGlobal $hLabel = GUICtrlCreateLabel('', 0, 0, $width, $height, Default, $GUI_WS_EX_PARENTDRAG)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)Global $hContext = GUICtrlCreateContextMenu($hLabel)
[/autoit] [autoit][/autoit] [autoit]
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)
EndSwitchGlobal $hLenght = GUICtrlCreateInput($cm, 16, 80, 30, 26, $ES_Center)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 12, 600, 0, 'Times New Roman')
GUICtrlSetBkColor(-1, 0xEEEEEE)
GUICtrlSetOnEvent(-1, '_EnterInput')
GUICtrlSetState(-1, $GUI_ONTOP)GUICtrlCreateLabel('cm', 50, 80, 28, 24, Default, $GUI_WS_EX_PARENTDRAG)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman')Global $hSlider = GUICtrlCreateSlider($width / 2 - 110, 80, 255, 30, $TBS_AUTOTICKS)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData(-1, $Trans)
GUICtrlSetBkColor(-1, 0xEEEEEE)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetOnEvent(-1, '_SetTrans')GUICtrlCreateLabel('Transparenz-Einstellung', $width / 2 - 110, 110, 260, 30, $SS_CENTER, $GUI_WS_EX_PARENTDRAG)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 12, 400, 0, 'Times New Roman')GUICtrlCreateLabel($sTitle, $width / 2 - 110, 50, 260, 30, $SS_CENTER, $GUI_WS_EX_PARENTDRAG)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 18, 400, 0, 'Times New Roman')GUICtrlCreateLabel('mm/cm', 8, 44, 60, 30, Default, $GUI_WS_EX_PARENTDRAG)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 12, 400, 0, 'Times New Roman')GUICtrlCreateLabel('Pixel', 8, $height - 50, 60, 30, Default, $GUI_WS_EX_PARENTDRAG)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 12, 400, 0, 'Times New Roman')Global $hGraph = GUICtrlCreateGraphic(14, 0, $width - 26, $height)
[/autoit] [autoit][/autoit] [autoit]
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)
NextGlobal $hEnd = GUICtrlCreateButton('X', $width - 38, 80, 26, 26, $BS_CENTER)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 14, 600, 0, 'Arial')
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetOnEvent(-1, '_End')GUICtrlSetState($hLenght, $GUI_FOCUS)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()WinSetTrans($sTitle, '', 215 / 100 * $Trans + 40)
[/autoit] [autoit][/autoit] [autoit]Global $aWPos, $sMsg, $oldDisplayMode = @DesktopWidth & 'x' & @DesktopHeight
[/autoit] [autoit][/autoit] [autoit]
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
WEndFunc _End()
[/autoit] [autoit][/autoit] [autoit]
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 ;==>_EndFunc _ReadPPCM()
[/autoit] [autoit][/autoit] [autoit]
$ppcm = IniRead(@ScriptDir & '\Bildschirm-Lineal.ini', 'PixelPerZentimeter', @DesktopWidth & 'x' & @DesktopHeight, -1)
If $ppcm = -1 Then _PPCMSetup()
$bStart = True
_End()
EndFuncFunc _SetTrans()
[/autoit] [autoit][/autoit] [autoit]
$Trans = GUICtrlRead($hSlider)
WinSetTrans($sTitle, '', 215 / 100 * $Trans + 40)
IniWrite(@ScriptDir & '\Bildschirm-Lineal.ini', 'Transparenz', 'Wert', $Trans)
GUICtrlSetState($hLenght, $GUI_FOCUS)
EndFunc ;==>_SetTransFunc _Mausinfo()
[/autoit] [autoit][/autoit] [autoit]
$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 ;==>_MausinfoFunc _EnterInput()
[/autoit] [autoit][/autoit] [autoit]
If GUICtrlRead($hLenght) < 10 Then GUICtrlSetData($hLenght, 10)
If GUICtrlRead($hLenght) > $max Then GUICtrlSetData($hLenght, $max)
$bStart = True
_End()
EndFunc ;==>_EnterInputFunc _PPCMSetup()
[/autoit]
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 ;==>_PPCMSetupEdit ( 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. -
FireFlyer: Achso, Du hattest da schon alles durch? Hatte ich nicht mehr in Erinnerung.
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...
-
Mit Xeno's Hilfe habe ich mal das hier programmiert:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <String.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $inp1, $inp2, $inp3GUICreate(" My GUI", 320, 120)
[/autoit] [autoit][/autoit] [autoit]
$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")Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSEFunc MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
[/autoit]
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
Dort werden in den beiden unteren Inputs die Tausenderpunkte während der Eingabe gesetzt. -
Du kannst Dir ja mal mein Programm anschauen: Desktopsperre - USB-Stick zum ent-/sperren des Desktop
-
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...
-
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.
-
Auf den MSDN-Seiten habe ich das hier gefunden: FindFirstPrinterChangeNotification
Kann man das nicht irgendwie mit AutoIt umsetzen? Dll-Profis vortreten, bitte!

-
Ahh! Wir kommen der Sache schon näher.
[autoit]
Aber...
Wenn ich die native Auflösung verwende und dieses Script hier ausführe:
[/autoit][autoit][/autoit][autoit]
#include <WinAPI.au3>$ScreenDC = _WinAPI_GetDC(0)
[/autoit][autoit][/autoit][autoit]
$width = _WinAPI_GetDeviceCaps($ScreenDC, 4) ; width in mm
$pixelsX = _WinAPI_GetDeviceCaps($ScreenDC,
; x pixels
$pixelsY = _WinAPI_GetDeviceCaps($ScreenDC, 10) ; height in mm
$height = _WinAPI_GetDeviceCaps($ScreenDC, 6) ; Y pixels
_WinAPI_ReleaseDC(0, $ScreenDC)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.

