Français
Source/ Codesnippets

Copydata communication Prozessen Wmcopydata

 

R.Schneider
allô

deux Programme tauschen données per WM_COPYDATA aus. simple un Programme erstellen et ensuite, um cela zweite Programme trop erstellen, qui trois markierten Zeilen im Voir le texte source par qui auskommentierten Zeilen ersetzen. qui Text im Éditer erscheint pour drücken des Sende-Buttons im Éditer des anderen Programms.
Ab Profan 8 à cause de ProcAddr()

peut-être peux es oui quelqu'un brauchen.
Def CopyMemory(3) !KERNEL32,RtlMoveMemory
 $H Structs.ph
 $H Messages.ph
 $H Windows.ph
Déclarer Ende%, SendeBtn&, EndeBtn&, Edit&
Déclarer Groesse&, Text$, ProgHndl&, AltProc&
Déclarer CopyData#, EigeneDaten#
Struct SCopyData = ~COPYDATASTRUCT
Faible CopyData#, SCopyData
Fenêtre Style 538
Titre de la fenêtre Programme1//> Pour Programme 2 cet Zeilen entfernen
Fenêtre Int(%MaxX / 2 - 200),Int(%MaxY / 2 - 100)-195,100//>
Titre de la fenêtre Programme2//< et cet Zeilen insérer
Fenêtre Int(%MaxX / 2 + 5),Int(%MaxY / 2 - 100)-195,100
Set(FastMode,1)
EndeBtn& = Créer(Button,%hWnd,finissons,105,50,70,20)
SendeBtn& = Créer(Button,%hWnd,Senden,15,50,70,20)
Edit& = Créer(Éditer, %hWnd, , 10, 15, 170, 24)

Proc Senden

    Paramètres nouvelle$

    With CopyData#

        .dwData& = 0
        .cbData& = SizeOf(nouvelle$)
        .lpData& = Addr(nouvelle$)

    EndWith

    SendMessage(ProgHndl&,~WM_COPYDATA,%hWnd,Addr(CopyData#))

ENDPROC

Proc WndProc

    parameters wnd&, msg&, wparam&, lparam&

    Si msg&=~WM_COPYDATA

        CopyMemory(CopyData#,lparam&,12)
        Groesse& = CopyData#.cbData&
        Faible EigeneDaten#, Groesse&
        CopyMemory(EigeneDaten#,CopyData#.lpData&,Groesse&)
        Text$ = String$(EigeneDaten#,0)
        Dispose EigeneDaten#

    EndIf

    return call(AltProc&,wnd&,msg&,wparam&,lparam&)

ENDPROC

AltProc&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr(WndProc,4))

Tandis que 1

    ProgHndl&=FindWindow(Programme2)//> Pour Programme 2 cet la ligne entfernen
    ProgHndl&=FindWindow(Programme1)//< et cet la ligne insérer
    Cas ProgHndl&: Pause
    Sleep 100

Endwhile

Usermessages ~WM_COPYDATA

WhileNot Ende%

    WaitInput

    Si %Key = 2

        Laisser Ende% = 1

    ElseIf GetFocus(EndeBtn&)

        Laisser Ende% = 1

    ElseIf GetFocus(SendeBtn&)

        Senden GetText $(Edit&)

    ElseIf %umessage=~WM_COPYDATA

        SetText Edit&, Text$

    Endif

Endwhile

Dispose CopyData#
Fin

Rudger
 
Perbody is nofect !
06.04.2007  
 




p.specht

justement erfolgreich ausprobiert avec den nachfolgenden beiden Programmen (INCLUDE-Pfad anpassen!). mais: Beim Senden qui nouvelle "test" etc. klappt alles. Beim senden de "testikel" à PROGRAMM2 venez mais "testikelG" à. quoi fais je faux?

PROGRAMM1:
'INTER-PROGRAMM KOMMUNIKATION
'by Rudger Schneider, 06.04.2007
'deux Programme tauschen données per WM_COPYDATA aus. simple un Programme erstellen et ensuite,
'um cela zweite Programme trop erstellen, qui trois markierten Zeilen im Voir le texte source par qui
'auskommentierten Zeilen ersetzen. qui Text im Éditer erscheint pour drücken des Sende-Buttons
'im Éditer des anderen Programms. Ab Profan 8 à cause de ProcAddr()
'"Vielleicht peux es oui quelqu'un brauchen".
'((Vkejjb))-Grant by Rudger Schneider, 06.04.2007 sur Xprofan.net
Def CopyMemory(3) !"KERNEL32","RtlMoveMemory"
 $H C:\Program Files (x86)\XProfan11\INCLUDE\Structs.ph
 $H C:\Program Files (x86)\XProfan11\INCLUDE\Messages.ph
 $H C:\Program Files (x86)\XProfan11\INCLUDE\Windows.ph
Déclarer Ende%, SendeBtn&, EndeBtn&, Edit&
Déclarer Groesse&, Text$, ProgHndl&, AltProc&
Déclarer CopyData#, EigeneDaten#
Struct SCopyData = ~COPYDATASTRUCT
Faible CopyData#, SCopyData
Fenêtre Style 538
Titre de la fenêtre "PROGRAMM1"//> Pour Programme 2 cet Zeilen entfernen
Fenêtre Int(%MaxX / 2 - 200),Int(%MaxY / 2 - 100)-195,100//>
'Titre de la fenêtre "PROGRAMM2" //< et cet Zeilen insérer
'Fenêtre Int(%MaxX / 2 + 5),Int(%MaxY / 2 - 100)-195,100
Set("Fastmode",1)
EndeBtn& = Créer("Button",%hWnd,"Beenden",105,50,70,20)
SendeBtn& = Créer("Button",%hWnd,"Senden",15,50,70,20)
Edit& = Créer("Edit", %hWnd,», 10, 15, 170, 24)

Proc Senden

    Paramètres nouvelle$

    With CopyData#

        .dwData& = 0
        .cbData& = SizeOf(nouvelle$)
        .lpData& = Addr(nouvelle$)

    EndWith

    SendMessage(ProgHndl&,~WM_COPYDATA,%hWnd,Addr(CopyData#))

ENDPROC

Proc WndProc

    parameters wnd&, msg&, wparam&, lparam&

    Si msg&=~WM_COPYDATA

        CopyMemory(CopyData#,lparam&,12)
        Groesse& = CopyData#.cbData&
        Faible EigeneDaten#, Groesse&
        CopyMemory(EigeneDaten#,CopyData#.lpData&,Groesse&)
        Text$ = String$(EigeneDaten#,0)
        Dispose EigeneDaten#

    EndIf

    return call(AltProc&,wnd&,msg&,wparam&,lparam&)

ENDPROC

AltProc&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr("WndProc",4))

Tandis que 1

    ProgHndl&=FindWindow("PROGRAMM2")//> Pour Programme 2 cet la ligne entfernen
    //ProgHndl&=FindWindow("PROGRAMM1")//< et cet la ligne insérer
    Cas ProgHndl&: Pause
    Sleep 100

Endwhile

Usermessages ~WM_COPYDATA

WhileNot Ende%

    WaitInput

    Si %Key = 2

        Laisser Ende% = 1

    ElseIf GetFocus(EndeBtn&)

        Laisser Ende% = 1

    ElseIf GetFocus(SendeBtn&)

        Senden GetText $(Edit&)

    ElseIf %umessage=~WM_COPYDATA

        SetText Edit&, Text$

    Endif

Endwhile

Dispose CopyData#
Fin

PROGRAMM2:
'INTER-PROGRAMM KOMMUNIKATION
'by Rudger Schneider, 06.04.2007
'deux Programme tauschen données per WM_COPYDATA aus. simple un Programme erstellen et ensuite,
'um cela zweite Programme trop erstellen, qui trois markierten Zeilen im Voir le texte source par qui
'auskommentierten Zeilen ersetzen. qui Text im Éditer erscheint pour drücken des Sende-Buttons
'im Éditer des anderen Programms. Ab Profan 8 à cause de ProcAddr()
'"Vielleicht peux es oui quelqu'un brauchen".
'((Vkejjb))-Grant by Rudger Schneider, 06.04.2007 sur Xprofan.net
Def CopyMemory(3) !"KERNEL32","RtlMoveMemory"
 $H C:\Program Files (x86)\XProfan11\INCLUDE\Structs.ph
 $H C:\Program Files (x86)\XProfan11\INCLUDE\Messages.ph
 $H C:\Program Files (x86)\XProfan11\INCLUDE\Windows.ph
Déclarer Ende%, SendeBtn&, EndeBtn&, Edit&
Déclarer Groesse&, Text$, ProgHndl&, AltProc&
Déclarer CopyData#, EigeneDaten#
Struct SCopyData = ~COPYDATASTRUCT
Faible CopyData#, SCopyData
Fenêtre Style 538
'Titre de la fenêtre "PROGRAMM1" //> Pour Programme 2 cet Zeilen entfernen
'Fenêtre Int(%MaxX / 2 - 200),Int(%MaxY / 2 - 100)-195,100//>
Titre de la fenêtre "PROGRAMM2"//< et cet Zeilen insérer
Fenêtre Int(%MaxX / 2 + 5),Int(%MaxY / 2 - 100)-195,100
Set("Fastmode",1)
EndeBtn& = Créer("Button",%hWnd,"Beenden",105,50,70,20)
SendeBtn& = Créer("Button",%hWnd,"Senden",15,50,70,20)
Edit& = Créer("Edit", %hWnd,», 10, 15, 170, 24)

Proc Senden

    Paramètres nouvelle$

    With CopyData#

        .dwData& = 0
        .cbData& = SizeOf(nouvelle$)
        .lpData& = Addr(nouvelle$)

    EndWith

    SendMessage(ProgHndl&,~WM_COPYDATA,%hWnd,Addr(CopyData#))

ENDPROC

Proc WndProc

    parameters wnd&, msg&, wparam&, lparam&

    Si msg&=~WM_COPYDATA

        CopyMemory(CopyData#,lparam&,12)
        Groesse& = CopyData#.cbData&
        Faible EigeneDaten#, Groesse&
        CopyMemory(EigeneDaten#,CopyData#.lpData&,Groesse&)
        Text$ = String$(EigeneDaten#,0)
        Dispose EigeneDaten#

    EndIf

    return call(AltProc&,wnd&,msg&,wparam&,lparam&)

ENDPROC

AltProc&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr("WndProc",4))

Tandis que 1

    'ProgHndl&=FindWindow("PROGRAMM2")//> Pour Programme 2 cet la ligne entfernen
    ProgHndl&=FindWindow("PROGRAMM1")//< et cet la ligne insérer
    Cas ProgHndl&: Pause
    Sleep 100

Endwhile

Usermessages ~WM_COPYDATA

WhileNot Ende%

    WaitInput

    Si %Key = 2

        Laisser Ende% = 1

    ElseIf GetFocus(EndeBtn&)

        Laisser Ende% = 1

    ElseIf GetFocus(SendeBtn&)

        Senden GetText $(Edit&)

    ElseIf %umessage=~WM_COPYDATA

        SetText Edit&, Text$

    Endif

Endwhile

Dispose CopyData#
Fin
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
27.11.2018  
 



SetWindowLong GWL_WNDPROC sur une Proc (statt mind. nProc) ist définitif un Problem - "verstärkend" jusqu'à hin trop "fahrlässig".

ici zwar (seulement) im Zusammenhang avec Utilisateur Messages versucht trop behandeln:  [...] 


Autor: David Strutz (---.dip0.t-ipconnect.de)
date: 27.04.16 19:20

Utilisateur Messages dürften malheureusement pour wm_copydata garnicht verwendet
volonté weil qui Adresse derrière dem grenier pas plus sûrement ist,
weil Utilisateur Messages jadis empfangen wurden bevor vous (asynchron)
aus WaitInput heraus leiten et qui Sender den allozierten grenier
(lparam) pas unmöglich mittlerweile anderweitig verwendet.

après bleibt ensuite datensicherer réception dans einer subclassproc,
qui wiederum peux cependant Aussetzer avons et es könnten par-dessus
wm_copydata Nouvelles übersehen volonté.

après bleibt ensuite alors seulement une eigene wProc, cet wiederum
devrait ensuite mais aussi une nProc son là qui App sonst jederzeit
abstürzen pourrait weil ProcAddr sur une XProfan-Proc malheureusement seulement pour
Enumeration statt aussi pour APCs verwendet volonté darf.

IMHO allez sicheres wm_copydata-Empfangen avec XProfan ensuite dans
liaison avec einer nProc comme wndProc.

@Roland: je suis pas sûrement si je toi bereits gefragt hatte, si
Du chez qui wm_copydata-nouvelle dans Deiner "default" wProc
(sei es qui pour hWnd) pas une Ausnahme régulariser könntest
sodass qui grenier derrière lParam aussi wirklich zur Disposition
steht et sûrement trop empfangen ist aussi sans nProcs-Workaround.

Es wäre aussi entier simple trop realisieren rein seulement avec 1 weiterem
grenier zur Laufzeit là seulement 1 Fil: venez wm_copydata,
ensuite wird qui grenier (re-)dimensioniert et qui le contenu aus
lparam kopiert, et zuletzt, lparam sur qui Adresse des
eigenen Mémoire mettons.

wm_copydata ist une qui wertvollsten Messages.

XProfan & FreeProfan rox:  [...] 

nouvelle bearbeitet (27.04.16 19:27)


après la fois essayer une nProc "wnd_proc" trop verwenden.
//Hauptfenster Subclassing
declare owp&
cls
owp&=setWindowLong(hWnd,gwl_wndProc,procaddr(hWnd.wndProc,4))
waitinput
end

nProc hWnd.wndProc

    Paramètres wnd&,msg&,wp&,lp&
    global owp&
    return callWindowProc(owp&,wnd&,msg&,wp&,lp&)

endproc


avec cela wären mögliche Speicherlecks zumindest eingebannt.
 
05.12.2018  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

7.106 Views

Untitledvor 0 min.
H.Brill17.10.2022
Stefan8102.01.2020
Pedro Miguel26.05.2019
Michael Borowiak07.03.2019
plus...

Themeninformationen

cet Thema hat 3 participant:

iF (1x)
p.specht (1x)
R.Schneider (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie