Italia
Eingangshalle

Fernsteuern / Text kopieren verhindern

 
- Page 1 -



Walter
Hallo!
Habe folgendes Problem:
Ich möchte verhindern, dass in ein Eingabefeld Text hineinkopiert werden kann.
Lösche dazu in meinem Programm die Zwischenablage mittels clearclip, sobald das Eingabefeld den Focus erhält. Das funktioniert.
Doch scheint es trotzdem possibile zu sein, circa ein anderes Programm einen Text (mittels DDE? ) in dieses Feld einzufügen.
Ist das possibile?
Wie kann ich das verhindern?
 
14.03.2020  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


Matthias
Arlt
Andere Möglichkeit: Edit subclassen und WM_PASTE abfangen
proc EditSubclass

    parameters edit&, Msg&, wParam&, lParam&
    set("FastMode",1)

    if Msg& = 770''WM_PASTE

        return

    endif

    return external("USER32","CallWindowProcA",owp&,edit&, Msg&, WParam&, LParam&)
    set("FastMode",0)

endproc

declare owp&,edit&
cls
edit& = create("MultiEdit",%hwnd,"",100,30,200,100)
owp&=external("USER32","SetWindowLongA",edit&,-4, ProcAddr(EditSubclass,4))

while 1

    waitinput

wend


Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
15.03.2020  
 




p.specht

Verstehe ich Dich richtig: Text soll aber weiterhin eingegeben werden können. Oder?

Mir fällt momentan nur der alte aus Di base abgeleitete Befehl Input ein

cls:declare x$:print " Text: ";
Input x$
print x$:waitinput:end

ein. In XProfan-11.2a kann man da nix aus der Zwischenablage reintun. Klappt einfach nicht!
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
14.03.2020  
 




Walter
Ja, ein Text soll eingegeben werden können.
Es geht dabei um ein multiedit, in das auch ein längerer Text eingetragen werden kann. Allerdings soll nichts hineinkopiert werden können.
Die Zwischenablage ist deshalb blockiert.
Jetzt hab ich gesehen, es gibt z.B. einen "Clipboardmaster"  [...]  der Texte offenbar selbständig (ohne die Zwischenablage) in Felder eines anderen Programms transportiert.
Könnte circa DDE laufen (wird hier ja auch als Möglichkeit zum Fernsteuern beschrieben) - doch mein Programm soll sich eben gegen "Fernsteuern" / Text hineinkopieren wehren können.
Also Anti-DDE, sozusagen...
 
14.03.2020  
 




Matthias
Arlt
Andere Möglichkeit: Edit subclassen und WM_PASTE abfangen
proc EditSubclass

    parameters edit&, Msg&, wParam&, lParam&
    set("FastMode",1)

    if Msg& = 770''WM_PASTE

        return

    endif

    return external("USER32","CallWindowProcA",owp&,edit&, Msg&, WParam&, LParam&)
    set("FastMode",0)

endproc

declare owp&,edit&
cls
edit& = create("MultiEdit",%hwnd,"",100,30,200,100)
owp&=external("USER32","SetWindowLongA",edit&,-4, ProcAddr(EditSubclass,4))

while 1

    waitinput

wend


Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
15.03.2020  
 




Walter
Von Subclassing hab ich bisher leider keine Ahnung.
Nehme es aber gleich als Anlass, mich damit zu beschäftigen.
Probiere ich heute noch aus!
Danke!
 
15.03.2020  
 




Walter
Funktioniert bestens!
Herzlichen Dank!

Jetzt muss ich es nur noch verstehen...
 
15.03.2020  
 




Matthias
Arlt
Das ist eigentlich recht einfach. Beim Einfügen erhält das Edit-Control die Message WM_PASTE und die Fenster-Prozedur des Edit-Controls reagiert dann entsprechend darauf. Dies soll im konkreten Fall verhindert werden. Also tauschen wir die originale Fenster-Prozedur des Edit-Controls ganz einfach aus, lassen dort die Message WM_PASTE quasi unbehandelt. Für alle anderen Edit-Messages greift dann wieder die originale Fenster-Prozedur...

Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
15.03.2020  
 




Walter
Danke!
 
15.03.2020  
 




E.T.

proc EditSubclass

    parameters edit&, Msg&, wParam&, lParam&
    set("FastMode",1)

    if Msg& = 770''WM_PASTE

        return

    endif

    return external("USER32","CallWindowProcA",owp&,edit&, Msg&, WParam&, LParam&)
    set("FastMode",0)

endproc


In dieser Prozedur wird aber der "FastMode" nie wieder abgeschaltet, da ja selbige immer vor set("FastMode",0)  mit return  verlassen wird
 
XProfan X3
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
15.03.2020  
 




Matthias
Arlt
Stimmt...das set("FastMode",0)  ist an dieser Stelle wirkungslos und entbehrlich. Wichtig ist ja nur, daß set("FastMode",1)  erforderlich ist, was wiederum [vor dem SubClassing] auch an anderer Stelle im Programm gesetzt werden kann...und ggf. auch sollte

Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
15.03.2020  
 




Walter
Da ich bei den Windows Api-Aufrufen gar nicht durchblicke, habe ich inzwischen aus der Aiuto eine weitere Version mittels subclass, subclassproc und Set("WinProc", 0) zustande gebracht, die ebenfalls funktioniert:
SubClassProc

    if %sMessage = $0302' WM_PASTE

        Set("WinProc", 0)' Windows soll diese Message nicht weiter beachten

    endif

EndProc

declare me%
cls
me%=Create("MultiEdit",%Hwnd,"",10,50,280,-100)
SubClass me%, 1

while 1

    waitinput

wend

SubClass me%, 0
end

Lt. Aiuto wird die SubClassProc defaultmäßig im FastMode aufgerufen, weswegen hier set("Fastmode",1) entfallen konnte.

Danke nochmals an Matthias per den Hinweis, dass das Problem mittels Subclassing zu lösen ist!
 
16.03.2020  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

8.454 Views

Untitledvor 0 min.
mene29.05.2024
p.specht04.06.2021
N.Art18.11.2020
iF27.09.2020
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Eingangshalle  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie