@Tweaky sucht schon seit längerem verzweifelt Hilfe für die Übersetzung zunächst auf den Stand 3.3.10.2 Wenn dieser Kraftakt geschafft ist wird es imho auch schnell eine dt. Hilfe 3.3.14.2 geben, da dann nicht mehr viele Änderungen sind.
Für Excel,Word etc. kannst du mal in @Water's (Autor der Excel UDF) Signatur (z.B.: hier) schauen, da sind noch weitere Links, da sie auf das Entwicklerforum verweisen leider nur auf Englisch. Ich bin mir nicht sicher ob er am Übersetzungsprojekt mitmacht, aber als der Entwickler der UDF und deutsch als Muttersprache (naja Österreichisch) wäre er prädestiniert dafür. Ich gehe stark davon aus, daß er sich in diesem Thema noch meldet, dann kannst du gleich mal fragen ob er dt. Dateien als Vorbereitung für die dt. Hilfeübersetzung hat.
Beiträge von autoBert
-
-
Und die Dateien zum testen soll man selber schreiben? Auf Anhieb sehe ich allerdings, daß die Func Los nie aufgerufen werden kann, da Opt("guioneventmode", 1) fehlt. In diesem würde sich die Gui nicht schliessen lassen da auch GUISetOnEvent($GUI_EVENT_CLOSE, 'DeineExitFunc') fehlt. Falls GuiOnEventModekannst du Zeilen 19-24 mit einer einzigen Zeile Sleep(1000) ersetzen. Falls nicht GuiOnEventMode (also GuiGetMsg-Modus) kannst du Zeile 15 löschen, mußt dann aber noch den ButtonClick im Switch-Block abhandeln (einfach mal das Beispiel zu GUICtrlCreateButton) anschauen.
Egal welcher Modus Zeilen 27 bis 32 (Dateipfade) müssen vor die While Schleife verschoben werden. Lies dir in der Hilfe auf jedenfall den Abschnitt GUI Reference komplett durch, ist wichtig zu wissen. Den sonst passiert das was du gemacht hast 2 Konzepte durcheinander geworfen.
-
Du benutzt die dt. Hilfeübersetzung und verwendest daher noch die alten Beispiele für eine mittlerweile veraltete UDF? Mittlerweile hat @water die Excel.au3 komplet neu geschrieben. Aber auch andere Funktionen haben sich seit dem letzten Update der dz. Hilfe geändert. Alle die eine AutoItversion > 3.3.8.X benutzen, kann ich daher nur raten das englische Original zu installieren. Wer unbedingt auf die dt. Hilfe angewiesen ist und UDF's zum Officepaket benutzt sollte auf die letzte Version vor dem Redisign dieser UDF's zurück, afair 3.3.8.X.
Das Skript im Anhang sollte funktionieren.
-
Ja es ist möglich, am besten schaust du in der Hilfe nach File* bzw. _File* String*, RegEx*-Funktionen und _ReplaceStringInFile.
Da hier kein 24/7 Supportseite ist brauchst du das Thema auch nicht pushen (geht auch nicht schneller), solange niemand geantwortet hat ust es in diesem Forum üblich das Thema zu bearbeiten/ergänzen.
Edit: hilfreich wäre auch Beispiele vorher nachher einzustelleh
mfg autoBert
-
Das wäre der bisher 1. plausible Grund ImageSearch zu nutzen. Mir ist keine Funktion in der FF.au3 mit bekannt die das Dropereignis simuliert.Edit: sollte mit _FFDispatchEvent möglich sein.
-
Die Aussage kann ich grad nicht nachvollziehen. Sage ich das irgendwo?
dann habe ich:
Dann habe ich das nochmal gelesen und dachte ich kann dort eine Zahl angeben, die als Control-ID gesetzt wird. Dann wird jedoch die Zeile nicht gefärbt (Grund unbekannt):
wohl falsch interpretiert.
So wie du es machst (erstellen und dann in einer zweiten Zeile diese Information an die LV-Zeile anhängen) mach ich das aktuell ja auch.
Man scheint dort ja alle control-ID zu erhaltenman erhält damit ein Array mit allen Spalteninhalten zu einem LV-Item. Du mußt übrigens nicht alle Spaltenwerte angeben, nur die geänderten:
ein "zusammenstringen" mit Werten aus dem ResultArray von _GUICtrlListView_GetItemTextArray schadet aber auch nicht:Code$aItem = _GUICtrlListView_GetItemTextArray($idListview, 1);achtung Index nicht CtrlID GUICtrlSetData($cID_LVITEM2, $aItem[1]&'|'&'New B|'&$aItem[3]&'|New D||'& $cID_LVITEM2)Wichtig zu wissen ist, daß _GUICtrlListView_GetItemTextArray den 0 basierten Index des LV-Items erwartet und nicht die CtrlID. Das schöne daran ist aber ist: ist kein Index oder -1 angegeben wird das 1. selektierte genommen. Deshalb immer nur in LV mit $LVS_SINGLESEL verwenden, bzw. Routine(n) anpassen:
Code
Alles anzeigenCase $idDel AdlibUnRegister("_RandomOnOff") ;damit sich die Indizes nicht durch Neu-Sortierung ändern $aSelected = _GUICtrlListView_GetSelectedIndices($listview, True) If IsArray($aSelected) Then For $i = 1 To $aSelected[0] $aItem = _GUICtrlListView_GetItemTextArray($listview, $aSelected[$i]) If MsgBox($MB_YESNO + $MB_ICONQUESTION + $MB_DEFBUTTON2, $aItem[1], 'Soll Eintrag gelöscht werden?', $hGui) = $idYes Then GUICtrlDelete($aItem[3]) $iItem = _ArraySearch($aNames, $aItem[1]) _ArrayDelete($aNames, $iItem) EndIf Next EndIf AdlibRegister("_RandomOnOff", Random(5000, 10000, 1)) -
WinWaitActive, dabei den TimeOutParameter mit ausreichender Zeit benutzen.
Auch ein Umstellen deines Skriptes auf den GuiOnEventMode kann bei bestimmten Konstellationen helfen, dies kann ich aber ohne Skript für deinen Fall nicht beurteilen. Falls es wenn du selbst die Maus hin- und herbewegst schneller abläuft ist es aber so eine Konstellation.
-
da es so aussieht als hätte der Bengel auch im Entwicklerfoum als Eule getrollt und dort die Lösung selbst gefunden, hier die Lösung:
-
du solltest dein bsiheriges Skript dazu einstellen, dann wird es einfacher zu helfen.
-
du könntest die CtrlId's der LV-Items in einem Array speichern. Ich verstehe allerdings nicht warum es nicht möglich sein soll sie auch direkt in der LV abzuspeichern.
Ich werde mal das verlinkte Beispiel so abändern und dann hierein editieren.
Erledigt:C
Alles anzeigen;https://autoit.de/index.php/Thread/84194-Alternativer-L%C3%B6sungsweg-GuiCtrlSetBkColor/?postID=673544#post673544 #include <GuiListView.au3> #include <GUIConstantsEx.au3> #include <ListviewConstants.au3> #include <array.au3> #include <File.au3> Global $aNames[1] _FileReadToArray('Benutzer.txt',$aNames,$FRTA_NOCOUNT) $hGui=GUICreate("LV-Items färben", 220, 400) $listview = GUICtrlCreateListView("Name|Status|CtrlID", 10, 10, 210, 350) For $i = 0 To UBound($aNames)-1 $iItem = GUICtrlCreateListViewItem($aNames[$i] & "|Offline", $listview) GUICtrlSetData($iItem, "||" & $iItem) Next $idAdd=GUICtrlCreateButton('+',10,370,30) $idDel=GUICtrlCreateButton('-',180,370,30) _GUICtrlListView_SetColumnWidth($listview, 0, 140) _GUICtrlListView_SetColumnWidth($listview, 1, 40) ;_GUICtrlListView_SetColumnWidth($listview, 2, 0) ;0 = unsichtbar _GUICtrlListView_RegisterSortCallBack($listview) _RandomOnOff() GUISetState(@SW_SHOW) ;GUICtrlSetColor(-1, 0x22C21F) ;GUICtrlSetColor(-1, 0xAA0000) While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE _GUICtrlListView_UnRegisterSortCallBack($listview) _FileWriteFromArray('Benutzer.txt',$aNames) Exit Case $listview _GUICtrlListView_SortItems($listview, GUICtrlGetState($listview)) Case $idDel $aItem = _GUICtrlListView_GetItemTextArray($listview) If MsgBox($MB_YESNO+$MB_ICONQUESTION+$MB_DEFBUTTON2,$aItem[1],'Soll Eintrag gelöscht werden?',$hGui)=$idYes Then GUICtrlDelete($aItem[3]) ;to do auch noch aus $aNames löschen EndIf Case $idAdd $sText=InputBox('Neuer Benutzer','Benutzer',Default,'',20) If MsgBox($MB_YESNO+$MB_ICONQUESTION+$MB_DEFBUTTON1,$sText,'Soll Eintrag hinzugefügt werden?',$hGui)=$idYes Then $iItem = GUICtrlCreateListViewItem($sText & "|Neu", $listview) _ArrayAdd($aNames,$sText) GUICtrlSetData($iItem, "||" & $iItem) _GUICtrlListView_EnsureVisible($listview,UBound($aNames)-1) GUICtrlSetBkColor($iItem,0x00FF12) Sleep(2000) EndIf EndSwitch WEnd Func _RandomOnOff() AdlibUnRegister("_RandomOnOff") _GUICtrlListView_BeginUpdate($listview) For $i = 0 To _GUICtrlListView_GetItemCount($listview)-1 $aItem = _GUICtrlListView_GetItemTextArray($listview, $i) ;_ArrayDisplay($aItem) If IsArray($aItem) Then If Random(1, 3, 1) = 1 Then GUICtrlSetData($aItem[3], "|Off") GUICtrlSetBkColor($aItem[3], 0xAA0000) Else GUICtrlSetData($aItem[3], "|On") GUICtrlSetBkColor($aItem[3], 0x22C21F) EndIf EndIf Next If GUICtrlGetState($listview) = 1 Then _GUICtrlListView_SortItems($listview, 0) _GUICtrlListView_SortItems($listview, 1) EndIf _GUICtrlListView_EndUpdate($listview) AdlibRegister("_RandomOnOff", Random(5000, 10000, 1)) EndFunc ;==>_RandomOnOffEdit: Add- und DeleteButton noch hinzugefügt.
-
@Christopg54: da täuscht du dich. Auch im OnEventmodus wird eine gestarte Funktion zuende ausgeführt danach wird das nächste Event abgearbeitet. Bei Endlosschleifen also nie.
@mmk 1988: schau dir https://www.autoitscript.com/wiki/Interrupt…unning_function an.
Wichtiger zu wissen ist allerdings, daß Mausklicks und Co. das schlechteste Mittel sind da fehler anfällig dies besonders bei Benutzung mit unterschiedlichen Auflösungen.
Wenn du deine zu automatisierende Anwendung nennst wird dir eine bessere/zuverlässigere Lösung gezeigt. -
Vielleicht so:
Code
Alles anzeigen#include <Excel.au3> $pfad = @scriptdir&"\test.xlsx" $tabelle = "Tabelle1" $Spalte="B" $Zeile=3 $wert = "12345" $oExcel=_Excel_Open(true) $oWorkbook=_Excel_BookOpen($oExcel,$pfad) _ExcelWriteIfEmpty($oWorkbook,$tabelle,$wert,$Spalte,$Zeile) _Excel_BookClose($oWorkbook) _Excel_Close($oExcel) Func _ExcelWriteIfEmpty($oWorkbook,$sTable,$sValue,$sCol,$sRow) Local $sTmp, $sCell Do $sCell=$sCol&$sRow $sTmp=StringStripWS(_Excel_RangeRead($oWorkbook,$tabelle,$sCell),7) $sRow+=1 Until $sTmp = '' _Excel_RangeWrite($oWorkbook,$sTable, $sValue,$sCell) EndFuncungetestet sollte aber funktionieren
-
Ist es nicht Sinniger, das man die Variable einfach gleich in das Script A schreibt?
da eine UDF imho nur Sinn macht wenn sie mehrfach verwendet wird, ist es am sinnvollsten die Variable in der UDF Global zu deklarieren. Genau so macht es Sinn diese ausgiebig zu testen, sprich das Thema ist an den Haaren herbeigezogen bzw zeugt von schlampigem Programmierstil.
-
Selbst wenn man die Windows Tastenkombination "<ALT> + F4" mit AutoIt an das Fenster sendet, funktioniert es nicht.
Wenn man jedoch die Tastenkombination manuell eingibt, so schließt sich das Fenster und alle Unterfenster immer sofort.Du solltest das ganze mal mit #RequireAdmin am Skriptanfang versuchen.
-
Tritt FB jetzt wirklich als EMail Provider auf?

-
Ich hab zwar noch nie damit gearbeitet aber:
_WinAPI_GetParent
Retrieves the handle of the specified child window's parent windowsollte die Lösung sein. Also einfach alle Kind-Fenster überspringen.
-
Wurde dort mal eine Faxsofware Client/Server Probe installiert? Daran bin ich vor Jahrtehnten unter NT 4.0 schier verzweifelt. Wußte mir nur über Neuaufsetzen des OS zu helfen. Die beschriebene Situation darg ja eigentlich gar nicht vorkommen, falls Schadsoftware war der Übeltäter aber nicht konsequent genug, denn sonst hättest du jetzt einen ReBoot-Loop.
-
-
Ohne den Quelltext der Seite ist das ganze schier unmöglich, dauert auf jedenfall deutlich länger. Oder kann einer deiner Kollegen eine Demoseite (ohne Firmeninternas) online stellen? Muß halt selbes Schema wie Orinalseite einhalten,damit du es auf das Original übertragen kannst.
Ohne eines von beiden wird dies Thema nur theoretisch diskutiert bzw. mit viel Trail and Error Versuchen ablaufen, ob's dann 1 Woche oder ein halbes Jahr dauert oder du schon vorher frustriert aufgibst kann ich nicht beurteilen.
Oder Ihr holt euch einen externen Profi, mit Schweigeklausel im Vertrag.
-
Ich drücke mich echt falsch aus. Ich will doch einfach nur wissen wie ich einen Pointer auf eine Variable erzeugen kann.
Vor allem kannst du auch kein Beispielskript liefern, daß die Notwendigkeit verdeutlicht. Dies zusammen mit deiner (Betriebs-)Geheimniskrämerei macht das Ganze sehr suspekt.