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

Beiträge von BugFix

  • Wir bauen uns ein CAD

    • BugFix
    • 5. Dezember 2010 um 11:37

    PSblnkd

    Das ist ein wirklich anspruchsvolles Projekt, das du hier umsetzen möchtest.
    Sei nicht allzu betrübt, wenn kaum Resonanz zu diesem Thema erfolgt. Denn die Einsatzwahrscheinlichkeit eines CAD-Programms ist für den "Normal"-User eher gering.
    Daraus resultiert zwar ein teilweises Interesse an der programmtechnischen Umsetzung, aber für solch ein Projekt muss man auch Herzblut beibringen um dafür "zu brennen". Und dazu ist ein ständiger Umgang mit solch einem Programm sicherlich eine Voraussetzung.
    Das Problem mit der EXE könnte erklärbar sein, falls du UPX aktiviert hast. Schalte ich generell ab, da mir die Größe einer EXE eher egal ist. Wichtiger ist mir, dass die AntiVirenprogramme nicht dauernd Alarm schlagen, da diese aufgrund des UPX eine Gefahr vermuten. (Über Sinn/Unsinn der Weitergabe von exe-Dateien wurde hier im Forum schon lang und breit diskutiert. I.A. sehen wir dazu keine Notwendigkeit.)

    Lass dich aber nicht entmutigen, auch wenn du mehr oder weniger allein daran arbeitest. Zu Detailfragen stehen wir im Forum natürlich gern zur Verfügung.

  • UDF: Windows Explorer fernsteuern

    • BugFix
    • 5. Dezember 2010 um 11:17

    Es ist trotzdem verwirrend.
    Hier mal ein Testskript.

    Spoiler anzeigen
    [autoit]

    $PID1 = Run("explorer.exe")
    ; Unter dieser PID sind nachher alle Explorerfenster vereint, obwohl beim Start eine eigene PID vergeben wird.
    ; Aber Windows scheint diese zu verwerfen.
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $PID1 = ' & $PID1 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $PID2 = Run("explorer.exe")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $PID2 = ' & $PID2 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $PID3 = Run("explorer.exe")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $PID3 = ' & $PID3 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $PID4 = Run("explorer.exe")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $PID4 = ' & $PID4 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $PID5 = Run("explorer.exe")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $PID5 = ' & $PID5 & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    Opt("WinTitleMatchMode", 4)
    Local $WinList
    Do
    $WinList = WinList("CLASSNAME=ExploreWClass")
    Sleep(50)
    Until $WinList[0][0] = 5
    Opt("WinTitleMatchMode", 1)

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

    ConsoleWrite('Hwnd / PID from Hwnd' & @CRLF)
    For $i = 1 To $WinList[0][0]
    ConsoleWrite('Hwnd / PID : ' & $WinList[$i][1] & ' / ' & WinGetProcess($WinList[$i][1]) & @CRLF & @CRLF)
    Next

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

    Local $ProcList = ProcessList('explorer.exe')
    ConsoleWrite('PIDs from ProcessList' & @CRLF)
    For $i = 1 To $ProcList[0][0]
    ConsoleWrite($ProcList[$i][1] & @CRLF)
    Next

    [/autoit]

    Nach dem Starten dieser 5 Explorerfenster erhalte ich folgende Ausgabe:

    Spoiler anzeigen
    Code
    @@ Debug(516) : $PID1 = 948
    >Error code: 0
    @@ Debug(518) : $PID2 = 3560
    >Error code: 0
    @@ Debug(520) : $PID3 = 2228
    >Error code: 0
    @@ Debug(522) : $PID4 = 2568
    >Error code: 0
    @@ Debug(524) : $PID5 = 3496
    >Error code: 0
    Hwnd / PID from Hwnd
    Hwnd / PID : 0x0006069A / 948
    
    
    Hwnd / PID : 0x000805C2 / 948
    
    
    Hwnd / PID : 0x00030684 / 948
    
    
    Hwnd / PID : 0x00180400 / 948
    
    
    Hwnd / PID : 0x00120352 / 948
    
    
    PIDs from ProcessList
    1396
    948
    Alles anzeigen

    Starte ich dann nochmals das Skript und lasse die 5 Fenster offen, erhalte ich folgende Ausgabe:

    Spoiler anzeigen
    Code
    @@ Debug(516) : $PID1 = 3708
    >Error code: 0
    @@ Debug(518) : $PID2 = 4068
    >Error code: 0
    @@ Debug(520) : $PID3 = 904
    >Error code: 0
    @@ Debug(522) : $PID4 = 264
    >Error code: 0
    @@ Debug(524) : $PID5 = 4016
    >Error code: 0
    Hwnd / PID from Hwnd
    Hwnd / PID : 0x0006069A / 948
    
    
    Hwnd / PID : 0x000805C2 / 948
    
    
    Hwnd / PID : 0x00030684 / 948
    
    
    Hwnd / PID : 0x00180400 / 948
    
    
    Hwnd / PID : 0x00120352 / 948
    
    
    PIDs from ProcessList
    1396
    948
    4068
    904
    264
    4016
    Alles anzeigen

    D.h. die neuen Prozesse sind in der Prozesslist, werden aber im Taskmanager bei mir nur unter einer Instanz, PID 948 angezeigt und die Handle sind auch alle dieser PID zugeordnet.
    Mir fehlen dazu die tieferen Windows-Kenntnisse, um das zu verstehen. :wacko:

  • UDF: Windows Explorer fernsteuern

    • BugFix
    • 5. Dezember 2010 um 09:10
    Zitat von Oscar

    Ist der Haken gesetzt, wird für jedes Explorerfenster ein eigener Prozess gestartet.


    Wie sagte meine Oma so richtig: "Kannste alt werd'n, wie ne Kuh - lernste immer noch dazu." :thumbup:

    Edit:
    Kommando zurück - das ist eine Fehlinterpretation.
    Habe es mal durchgetestet. Es gibt max. 2 Explorer-Instanzen zeitgleich. Völlig egal ob der Aufruf mit Run, ShellExecute oder aus der Eingabeaufforderung erfolgt. Einmal läuft sowieso und in der zweiten Instanz werden dann die Fenster geöffnet, sofern die Checkbox aktiviert ist. "Ordnerfenster in einem eigenem Prozeß anzeigen" sagt die Beschreibung, und nicht "jedes Ordnerfenster in einem eigenen Prozeß"

  • Happy Birthday Pee und Funkey

    • BugFix
    • 4. Dezember 2010 um 18:09

    Na dann viel Spaß beim Feiern. :thumbup:
    Alles Gute im neuen Lebensjahr.

  • UDF: Windows Explorer fernsteuern

    • BugFix
    • 4. Dezember 2010 um 18:06
    Zitat von dost0011

    Ich kriege allerdings auch unter XP zwei verschiedene PIDs.


    Das ist mal wieder typisch Windows. :wacko: Ich habe auch XP und bekomme nur eine Instanz der explorer.exe, egal wie oft ich die exe aufrufe.

  • DllCall mit @error 1 - Wo liegt das Problem?

    • BugFix
    • 3. Dezember 2010 um 20:53

    AutoHotKey unterscheidet sich in der Dll-Behandlung deutlich von AutoIt.
    Das AHK-Skript lädt die Dll extra mit LoadLibrary. In AutoIt passiert dasselbe mit DllOpen.

  • UDF: Windows Explorer fernsteuern

    • BugFix
    • 3. Dezember 2010 um 20:39
    Zitat von dost0011

    Warum funktioniert der Ansatz drüber über PID nicht? (aus einer PID ein Handle erzeugen).


    Hast du dir mal die PIDs angesehen? Es ist nur eine. Auch wenn "explorer.exe" mehrfach aufgerufen wird, existiert dazu nur ein Prozeß und somit nur eine PID. Also läßt sich daraus auch nicht auf die Handle schließen.

  • UDF: Windows Explorer fernsteuern

    • BugFix
    • 2. Dezember 2010 um 21:23

    Um sicher die richtigen Fenster zu erwischen, muß man das Skript etwas erweitern. Hab es nicht getestet, aber sollte eigentlich klappen.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Opt("WinTitleMatchMode", 4)
    Local $WinList = WinList("CLASSNAME=ExploreWClass")

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

    Local $count = $WinList[0][0], $ListOld, $aHwnd[2], $j = 0
    If $count Then $ListOld = $WinList
    ShellExecute("explorer.exe")
    ShellExecute("explorer.exe")
    Do
    $WinList = WinList("CLASSNAME=ExploreWClass")
    Sleep(50)
    Until $WinList[0][0] = $count +2
    Opt("WinTitleMatchMode", 1) ; wichtig, sonst können die Window Funcs nicht mit dem Handle arbeiten!

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

    If $count Then
    For $i = 1 To $WinList[0][0]
    _ArraySearch($ListOld, $WinList[$i][1], 0, 1, 0, 0, 1, 1)
    If @error Then
    $aHwnd[$j] = $WinList[$i][1]
    $j = 1
    EndIf
    Next
    Else
    $aHwnd[0] = $WinList[1][1]
    $aHwnd[1] = $WinList[2][1]
    EndIf

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

    WinMove($aHwnd[0],"",0,0,@DesktopWidth/2,@DesktopHeight-480-60) ; left
    WinMove($aHwnd[1],"",@DesktopWidth/2,0,@DesktopWidth/2,@DesktopHeight-480-60) ; right

    [/autoit]
  • Wert wird nicht in Textfeld übernommen

    • BugFix
    • 2. Dezember 2010 um 15:15
    Zitat

    #32770 The class for a dialog box.

    Ist soweit OK, laut Windows Klassenübersicht handelt es sich um eine DialogBox.
    ControlSetText() sollte also wie gewünscht arbeiten. Verliert evtl. das Controlfenster den Fokus? Den Control-Befehlen sollte das eigentlich egal sein, aber manchesmal geht es nur bei aktiviertem Fenster.

  • UDF: Windows Explorer fernsteuern

    • BugFix
    • 2. Dezember 2010 um 14:29

    Es geht eigentlich viel einfacher, mußt nur schauen, ob evtl bei Win7 eine andere CLASS verwendet wird:

    Edit: Hatte noch zu kompliziert gedacht, noch kürzer:

    [autoit]

    $old = Opt("WinTitleMatchMode", 4)
    ShellExecute("explorer.exe")
    ShellExecute("explorer.exe")

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

    $WinList = WinList("CLASSNAME=ExploreWClass")
    $hWnd_left = $WinList[1][1]
    $hWnd_right = $WinList[2][1]

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

    Opt("WinTitleMatchMode", $old) ; wichtig, sonst können die Window Funcs nicht mit dem Handle arbeiten!

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

    WinMove($hWnd_left,"",0,0,@DesktopWidth/2,@DesktopHeight-480-60)
    WinMove($hWnd_right,"",@DesktopWidth/2,0,@DesktopWidth/2,@DesktopHeight-480-60)

    [/autoit]


    Dann kannst du mit

    [autoit]

    WinActivate($hWnd)

    [/autoit]

    das jeweilige Fenster aktivieren und deine Aktionen ausführen. Du kannst dann als Titel "[ACTIVE]" verwenden und greifst somit auf das eben aktivierte Fenster zu.

  • Kalender in Autoit (Datensicherung)

    • BugFix
    • 1. Dezember 2010 um 21:06

    Ich würde es so machen:
    Programm startet jeden Tag
    - Abfrage: ist Heute = Freitag
    JA - Sicherung abarbeiten
    NEIN - Programm beenden

  • Kennwort geschützte Dokumente nicht öffnen

    • BugFix
    • 30. November 2010 um 22:14

    Die Lösung ist so einfach, dass man kaum drauf kommt:

    [autoit]

    #include <Word.au3>

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

    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = 1

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

    $oDoc = _WordDocOpen($oWord, 'C:\Pfad\test.doc', 0, 0, 0, 0, 0, "Passwort")

    [/autoit]


    Einfach alle Dateien mit irgendeinem Passwort öffnen. Die DOC ohne Passwort werden dann geöffnet. Die mit werden nicht geöffnet - es erscheint aber keine DialogBox!

  • Happy Birthday BugFix!

    • BugFix
    • 29. November 2010 um 18:51

    Nochmals Vielen Dank an alle Gratulanten. 8o

    In meinem (nun doch etwas gesetzteren) Alter feiert man nicht mehr so wild. Gemütliches Kaffetrinken und dann hab ich die Bande gleich wieder 'entsorgt', man will ja mal seine Ruhe haben. :rofl:

  • Excel: immer 3 zeilen auswählen, dann kopieren und in anderes Tabellenblatt transformiert einfügen

    • BugFix
    • 29. November 2010 um 15:16
    Zitat von tobysc

    Lässt sich so etwas mit AutoIt lösen?


    Ja, kein Problem.
    Aber du meinst sicher statt "Zelle" - "Zeile".
    Also:
    Tabelle1 (SpalteA, Zeile1) ==> Tabelle2 (SpalteA, Zeile1)
    Tabelle1 (SpalteA, Zeile2) ==> Tabelle2 (SpalteB, Zeile1)
    Tabelle1 (SpalteA, Zeile3) ==> Tabelle2 (SpalteC, Zeile1)
    nächster Block
    Tabelle1 (SpalteA, Zeile4) ==> Tabelle2 (SpalteA, Zeile2)
    Tabelle1 (SpalteA, Zeile5) ==> Tabelle2 (SpalteB, Zeile2)
    Tabelle1 (SpalteA, Zeile6) ==> Tabelle2 (SpalteC, Zeile2)
    usw.

    Ist das korrekt?

  • Abbrevs Verwaltung Bugfix

    • BugFix
    • 29. November 2010 um 15:01

    OK, dann machen wir einfach mal richtig sauber und entfernen alle betreffenden Dateien und installieren sie neu.
    Laß dir einfach mal alle Pfade ausgeben, damit wir auch die korrekten Dateien verwenden:

    [autoit]

    $ScitePath = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\SciTE.exe", "")
    $KeyWordPath = StringReplace($ScitePath, "SciTE.exe", "properties\au3.keywords.abbreviations.properties")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $KeyWordPath = ' & $KeyWordPath & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $Abbr_Path = @UserProfileDir & '\abbrev.properties'
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Abbr_Path = ' & $Abbr_Path & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ; === Sicherungsdateien zur Wiederherstellung
    $MyKeyWordPath = @UserProfileDir & '\au3.keywords.my'
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $MyKeyWordPath = ' & $MyKeyWordPath & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $MyAbbrevPath = @UserProfileDir & '\abbrev.properties.my'
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $MyAbbrevPath = ' & $MyAbbrevPath & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]


    Die Originaldateien ( $KeyWordPath, $Abbr_Path) ersetzt du mit den angehängten Dateien.
    Die anderen beiden löschst du - sie werden vom Programm neu erstellt.

    Dateien

    Abbrev_Files.zip 9,68 kB – 169 Downloads
  • Bitmap mit spezifischer größe erstellen

    • BugFix
    • 29. November 2010 um 13:59

    Welchen Sinn soll das Bitmap haben?
    - Du erstellst ein DC von der GUI.
    - Davon holst du dir ein Graphics-Handle.
    - Auf das Graphics zeichnest du.
    Du kannst dir von dem Graphics ein Bitmap-Handle erstellen. Aber wofür?

  • Abbrevs Verwaltung Bugfix

    • BugFix
    • 29. November 2010 um 13:28

    Du wirfst glaub ich etwas durcheinander.
    Es sind zwei verschiedene Dateien (+ Sicherungsdateien) in die geschrieben wird.
    - einmal die Abkürzung mit Code in der Form: "Abbrev=Hier steht der Code" in der Datei: @UserProfileDir & '\abbrev.properties'
    - und die Abkürzung selbst wird in: $ScitePath &"\properties\keyword.abbreviations.properties" eingetragen - dort stehen nur die Abkürzungen

    Säuber mal die Dateien von Hand, also die Einträge von dir rauslöschen. Dann verwende noch mal das Tool. Da vorhin der Code eingetragen wurde und jetzt auch die Abkürzungen erscheinen, gibt es keinen Grund, dass es nicht funktioniert.

  • Abbrevs Verwaltung Bugfix

    • BugFix
    • 29. November 2010 um 12:03

    Das ist die aktuelle Version.

    Ersetze mal _KeyWordSet() mit dieser Funktion zur Fehlerausgabe. Der Fehlerwert sagt dir dann, warum nicht in die Datei geschrieben wird.

    Spoiler anzeigen
    [autoit]

    Func _KeyWordSet($KEYWORD, $CHECK = 0)
    Local $txtZeile, $len
    If $CHECK Then
    Local $fh = FileOpen($KeyWordPath, 0)
    Local $read = FileRead($fh)
    FileClose($fh)
    If StringInStr($read, $KEYWORD & ' ', 1) Then Return
    EndIf
    $zeile = _FileCountLines($KeyWordPath)
    $txtZeile = FileReadLine($KeyWordPath, $zeile)
    $len = StringLen($txtZeile) + 4
    If $len + StringLen($KEYWORD) > 100 Then
    _FileWriteToLine($KeyWordPath, $zeile, $txtZeile & "\" & @CRLF, 1)
    If @error Then Return MsgBox(0, 'Fehler', 'Schreiben in Datei' & @CRLF & $KeyWordPath & @CRLF & 'fehlgeschlagen.' & @CRLF & 'Fehler-Nr.: ' & @error)
    _FileWriteToLine($KeyWordPath, $zeile + 1, @TAB & $KEYWORD & " ", 1)
    Else
    _FileWriteToLine($KeyWordPath, $zeile, $txtZeile & $KEYWORD & " ", 1)
    If @error Then Return MsgBox(0, 'Fehler', 'Schreiben in Datei' & @CRLF & $KeyWordPath & @CRLF & 'fehlgeschlagen.' & @CRLF & 'Fehler-Nr.: ' & @error)
    EndIf
    EndFunc ;==>_KeyWordSet

    [/autoit]
  • Abbrevs Verwaltung Bugfix

    • BugFix
    • 29. November 2010 um 11:28

    Die blau markierten waren eigene, bei dir sollte dann also "hov" und deine weiteren Abbrevs erscheinen.
    Die Abbrevs werden also nicht in diese Datei geschrieben. Verwendest du auch die letzte Version meines Programms? Ich kann mich schwach erinnern, dass ich da noch ein paar Bugs entfernt hatte. Ist im Edit des Threads aber vermerkt.
    In meinem Skript findest du (ziemlich am Ende) die Funktion _KeyWordSet(). Werte dadrin doch mal die Rückgabewerte der Schreibbefehle (_FileWriteToLine) aus. Ich denke, da liegt irgendwo der Hund begraben. Vielleicht wird bei dir einer der Pfade nicht gefunden?

  • Abbrevs Verwaltung Bugfix

    • BugFix
    • 29. November 2010 um 11:06

    OK, der Code ist also eingetragen. Dann schau bitte nach ob auch die Keyworddatei vervollständigt wurde.
    Pfad: "C:\Programme\AutoIt3\SciTE\Properties\au3.keywords.abbreviations.properties"
    Sollte so aussehen (blau markiert: eigene Abbrevs):

    Zitat


    ....
    tci tcm tgm tid tigh tigs tigt tisoe tiss tist tsc tsi tsoe tspi tss tstt tt ub udpb udpcs \
    udpo udpr udpsd udpsu wat wa wc we wf wgcp wgcl wgcs wgh wgpo wgpr wgs wgte wgti wk wl \
    wmsi wma wmau wm wsot wss wst wstr ww wwa wwc wwna gcclv gcclvi frta ard lc header _gclvg \
    _gclvs getid

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™