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

  • Windows Nachrichtencodes Erklärung

    • Oscar
    • 22. Dezember 2009 um 19:21

    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

  • GetMonitor-Funktion testen

    • Oscar
    • 22. Dezember 2009 um 19:10

    Bitboy: Unter Win7 gibt es den von Dir geposteten Reg-Pfad gar nicht mehr.

  • Datein versenden übers internet

    • Oscar
    • 22. Dezember 2009 um 18:53

    So einen Ton dulden wir hier nicht!
    Komm wieder, wenn Du etwas mehr über zwischenmenschliche Beziehungen gelernt hast.

    [Thread closed]

  • GetMonitor-Funktion testen

    • Oscar
    • 22. Dezember 2009 um 04:18

    Der eine RegistryPfad allein reicht nicht aus, um alle Infos einzulesen:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Das ist ja mein Problem. Wenn dort alle Infos stehen würden, würde es diesen Thread gar nicht geben. ;)

    Dateien

    screenshot.png 22,14 kB – 0 Downloads
  • Bestimten Text suchen und verändern

    • Oscar
    • 21. Dezember 2009 um 21:08

    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.

  • Neue Idee des Dateiübertragens !

    • Oscar
    • 21. Dezember 2009 um 20:55

    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.

  • Bestimten Text suchen und verändern

    • Oscar
    • 21. Dezember 2009 um 20:43

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

    Spoiler anzeigen
    [autoit]


    $sPath = @ScriptDir & '\test.exe'

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

    $sSearchString = 'This program cannot be run in DOS mode'
    $sReplaceString = 'Das Programm läuft nicht im DOS-Modus '

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

    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)

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

    $iFound = StringInStr($sFile, StringMid(StringToBinary($sSearchString), 3))
    If $iFound = 0 Then Exit
    $sFile = StringReplace($sFile, $iFound, StringMid(StringToBinary($sReplaceString), 3))

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

    $hFile = FileOpen($sPath, 2 + 16)
    If $hFile = -1 Then Exit MsgBox(0, 'Fehler', 'Konnte Datei nicht öffnen')
    FileWrite($hFile, $sFile)
    FileClose($hFile)

    [/autoit]
  • Tage hervorheben

    • Oscar
    • 21. Dezember 2009 um 20:06

    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. :rolleyes:

  • Neue Idee des Dateiübertragens !

    • Oscar
    • 21. Dezember 2009 um 20:04

    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.

  • Neue Idee des Dateiübertragens !

    • Oscar
    • 21. Dezember 2009 um 19:47

    JPGs sind aber bereits komprimiert. Viel läßt sich da nicht mehr rausholen. Das variiert etwas, je nach Qualität des JPG.

  • Neue Idee des Dateiübertragens !

    • Oscar
    • 21. Dezember 2009 um 16:32

    Vor dem umwandeln nach Base64 mit zip oder 7zip packen.
    Bei JPGs ist da aber nicht mehr viel zu holen.

  • GetMonitor-Funktion testen

    • Oscar
    • 21. Dezember 2009 um 15:46

    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:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    unter Win7 sieht das so aus:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Dateien

    screenshot.png 86,06 kB – 0 Downloads
  • GetMonitor-Funktion testen

    • Oscar
    • 21. Dezember 2009 um 15:33

    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.

  • Neue Idee des Dateiübertragens !

    • Oscar
    • 21. Dezember 2009 um 15:28

    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. :)

  • GetMonitor-Funktion testen

    • Oscar
    • 21. Dezember 2009 um 15:11

    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?

  • GetMonitor-Funktion testen

    • Oscar
    • 21. Dezember 2009 um 14:38

    So, ich habe die Funktion für Vista & Win7 nochmal überarbeitet. Könnt ihr mal testen, ob das jetzt stimmt?

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $aMonitor = _CI_GetMonitor()
    _ArrayDisplay($aMonitor)

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

    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

    [/autoit]


    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... ?(

  • _Runau3()

    • Oscar
    • 21. Dezember 2009 um 12:13

    Äh, seit wann muss man ein Script zum testen erst compilieren?
    Einfach in SciTE laden und [F5] drücken. :)

  • Computernamen über IP im Lan ausgeben lassen

    • Oscar
    • 21. Dezember 2009 um 12:08

    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.

  • Computernamen über IP im Lan ausgeben lassen

    • Oscar
    • 21. Dezember 2009 um 09:29

    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):

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <Constants.au3>
    $aComputer = _GetLANComputer()
    _ArrayDisplay($aComputer)

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

    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

    [/autoit]
  • Computernamen über IP im Lan ausgeben lassen

    • Oscar
    • 21. Dezember 2009 um 09:13

    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:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <Constants.au3>
    $aComputer = _GetLANComputer()
    _ArrayDisplay($aComputer)

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

    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

    [/autoit]

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™