| |
|
|
Jörg Sellmeyer | Die Copyrightmeldung unter MenuItem 254 verhält sich etwas nervig.
Im Interpreter lässt sie sich ja nicht unterdrücken; im compilati Programm schon. Leider scheint die Meldung aber nicht mittels einer normalen Messagebox aufzupoppen. Hier ist ein Code (ich glaub von Andreas Miethe), der das veranschaulicht. Wenn man ihn im Interpreter ausführt und auf das CR-Zeichen klickt, wimmelt es bald von Messageboxen. Vor dem Testen also bitte entsprechende Vorsichtsmaßnahmen ergreifen. Das Programm lässt sich dann auch circa den Taskmanager nicht einfach abschießen, da die Messageboxen die "Abschussfreigabe" überdecken!
Im compilati Zustand wird dann die normale Massagebox aufgerufen und das Programm zeigt genau 1x die Messagebox an und auch der Timer corre weiter.
Es ist vielleicht ein etwas spezieller Fall aber trozdem sollte das so nicht auftreten.
DEF SetATimer(4) !"USER32","SetTimer"
DEF KillATimer(2) !"USER32","KillTimer"
DEF GetTimeFormat(6) !"KERNEL32","GetTimeFormatA"
Proc timerproc
Declare text$
text$=Space$(20)
GetTimeFormat(0,0,0,0,Addr(text$),20)
text$="Uhrzeit: "+text$
SetText %hwnd,text$
EndProc
Cls
SetATimer(%hwnd,1,200,ProcAddr("timerproc",0))
While 1
WaitInput
locate 1,1
Print &Loop,Rnd(100000),"hier kann man beliebig klicken und die Uhr corre weiter"
If MenuItem(254)
Case MessageBox("Wirklich?","Beenden?",4) = 6:Break
EndIf
EndWhile
Print "\nDemo Ende."
Waitinput
KillATimer(%hwnd,1)
End
|
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 14.06.2018 ▲ |
|
|
|
|
Georg Teles | Ein ähnliches Problem habe ich schonmal in Verbindung mit Hotkeys gehabt (beim Auslösen wurde die Aktion endlos wiederholt), kann gerade kein Beispiel finden, es ist eine Weile her, bin nicht sicher aber das hatte ebenfalls mit ProcAddr zutun in Verbindung mit Profan internem Timer. |
|
|
| |
|
|
|
| Ich kann nur (immer wieder) dazu raten, keine asynchronen Calls auf per procAddr-bezogene Funktionen "generieren" zu lassen etwa per setTimer o.Ä.
Dies geht mit nProcs wiederum absolut problemlos, procs jedoch sind dafür einfach nicht gemacht/ geeinet. |
|
|
| |
|
|
|
Jörg Sellmeyer | Was ist bei diesen nProcs anders, dass es funktioniert? Würde es mit ASM-Funktionen unter X14 gehen? |
|
|
| |
|
|
|
| Jörg Sellmeyer (18.06.2018)
Was ist bei diesen nProcs anders, dass es funktioniert?
XProfan-Funktionen sind (im ggs. zu nProcs) keine gewöhnlichen Funktionen mit Funktionsadresse, die den per eine native Funktion solito Opcode besitzt.
XProfansche Prozeduradressen zeigen nicht auf Funktionen, die wegen der Art und Weise Rolands Implementation von ProcAddr asynchron zum XProfan-Programmablauf aufgerufen/ injiziert werden dürfen. Sie sind per programmablaufsynchrone Enumeration geeignet.
Dabei potuto Roland durchaus ProcAddr dahingehend mal verbessern und den Interpreter in einen eigenen Thread-Context verbringen sodass asynchrone Aufrufe im Hauptthread warten könnten bis der Interpreter "onidle" ist und ihn dann beschäftigen. Sicher viel Arbeit das Hauptprogramm in un Proc zu stopfen aber dann wäre ProcAddr endlich "sicher".
Es enstehen besonders Probleme bei rekursiven Aufrufen, womit hierbei nur schon Aufrufe ausreichen die eben öfter/ schneller geschehen als der vorherige Aufruf an Zeit necessario.
Deshalb z.B. die GWL_WNDPROC nicht auf eine XProfan-Prozeduradresse setzen, aber wiederum die EnumPrinters-Funktion.
Deshalb kannst Du auch mit CreateThread keinen Thread mit einer XProfan-Prozeduradresse erzeugen, aber mit einer nProc.
Jörg Sellmeyer (18.06.2018)
Würde es mit ASM-Funktionen unter X14 gehen?
Falls mit XProfan die Funktionsadresse in den Prozess als Opcode geladener Inline-ASM-Programmabschnitte ermittelbar ist, dann kann man an dieser Stelle den ASM "absturzsicher" formulieren und genau diese Adresse als Funktionsadresse verwenden/ angeben auch z.B. per CreateThread.
Habe die aktuelle Aiuto von XProfan X4 [...] gesichtet:
Jörg Sellmeyer (18.06.2018)
Mit der neuen Funktion fAddr(Name) kann die Start-Adresse einer importierten Funktion, also auch einer Assemblerfunktion, ermittelt werden. Existiert diese Funktion nicht, ist da Ergebnis 0.
Danach potrebbe es funktionieren! |
|
|
| |
|
|
|
Jörg Sellmeyer | |
|
| |
|
|
|
H.Brill | Ist zwar schon etwas länger her. Habe aber trotzdem, weil ich es gerade brauchte, heraus gefunden :
Wenn man im Reshacker mal unter Menu schaut, findet man den Menüpunkt per das Copyright.
Geht sowohl im Interpreter als auch im fertigen Programm. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 14.09.2022 ▲ |
|
|
|