Leite doch die DOS-Ausgabe in eine (mehrere) Datei(en) um. Diese kannst du bequem mit AutoIt einlesen und auswerten.
Commandline: Prompt>BEFEHL /param > zieldatei.txt
Beiträge von BugFix
-
-
Ich stell mal mein Script online...
Finde ich eigentlich nicht so gut. Das sollte doch ein Wettbewerb sein. -
Meine Frage nun was bedeutet dieses [0] und [1] bei MouseMove?
Schau dir doch einfach die verwendeten Befehle in der Hilfe an.
Zitat von Hilfe zu PixelSearchRückgabewert
Erfolg: Gibt ein 2-Element-Array der Pixelkoordinaten zurück. (Array[0] = x, Array[1] = y) -
Wenn die BMP aus EXE od. DLL stammen, geht es so:
(Muster mit SciTE.exe)Spoiler anzeigen
[autoit][/autoit] [autoit][/autoit] [autoit]#include <GuiToolbar.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GDIPlus.au3>Local $hGUI, $hToolbar
[/autoit] [autoit][/autoit] [autoit]
Local $idSciTE = 1000 ; ID für ToolbarButton vergeben, 1000 - damit kein Konflikt mit Standard-Controls entstehtLocal $ressource = 'C:\Programme\AutoIt3\SciTE\SciTE.exe' ; Datei mit dem(n) BMP
[/autoit] [autoit][/autoit] [autoit]
Local $resID = 100 ; ID des BMP in der Ressourcendatei (kannst du im Reshacker sehen); Datei laden als Ressource
[/autoit] [autoit][/autoit] [autoit]
Local $hInstance = _WinAPI_LoadLibrary($ressource); Create GUI
[/autoit] [autoit][/autoit] [autoit]
$hGUI = GUICreate("Toolbar", 400, 300)
$hToolbar = _GUICtrlToolbar_Create($hGUI)
GUISetState(); BMP aus SciTE laden zur Toolbar
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlToolbar_AddBitmap($hToolbar, 1, $hInstance, $resID); Button auf Toolbar mit diesem BMP erstellen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_GUICtrlToolbar_AddButton($hToolbar, $idSciTE, 0)While 1
[/autoit] [autoit][/autoit] [autoit]
If BitAND(_GUICtrlToolbar_GetButtonState($hToolbar, $idSciTE), $TBSTATE_PRESSED) = $TBSTATE_PRESSED Then
MsgBox(0, "", "SciTE-Button")
EndIf$msg = GUIGetMsg()
[/autoit]
Switch $msg
Case $GUI_EVENT_Close
Exit
EndSwitch
WEnd -
Variable: Bitte kein Kommentar. Ich habe falsch angefangen und hatte keine Lust neu alles zu definieren

>> Kein Kommentar <<

-
Wenn die Programme 'sauber' installiert werden, legen sie auch einen UnInstall-Eintrag in der Registry an. Und den findest du hier:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Dort kannst du nach deiner Installation suchen. -
Hast Du das mal probiert
Bisher nicht, da ich auf meinem Rechner Outlook Express stillgelegt habe. -
Im Moment sehe ich keinen Grund, warum der Body 4000 Zeilen Text nicht aufnehmen sollte.
Laut Protokoll liegt eine Begrenzung nur in der Länge einer einzelnen Zeile von max. 998 Zeichen + CRLF, also 1000 Zeichen gesamt.
Die Länge des Body gesamt ist nur begrenzt durch die Aufnahmfähigkeit des empfangenden Systems und aller dazwischenliegender SMTP-Server. -
Warum faßt du die Strings zusätzlich in Klammern ein?

-
Hier hatte ich mal ein Muster für eine DB-Anbindung erstellt. Vielleicht hilft dir das weiter.
-
So richtig klar sehe ich bei deinem Problem nicht. Wie erfolgt denn die AutoIt-Umsetzung? Mit MySQL-UDF ?
Und was anderes noch: Wäre es nicht vorteilhafter statt LIKE mit CONTAINING zu arbeiten? Ich verwende das lieber, da es nicht Case Sensitiv ist und auch für Partialsuche besser geeignet ist.
Allerdings weiß ich nicht genau, ob meine SQL-Erfahrungen (Firebird, SQLite) adäquat für MySQL zutreffen. Gibt halt doch einige Unterschiede zwischen den Dialekten. -
Wenn ich jetzt die abwechselnden Farben benutzen will, muß ich mein Script auf
GUICtrlCreateListViewItem
umstellen, oder?Korrekt, das funktioniert nur bei Items, die auf diese Weise erstellt werden.
-
und was genau gibt das wieder? nur den phad oder mit der exe?
Das liegt doch auf der Hand, oder?Zitat; Return Value(s): Success Full ApplicationPath
-
Oder hiermit (ist glaub ich schneller als die WMI-Variante):
Spoiler anzeigen
[autoit];===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _GetPathByPID($PID=-1)
; Description:: Get full path of an running application by using PID
; Parameter(s): $PID - PID, if not set will used PID from active Window
; Requirement(s): #include <WinAPI.au3>
; Return Value(s): Success Full ApplicationPath
; Failure set @error 1 - process handle failed
; 2 - process image failed
; 3 - query dosdevice failed
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================Func _GetPathByPID($PID=-1)
[/autoit]
If $PID = -1 Then $PID = WinGetProcess(WinGetTitle("[active]"))
$hProcess = _WinAPI_OpenProcess(0x00000400, True, $PID, True)
If Not $hProcess Then Return SetError(1,0,0)
Local $ret, $path, $DevicePath, $DeviceLetter, $strPath = DllStructCreate("char path[256]")
DllCall(@SystemDir & '\Psapi.dll', "uint64", "GetProcessImageFileNameA", _
"hwnd", $hProcess, "ptr", DllStructGetPtr($strPath), "int", 256)
If @error Then Return SetError(2,0,0)
$path = DllStructGetData($strPath, 'path')
$DevicePath = StringRegExp($path, "\\Device\\\w*", 1)
Local $lpTargetPath, $aDrive = DriveGetDrive("ALL")
For $i = 1 To UBound($aDrive) -1
$ret = DllCall("kernel32.dll", "long", "QueryDosDeviceA", "str", $aDrive[$i], "str", $lpTargetPath, "long", 256)
If @error Then Return SetError(3,0,0)
If $ret[2] = $DevicePath[0] Then
$DeviceLetter = $aDrive[$i]
ExitLoop
EndIf
Next
DllCall("kernel32.dll", "long", "CloseHandle", "long", $hProcess)
Return StringReplace($path, $DevicePath[0], StringUpper($DeviceLetter))
EndFunc ;==>_GetPathByPID -
Diese Version stammt glaub ich von Xeno:
Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$MagWidth = InputBox ("Magnify Area", "What should the WIDTH of the magnified area be?")
[/autoit] [autoit][/autoit] [autoit]
$MagHeight = InputBox ("Magnify Area", "What should the HEIGHT of the magnified area be?")
$MagZoom = InputBox ("Magnify Area", "What should the ZOOM of the magnified area be?", 2);~ Global $SRCCOPY = 0x00CC0020
[/autoit] [autoit][/autoit] [autoit]
Global $dll[3], $DeskHDC, $GUIHDC;~ HotKeySet("!+e", "_ende")
[/autoit] [autoit][/autoit] [autoit]$dll[1] = DllOpen ( "user32.dll")
[/autoit] [autoit][/autoit] [autoit]
$dll[2] = DllOpen ( "gdi32.dll")Global $GUI = GUICreate ("Zoom x2 Au3", $MagWidth * $MagZoom, $MagHeight * $MagZoom, _
[/autoit] [autoit][/autoit] [autoit]
MouseGetPos (0), MouseGetPos (1), $WS_POPUP+$WS_BORDER, $WS_EX_TOPMOST)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]Global $LastPos[2] = [0,0]
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
MAG()
$MousePos = MouseGetPos()
If ($LastPos[0] <> $MousePos[0] Or $LastPos[1] <> $MousePos[1]) Then
WinMove("Zoom x2 Au3", "", $MousePos[0] + $MagWidth/2 + 5, $MousePos[1])
$LastPos[0] = $MousePos[0]
$LastPos[1] = $MousePos[1]
EndIfSleep(10)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc MAG()
[/autoit] [autoit][/autoit] [autoit]
$DeskHDC = DLLCall("user32.dll","int","GetDC","hwnd",0)
$GUIHDC = DLLCall("user32.dll","int","GetDC","hwnd",$GUI)
If Not @error Then
DLLCall("gdi32.dll", "int", "StretchBlt", "int", $GUIHDC[0], "int", _
0, "int", 0, "int", $MagWidth * $MagZoom, "int", $MagHeight * $MagZoom, "int", $DeskHDC[0], "int", _
MouseGetPos (0) - $MagWidth/2, "int", MouseGetPos (1) - $MagHeight/2, "int", $MagWidth ,"int", $MagHeight, _
"long", $SRCCOPY)
DLLCall("user32.dll","int","ReleaseDC","int",$DeskHDC[0],"hwnd",0)
DLLCall("user32.dll","int","ReleaseDC","int",$GUIHDC[0],"hwnd",$GUI)
EndIf
EndFuncFunc OnAutoItExit()
[/autoit]
DllClose ( $dll[1] )
DllClose ( $dll[2] )
EndFunc -
edit \ Naja was heisst "scheinbar" - steht ja ganz dick an erster Stelle in der Hilfe
Obs ohne 2 Zugriffe auf die Datei geht weiss ich nicht.
Mit der neuen Beta kannst du in einem Zugriff Lesen UND Schreiben.
Wird also auch demnächst Eingang in die Prod finden. -
Kann man es auch so machen , dass dieses Fenster die Maus verfolgt ?
=) Wäre total gut
Das ist doch nun wirklich einfach

- MouseGetPos
- WinMove -
Woher kommt dieser Leerbereich?
Sieht mir rein optisch aus wie die Hintergrundfarbe des Controls.
Genauso ist es, die Hintergrundfarbe des Controls ist natürlich sichtbar auch wenn kein weiteres Item folgt. Solange Platz da ist, wird er auch eingefärbt.
Besonders deutlich wird das, wenn du die Spaltenbreite verringerst. (s. Bild)
Allerdings habe ich diesen Leerbereich nach unten nur dann, wenn es weniger Item sind, als im LV-Bereich dargestellt werden könnten. Also wenn die vertikale Scrollleiste sichtbar ist, ist bei mir dieser Effekt aufgehoben.Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Ich würde schon gerne Deine Mehrfarbenlösung benutzen. Hast Du noch ne Idee, wie man das beschleunigen kann?
Ich sehe hier leider kein Potential, das weiter zu beschleunigen. Das Problem liegt dadrin, dass bei jedem Zeichnen des Item die Aufrufe zum Zeichnen neu erfolgen müssen.
PS. Weißt Du warum am Ende meines zweiten Beispiels unten ein Leerzeile sichtbar ist?
Seltsam, wenn ich das Bsp. ausführe, ist dort keine Leerzeile.

P.S. Auf meinem lahmen Schleppi (Intel Celeron; 1,5 GHz; 448 MB RAM) läuft das recht zügig. Ja, es ruckelt - aber nicht so, dass ich Augenkrebs bekomme.

Edit:
Hatte gar nicht bedacht, dass du ja die Fontfunktionen nicht benötigst. Habe WM_NOTIFY jetzt mal etwas gekürzt. Könnte noch ein bischen Performance bringen.Spoiler anzeigen
[autoit]Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
[/autoit] [autoit][/autoit] [autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")Switch $hWndFrom
[/autoit]
Case $hListView1, $hListView2
Switch $iCode
Case $NM_CUSTOMDRAW
If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iItem
Switch DllStructGetData($tCustDraw, 'dwDrawStage')
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
$iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aColor[$iItem])) ; Hintergrundfarbe aus Array
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFYZitat von skyteddyIch hab Dein Script jetzt mal als Basis genommen um zu verstehen, wie das colorieren funktioniert. So richtig verstanden habe ich es nicht
Ist gar nicht so schwer, wenn auch nicht unbedingt offensichtlich.

Passiert alles in WM_NOTIFY:
$tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Hier wird die Struktur $tCustDraw befüllt mit den Werten vom Pointer $lParam (für das aktuelle ListViewItem).
Werden jetzt Werte in dieser Struktur geändert, so sind diese sofort gültig.
Das passiert für die Hintergrundfarbe in folgendem Befehl:
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aColor[$iItem])) -
Und genau dafür brauche ich deinen Lösung, oder kann man das anders auch lösen?
Ja, kann man. Da ist es nicht nötig für jede Zelle die Werte zu hinterlegen. Es wird einfach der Farbwert für die Zeile in einem Array hinterlegt:Spoiler anzeigen
[autoit]#include <FontConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)#region - GUI
[/autoit] [autoit][/autoit] [autoit]
$GUI = GUICreate("Test", 600, 440)
GUISetOnEvent($GUI_EVENT_CLOSE, '_exit')
$cListView1 = GUICtrlCreateListView("", 2, 2, 290, 420, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
$hListView1 = GUICtrlGetHandle($cListView1)
_GUICtrlListView_InsertColumn($hListView1, 0, "Column 1", 90)
_GUICtrlListView_InsertColumn($hListView1, 1, "Column 2", 90)
_GUICtrlListView_InsertColumn($hListView1, 2, "Column 3", 90)
$cListView2 = GUICtrlCreateListView("", 300, 2, 290, 420, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
$hListView2 = GUICtrlGetHandle($cListView2)
_GUICtrlListView_InsertColumn($hListView2, 0, "Column 1", 90)
_GUICtrlListView_InsertColumn($hListView2, 1, "Column 2", 90)
_GUICtrlListView_InsertColumn($hListView2, 2, "Column 3", 90)
For $i = 1 To 30
_GUICtrlListView_AddItem($hListView1, "Row" & $i & ": Col 1", $i-1)
_GUICtrlListView_AddItem($hListView2, "Row" & $i & ": Col 1", $i-1)
For $j = 1 To 2
_GUICtrlListView_AddSubItem ($hListView1, $i-1, "Row" & $i & ": Col " & $j+1, $j)
_GUICtrlListView_AddSubItem ($hListView2, $i-1, "Row" & $i & ": Col " & $j+1, $j)
Next
Next
#endregion - GUI#region - Global settings
[/autoit] [autoit][/autoit] [autoit]
Global $hFont, $defColLV = 0x000000
; Array mit Farben für jede Zeile:
Global $aColor[30] = [ _
0x0033FF,0xCCFFFF,0x3333FF,0x99FFFF,0x6633FF,0xFF99FF,0x0099FF,0xCC99FF,0x00FFFF,0xFF33FF, _
0xFFFF00,0x003300,0x99FF00,0x663300,0xFF9900,0x009900,0xFF3300,0x669900,0x00BFFF,0xDAA520, _
0x87CEEB,0xD2691E,0xFFDEAD,0x7B68EE,0xDEB887,0xEE82EE,0x3CB371,0xF4A460,0xADD8E6,0x00FF7F]
#endregion - Global settingsGUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $GUI)While True
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _exit()
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_DeleteObject($hFont)
Exit
EndFunc ;==>_exitFunc WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView1, $hListView2
Switch $iCode
Case $NM_CUSTOMDRAW
If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iDrawStage, $iItem, $hDC
$iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
Switch $iDrawStage
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
$iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aColor[$iItem])) ; Hintergrundfarbe aus Array
DllStructSetData($tCustDraw, 'clrText', RGB2BGR($defColLV)) ; Standardschriftfarbe
$hFont = _WinAPI_CreateFont(14,0,0,0,$FW_NORMAL,False,False,False,$DEFAULT_CHARSET,$OUT_DEFAULT_PRECIS, _
$CLIP_DEFAULT_PRECIS,$DEFAULT_QUALITY,0,'Arial')
_WinAPI_SelectObject($hDC, $hFont)
Return $CDRF_NEWFONT
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFYFunc RGB2BGR($iColor)
[/autoit]
Local $sH = Hex($iColor,6)
Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
EndFunc ;==>RGB2BGR