Was hast du für ein Betriebssystem? Bei XP klappt es problemlos.
Bei Vista und 7 weiß ich nicht.
Durch das Erscheinen der Sicherheitsabfrage geht natürlich der Rest der Befehle verloren und somit passiert nix. Mußt also dein OS dazu bewegen dich nicht zu fragen, wenn du auf der Console Befehle verarbeiten willst.
Beiträge von BugFix
-
-
Hast recht, das war nicht optimal - naja, da war ich noch jung und ungeduldig :D.
Hier eine überarbeitete und verbesserte Version.
Spoiler anzeigen
[autoit];-------------------------------------------------------------------------------------------------
[/autoit]
; Function _GenerateIPsInRange($IPstart, $IPend, $iRetType=0, $sDelim=Default, $fBroadcast=False)
; Description Erstellt alle möglichen IP's zwischen $IPstart und $IPend
; Parameter $IPstart erste IP im Bereich
; $IPend letzte IP im Bereich
; $iRetType Return-Type 0-Array (Standard), 1-String, trennzeichenbasiert
; $sDelim Trennzeichen bei Stringausgabe, Default= Zeichen von Opt("GuiDataSeparatorChar")
; Return Succes Array 1D (Anzahl in $a[0]) oder String mit allen erstellten IP's
; Failure 0 und set @error 1 : übergebene IP nicht korrekt
; Author BugFix ([email='bugfix@autoit.de'][/email])
;----------------------------------------------------------------------------------------------------------------------
Func _GenerateIPsInRange($IPstart, $IPend, $iRetType=0, $sDelim=Default, $fBroadcast=False)
If IsKeyword($sDelim) Then $sDelim = Opt("GuiDataSeparatorChar")
Local $pattern = '(\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.'& _
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)'
If ( Not StringRegExp($IPstart, $pattern, 0) Or _
Not StringRegExp($IPend, $pattern, 0) ) Then
SetError(1)
Return 0
EndIf
Local $var = StringSplit($IPstart, '.')
Local $o1 = $var[1], $o2 = $var[2], $o3 = $var[3], $o4 = $var[4]
$var = StringSplit($IPend, '.')
Local $e1 = $var[1], $e2 = $var[2], $e3 = $var[3], $e4 = $var[4]
Local $sOut = '', $start = 1, $end = 255
If $fBroadcast Then
$start = 0
$end = 256
EndIf
While $o1 <= $e1
While ($o2 <= $e2) Or ($o1 < $e1)
If $o2 = $end Then
$o1 += 1
$o2 = $start
EndIf
While ($o3 <= $e3) Or ($o2 < $e2) Or ($o1 < $e1)
If $o3 = $end Then
$o2 += 1
$o3 = $start
EndIf
While True
$sOut &= $o1 &'.'& $o2 &'.'& $o3 &'.'& $o4 & $sDelim
If ($o1 = $e1) And ($o2 = $e2) And ($o3 = $e3) And ($o4 = $e4) Then
If $iRetType Then
Return $sOut
Else
Return StringSplit(StringTrimRight($sOut, StringLen($sDelim)), $sDelim, 1)
EndIf
EndIf
$o4 += 1
If $o4 = $end Then
$o3 += 1
$o4 = $start
EndIf
WEnd
WEnd
WEnd
WEnd
EndFunc ;==>_GenerateIPsInRangeEdit:
- Broadcastadressen optional (Default ohne)
- Rückgabearray enthält in $a[0] die Anzahl der ElementeEdit2:
noch einen Bug gefixed -
Es gibt auch einen anderen Weg zur Laufwerksumbenennung: Diskpart
Hier ein Bsp. um einem USB-Stick einen anderen Lw-Buchstaben zuzuweisen. Ist sofort wirksam.
Es gibt eine Fehlermeldung (Ein Prozess hat versucht, zu einer nicht bestehenden Pipe zu schreiben.) beim Aushängen und beim Neueinhängen, die aber ignoriert werden kann.Spoiler anzeigen
[autoit]#include <Constants.au3>
[/autoit]
Local $Lw_old = 'G', $Lw_new = 'F'
Local $foo = Run("cmd", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
Local $sCMD = 'diskpart' & @CRLF & _
"select Volume " & $Lw_old & @CRLF & _
"remove" & @CRLF & _
"assign letter=" & $Lw_new & @CRLF & _
"exit" & @CRLF
StdinWrite($foo, $sCMD)
StdinWrite($foo)
ConsoleWrite('Fertig' & @CRLF)Edit: Ging noch kürzer

-
Wie wärs denn mit: _ArraySearch()
Oder such doch direkt in deinem Excel:
Spoiler anzeigen
[autoit]Local $sFilePath = 'Pfad.xls'
[/autoit] [autoit][/autoit] [autoit]
Local $sSuchbegriff = 'Suche'Local $oExcel = ObjCreate("Excel.Application")
[/autoit] [autoit][/autoit] [autoit]
$oExcel.Visible = 0
Local $oBook = $oExcel.Workbooks.Open($sFilePath)
Local $oSheet = $oBook.Sheets(1)Local $Zelle, $Address = 0
[/autoit]
$Zelle = $oSheet.UsedRange.Find($sSuchbegriff)
If $Zelle <> '' Then $Address = $Zelle.Address -
Laß dein Programm als Dienst laufen. Wenn du es als Systemdienst einstufst, kann es auch nicht in der Dienstverwaltung beendet werden (Aber läuft dann immer! - Soll das gewollt sein?). Für "Eigenes Skript als Dienst" einfach die SuFu nutzen. Hier oder im EN-Forum wirst du fündig.
-
_WinAPI_SetCursor() sollte dich zum Ziel bringen. Mit _WinAPI_LoadImage() kannst du das Bild für den Cursor laden.
-
Gibt mir immer den Inhalt der ersten Spalte aus. Wie kann ich das auf die dritte Spalte ändern
Das beachtet?
Ganz wichtig: Unbedingt Ex-Style "$LVS_EX_FULLROWSELECT" für das Listview, sonst erhältst du keine Item-Notifikation beim Klick auf ein SubItem!
-
[autoit]
$str = "11 2222 abcd efgh 4 6 dada"
[/autoit]
$str = StringRegExpReplace($str, '\s+', '/')
ConsoleWrite('Ersetzungen: ' & @extended & @CRLF)
ConsoleWrite($str & @CRLF) -
Da ist es sogar schon verboten ne andere AutoIt Seite zu nennen.
Ja, und was stört dich dadran? Wir haben nunmal Regeln. Und diese sind nicht grundlos erstellt worden.
Dein Wunsch zu Helfen in allen Ehren, aber auch das im Rahmen unserer Regeln.
-
@black_scorpi: Dein Bsp. ist zwar simpel aber berücksicht auch nur einen ganz spezifischen Fall. Der benannte String war nur ein Bsp. Es ging um allgemeingültige Lösungen. Das geht mit deiner Variante nicht.
-
Ich werds mal testen.
Edit.
[autoit]
Ah, falscher Returntyp im DllCall. Nicht 'char', sondern 'long' oder 'int'.$aReturn = DllCall("User32", 'long', "LoadKeyboardLayout", "ptr", DllStructGetPtr($Buffer_Struct), "uint", $KLF_ACTIVATE)
[/autoit] -
Mach aus deinem ""/D" ein "\D".

-
Ich glaub, die Layoutkennung muß mit Nullstring abgeschlossen werden und natürlich verlangt der letzte Parameter auch ein uint.:
[autoit]Func _LoadKeyboardLayout($HKL)
[/autoit]
$KLF_ACTIVATE = 0x1
$Buffer_Struct = DllStructCreate("char[10];")
DllStructSetData($Buffer_Struct, 1, $HKL & Chr(0))
$pBuffer_Struct = DllStructGetPtr($Buffer_Struct)
$aReturn = DllCall("User32", "char", "LoadKeyboardLayout", "ptr", $pBuffer_Struct, "uint", $KLF_ACTIVATE)
Return SetError($aReturn, 0, $aReturn)
EndFunc -
Umformatieren kannst du mit _WinAPI_WideCharToMultiByte(), geht aber sich auch nicht kürzer als die aufgezeigte Lösung.
-
Schnitzel, du hast völlig recht. Das ist wieder ein typisches Bsp., wie man eine UDF nicht schreiben sollte. An eine Tabelle (2D-Array) kann nur ein 1D-Array übergeben werden. Oh, wie sinnvoll...
Diese Funktion ermöglicht also nur Zeilen oder Spalten Inhalte in einem Array zu übergeben. Sicher ist das auch nützlich, aber geht weit vorbei an einer sinnvollen, komplexen Funktion.
ZitatWrite an array to a row or column on the active worksheet of the specified Excel object.
-
sonst einer ne gute andresse wo ich nachlesen kann?
Wenn du sowieso mit CheatEngine hantierst, dann gib einfach mal den Begriff in Google ein. Da findest du ganz konkrete Tuts.
Hier sicher nicht.
Die Überwachung des eigenen TS-Servers ist völlig legitim, nur leider wird die Arbeit mit Memory zu sehr zweckentfremdet genutzt und deshalb halten wir uns hier mit Support dafür sehr zurück. -
Und wo muss ich das einfügen?
Du hast die aktuelle Version, somit mußt du nichts weiter ändern. Weshalb der Fehler weiterhin auftaucht ist mir im Moment unklar. -
So kannst du den Inhalt ausgeben:
Spoiler anzeigen
[autoit]#include <ListViewConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <StructureConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>$gui = GUICreate('test')
[/autoit] [autoit][/autoit] [autoit]
$hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200, -1, BitOR($LVS_EX_TRACKSELECT,$LVS_EX_FULLROWSELECT))
_GUICtrlListView_SetColumnWidth($hListView, 0, 146)
_GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
For $i = 1 To 10
GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
Next
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")Do
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSEFunc _LeftDblClick($Info)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
MsgBox(0, 'Text in Spalte', _GUICtrlListView_GetItemText($Info[0], $Info[1], $Info[2]) )
EndFuncFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit][/autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
If $hWndFrom = $hWndListView And $iCode = $NM_DBLCLK Then
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[3] = [$hWndFrom,DllStructGetData($tInfo, "Index"),DllStructGetData($tInfo, "SubItem")]
_LeftDblClick($aInfo)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFYGanz wichtig: Unbedingt Ex-Style "$LVS_EX_FULLROWSELECT" für das Listview, sonst erhältst du keine Item-Notifikation beim Klick auf ein SubItem!
-
Ich nehme an, die Subitems fangen nicht bei 0 an...
Jein. SubItem 0 wäre die erste Spalte und somit das Item. Alle Indexe sind 0-basiert.- _GUICtrlListView_GetSelectedIndices gibt den Index der markierten Zeile zurück
- _GUICtrlListView_GetItemText gibt dir den Text des Item/SubItem zurück -
die möglichkeit, nur den inhalt einer bestimmten spalte auszulesen gibt es nicht zufällig, oder?
Doch, du brauchst den Index der Zeile (ItemIndex) und den Index der Spalte (SubItemIndex). Damit kannst du direkt drauf zugreifen. Schau mal die Funktionen der Listview-UDF an.