Moin,
hab ne interessante Funktion in der Hilfe gefunden. Der erste Versuch sieht schon recht vielversprechend aus, nur das mit dem Mausmenu wird wohl nichts (zum Glück ist das keine Pflicht). Aller Voraussicht nach werde ich auch teilnehmen.
µit - Juli
-
-
McPoldy, nich aufgeben! Ich glaube das du genug Ahnung hast um das doch noch rauszubekommen
Du hast doch auch noch Zeit! Also wirf die Flinte nicht ins Korn!!!
Walle
-
- Offizieller Beitrag
McPoldy: Ich habe weder DLL-Call, noch eine andere Funktion dafür genutzt Es gibt noch andere Wege
-
Also wirf die Flinte nicht ins Korn!!!
Das sagst Du einem Sportschützen
Ich habe weder DLL-Call, noch eine andere Funktion dafür genutzt Es gibt noch andere Wege
Ich habe da zwar grade was gefunden, nur anfangen kann ich nix damit, mal sehen, vielleicht finde ich ja doch noch einen dreh
-
ich hab jetzt auch einen anderen weg gefunden!
hab mich am anfang zusehr auf die user32.dll fixiert...am meisten hab ich damit gekämpft, das rechtemaus-kontextmenü loszuwerden -
letztendlich ist die lösung einfacher, als ich dachte -
- Offizieller Beitrag
Habe auch erst lange gegrübelt, wie man das Kontextmenü los wird, aber Bugfix hat mich durch einen Beitrag hier im Forum auf die entscheidene Idee gebracht.
Passwort: [später]
Edit: Neue Version (siehe Anhang).
-
- Offizieller Beitrag
Auweia, ich bin wieder schuld!
-
Nun zu meinem stümperhaften Versuch.
Da es hier anscheinend alle ohne die dll gemacht zu haben scheinen, habe ich darauf auch verzichtet. Dadurch ist jetzt jedoch ist die Funktionalität des Edits eingeschränkt (und ziemlich groß ist die Datei auch noch ), ich bin also mal gespannt, wie die Profis die Aufgabe gelöst haben.
Da ich ja angekündigt hatte, dass ich es versuche, zeige ich auch mein "Ergenis".Edit: Da ich heute Abend und morgen nicht die Möglichkeit haben werde, online zu kommen gibt es das Passwort schon jetzt, vor mir will wohl eh keiner was abgucken...
Pw: Td6)djE2CYk%sj -
so, ich habe nun die letzte veränderung vorgenommen...
RAR-Passwort: @SCbPVXArZZc3v3@
-
soooo
bin grade aus Paris rein und freu mich, dass also am Ende doch recht viele mitgemacht haben. PWs könnt ihr von mir aus schon jetzt oder morgen früh on stellen. Die Auflösung kommt bis Mittwoch.
Walle
-
Auswertung
Zunächst einmal möchte ich mich wieder bei allen bedanken, die am Wettbewerb teilgenommen haben. Diesmal waren es immerhin 6 Leute, die sich dieser kniffligen Aufgabe stellten.
Die wärend des Wettbewerbs gegeben Hinweise bezüglich Caret und Sonderzeichen sowie DLL wurden weitgehend berücksichtigt und auch die Skripte funktionieren im Großen und Ganzen alle.
Gut ist auch das sich alle Teilnehmer an die Regeln gehalten haben und die Skripte entsprechend den Vorgaben abgegeben wurden (endlich mal mit Profis arbeiten^^)Jetzt aber der eigentlich wichtige Teil, die Auswertung der Einzelnen Arbeiten:
progandy:
- Skriptgröße: 627Byte - auf 21 Zeilen
- Zusätzliche Datein: /
- Bugs: /
autoit.de/wcf/attachment/2717/Das Kontextmenu, wurde leider nicht deaktiviert und behinderte somit immer etwas die Sicht, sonst einwandfrei.
Spoiler anzeigen
[autoit]$g=GUICreate("")
[/autoit]
$e=GUICtrlCreateEdit("",0,0)
$p=GUICtrlCreateLabel("",9,200,200,20)
GUISetState()
Do
If GUIGetMsg()=-3 Then Exit
$r=GUIGetCursorInfo()
If $r<>0 And $r[3]And $r[4]=$e Then
$x=BitAND(GUICtrlSendMsg($e,215,0,BitOR(BitShift($r[1],-16),BitAND($r[0],0xFFFF))),0xFFFF)
$z=StringRegExpReplace(GUICtrlRead($e),"[][.-;:,·¿?!¡„“»«,’/\(){}]|\s"," ")
If StringMid($z,$x,1)=" "Then ContinueLoop
$a=StringInStr(StringLeft($z,$x),' ',1,-1)+1
$b=StringInStr(StringTrimLeft($z,$x),' ')
$c=($b>0)*($x-$a+$b)-($b=0)
$s=StringMid($z,$a,$c)
For $i=1 To StringLen($s)
$r=StringMid($s,$i,1)&$r
Next
GUICtrlSetData($p,$r)
EndIf
Until 0McPoldy:
- 971 Byte - auf 28 Zeilen
- zusätzliche Datein: user32.dll - 567KB
- Bugs: Einige Sonderzeichen werden mit zum Wort gezählt beim Reverse.
autoit.de/wcf/attachment/2719/Das Kontextmenu überlagerte manchmal das Reversemenu.
Spoiler anzeigen
[autoit]$w = 800
[/autoit]
$h = 600
$gui = GUICreate(@ScriptName, $w, $h, -1, -1)
$E = GUICtrlCreateEdit("", 0, 0, $w, $h, BitOR(4096, 1048576, 2097152))
$d = GUICtrlCreateDummy()
$C = GUICtrlCreateContextMenu($d)
$a = GUICtrlCreateMenuItem("Disabled", $C)
$l = DllOpen("user32.dll")
GUISetState()
$is = False
Do
Local $a_R = DllCall($l, "int", "GetAsyncKeyState", "int", '0x02')
If Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then
$m = MouseGetPos()
MouseClick("left", $m[0], $m[1], 2, 0)
Send("^c")
MouseClick("left", $m[0], $m[1], 1, 0)
$is = False
$t1 = ClipGet()
$t2 = ''
For $x = 0 To StringLen($t1)
$t2 &= StringMid($t1, StringLen($t1) - $x, 1)
Next
GUICtrlSetData($a,StringRegExpReplace(StringStripWS($t2, 3), "[!?.,]", ""))
DllCall($l, "int", "TrackPopupMenuEx", "hwnd", GUICtrlGetHandle($C), "int", 0, "int", $m[0], "int",$m[1], "hwnd", $gui, "ptr", 0)
EndIf
Until GUIGetMsg() = -3
DllClose($l)goliath:
- 1,07 KByte - auf ca. 44 Zeilen
- zusätzliche Datein:/
- Bugs: /
autoit.de/wcf/attachment/2720/
Großes WOW! Er hatte eine ganz ander Herangehesweise. Bei goliath konnte man ohne GUI in jedem beliebigen Windows fenster jeden beliebigen Text umdrehen lassen.
Spoiler anzeigen
[autoit]#include<GuiEdit.au3>
[/autoit] [autoit][/autoit] [autoit]
#include<GuiConstantsEx.au3>Opt("GuiOnEventMode",1)
[/autoit] [autoit][/autoit] [autoit]GuiCreate("",500,500)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_SECONDARYDOWN,"_click")
Guisetonevent($GUI_EVENT_CLOSE,"_exit")
$edit=GUICtrlCreatelabel("",0,0,500,500)
$cmenu=GUICtrlCreateContextMenu($edit)
$mitem = GUICtrlCreateMenuItem(" ",$cmenu)
$edit=GUICtrlCreateEdit("",0,0,500,500,$ES_MULTILINE)
Guisetstate()While 1
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _click()
[/autoit] [autoit][/autoit] [autoit]
$info=GUIGetCursorInfo()
if $edit=$info[4] Then
$aPos = _GUICtrlEdit_CharFromPos($Edit,$info[0],$info[1])
$c=StringSplit(GUICtrlRead($Edit),"")
$i=$aPos[0]
while $c[$i]<>" " and $i<>0
$i-=1
WEnd
$wort=""
While $i+1<=UBound($c)-1
$i+=1
if $c[$i]=" " or $c[$i]="." or $c[$i]="," or $c[$i]=":" or $c[$i]=";" Then exitloop
$wort=$c[$i]&$wort
WEnd
$bpos=_GUICtrlEdit_PosFromChar($edit,$aPos[0])
if $bpos[0]>$info[0]-19 and $bpos[0]<$info[0]+19 and $bpos[1]>$info[1]-19 and $bPos[1]<$info[1]+19 then
GUICtrlSetData($mitem,$wort)
Else
GUICtrlSetData($mitem,"")
EndIf
EndIf
EndFuncFunc _exit()
[/autoit]
Exit
endfunceukalyptus:
- 498 Byte - auf 26 Zeilen
- zusätzliche Datein:/
- Bugs: /
autoit.de/wcf/attachment/2721/
Das Edit-Kontextmenu wurde wunderschön entfernt
Spoiler anzeigen
[autoit]GUICreate("")
[/autoit]
GUICtrlCreateEdit("",0,0)
GUISetState()
Do
$M=GUIGetMsg(1)
If $M[0]=-9 Then
GUISetState(65)
Do
Until GUIGetMsg()=-10
GUISetState(64)
$S=BitAND(GUICtrlSendMsg(-1,0xD7,0,BitOR(BitAND(($M[4])*0x10000,0xFFFF0000),BitAND($M[3],0xFFFF))),0xFFFF)
$T=StringSplit(GUICtrlRead(-1),"")
$j=0
For $i In $T
$j+=1
If (StringIsAlNum($i)=0 And $j<=$S)Or $j=1 Then
$V=""
ContinueLoop
ElseIf StringIsAlNum($i)=0 Then
ExitLoop
EndIf
$V=$i&$V
Next
ToolTip($V)
EndIf
Until $M[0]=-3BugFix:
- 1,05 KByte - auf 48 Zeilen
- zusätzliche Datein:/
- Bugs: /
autoit.de/wcf/attachment/2722/
Spoiler anzeigen
[autoit]Opt("GUIOnEventMode",1)
[/autoit]
Global $g=GUICreate('')
GUISetOnEvent(-3, 'off')
GUISetOnEvent(-9, 'down')
GUISetOnEvent(-10, 'up')
$e=GUICtrlCreateEdit("",9,9)
GUISetState()
While 1
Sleep(20)
WEnd
Func off()
Exit
EndFunc
Func down()
GUISetState(@SW_LOCK)
GUICtrlSetState($e, 128)
EndFunc
Func up()
GUICtrlSetState($e, 64)
GUISetState(@SW_UNLOCK)
$p=MouseGetPos()
MouseClick('left',$p[0],$p[1],1,1)
Rev_Word()
EndFunc
Func Rev_Word()
$t=ControlCommand($g,'',$e,"GetLine",ControlCommand($g,'',$e,"GetCurrentLine",""))
$s=ControlCommand($g,'',$e,"GetCurrentCol","")
$a=StringSplit($t,' ')
If Not IsArray($a) Then Return
$d=ObjCreate('Scripting.Dictionary')
For $n=1 To UBound($a)-1
$q=StringInStr($t,$a[$n])+1
For $j=$q To $q+StringLen($a[$n])-2
$d.Add($j,$a[$n])
Next
Next
If $d.Exists($s) Then
$ch=$d.Item($s)
$w=StringRegExpReplace($d.Item($s),'[\W_]+','')
Else
Return
EndIf
$o=''
For $n=StringLen($w) To 1 Step -1
$o&=StringMid($w,$n,1)
Next
WinSetTitle('','','Reverse von: '&$w&' = '&$o)
EndFuncOscar:
- 619 Byte - auf 26 Zeilen
- zusätzliche Datein:/
- Bugs:
- Fast hätte das Skript nicht gewertet werden können, da es nicht lief^^ ControlClick($z,'',$e,'primary',2,$p[0],$p[1]) muss ControlClick($z,'',$e,'left',2,$p[0],$p[1]) heißen. Dank dem pee, dass er diesen Fehler behoben hat und ich es dadurch testen konnte^^
- Sonderzeichen wurden beim Reverse mitgezählt
- Wenn man was geschrieben hatte und dann den reverse anzeigen gelassen hat konnte man später nichts mehr im Text bearbeiten.
Auch hier wurde das Kontextmenu einwandfrei entfernt.
autoit.de/wcf/attachment/2723/
Spoiler anzeigen
[autoit]Opt('GUIOnEventMode',1)
[/autoit]
Opt('MouseCoordMode',2)
$z=GUICreate('',300,99)
GUISetOnEvent(-3,'Q')
$e=GUICtrlCreateEdit('',0,0,300,99,2097156)
GUISetState()
$y=GUICreate('',285,99,0,0,-2147483648,72,$z)
WinSetTrans($y,'',1)
GUISetOnEvent(-9,'A')
GUISetState()
While 1
Sleep(9)
WEnd
Func Q()
Exit
EndFunc
Func A()
Local $p=MouseGetPos(),$b,$a
ControlClick($z,'',$e,'left',2,$p[0],$p[1])
$a=StringRegExpReplace(ControlCommand($z,'',$e,'GetSelected',''),'[ \x27\.:",!?]','')
For $i=StringLen($a) To 1 Step -1
$b&=StringMid($a,$i,1)
Next
ControlClick($z,'',$e,'left',1,$p[0],$p[1])
ToolTip($b)
EndFunc---------------------------------------------
Gewinner im Juli ist:
eukalyptus
Natürlich trotzdem nochmal vielen Dank und Anerkennung an alle anderen Teilnehmer!
Walle -
- Offizieller Beitrag
Hi!
Danke auch von mir an alle Teilnehmer und an Waluev für's Auswerten und Organisieren. Ich bin ja immer ein Fan von superkurzem Code, daher besonderes Lob an progandy, auch wenn es noch minial kürzer gehen müsste:
[autoit]$g=GUICreate("")
[/autoit]
[autoit]
->GUICReate("")
[/autoit];).
Bis zur nächsten Ausgabe,
peethebee -
- Offizieller Beitrag
Erstmal: Herzlichen Glückwunsch an eukalyptus!
Waluev: Zu Punkt 1 bei meinem Script. Laut aktueller engl. Hilfedatei ist 'primary' bei ControlClick() durchaus als Maustaste erlaubt und wenn man mein Script mit AutoIt3.exe scriptname.au3 startet, dann funktioniert auch 'primary'. Lediglich der Aufruf aus Scite mittels AutoIt3Wrapper.exe gibt einen Fehler aus, warum auch immer...
Wollte ich nur anmerken, weil ich zu dem Zeitpunkt noch Notepadd++ mit dem obigen Aufruf verwendete und somit bei mir gar keine Fehlermeldung kam. Mittlerweile benutze ich aber auch Scite. -
- Offizieller Beitrag
Das war meine Korrekturquelle:
http://johannes.autoit.de/translation/show.php?id=139Evtl. hat sich da doch irgendwie eine alte AutoIt.exe eingeschlichen gehabt ;).
Aber für dich fixe ich doch gerne, Oscar :D.peethebee
-
Herzlichen Glückwunsch eukalyptus
-