Das was ich im englischen Forum gefunden habe, gefiel mir nicht so gut, deswegen hab ich eine Funktion geschrieben, die aufgrund der Pid die Fenstertitel ausgibt. Die Fenstertitel, weil ein Prozess mehrere Fenster besitzen kann (explorer.exe, iexplore.exe). Hier der Link Funktion PID2WinTitle
Beiträge von funkey
-
-
Gibt's zwar sicher schon, aber ich hab's mal neu erfunden, da mir alles was ich gefunden habe nicht gefiel.
Spoiler anzeigen
[autoit]#Include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
$title = _PID2WinTitle(4068)
_ArrayDisplay($Title)Func _PID2WinTitle($pid)
[/autoit]
Local $Fensteranzahl = 0, $aFenstertitel[1] = [0], $Liste = WinList()
For $i = 1 To $Liste[0][0]
If $pid = WinGetProcess($Liste[$i][0]) Then
ReDim $aFenstertitel[$Fensteranzahl+2]
$Fensteranzahl += 1
$aFenstertitel[0] = $Fensteranzahl
$aFenstertitel[$Fensteranzahl] = $Liste[$i][0]
EndIf
Next
Return $aFenstertitel
EndFunc -
Hab da was gefunden:
Spoiler anzeigen
[autoit]$handle = _ProcessGetWinEx(4248)
[/autoit] [autoit][/autoit] [autoit]WinFlash($handle[1],"",5)
[/autoit] [autoit][/autoit] [autoit]Func _ProcessGetWinEx($ivPid, $svClass = "", $svTitle = "", $svText = "", $ivReturnOnlyFirstMatch = False)
[/autoit]
$ivPid = ProcessExists($ivPid)
If Not $ivPid Then Return(SetError(1, 0, 0))
Local $avwArray = WinList()
Local $avRet[1] = [0]
For $i = 1 To $avwArray[0][0]
$avClass = DllCall("User32.dll", "int", "GetClassName", "hwnd", $avwArray[$i][1], "str", "", "int", 4096)
If WinGetProcess($avwArray[$i][1]) = $ivPid Then
If $svClass = "" Or (IsArray($avClass) And $avClass[2] = $svClass) Then
If ($svTitle = "" Or StringInStr($avwArray[$i][0], $svTitle)) And ($svText = "" Or StringInStr(WinGetText($avwArray[$i][1]), $svText)) Then
$avRet[0] += 1
ReDim $avRet[$avRet[0]+1]
$avRet[$avRet[0]] = $avwArray[$i][1]
If $ivReturnOnlyFirstMatch Then
$avRet = $avret[1]
ExitLoop
EndIf
EndIf
EndIf
EndIf
Next
Return $avRet
EndFunc -
Ging bei mir einwandfrei, musste es nur zum Testen anpassen
[autoit]$search = FileFindFirstFile(@ScriptDir & "\Screenshot???.jpg")
[/autoit]
If $search = -1 Then
MsgBox(0,"Fehler","Es konnte kein Screenshot gefunden werden!")
Else
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$datei = @ScriptDir & "\Progdat\" & "Bild" & ".jpg" ;@scriptdir = j:\Au3 Datei
FileMove ( @ScriptDir & "\" & $file, $datei, 8 )
WEnd
FileClose($search)
MsgBox(0,"",$datei)
EndIfBei dir fehlt das Endif am Schluss!
-
Freut mich Alina, dass es dir gefällt und dass es bei dir funktioniert.

Ich bin mir bewusst, dass das nicht die Non-Plus-Ultra-Lösung ist, ich weiß nicht mal ob es auf W2K oder Vista funktioniert (wegen der festen Klasse [Class:#32770]). Man kann manchmal auch ganz kurz den Originaltext sehen, aber auf alle Fälle ist es die einfachste Lösung!
EDIT: Franz ich habe es jetzt auf mehreren Rechnern getestet, und wirklich, auf einem ging es nicht, keine Ahnung wieso. Aber mit den Variablen und nicht mit der Class (wie Progandy es schon hatte) ging's auch auf dem:
[autoit]Func _MsgBoxIndividual($flag, $title, $text, $btn_text1, $btn_text2, $btn_text3)
[/autoit]
Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('[Class:#32770]','')+" & _
"ControlSetText('"&$title&"','"&$text&"','Button1','"&$btn_text1&"')+" & _
"ControlSetText('"&$title&"','"&$text&"','Button2','"&$btn_text2&"')+" & _
"ControlSetText('"&$title&"','"&$text&"','Button3','"&$btn_text3&"')"
Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
Sleep(100)
Return MsgBox($flag, $title, $text)
EndFuncAußerdem musste ich bei einem Rechner die Option WinWaitDelay auf 80 stellen, damit es zuverlässig funktioniert, aber auf den meisten geht's auch mit 0.
-
Es ist schwierig jemandem eine Aufgabe zu geben, aber wie wäre es wenn du uns einen schönen Bilschirmschoner bastelst mit einer GUI wo man ein paar Parameter verstellen kann, natürlich soll er mit dem Schalter den Standard-Schaltern http://www.bcb-box.de/Informationen/SCR/scr.html ausgestatet sein und es soll sich was bewegen, vllt so eine wandernde Polylinie oder ein Schriftzug, der auf der einen Bildschirmseite rauskommt und auf der anderen verschwindet. Und nicht vergessen: Ich habe 2 Bildschirme, ich will auch beide schonen

-
Ach ja, sorry. Hab den Return vergessen, also einfach so:
[autoit]$Antwort = _MsgBoxIndividual(34, "Frage", "Gehst du heute mit mir aus?", "Ja", "Nein", "Vielleicht")
[/autoit][autoit][/autoit][autoit]
MsgBox(0,"",$Antwort)Func _MsgBoxIndividual($flag, $title, $text, $btn_text1, $btn_text2, $btn_text3)
[/autoit]
Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('[Class:#32770]','')+" & _
"ControlSetText('[Class:#32770]','','Button1','"&$btn_text1&"')+" & _
"ControlSetText('[Class:#32770]','','Button2','"&$btn_text2&"')+" & _
"ControlSetText('[Class:#32770]','','Button3','"&$btn_text3&"')"
Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
Sleep(100)
Return MsgBox($flag, $title, $text)
EndFunc -
Danke Progandy für deine Verbesserungsvorschlag! Ich kannte den Schalter '/AutoIt3ExecuteLine ' noch nicht. Das ist genau das was mir noch gefehlt hat. Jetzt dürfte das Skript auch auf Computern laufen ,auf dene kein Autoit installiert ist. Ich kenne deine Messagebox, aber ich finde diese Version reicht im Normalfall aus und ist auch ca. 230 Zeilen kürzer.

So werde ich das Skript in Zukunft verwenden, wenn keiner mehr einen Verbesserungsvorschlag hat:
[autoit]_MsgBoxIndividual(34, "Frage", "Gehst du heute mit mir aus?", "Ja", "Nein", "Vielleicht")
[/autoit][autoit][/autoit][autoit]Func _MsgBoxIndividual($flag, $title, $text, $btn_text1, $btn_text2, $btn_text3)
[/autoit]
Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('[Class:#32770]','')+" & _
"ControlSetText('[Class:#32770]','','Button1','"&$btn_text1&"')+" & _
"ControlSetText('[Class:#32770]','','Button2','"&$btn_text2&"')+" & _
"ControlSetText('[Class:#32770]','','Button3','"&$btn_text3&"')"
Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
Sleep(100)
MsgBox($flag, $title, $text)
EndFunc -
In der Hilfe steht: The object will be destroyed when its parent GUI is destroyed.
[autoit]
Also kannst du es meiner Meinung nach nur verstecken.$OIE = _IECREATEEMBEDDED()
[/autoit]
$GUIACTIVEX = GUICtrlCreateObj($OIE, $FENSTER_X / 2 - $LOGO_X / 2 - 10, $FENSTER_Y / 2 - $LOGO_Y / 2, $LOGO_X + 20, $LOGO_Y + 30)
GUICtrlSetState($GUIACTIVEX, $GUI_HIDE) -
Weiß nicht ob ich das richtig verstanden habe, aber ich probier's trotzdem
[autoit]$Refreshtime = 100000
[/autoit][autoit][/autoit][autoit]
AdlibEnable("_Refresh", $Refreshtime)
$Start = TimerInit()While 1
[/autoit][autoit][/autoit][autoit]
$Diff = StringFormat("%.0f",TimerDiff($Start))
ToolTip($Refreshtime - $Diff)
Sleep(200)
;mach etwas
WEndFunc _Refresh()
[/autoit][autoit][/autoit][autoit][/autoit]
;blablabla
$Start = TimerInit()
EndFunc -
Nein geht nicht.
-
Danke für die Erklärung. Ich habe nur mit _Arraydisplay getestet und die Variablen so nicht ausgewertet. Schon wieder was dazugelernt.

-
Ich hab mir eine ganz einfache Variante überlegt, wie ich meinen MsgBox-Buttons eine andere Beschriftung zukommen lassen kann. Das ist dabei herausgekommen:
Wie es begann...
[autoit]#Include <File.au3>
[/autoit] [autoit][/autoit] [autoit]
Local $filelines[6]
Local $filename = @TempDir&"\MsgText.au3"$filelines[0] = '#NoTrayIcon'
[/autoit] [autoit][/autoit] [autoit]
$filelines[1] = 'Opt("WinWaitDelay",0)'
$filelines[2] = 'WinWaitActive("[Class:#32770]")'
$filelines[3] = 'ControlSetText("","","Button1","Bin dabei")'
$filelines[4] = 'ControlSetText("","","Button2","Mag nicht")'
$filelines[5] = 'ControlSetText("","","Button3","Vielleicht")'_FileWriteFromArray($filename, $filelines)
[/autoit] [autoit][/autoit] [autoit]
Run(RegRead("HKLM\SOFTWARE\Autoit v3\Autoit","Installdir")&"\AutoIt3.exe " & $filename)MsgBox(34,"Frage","Gehst du heute mit mir aus?")
[/autoit] [autoit][/autoit] [autoit]FileDelete($filename)
[/autoit]Wie es nun fertig aussieht
[autoit]Func _MsgBoxIndividual($flag, $title, $text, $btn_text1 = "OK", $btn_text2 = "Nein", $btn_text3 = "Vielleicht")
[/autoit]
Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('"&$title&"','')+" & _
"ControlSetText('"&$title&"','"&$text&"','Button1','"&$btn_text1&"')+" & _
"ControlSetText('"&$title&"','"&$text&"','Button2','"&$btn_text2&"')+" & _
"ControlSetText('"&$title&"','"&$text&"','Button3','"&$btn_text3&"')"
Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
Sleep(100)
Return MsgBox($flag, $title, $text)
EndFuncDank an progandy für den Aufrufparameter /AutoIt3ExecuteLine
-
Das Problem mit der Pipe ('|') scheint ein Bug von Stringsplit zu sein. Die Umgehung dieses Problems mit Stringreplace wird wohl die beste Lösung dafür sein.
-
Also bei mir geht's
[autoit]#Include <Array.au3>
[/autoit][autoit][/autoit][autoit]
#include "_Array2DEmptyDel.au3"$String = "asdf asdf2 asdf3 asdf4 asdf5"
[/autoit][autoit][/autoit][autoit]$aa = StringSplit($String," ")
[/autoit]
_Array2DEmptyDel($aa)
_ArrayDisplay($aa) -
Bugfix hat da was
-
Wieso bei allen Dateien einzeln die Größen adieren, wenn du sowieso die Summe benötigst?
[autoit]$Speicherbedarf = DriveSpaceTotal($Laufwerk) - DriveSpaceFree($Laufwerk)
[/autoit]Diese Ausgabe ist in MB, also wenn du es in Byte brauchst einfach *1024*1024
-
Schau dir mal hier [ offen ] Programm.exe in einem AutoIt fenster ausführen den 12. Post an von eukalyptus. Es bettet Controls von einem anderen, versteckten Programm in seine eigene Gui mit ein. Vielleicht geht das auch mit deiner Progressbar.
Sonst kannst du vllt, wenn neben der Progressbar die Prozent stehen, diese auslesen und deinen Balken mittels AdlibEnable aktualisieren. -
Zitat
MsgBox(0,"1 Kühlschrank 2 Fach 7 Flasche",$Bier[1][2][7])
Eigentlich sollte es $Bier[0][1][6] heißen, oder?
[OT]
Zillertal Bier ist das Beste
[/OT] -
Ich weiß zwar nicht mal was der Befehl macht, aber in englischen Forum (http://www.autoitscript.com/forum/lofivers…php?t71806.html) glaube ich zu erkennen, dass sie das Array nicht so deklariert haben, also ohne die 500:
DIM $Array
_ADGetObjectsInOU($Array,"OU=TESTOU,DC=MeineDomain,DC=local")