Ich hatte mal eine andere Lösung, finde nur das Skript nicht. Hier der Weg:
(Dir geht es ja nur dadrum, die Scrollleiste nicht zu sehen)
- neben dem LV ein Label erstellen
- gleiche Höhe wie LV, Breite: Scrollbar +2px (über Systemmetrics abfragbar)
- die Scrollleiste überlappend positionieren
Beiträge von BugFix
-
-
wie soll ich die CMD box schließen ohne das programm zu killen mit einem exit also nur die CMD box will ich killen.
Das CMD-Fenster beendet sich doch nach Ausführung des Befehls von alleine.

-
ca 20 Parameter übergeben werde, und diese ständig angepasst werden müssen.
Parameterübergabe ist auch in AutoItskripten kein Problem. Schau mal in der Hilfe unter:
Using AutoIt ==> Command Line Parameters -
Sag mal lieber, was du tun möchtest - aus deinem Code werde ich nicht recht schlau.
-
Sieht soweit OK aus.
Aber du kannst doch das, was in den BAT abläuft sicher alles mit AutoIt erledigen? - Würde das doch vereinfachen. -
Hi,
es war heute die Frage wie man nach einer bestimmten Anzahl Zeichen splitten kann.
Diese Lösung paßt in einen Einzeiler. Ich habe aber das nun etwas flexibler gemacht.- Splitten von Anfang oder Ende (Standard: von Anfang)
- Ergebnis LeftToRight (Standard) oder RightToLeft_StringSplit_ByCount( )
[autoit]$s = 'Abcde3ghijKlmnop2rstUvwxy1'
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite('von Li - LTR' & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
$ret = _StringSplit_ByCount($s, 10)
For $i = 0 To UBound($ret) -1
ConsoleWrite($ret[$i] & @CRLF)
Next
ConsoleWrite(@CRLF)ConsoleWrite('von Li - RTL' & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
$ret = _StringSplit_ByCount($s, 10,0,1)
For $i = 0 To UBound($ret) -1
ConsoleWrite($ret[$i] & @CRLF)
Next
ConsoleWrite(@CRLF)ConsoleWrite('von Re - LTR' & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
$ret = _StringSplit_ByCount($s, 10,1)
For $i = 0 To UBound($ret) -1
ConsoleWrite($ret[$i] & @CRLF)
Next
ConsoleWrite(@CRLF)ConsoleWrite('von Re - RTL' & @CRLF)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$ret = _StringSplit_ByCount($s, 10,1,1)
For $i = 0 To UBound($ret) -1
ConsoleWrite($ret[$i] & @CRLF)
Next
ConsoleWrite(@CRLF);===============================================================================
[/autoit]
; Function Name: _StringSplit_ByCount($s_String, $i_Count [, $i_FromEnd=0 [, $i_RTL=0]])
; Description: Splitten eines Strings nach Anzahl Zeichen
; Parameter(s): $s_String der zu splittende String
; $i_Count Zeichenzahl nach der zu splitten ist
; $i_FromEnd Splitten am Ende beginnen (Standard 0 - vom Anfang)
; $i_RTL 1 - String RightToLeft zurückgeben (Standard 0 - LTR)
; Return Value(s): Erfolg - Array mit den Splitergebnissen
; Fehler - Leerstring
; set @error: 1 (String zu kurz)
; 2 ($iCount größer Stringlänge)
; 3 (RTL fehlgeschlagen)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
; RTL is _StringRevers function
;===============================================================================
Func _StringSplit_ByCount($s_String, $i_Count, $i_FromEnd=0, $i_RTL=0)
If StringLen($s_String) < 2 Or $i_Count < 1 Then Return SetError(1,0,"")
If $i_Count > StringLen($s_String) Then Return SetError(2,0,"")
If $i_FromEnd <> 0 Then $i_FromEnd = 1
If $i_RTL <> 0 Then $i_RTL = 1
Local $a_Tmp[Ceiling(StringLen($s_String)/$i_Count)]
If $i_FromEnd Then
For $i = 0 To UBound($a_Tmp) -1
$a_Tmp[$i] = StringRight($s_String, $i_Count)
$s_String = StringTrimRight($s_String, $i_Count)
Next
Else
$a_Tmp = StringRegExp($s_String, '.{1,' & $i_Count & '}', 3)
EndIf
If $i_RTL Then
For $i = 0 To UBound($a_Tmp) -1
Local $i_len = StringLen($a_Tmp[$i])
Local $t_chars = DllStructCreate("char[" & $i_len + 1 & "]")
DllStructSetData($t_chars, 1, $a_Tmp[$i])
Local $a_rev = DllCall("msvcrt.dll", "ptr:cdecl", "_strrev", "ptr", DllStructGetPtr($t_chars))
If @error Or $a_rev[0] = 0 Then Return SetError(3,0,"")
$a_Tmp[$i] = DllStructGetData($t_chars, 1)
Next
EndIf
Return $a_Tmp
EndFunc ;==>_StringSplit_ByCount -
Ja klar:
[autoit]ProcessList('name.exe')
[/autoit] -
Das Problem ist wohl offensichtlich der Start der DDE-Verknüpfung, das bei eindeutigem Fensternamen nicht auftritt (statt dem Class-Namen).
Nein, das ist grundsätzlich kein Problem. Ich brauche nur ein Kriterium, mit dem eindeutig definiert ist: Dieses neue Dokument möchte ich verwenden.
Das kann ein immer wiederkehrender und nur in diesem Dokumenttyp vorkommender Teil des Titels sein.Ich habe mal schnell ein Programm zur Prozessüberwachung umgemodelt auf Fensterüberwachung. Sollte hierfür funktionieren.
Wenn du einen eindeutigen Titelbestandteil hast, kannst du das noch anpassen. Momentan ist es auf: Neues Dokument = _001.odt eingestellt.Spoiler anzeigen
[autoit]Global $INI = @ScriptDir & '\oooDoc.ini', $counter ; für neue Programmstarts fortlaufenden Zähler speichern
[/autoit] [autoit][/autoit] [autoit]
If Not FileExists($INI) Then IniWrite($INI, 'current', 'number', 1)
$counter = IniRead($INI, 'current', 'number', 1)Global $oWin_old = ObjCreate("Scripting.Dictionary")
[/autoit] [autoit][/autoit] [autoit]
Global $oWin_cur = ObjCreate("Scripting.Dictionary")
Global $oWin_new = ObjCreate("Scripting.Dictionary")
Global $aWinAdlibRegister('_setWin')
[/autoit] [autoit][/autoit] [autoit]
HotKeySet('#!e', '_ende') ; WIN+ALT+e zum BeendenWhile True
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _setWin()
[/autoit] [autoit][/autoit] [autoit]
Local $ar = _GetNewWins("[CLASS:SALFRAME]", '_001\.odt - OpenOffice.org Writer')
If $ar[0][0] = -1 Then Return
For $i = 0 To UBound($ar) -1
$counter += 1
IniWrite($INI, 'current', 'number', $counter)
$ar[$i][0] = StringReplace($ar[$i][0], '001', StringFormat('%03i', $counter))
WinSetTitle($ar[$i][1], '', $ar[$i][0])
WinSetState($ar[$i][0], '', @SW_MAXIMIZE)
WinActivate($ar[$i][0])
Next
EndFuncFunc _ende()
[/autoit] [autoit][/autoit] [autoit]
AdlibUnRegister()
Exit
EndFuncFunc _GetNewWins($class, $title)
[/autoit] [autoit][/autoit] [autoit]
$aWin = WinList($class)
For $i = 1 To UBound($aWin) -1
If Not StringRegExp($aWin[$i][0], $title) Then ContinueLoop
$oWin_cur.Add($aWin[$i][1], $aWin[$i][0])
Next
If $oWin_old.Count <> 0 Then
If $oWin_new.Count > 0 Then $oWin_new.RemoveAll
For $win In $oWin_cur.Keys
If Not $oWin_old.Exists($win) Then $oWin_new.Add($win, $oWin_cur.Item($win))
Next
$oWin_old.RemoveAll
Else
_CopyList($oWin_cur, $oWin_new)
EndIf
_CopyList($oWin_cur, $oWin_old)
$oWin_cur.RemoveAll
Local $aOut[1][2] = [[-1]], $i = 0
If $oWin_new.Count > 0 Then
ReDim $aOut[$oWin_new.Count][2]
For $win In $oWin_new.Keys
$aOut[$i][0] = $oWin_new.Item($win)
$aOut[$i][1] = $win
$i += 1
Next
EndIf
Return $aOut
EndFunc ;==>_GetNewWinsFunc _CopyList(ByRef $oDictFrom, ByRef $oDictTo)
[/autoit]
For $key In $oDictFrom.Keys
$oDictTo.Add($key, $oDictFrom.Item($key))
Next
EndFunc -
Sry, bin etwas verwirrt.
So wie du das jetzt ansprichst verstehe ich das nun so:
- Ein neues Dokument heißt IMMER *_001.odt
- Du möchtest dieses Dokument jetzt fortlaufend nummerieren (bis _999)
- Das nun umbenannte Dokument soll (maximiert) in den Vordergrund gesetzt werdenWenn ja: Bedenken, dass für die interne fortlaufende Nummerierung mit _002 begonnen werden muß, damit keine Kollisionen mit den jeweils neuen _001 entstehen.
Ist meine Problemschilderung so korrekt?
-
Dann mach die Abfrage so. Es ist dann egal ob mehrere Fenster mit dem CLASSNAME existieren. Nur wenn der Titel übereinstimmt führst du die Aktion aus.
[autoit]
Nur laß das nicht ständig in einer Schleife laufen, sondern prüfe ob ein neues Fenster hinzugekommen ist (WinList) und mach dann die Abfrage.$title = WinGetTitle("[CLASS:SALFRAME]")
[/autoit]
If StringRegExp($title, '_\d{3}\.odt - OpenOffice.org Writer') Then
WinSetState($title, @SW_MAXIMIZE)
EndIf -
Mit folgender Option werden auch Teile des Fensternamens erkannt:
[autoit]Opt('WinTitleMatchMode', 2)
[/autoit]Oder vielleicht hilft dir das hier. Damit erkennst du ob ein Fenster mit deinen Vorgaben (*_nnn.odt....) übereinstimmt.
[autoit]If StringRegExp(WinGetTitle("[CLASS:SALFRAME]"), '_\d{3}\.odt - OpenOffice.org Writer') Then
[/autoit]
WinSetState("[CLASS:SALFRAME]", @SW_MAXIMIZE)
EndIf -
Arbeitsverzeichnis einstellen?
-
Versuch es so:
[autoit]#include <GuiEdit.au3>
[/autoit]
_GUICtrlEdit_LineScroll($hEdit, 0, _GUICtrlEdit_GetLineCount($hEdit)) -
kann mir jemand eventuell ein kleines Script schreiben
Falscher Ansatz - schreiben lassen: dann poste in der Jobbörse.Aber dieses Aufgabe ist so simpel, dass du es selbst versuchen solltest. Alleine die Bsp. aus der Hilfe lösen dein Problem schon.
-
ich möchte es nur lokal speichern
Welchen legalen Grund gibt es, ein Captcha zu speichern? ...na siehste![Thread Closed]
-
Soweit mir bekannt ist, wird von den Funktionen der Inet.au3 der Internetexplorer verwendet. Somit müßtest du deine Änderungen im zugehörigen Registryschlüssel vornehmen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent -
Das zeitintensive ist die rekursive Auflistung.
Wenn du diese Liste hast: Einfach durchwandern und was du noch brauchst abfragen (FileGetSize etc. pp). -
Dann lass deine Ctrl "schweben".
"Schwebende" Button - Skriptbeispiel -
Aber falls du die Funktion mal brauchst: hier nachgebaut
[autoit]Func _StringAddThousandsSep($STRING)
[/autoit]
Local $sOut = '', $split = StringSplit($STRING, '.', 2)
If UBound($split) > 1 Then $sOut = ',' & $split[1]
If StringLen($split[0]) > 3 Then
Do
$sOut = '.' & StringRight($split[0], 3) & $sOut
$split[0] = StringTrimRight($split[0], 3)
Until StringLen($split[0]) < 4
If $split[0] <> '' Then
$sOut = $split[0] & $sOut
Else
$sOut = StringTrimLeft($sOut, 1)
EndIf
Else
$sOut = $split[0] & $sOut
EndIf
Return $sOut
EndFunc -
Ein Blick in die Changes genügt:
ZitatRemoved: _StringAddThousandsSep() has been removed. Too many opinions on how the function should work means nobody is happy with it.