eine Feldfunktion in Word einfügen
Ja welche denn?
Und erfahrungsgemäß sieht das aufgezeichnete Makro nicht so aus. ![]()
eine Feldfunktion in Word einfügen
Ja welche denn?
Und erfahrungsgemäß sieht das aufgezeichnete Makro nicht so aus. ![]()
Hi,
nachdem ich eine Weile nach einem vermeintlichen Fehler in meinem Skript suchte, stellte ich fest, dass die Funktion IsInt nur auf 64bit Integer prüft.
Aus der Funktionsbeschreibung wird das nicht ersichtlich. Das sollte man vielleicht hinzufügen.
Ich wollte in einer Fehlerabfrage absichern, dass nur 32bit Integer an eine Struktur übergeben werden und wunderte mich, dass die Fehlerabfrage nicht funktionierte. Die Erklärung fand sich dann zwar in der Hilfe, aber nicht zur Funktion, sondern in der Übersicht Datentypen.
Ich kann nur wiederholen, was ich schon zu deinen Fragen vorab in der Shoutbox gesagt habe: HotKeySet() erledigt das für dich.
Du meintest zwar, dass dies nicht die Funktion wär, die du suchst. Aber dann hast du sie wohl noch nicht verstanden.
Dein Skript ist ein sehr aufwändiger Nachbau der Funktion HotKeySet() und da es nicht so simpel, wie diese Funktion zu nutzen ist, sehe ich da auch keinen Mehrwert.
Aber laß dich nicht entmutigen. Es gibt sicher noch Einiges, dass nicht bereits in Funktionen gegossen ist. ![]()
Images sind immer links angeordnet, geht nicht anders.
Du brauchst kein weißes Image, wenn kein Image dargestellt werden soll, verweise auf einen Indexwert, der größer als in deiner Imagelist ist.
Vor dem Item wird ebenfalls Platz gehalten für Images - selbst wenn nicht gesetzt. Der Style bezieht sich immer auf Item oder Item+SubItems, aber nicht nur auf SubItems.
#include <GuiListView.au3>
#include <GuiImageList.au3>
Local $aHost[4] = ['W2K8-D001','W2K8-D002','W2K8-D003','W2K8-D004']
[/autoit] [autoit][/autoit] [autoit]$gui = GUICreate('test', 430, 300)
$lv = GUICtrlCreateListView('Host|Java|AReader|Flash|Firefox', 10, 10, 400, 200, Default, $LVS_EX_SUBITEMIMAGES)
$hListView = GUICtrlGetHandle($lv)
_GUICtrlListView_SetColumnWidth($hListView, 0, 150)
For $i = 1 To 4
_GUICtrlListView_SetColumnWidth($hListView, $i, 61)
Next
$hImage = _GUIImageList_Create()
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUICtrlListView_SetImageList($hListView, $hImage, 1)
For $i = 0 To 3
_GUICtrlListView_AddItem($hListView, $aHost[$i], 3) ; <== Index den es in der ImageList nicht gibt
For $j = 1 To 4
_GUICtrlListView_AddSubItem($hListView, $i, '', $j, Random(0,2,1))
Next
Next
GUISetState()
[/autoit] [autoit][/autoit] [autoit]Do
Until GUIGetMsg() = -3
WinMove() anschauen.
Hi,
habe ein seltsames Problem. Dein Bsp. Addition nur mit anderen (Integer)-Werten.
Ist der erste übergebene Integer = oder ein Vielfaches von 256, wird er als 0 geführt. Ab dem Folgewert beginnt er wieder bei 1. ![]()
$Fasm = FasmInit() ;FASM initialisieren
FasmReset($Fasm) ;FASM resetten
FasmAdd($Fasm, "use32") ;wir benutzen den 32-Bit Assembler
FasmAdd($Fasm, "mov eax, [esp + 4]") ;erster Parameter ins EAX-Register, 4 Byte nach der Rücksprungadresse
FasmAdd($Fasm, "mov ebx, [esp + 8]") ;zweiter Parameter ins EBX-Register
FasmAdd($Fasm, "add eax, ebx") ;EAX = EAX + EBX
;ein einfaches RET reicht nun
FasmAdd($Fasm, "ret") ;zurück zur aufrufenden Funktion
$bytecode=FasmGetBinary($Fasm)
ConsoleWrite($bytecode&@CRLF) ;Bytecode per Copy/Paste in das nächste Script transferieren
MsgBox(0,"Bytecode, der vom Assembler erstellt wurde:",String(FasmGetBinary($Fasm))) ;Bytecode anzeigen
;die folgenden 3 Zeilen ersetzen den MemoryFuncCall()
$tCodebuffer=dllstructcreate("byte["&stringlen($Bytecode)/2-1&"]") ;Speicher für den Bytecode reservieren
dllstructsetdata($tCodeBuffer,1,$Bytecode) ;Bytecode in den Speicher schreiben
$Ret= DllCall("user32.dll", "int", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer), "byte", 255, "int", 2000000, "int", 0, "int", 0);bytecode aufrufen, rückgabe in a[0], aufruf IMMER mit 4 Parametern!
MsgBox(0,"255+2000000 - OK",$Ret[2]&" + "&$Ret[3]&" = "&$Ret[0])
$Ret= DllCall("user32.dll", "int", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer), "byte", 256, "int", 2000000, "int", 0, "int", 0);bytecode aufrufen, rückgabe in a[0], aufruf IMMER mit 4 Parametern!
MsgBox(0,"256+2000000 - FALSCH",$Ret[2]&" + "&$Ret[3]&" = "&$Ret[0])
$Ret= DllCall("user32.dll", "int", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer), "byte", 512, "int", 2000000, "int", 0, "int", 0);bytecode aufrufen, rückgabe in a[0], aufruf IMMER mit 4 Parametern!
MsgBox(0,"512+2000000 - FALSCH",$Ret[2]&" + "&$Ret[3]&" = "&$Ret[0])
FasmExit($Fasm) ;FASM aus dem Speicher entfernen
[/autoit]Edit: Das kommt von Copy&Paste: Du hattest als Übergabetyp des ersten Parameters 'byte' - hatte ich nicht drauf geachtet ![]()
Verwende besser ein Listview, damit kannst du die gewünschten Einstellungen vornehmen - verwende die Forensuche dazu (Listview Format).
Ich kann mich des Eindrucks nicht erwehren, dass hier kein sauberes Ziel verfolgt wird. Wässrige und ausweichende Angaben, haarsträubende Story zur Dringlichkeit (bei "brauche schnell Hilfe" läuten meine Alarmglocken).
Es kann sein, dass ich mich irre. In dem Fall kann der Threadstarter mit ausreichenden Argumenten mir eine PN zukommen lassen.
Bis dahin: CLOSED
Für alle darstellbaren Daten (Text, Ton, Bild, Film) gilt das Urheberrechtsschutzgesetz.
Da ist klar geregelt, dass ohne Einwilligung des Rechteinhabers dessen Bilder (etc. pp.) nicht verwendet werden dürfen.
Wenn du also Bilder verwenden möchtest, die dir nicht urheberrechtlich gehören, mußt du dir die Erlaubnis des Rechteinhabers einholen. Das kann ein langwieriges Unterfangen sein, den Rechteinhaber ausfindig zu machen.
Denke nie: "Solange sich keiner dran stört, geht das schon.." - Das könnte sehr teuer werden.
Zitat von LeviathanEs spricht aber nix dagegen, ähnliche Grafiken zu verwenden.
Das geht so auch nicht. Wenn die 'ähnliche Grafik' erkennen läßt, worauf eigentlich Bezug genommen wird, fällt dieses auch unter den Urheberrechtsschutz.
Bsp.:
Du verwendest für ein Spiel eigene Zeichnungen von Mickey-Mouse. Die sind zwar dann kein Original, aber Mickey-Mouse als solches darf nicht nachempfunden werden.
Ich finde es nicht sinnvoll, mehrere Typen in einer Abfrage abzuhandeln.
Dadurch geht der Kontext des Skriptes verloren.
Bsp.:
If bool($wert) Then
[/autoit]
sagt mir doch nichts mehr über den Grund der Prüfung. Und das ist doch elementar für mein Skript.
Wenn ich prüfe, dann ganz gezielt auf einen Typ um entsprechend reagieren zu können. Im Moment des Schreibens ist einem das bewußt. Aber glaub mir, wenn du nach einem Jahr in das Skript schaust, grübelst du: "WTF, auf was hab ich da bloß geprüft?" ![]()
Als Erstes Herzlich Willkommen im Forum.
Meine Vorstellung, AutoIt sei im Prinzip eine "modernere" Version von AutoHotkey, stimmt leider nicht 100-prozentig.
Das ist nicht ganz richtig. Es ist eine Parallelentwicklung zu AHK mit anderen Schwerpunkten. Was Maus-, Tastatur- u. einige andere Dinge im GUI-Handling betrifft ist AHK ausgereifter. Andere Bereiche sind wiederum in AutoIt wesentlich flexibler und komfortabler.
Sieh beide als Geschwisterpaar, in dem sich AHK zum Künstler und AutoIt zum Ingenieur entwickelt. Das trifft in etwa den Status. ![]()
AutoSize ist als native Funktion nicht vorhanden. Ich bin mir aber ziemlich sicher, dass jemand dazu schon eine eigene Funktion erstellt hat. Wenn du hier in der Suche nicht fündig wirst, schau auch mal bei unseren Brüdern im EN-Forum nach.
Hier mal der Alghoritmus in Textform, umsetzen mußt du selber.
- Gesamtsumme 'Item' (oder Punkte o. was auch immer) bilden
- teilen durch Anzahl der Teilnehmer um Zuordnungsbetrag zu ermitteln ( Int($summe/$teilnehmerzahl) )
- vorhandene Item in ein 2D-Array speichern ( [n][0]=Wert, [n][1]=Anzahl )
- jetzt in einer Schleife das Array solange durchgehen, bis alle Item ausgegeben sind
- für jedes Item:
-- gib jedem Teilnehmer ein Item (addiere auf und vergleiche ob Zuordnungsbetrag erreicht)
-- jeder ein Item des Werts bekommen?
--- Ja
--- noch welche da? ==> das gleiche nochmal
--- keine mehr da? ==> auf zum nächsten Wert
--- Nein
--- Betrag des Item aus folgenden Werten summieren und an die restlichen Teilnehmer der Runde ausgeben
usw. usf.
Für den Kreis geht es so: https://autoit.de/index.php?page…1845#post101845 ![]()
Ob es überhaupt geht weiß ich nicht. Halte es aber auch nicht für sinnvoll, da viele AV-Scanner mit Themieda behandelte Programme dann selbst als Virus einstufen.
Freut mich, wenn euch der kleine Gag gefallen hat. ![]()
Als Obfuscator allein taugt es nicht, da in der Form nur mit Execute() ausführbare Befehlszeilen erstellt werden können (also z.B. keine Schleifen o.a. mehrzeilige Befehlsstrukturen).
Aber als Prä-Obfuscator ist es sicherlich nicht schlecht:
- alle Ein-Zeilen-Befehle damit "vorbehandeln"
- danach ab in den Obfuscator
Bleibt aber die Frage der Performance. Aus einem Befehl wird eine Anzahl Befehle für jedes verwendete Zeichen plus dem eigentlichen Befehl. Das stell ich mir bei großen Skripten (und es sind ja meist die großen, wertvollen Skripte, die man schützen möchte) dann aber doch sehr bremsend vor.
Wenn ihr möchtet, erstelle ich mal den "PräObfuscator" und wer ein entsprechend großes Skript hat, kann dann ja mal einen Performancevergleich anstellen.
Es hilft schon, einfach das Original zu lesen, statt der Panikmache aus der Blöd-Zeitung.
Hier als Extrakt:
- Mediziner haben eine neues Bakterium lokalisiert (NDM-1)
- der Erreger ist multiresistent gegen Antibiotika
- er hat damit das Potenzial für ein globales Gesundheitsproblem
- eine Zusammenarbeit internationaler Gesundheitsbehörden ist nötig
Nun noch etwas zu multiresistenten Keimen:
Diese (MRSA) Erreger sind Alltag in unserem Leben. Das ist leider auch dem Umstand geschuldet, dass gegen jeden quersitzenden Furz sofort Antibiotika verordnet werden. Somit ist es nur eine Frage der Zeit, bis Erreger (deren Lebenszyklus ja millionenfach geringer als der unsrige ist) sich an diese Drogen angepaßt haben und gegen diese resistent sind.
Für Gesunde sind diese Erreger, auch wenn neue auftauchen, weitgehend uninteressant. Unser intaktes Immunsystem sollte damit klarkommen. Erkrankungen sind vom Verlauf her dann meist überschaubar und nicht unbedingt lebensbedrohlich.
Das Problem bilden Alte, Kinder und Kranke. Deren noch nicht ausgereiftes oder bereits strapaziertes Immunsystem kann hier u.U. weniger ausrichten und dann sind die Krankheitsverläufe durchaus bedrohlich.
Aber um auf das Topic zurückzukommen:
Momentan hat die Meldung in etwa den Wert des folgenden Satzes.
"In China ist ein Sack Reis geplatzt! - Droht der Welt jetzt eine Hungerkatastrophe?" ![]()
Das Oscar-Protokoll zu portieren ist nicht gerade simpel.
Aber die Mühe hat sich schon jemand gemacht.
_TocLib.au3
Mh
also ich finde da nix raus.
![]()
Es ist eine Anlehnung an das Brainfuck-Prinzip.
Ich bilde ein Array (zur Verwirrung als Pointerstruktur) und hinterlege dort ASCII-Werte. In einem Array speichere ich die ASCII-Werte aller Zeichen einer Befehlszeile [ MsgBox(0, "Test", "Hello World!") ] aber nicht direkt, sondern relativ zum vorigen Zeichen. Dannach wird in einer Schleife daraus die Zeichenkette zusammengesetzt und am Ende mit Execute ausgeführt.
Na dann verwende doch auch "int_ptr". Wobei es vermutlich auch ein "int" tut. Einen Rückgabewert erwartest du ja nicht von der Funktion (außer Erfolg/Fehler).
Aber warum verwendest du beim letzten Parameter "dword" statt "uint"? Es ist zwar oft egal, aber ich versuche mich an die Vorgaben zu halten, wenn AutoIt das ermöglicht.
Hi,
hier ein ganz einfaches Skript. Wie schnell bekommt ihr heraus, was es tut - ohne es auszuführen?
Wenn man große Skripte so schreiben würde und dann noch einen Obfuscator drüberjagt, besteht kaum noch die Chance sich da durchzufinden - allerdings auch für den Autor. ![]()
Local $1 = DllStructCreate('ptr[128];')
Local $2[33] = [77,38,-12,-37,45,9,-80,8,-4,-12,2,50,17,14,1,-82,10,-12,2,38,29,7,0,3,-79,55,24,3,-6,-8,-67,1,7]
Local $3 = 0, $4 = 0, $5 = ''
For $6 = 1 To 128
DllStructSetData($1, 1, $6, $6)
Next
While $3 < UBound($2)
$4 += $2[$3]
$5 &= Chr(DllStructGetData($1, 1, $4))
$3 += 1
If $3 = UBound($2) Then Execute($5)
WEnd