Siehe _GUICtrlListView_GetItemTextArray
Generell hilft es, sich in der Hilfe die Funktionen der UDF einmal durchzugucken.
Beiträge von Kanashius
-
-
X-Y-Problem: Du suchst einen Weg zu etwas. Hast eine Idee und fragst danach. Dabei erwähnst du nur X. Das Tatsächliche Problem, was gemacht werden soll (Y) wird dabei nicht genannt. (Hast du ja in dem Beitrag jetzt gemacht.)
Es gehen also Mitarbeiter auf die Seite, geben dort an, dass ein Problem vorliegt, dann wirst du benachrichtigt und möchtest, dass sie auf der Website deine Antwort sehen?
Allgemein:
JavaScript steht im Quellcode der Website (.js Dateien sind dazu da, in HTML-Dateien eingebunden zu werden. Im Prinzip also nur reinkopiert werden -> dient der Übersichtlichkeit und Mehrfachverwendung). Wenn du die mit doppelklick startest wird das JavaScript einfach in einem leeren HTML-Document ausgeführt.
Der SERVER sendet einfach den Text, also den Quellcode an denjenigen, der die Website aufruft. Bei demjenigen, der es Aufruft wird es dann auch ausgeführt.Anders ist es bei PHP. Das wird in die HTML-Datei eingefügt (dann .php). Fragt ein User die Website an, führt der Server den PHP-Code aus und sendet dann das ganze an den Clienten.
Evtl. Kannst du genauer darauf eingehen, wie das Ticket erstellt wird, woran du es merkst und wie du dann die Antwort sendest.
-
-
Wenn du solch ein Problem hast, nutze Notepad++, mach ich auch immer.
Dort unter Ansicht->nicht druckbare zeichen->Alle zeichen anzeigen, dann siehst du genau, welche Zeichen wo stehen, auch unsichtbare. Das vermeidet solche Probleme. -
@crlf sind die zeichen @cr und @lf hintereinander. Ich denke, das FileReadLine nimmt die Zeichen einzeln.
(Siehe Hilfe: Returns the text of the line read, any newline characters ( Chr(10) or @LF ) at the end of a line read in are automatically stripped.)
Außerdem solltest du fileopen nutzen, da die datei sonst bei jedem aufruf der funktion geöffnet, ausgelesen und wieder geschlossen wird.Besser:
AutoIt$arData=StringSplit(FileRead($file),@crlf,1+2) for $i=0 to UBound($arData)-1 step 1 MsgBox(48,"",$arData[$i]) next
Ansonsten sieh dir mal $aTest[$i] an. Dann müsste dort ein Zeilenumbruch drinstehen.
-
Hmmm... Kommunizierst du zufälligerweise mit einem Chinesischen Client?
Dann könnten sich eventuell Probleme mit dem Zeichensatz ergeben. (UTF8,ANSI,...) -
Wenn ich dich richtig verstanden habe: Alle die in beiden sind entfernen (Je vorkommen 1x), rest zusammenfügen, dann ist das hier, was du haben möchtest:
Ist etwas Komplexer, müsste aber schneller sein, als das von Oscar (nur bei großen Datenmengen nützlicher)AutoIt
Alles anzeigen#include <array.au3> local $Array1=[10, 20, 20, 100, 100, 100, 100] local $Array2=[20, 20, 100, 100, 50] $arRes=getAr($Array1,$Array2) _ArrayDisplay($arRes) Func getAr(ByRef $Array1, ByRef $Array2) local $arResult[ubound($Array1)+ubound($Array2)] local $count=0 for $i=0 to UBound($Array2)-1 step 1 local $found=false for $j=0 to UBound($Array1)-1 step 1 if $Array1[$j]=$Array2[$i] then $found=true $Array1[$j]="d" ExitLoop EndIf next if $found then $Array2[$i]="d" endif next for $i=0 to UBound($Array1)-1 step 1 if $Array1[$i]<>"d" then $arResult[$count]=$Array1[$i] $count+=1 endif next for $i=0 to UBound($Array2)-1 step 1 if $Array2[$i]<>"d" then $arResult[$count]=$Array2[$i] $count+=1 endif next ReDim $arResult[$count] return $arResult EndFunc
Edit: Wenn die beiden Eingabe-Arrays später noch gebraucht werden, sollte das ByRef beim Aufruf rausgenommen werden. Sonst könnte durchaus witziges passieren
MfG Kanashius
-
Danke alpines! Die Idee ist super. Musste nen bisschen rumprobieren, aber jetzt klappts.
So funktionierts:
AutoIt
Alles anzeigen#include <IE.au3> $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") $url="www.google.de" $oIE=_IECreate($url) $script='var text="";var keys=Object.keys( window );for (var i in keys){if (typeof window[keys[i]] != '&"'"&'function'&"'"&'){text+=keys[i]+": "+window[keys[i]];text+="<br>";}}document.body.innerHTML=text;' _IEInsertEventScript($oIE, "document", "onclick", $script) $obj=_IEGetObjById($oIE,"viewport") _IEAction($obj,"click") FileWrite("tmp2.html",_IEBodyReadHTML($oIE)) _IEQuit($oIE) Func MyErrFunc() ConsoleWrite("Variable at Downloadsite not found! Please tell the Developer following Information: "&@crlf& _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) Endfunc ;=============================================================================== ; ; Function Name: _IEInsertEventScript() ; Description: Inserts a Javascript ; Parameter(s): $o_object - object variable for a InternetExplorer.Application, Window or Frame ; $s_htmlFor - the HTML element for event monitoring (e.g. "document" or an element ID) ; $s_event - the event to monitor (e.g. "onclick" or "oncontextmenu") ; $s_script - Javascript to be executed ; Requirement(s): AutoIt3 Beta with COM support (post 3.1.1) ; Return Value(s): On Success - 1 and sets @ERROR = 0 ; On Failure - 0 and sets @ERROR = 1 ; Author(s): Dale Hohm ; ;=============================================================================== ; Func _IEInsertEventScript($o_object, $s_htmlFor, $s_event, $s_script) If IsObj($o_object) Then SetError(0) Local $o_head = $o_object.document.all.tags("HEAD").Item(0) Local $o_script = $o_object.document.createElement("script") With $o_script .defer = True .language="jscript" .type = "text/javascript" .htmlFor = $s_htmlFor .event = $s_event .text = $s_script EndWith $o_head.appendChild($o_script) Return 1 Else SetError(1) Return 0 EndIf EndFunc
MfG Kanashius -
AutoIt
Alles anzeigen#include <Array.au3> $sString = 'class="adress">Rathausplatz 5<br/>90403 Nürnberg<br/><a href=" ' & @CRLF & _ 'Kontakt</h3><p class="adress">Äußere Bayreuther Str. 121<br/>90409 Nürnberg<br/><a href="' & @CRLF & _ '</span></p><h3>Kontakt</h3><p class="adress">Wallensteinstraße 28<br/>90439 Nürnberg<br/><a href="' & @CRLF & _ '</span></p><h3>Kontakt</h3><p class="adress">Glogauer Str. 30 - 38<br/>90473 Nürnberg<br/><a href="' $aArray = StringRegExp(StringRegExpReplace($sString, "<br/?>", " / "), '(?s)class="adress">(.+?)<', 3) for $i=0 to UBound($aArray)-1 step 1 $aArray[$i]=StringLeft($aArray[$i],StringLen($aArray[$i])-3) next _ArrayDisplay($aArray)
Einfach statt @crlf nen " / " dort rein und aus dem array die letzten 3 zeichen entfernen (da dort ja auch ein br war).
-
Ich möchte alle globalen JavaScript Variablen vom Internetexplorer auslesen.
Ich hab recht viel ausprobiert, ich hab nichts gefunden, das funktioniert.
Probiert habe ich execScript -> kein Rückgabewert; eval -> comError;Hat einer von euch noch eine Idee, wie ich alle JS-Variablen auslesen kann?
Beispielcode:
AutoIt
Alles anzeigen#include <IE.au3> $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") $oIE=_IECreate("www.google.de",0,0) $link=$oIE.document.parentwindow.eval("Object.keys( window );") for $x in $link MsgBox(48,"",$x) next _IEQuit($oIE) Func MyErrFunc() ConsoleWrite("Variable at Downloadsite not found! Please tell the Developer following Information: "&@crlf& _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) Endfunc
Error:
COM error 80020006, description 'UNKNOW NAME.'IEVersion: 11.0.9600.17843
BIOS: Win7Ich hoffe ihr habt eine Idee
MfG Kanashius. -
DLLs machen nichts anderes, als die Windows-Bibliotheken (die in C geschrieben sind, oder C++) aufzurufen.
Diese Bibliotheken haben wie Autoit funktionen, die mit dem DLL-Call aufgerufen werden. Dabei werden Parameter übergeben. Das übergeben der Parameter ist vermutlich die Schwierigkeit für dich, da du C/C++ vermutlich nicht kennst.
Dazu lässt sich sagen: Es gibt verschiedene Datentypen, die unterschiedlich sind. z.B. Int für Zahlen, char für Zeichen (ein einziges Zeichen), float für kommazahlen, uvm. In Autoit wird das alles automatisch verwaltet. Das ist in C/C++ nicht so, und deshalb muss man dort das passende übergeben.
Das ist im Prinzip die ganze Schwierigkeit.
Dann muss man nur noch unter msdn (Microsoft Developer Network) nachsehen, welche Befehle was machen. Dafür auch der Link von Xorianator. Etwas unschön ausgedrückt wollte er dir sagen, dass die Seite alles wichtige/notwendige enthält. Man muss halt lernen zu verstehen, wie das dort steht, und wie man es umsetzt, also meine Empfehlung: lies es durch, bis du es verstanden hast und ebenso die umsetzung mit Autoit. Dann kannst du demnächst selbst nachsehen und das notwendige dort auslesen :). Das ist ja das Ziel, zu lernen
(Suchen würd ich aber mit google: z.b. "mikrofon ausstellen site:http://msdn.microsoft.com/" oder besser auf englisch. Auf MSDN etwas zu suchen mag ich nicht^^.)Was Datentypen angeht, lies dir diesen Artikel durch: https://de.wikipedia.org/wiki/Datentyp
Dann kannst du damit umgehen, denke ich. Achte dabei auch auf Zeiger (Pointer). Die werden oft in C/C++ genutzt. -
Ich bin nicht be E-Mail Kleinanzeigen. Kannst du den Quellcode der Seite hier einmal einstellen (Am besten als Quelltext)?
Es müsste möglich sein, ohne das Fenster (und Blöde ControlClicks,... den Kram zu automatisieren). Wofür gibt es denn die _ie_... Befehle. -
Es kommt ganz darauf an, was dein Script macht, und wie komplex es ist.
Im ersten Moment würde ich vermutlich vorschlagen das ganze in Java umzusetzen. Das läuft auf (fast) allen Betriebssystemen (Mac,Windows,Linux auf jeden Fall). Eine portierung (so nennt man das, wenns auf ein anderes Betriebssystem soll) nach Android ist auch recht einfach, da Android-Apps ebenfalls in Java geschrieben sind, und man nur wenig ändern muss.
Wenn es zu komplex ist:
Eine Art Remote-Anbindung. Du baust eine TCP/UDP Schnittstelle in dein Programm und verbindest dich mit den anderen Geräten mit dem, was auf dem PC läuft. Vortiel: Es können auch mehrere auf einem PC arbeiten und du musst nur die Programme, die mit der Schnittstelle kommunizieren, programmieren. Dafür muss halt der PC laufen.Es wäre sehr sinnvoll, zu schreiben, was genau dein Script macht/machen soll.
-
Du musst PlaySound (0, 0, 0) aufrufen, nicht PlaySound ("", 0, 0).
Auf der Seite, die Xorianator gepostet hat steht:The following example stops playback of a sound that is playing asynchronously:
C++ PlaySound(NULL, 0, 0);"" ist nicht NULL, sondern ein String, indem kein Zeichen gespeichert ist.
In C++ ist NULL==0.
Beim Dateityp Variant in Autoit muss man bei sowas halt aufpassen
Du hast praktisch einen ungültigen Pfad übegeben. -
1. Es heißt If und nicht Then
2. Ersetz das If...Then durch ein While..., in der du x sekunden wartest und immer wieder den titel prüfst (neu abfragst)
3. Benutze stattdessen _ieloadwait -
Nein. Da fuscht nichts rein. Das Sortieren durch dein Programm zeigt nur nicht, dass der User sortiert hat. (Könnte ja auch unerwünscht sein.)
Wenn dich das wirklich stört kannst du ja statt des sortierens einen Klick auf die Spalte simulieren. -
Hab mir grad die API angesehen: https://developer.paypal.com/docs/api/
Das geht mit AutoIt. Man kann Websiten aufrufen und die Ergebnisse auslesen.
Als Beispiel:
https://api.sandbox.paypal.com/v1/payments/sale/Transaction-Id \-H "Content-Type:application/json" \-H "Authorization: Bearer Access-Token"
InetGet und die URL passend erstellen. Aufgrund von Klausuren hab ich leider im Moment nicht die Zeit mich in die API genau einzulesen.
Vielleicht findet sich ja jemand, oder du schaffst es sogar selber.
Man braucht aber auf keinen Fall eine andere Programmiersprache. auch wenn die Beispiele dort mit diesen erstellt wurden. -
Naja. Wenn man den Index passend verkleinert geht das
Von hinten nach vorne ist zwar klüger, umsetzten tu ich aber meist die Methode mit dem verkleinern des Indexes^^ -
Meines Wissens nach bleibt dir nichts übrig, als es selbst zu implementieren...
So als Idee könnte man ja mit RegEx Zahlen finden, nach Zahlen splitten, und dann das vor den zahlen sortieren, dann die Zahlen sortieren, dann das nach den Zahlen (wo natürlich wieder Zahlen vorkommen können).
Müsste man genauer drüber nachdenken... -
Was du suchst ist:
_GUICtrlListView_GetItemCount
_GUICtrlListView_GetItemText
_GUICtrlListView_DeleteItemDamit eine for Schleife basteln, die von 0 bis itemcount geht, dann jeweils den text auslesen und gucken, obs das ist, was du suchst. wenn ja, zeile löschen.
Für die Performance ist es wichtig vor der Schleife
_GUICtrlListView_BeginUpdate
und danach
_GUICtrlListView_EndUpdate
zu schreiben. Dann wird die Listview nicht bei jedem löschen neugezeichnet,... -> schneller und die Änderung tritt auf einmal auf und es verschwindet nicht Zeile für Zeile.Das sollte reichen, für das was du vorhast
-
already Defined heißt, dass die Funktion bereits existiert. Also die Funktion einfach löschen.
Die Variable $ghGDIPDll wurde in $__gh_GDIPDll umbenannt. also dort ersetzen. (glaub dass das so umbenannt wurde, sonst wird mich hier bestimmt jemand korrigierenDas Problem entsteht dadurch, dass du eine neuere Autoit-version nutzt als die, in der das Programm geschrieben wurde.