Die Funktion die du suchst, ist _ArrayFindAll.
Wenn du Probleme hast, dann poste am Besten einen kurzen Ausschnitt deines Codes, um den es geht.
Die Funktion die du suchst, ist _ArrayFindAll.
Wenn du Probleme hast, dann poste am Besten einen kurzen Ausschnitt deines Codes, um den es geht.
"str" für "char*" ist schon korrekt so.
Der Rückgabewert muss allerdings so angegeben werden: "bool:cdecl" da AutoIt DLLs standardmäßig als stdcall aufruft und die DLL aber als cdecl kompiliert wird.
Des Weiteren wäre es noch gut zu wissen was eigentlich passieren soll.
Auch eine Abfrage von @error und dem Rückgabearray von DLLCall wäre ganz hilfreich.
Wichtig ist auch dass die Zielarchitektur der DLL dem AutoItskript entspricht, also dass x86-AutoItskripte nur x86-Dlls aufrufen können und x64-Skripte nur x64-Dlls.
Perfekt
So geht es:
Die DLL ist für einen Test. Ich versuche Stück für Stück den IE über C++ zu automatisieren, ohne auf Libraries zuzugreifen.
Soweit ich das sehe returnest du bResult wenn Hwnd NULL ist, kann es sein das dein Hwnd ungültig ist?
(bResult ist natürlich nicht definiert. Bzw. es ist überhaupt nicht definiert.)
bResult habe ich am Anfang deklariert. Das Hwnd wird überprüft und es stimmt auch, da die URL in einer IE Instanz angesteuert wird.
überprüft, ob ein hwnd gegeben ist
Ich war mir auch nicht sicher, aber er übergibt die Strings korrekt. Ich habe als Test eine PHP-Datei, die eine URL ausgibt. Diese gibt die URL nur aus, wenn der user und das pass stimmen. Andernfalls würde die DLL doch nicht aufgerufen werden können.
Hallo zusammen,
ich habe folgende DLL:
extern "C" bool __declspec(dllexport) nav (HWND hwnd, char* user, char* pass)
{
if(hwnd != NULL){
LPSTR lpszChildren[] = { "WorkerW", "ReBarWindow32", "Address Band Root", "Edit" };
for(int nLoop = 0; nLoop < 4; nLoop++)
hwnd = FindWindowEx(hwnd, NULL, lpszChildren[nLoop], NULL);
if(hwnd != NULL){
const char* url = readData(user, pass);
sm = SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)url);
pm = SendMessage(hwnd, WM_KEYDOWN, VK_RETURN, 1);
SendMessage(hwnd, WM_KEYUP, VK_RETURN, 1);
if((sm == 1) && (pm == 1)) {
bResult = TRUE;
}
else
bResult = FALSE;
}
}
return bResult;
}
Alles anzeigen
Und rufe die DLL mit dem Befehl auf:
DllCall("static.dll", "bool", "nav", "hwnd", $hwnd, "str", "test", "str", "test2")
MsgBox(0, "", "Done")
Nachdem die DLL ihre Arbeit getan hat, passiert kurze Zeit nichts und mein AutoIt-Skript beendet sich.
Ich bin leider völlig ratlos, da dies meine erste C++ DLL ist und ich zuvor auch nie mit DllCall gearbeitet habe.
Vielleicht hat ja jemand von euch einen Anhaltspunkt.
Danke im Voraus und viele Grüße
sh0r7y
gibt übrigens massenweise funktionen, schreib dir doch selbst eine, in der das alles errechnet, statt ersetzt wird, dann lernst es gescheit
Das es besser geht weiß ich ja
Wird später eh in C++ umgeschrieben, damit es schneller läuft.
Vielleicht kriege ich es sogar heute schon fertig
Funktioniert 1A. Beide Lösungen sind nachvollziehbar und logisch.
Vielen Dank für deine Hilfe!
Hallo Community,
ich arbeite da gerade an etwas. Der Sinn dahinter bleibt vorerst geheim
Nun zum Problem. Ich habe gerade mal folgendes Skript runtergeschrieben:
Dim $result
$data = FileOpen("logo.jpg", 16)
$hex = FileRead($data)
$binary = StringTrimLeft($hex, 2)
[/autoit] [autoit][/autoit] [autoit]FileWrite("string1.txt", $binary)
[/autoit] [autoit][/autoit] [autoit]$binary = HexToBinary($binary)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$aNumber = StringRegExp($binary, "\d{4}", 3)
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To UBound($aNumber) - 1
$result &= BinaryToHex($aNumber[$i])
Next
FileWrite("string2.txt", $result)
[/autoit] [autoit][/autoit] [autoit]FileWrite("logo2.jpg", $result)
[/autoit] [autoit][/autoit] [autoit]Func HexToBinary($binary)
$binary = StringReplace($binary, "0", "0000")
$binary = StringReplace($binary, "1", "0001")
$binary = StringReplace($binary, "2", "0010")
$binary = StringReplace($binary, "3", "0011")
$binary = StringReplace($binary, "4", "0100")
$binary = StringReplace($binary, "5", "0101")
$binary = StringReplace($binary, "6", "0110")
$binary = StringReplace($binary, "7", "0111")
$binary = StringReplace($binary, "8", "1000")
$binary = StringReplace($binary, "9", "1001")
$binary = StringReplace($binary, "A", "1010")
$binary = StringReplace($binary, "B", "1011")
$binary = StringReplace($binary, "C", "1100")
$binary = StringReplace($binary, "D", "1101")
$binary = StringReplace($binary, "E", "1110")
$binary = StringReplace($binary, "F", "1111")
Return $binary
EndFunc
Func BinaryToHex($binary)
$binary = StringReplace($binary, "0000", "0")
$binary = StringReplace($binary, "0001", "1")
$binary = StringReplace($binary, "0010", "2")
$binary = StringReplace($binary, "0011", "3")
$binary = StringReplace($binary, "0100", "4")
$binary = StringReplace($binary, "0101", "5")
$binary = StringReplace($binary, "0110", "6")
$binary = StringReplace($binary, "0111", "7")
$binary = StringReplace($binary, "1000", "8")
$binary = StringReplace($binary, "1001", "9")
$binary = StringReplace($binary, "1010", "A")
$binary = StringReplace($binary, "1011", "B")
$binary = StringReplace($binary, "1100", "C")
$binary = StringReplace($binary, "1101", "D")
$binary = StringReplace($binary, "1110", "E")
$binary = StringReplace($binary, "1111", "F")
Return $binary
EndFunc
Bitte nicht hauen. Es geht auch sauberer, aber ich wollte es eben mal testen.
Wie ihr sehen könnt, speichere ich beide Strings wieder ab um diese dann mal zu vergleichen. Diese sind komplett identisch.
Nur wenn ich das Bild wieder erzeugen möchte, gibt er mir ein doppelt so großes, unbrauchbares Bild wieder aus.
Vllt. habt ihr ja einen Lösungsansatz.
Viele Grüße,
sh0r7y
Wenn ich in AutoIt ein IE erstelle, dann meistens mit der Variable $oIE.
Nun möchte ich ControlSend an $oIE senden, sodass ich den IE in mehreren Instanzen offen haben kann und nur die eine Instanz zusammen mit AutoIt arbeiten soll. Mit Fensternamen funktioniert das nicht sonderlich gut.
Ähnlich wie wenn man mit _IENavigate arbeitet. Dort gibt man ja auch die IE-Instanz an, welche dafür verwendet werden soll. Funktioniert sowas mit ControlSend oder einem anderen gleichwertigen Befehl?
Ebenfalls soll es auch funktionieren, wenn der IE minimiert oder hidden ist.
EDIT: Mir ist gerade ein guter Vergleich eingefallen. Ich suche etwas, was wie _IEAction arbeitet und Commands wie "F12" verschicken kann.
Dann automatisiere das Developer Tool.
Das funktioniert ganz gut. Gibt es eine Möglichkeit, dass das direkt an $oIE gebunden wird? Denn wenn ich mehrere IE-Instanzen offen habe, dann läuft das nicht mehr ganz rund. Soll halt auch im Hintergrund für eine bestimmte Instanz funktionieren.
Gruß
sh0r7y
Und warum sollte dies ein Problem sein?
Na weil ich das Ganze auch betreiben möchte, wenn ich nicht am PC sitze
Hi,
ich habe leider keine Möglichkeit gefunden, den Useragent des IE9 automatisch! zu ändern. Über Developer Tools funktioniert das ganz gut, nur findet das nicht automatisch und im Hintergrund statt. Meine Frage ist, wie man den Useragent im laufenden Betrieb für den IE9! wechseln kann. Bei den älteren Versionen ist dies einfacher zu handhaben.
Ich bedanke mich schonmal im Voraus für jegliche Hilfe. Und bevor ich es vergesse, der Wechsel soll auch stattfinden können, wenn das IE-Fenster nicht aktiv ist.
Gruß
sh0r7y
Ist auf jeden Fall eine kluge Entscheidung.
Ich rüste auf wenn die neuen Konsolen kommen, da mein PC nicht mehr der neuste ist.
Meines Wissens nach lässt sich der 2600k aber um einiges besser übertakten.
Für den ein oder anderen vllt. wichtig und man holt später mehr Performance raus.
Aber Recht hast du schon. Normal nimmt sich das nichts außer der Preis.
Bei 3D Modelling wird heutzutage ja verstärkt auf Grafikkarten gesetzt .
Aber um auf die CPU zurückzukommen. Jeder neuere Prozessor wird für die nächsten Jahre reichen, da diese nicht ausgelastet werden - das kann ich so unterschreiben.
Das lohnt sich meiner Meinung nach auf einem Mittelklasse Gaming PC mit einer älteren Grafikkarte kein bisschen. Besonders wenn man den Preis betrachtet.
Deshalb hab ich auch geschrieben, dass er sich dann demnächst auch eine neue Graka zuzulegen sollte
Die jetzige Graka würde den Rest des Systems ein wenig ausbremsen.
Also ich rate dir entweder zu Sandy oder Ivy Bridge.
Für Sandy Bridge tut es ein i5-2500k, falls du etwas Geld übrig hast auch ein i7-2600k wobei die sich nicht viel nehmen.
Bei Ivy Bridge rate ich dir zum i5-3570k. Dürfte ca. 20€ mehr als der i5-2500k kosten.
Dann 8GB Ram für 40€ von Corsair. Hab mit Corsair noch keine schlechten Erfahrungen gemacht. Hab seit 5 oder 6 Jahren 2x1GB Riegel drin und die funktionieren immernoch einwandfrei.
Im Mainboardbereich habe ich gerade keine Ahnung was da gut und preiswert ist, aber da kannst du ja dann
selbst recherchieren.
Nur würde ich dir raten in einem Jahr oder früher vllt. eine neue Graka zu kaufen. Eine GTX 570 kriegt man heute schon für 250€. Kannst ja gleichzeitig schauen, was du für deine GTX 260 kriegen würdest.
Worauf du vllt. auch achten solltest, ist wieviel Watt dein Netzteil liefert. Mit einem 350 Watt Netzteil wird es sehr knapp werden. Hast du 500 Watt oder mehr ist das kein Problem.
Gruss sh0r7y
Ich habe das Programm ja extra so geschrieben, dass keine Webseite nötig ist. Somit brauche ich nirgens ein Impressum.
Um ein wenig genauer zu sein, verkaufe ich auch nicht die Software, sondern Credits für die Software. Aber das Programm ist auch kostenlos nutzbar.
Theoretisch würde eine E-Mail Adresse genügen, damit man sieht, wo die Software herkommt und wie man mich erreichen kann.
Copyright wird aufjedenfall mit dabei sein. Das mit dem Gewerbe ist natürlich Vorraussetzung, wenn ich ein Programm kommerziell betreiben möchte.
Aber da ich nun weiß, dass ich kein Impressum brauche, kann es in die vollen Gehen. Danke für die hilfreiche Antwort
Gruss sh0r7y
Hallo,
Ich habe mich mal ein wenig umgeschaut, aber nichts bezüglich dieses Themas gefunden.
Es ist klar, dass man für eine Webseite ein Impressum braucht, sofern diese nicht privat ist oder kommerziell genutzt wird. Aber wie sieht das mit Programmen aus, die ich z.B. in AutoIt schreibe und release?
Ich habe gerade ein Programm in Arbeit, welches später auch ein wenig Geld in die Kasse spülen soll.
Ist hierfür ein Impressum notwendig? Bezüglich des kommerziellen Zweckes würde ich maximal eine E-Mail Adresse hinterlegen, damit mich Benutzer kontaktieren können.
Ich hoffe mal da fällt keine Impressumspflicht an, denn ich hab es nicht so mit persönlichen Daten im Internet bzw. verankert in einem Programm, welches übers Internet zugänglich gemacht wird.
Gruss sh0r7y
Erstmal vielen Dank für den Link!
Hatte viel um die Ohren aber habe mich dennoch versucht damit zu beschäftigen. Nur leider kriege ich nichts hin. Mir fehlt einfach die Zeit, mir in Ruhe alles durchzulesen.
Deshalb frage ich hier auch, ob mir das jemand programmieren kann.
Gruss sh0r7y