Meine bevorzugte Methode ist die, dass ich die Message kopiere und in Google eingebe, der (meistens) erste Link führt dann auf die Microsoft-Seite. ![]()
Zum Beispiel: WM_KILLFOCUS = http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
Meine bevorzugte Methode ist die, dass ich die Message kopiere und in Google eingebe, der (meistens) erste Link führt dann auf die Microsoft-Seite. ![]()
Zum Beispiel: WM_KILLFOCUS = http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
Bitboy: Unter Win7 gibt es den von Dir geposteten Reg-Pfad gar nicht mehr.
So einen Ton dulden wir hier nicht!
Komm wieder, wenn Du etwas mehr über zwischenmenschliche Beziehungen gelernt hast.
[Thread closed]
Der eine RegistryPfad allein reicht nicht aus, um alle Infos einzulesen:
Das ist ja mein Problem. Wenn dort alle Infos stehen würden, würde es diesen Thread gar nicht geben. ![]()
Mein Script ist lauffähig. Nimm ein AutoIt-Script, compiliere es (Name= test.exe), packe es in das gleiche Verzeichnis wie mein Script und starte mein Script.
Wenn Du Dir die Exe dann mit einem Hexeditor ansiehst, wirst Du feststellen, dass der Schritzug "This program cannot be run in DOS mode" in "Das Programm läuft nicht im DOS-Modus " umbenannt wurde und das compilierte Programm trotzdem noch funktioniert.
Wie ich bereits geschrieben habe, wirst Du ein JPG-Bild nicht weiter komprimieren können. Es sei denn, Du möchtest es verkleinern oder die Qualität verringern.
Ein Bild (JPG) liegt auf der Festplatte bereits als Binärdatei vor. Du müsstest es im Binärformat einlesen und dann weiterverarbeiten.
Man kann aber auch bei Binärdateien nach "Strings" suchen und ersetzen.
Der Austauschstring muss aber die gleiche Länge haben (nicht kürzer und nicht länger).
$sPath = @ScriptDir & '\test.exe'
$sSearchString = 'This program cannot be run in DOS mode'
$sReplaceString = 'Das Programm läuft nicht im DOS-Modus '
If StringLen($sSearchString) <> StringLen($sReplaceString) Then Exit MsgBox(0, 'Fehler', 'Die beiden Strings müssen die gleiche Länge haben!')
$hFile = FileOpen($sPath, 16)
If $hFile = -1 Then Exit MsgBox(0, 'Fehler', 'Konnte Datei nicht öffnen')
$sFile = FileRead($hFile)
FileClose($hFile)
$iFound = StringInStr($sFile, StringMid(StringToBinary($sSearchString), 3))
If $iFound = 0 Then Exit
$sFile = StringReplace($sFile, $iFound, StringMid(StringToBinary($sReplaceString), 3))
$hFile = FileOpen($sPath, 2 + 16)
If $hFile = -1 Then Exit MsgBox(0, 'Fehler', 'Konnte Datei nicht öffnen')
FileWrite($hFile, $sFile)
FileClose($hFile)
GUICtrlCreateMonthCal kann das nicht! Dazu musst Du schon eine eigene GUI erstellen.
Oder es hat jemand Langeweile und möchte gerne eine UDF dafür erstellen. ![]()
Ich verstehe jetzt nicht so ganz, was Du eigentlich erreichen willst!?
Wenn Du eine Binärdatei mit Base64 kodierst, dann wird sie nicht kleiner, sondern etwas größer, aber dafür kannst Du sie auch über ein textbasiertes Medium übertragen.
JPGs sind aber bereits komprimiert. Viel läßt sich da nicht mehr rausholen. Das variiert etwas, je nach Qualität des JPG.
Vor dem umwandeln nach Base64 mit zip oder 7zip packen.
Bei JPGs ist da aber nicht mehr viel zu holen.
Verdammt! Gibt es da auch noch Unterschiede zwischen Vista und Win7?
Der von Dir beschriebene Schlüssel liefert bei mir (Win7, 64Bit) völlig falsche Werte:
unter Win7 sieht das so aus:
Da habe ich einen Verweis auf den Key gefunden. Die max. Auflösung müßte unter Vista/Win7 jetzt immer stimmen.
Nur die Position/akt. Auflösung ist eigentlich "geraten". Da habe ich noch keinen Verweis gefunden.
Beim versenden von Binärdaten über ein textbasiertes Medium wird im allgemeinen eine Base64-Kodierung benutzt.
Gibt es bestimmt schon als Funktion im engl. Forum. ![]()
Nee, leider nicht. Schau mal auf die akt. Auflösung.
Das stimmt also auch noch nicht. Hab' ich schon vermutet. Kannst Du mal nachschauen, was bei Dir in der Reg unter "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\UnitedVideo\CONTROL\VIDEO" steht?
So, ich habe die Funktion für Vista & Win7 nochmal überarbeitet. Könnt ihr mal testen, ob das jetzt stimmt?
#include <Array.au3>
$aMonitor = _CI_GetMonitor()
_ArrayDisplay($aMonitor)
Func _CI_GetMonitor()
Local $iCount, $sHKLM, $sTmp, $sMfg, $sDeviceDesc, $sDPMS, $sTmpKey, $sDriver, $x, $y, $xRes, $yRes
$sHKLM = 'HKEY_LOCAL_MACHINE'
If @OSArch <> 'X86' Then $sHKLM &= '64'
Switch @OSVersion
Case 'WIN_VISTA', 'WIN_7'
$iCount = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\services\monitor\Enum', 'Count')
Local $aMonitor[$iCount + 1][6] = [['Hersteller:', 'Modell:', 'DPMS-Untersützung:', 'Position (x, y):', 'akt. Auflösung:', 'max. Auflösung:']]
For $i = 1 To $iCount
$sTmp = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\services\monitor\Enum', $i - 1)
$sMfg = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Enum\' & $sTmp, 'Mfg')
$aMonitor[$i][0] = StringRegExpReplace($sMfg, '.+;(.+)', '$1')
$sDeviceDesc = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Enum\' & $sTmp, 'DeviceDesc')
$aMonitor[$i][1] = StringRegExpReplace($sDeviceDesc, '.+;(.+)', '$1')
$sDPMS = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Enum\' & $sTmp & '\Device Parameters', 'DPMS')
$aMonitor[$i][2] = StringMid('NeinJa', $sDPMS * 4 + 1, 4)
$sDriver = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Enum\' & $sTmp, 'Driver')
$sTmpKey = $sHKLM & '\SYSTEM\CurrentControlSet\Control\Class\' & $sDriver
$aMonitor[$i][5] = StringReplace(RegRead($sTmpKey, 'MaxResolution'), ',', ' x ')
$sTmpKey = $sHKLM & '\SYSTEM\CurrentControlSet\Hardware Profiles\UnitedVideo\CONTROL\VIDEO'
$sTmp = RegEnumKey($sTmpKey, 1)
$sTmpKey &= '\' & $sTmp & '\' & StringRight('0000' & $i - 1, 4)
$x = Number(String(RegRead($sTmpKey, 'Attach.RelativeX')))
If $x > 2 ^ 31 Then $x = -BitXOR($x, 0xffffffff)
$y = Number(String(RegRead($sTmpKey, 'Attach.RelativeY')))
If $y > 2 ^ 31 Then $y = -BitXOR($y, 0xffffffff)
$xRes = Number(String(RegRead($sTmpKey, 'DefaultSettings.XResolution')))
$yRes = Number(String(RegRead($sTmpKey, 'DefaultSettings.YResolution')))
$aMonitor[$i][3] = $x & ', ' & $y
$aMonitor[$i][4] = $xRes & ' x ' & $yRes
Next
Return $aMonitor
Case Else
MsgBox(0,0, 'OS wird z.Zt. nicht unterstützt.')
EndSwitch
EndFunc ;==>_CI_GetMonitor
Für WindowsXP finde ich einfach keinen Zusammenhang zwischen den Monitor-Hersteller-Angaben und den Monitor-Daten (Auflösung, etc.).
Wenn mehrere Monitore vorhanden sind, weiß ich nicht, welche Daten zu welchem Monitor gehören. Das ist echt zum verzweifeln... ![]()
Äh, seit wann muss man ein Script zum testen erst compilieren?
Einfach in SciTE laden und [F5] drücken. ![]()
Die Do...Until-Schleife kann man nicht weglassen, denn dort wird die Ausgabe des DOS-Befehls ("net") eingelesen.
StringRegExp extrahiert aus diesem String dann die Computernamen und erstellt ein Array. Die Zeile "If Not IsArray..." sorgt dafür, dass kein Fehler auftritt, wenn kein Computer im Netz gefunden wurde.
Wenn bei "net view" nur der Name angezeigt wird, dann ist bei Computerbeschreibung nichts eingetragen.
Und wenn das "\\" davor stört, dann halt so (jetzt zusätzlich mit IP-Adressen):
#include <Array.au3>
#include <Constants.au3>
$aComputer = _GetLANComputer()
_ArrayDisplay($aComputer)
Func _GetLANComputer()
Local $sPID, $sOut = '', $aComputer
$sPID = Run(@ComSpec & ' /c net view', @SystemDir, @SW_HIDE, $STDOUT_CHILD)
Do
$sOut &= StdoutRead($sPID)
Until @error <> 0
$aComputer = StringRegExp($sOut, '(?s).+?\\\\(\w+)', 3)
If Not IsArray($aComputer) Then Return SetError(1, 0, 0)
Local $aOut[UBound($aComputer)][2]
TCPStartup()
For $i = 0 To UBound($aComputer) - 1
$aOut[$i][0] = $aComputer[$i]
$aOut[$i][1] = TCPNameToIP($aComputer[$i])
Next
TCPShutdown()
Return $aOut
EndFunc ;==>_GetLANComputer
Die Funktion gibt pro Computer zwei Werte (Computername und Computerbeschreibung) aus. Musst Du bei Dir mal nachsehen, was dort eingetragen ist.
Edit: Wenn nur der Computername ausreicht, dann kann man das RegExp etwas verkürzen:
#include <Array.au3>
#include <Constants.au3>
$aComputer = _GetLANComputer()
_ArrayDisplay($aComputer)
Func _GetLANComputer()
Local $sPID, $sOut = ''
$sPID = Run(@ComSpec & ' /c net view', @SystemDir, @SW_HIDE, $STDOUT_CHILD)
Do
$sOut &= StdoutRead($sPID)
Until @error <> 0
Return StringRegExp($sOut, '(?s).+?(\\\\\H+)', 3)
EndFunc ;==>_GetLANComputer