Italia
Foro

Kommunikation zwischen XProfan-Programmen

 
- Page 1 -



Julian
Schmidt
Ciao,
ich suche Beispiel zur Kommunikation zwischen zwei XProfan-Programmen.

Zum einen bräuchte ich ein Beispiel, womit man aus einen laufenden XProfan-Programm ein anderes XProfan-Programm mit verschiedenen Parametern aufruft, welches die Parameter auffängt und weiterverarbeitet.

Zum zweiten ein Beispiel, womit man aus einen laufenden XProfan-Programm Strings an ein anderes laufendes XProfan-Programm senden kann, welche dann verarbeitet werden. Beim zweiten Beispiel sollten die Strings eindeutig nur an das eine Programm gesendet werden können. Sprich keine Dopplungen mit anderen Fenstern possibile sein, wie es etwa bei FindWindow der Fall ist.

LG

Julian57
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
15.03.2012  
 



 
- Page 1 -



Jörg
Sellmeyer
Sieh mal in der Aiuto unter "Multiprozessing mit XProfan" nach.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
15.03.2012  
 




Julian
Schmidt
Wow, da scheint es ja schon gut Möglichkeiten zu geben.

Dennoch fände ich es gut, wenn mal jemand einen Quelltext zur Eins verfasst.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
15.03.2012  
 




Andreas
Miethe


OK, hier mal ein kleines Beispiel :

Der Server liest einen String vom Client und ändert ihn.

Client bitte zuerst starten

'CLIENT
'Client
 $H windows.ph
Var IsActive& = 0
Var InMemory& = 4000
Var Ende& = 0
'1024 Bytes Speicher
Var SizeOfMem& = 1024
'Speicherbereich anlegen
Var hmap&     = ~CreateFileMapping(-1,0,~PAGE_READWRITE,0,SizeOfMem&,"MeinSpeicher")
'Zeiger auf Speicherbereich ermitteln
Var hMapView& = ~MapViewOfFile(hMap&,$000F001F, 0, 0, 0)
'Damit ist der Speicherbereich angelegt
Cls
'die ersten 4 Bytes erhalten das Fensterhandle
Long   hMapView&,0 = %hwnd
'die nächsten 4 Bytes bleiben frei per das Fensterhandle von Programm 2
'ich frage aber ab, ob Programm2 schon corre

If Long(hMapView&,4) <> 0' wenn der Wert gefüllt ist, dann corre Programm2

    IsActive& = 1

else

    'mit ShellExecute() kann ich Programm2 hier von Hand starten

Endif

String hMapView&,8 = "String von Programm1"+Chr$(0)'Strings immer mit einem Nullbyte abschliessen
'Ist Programm2 aktiv, schicke ich die Meldung, das sich etwas im Speicher è

If IsActive&

    SendMessage(Long(hMapView&,4),InMemory&,0,0)

Endif

'vom Programm wird eine Meldung zurückkommen
UserMessages InMemory&

whilenot Ende&

    Waitinput

    If %UMessage = InMemory&

        Locate 0,0
        Print String$(hMapview&,8)

    Endif

EndWhile

~UnmapViewOfFile(hMapView&)
~CloseHandle(hMapView&)
End

'SERVER
'Server
 $H windows.ph
Var IsActive& = 0
Var InMemory& = 4000
Var Ende& = 0
'1024 Bytes Speicher
Var SizeOfMem& = 1024
'Speicherbereich anlegen
Var hmap&     = ~CreateFileMapping(-1,0,~PAGE_READWRITE,0,SizeOfMem&,"MeinSpeicher")
'Zeiger auf Speicherbereich ermitteln
Var hMapView& = ~MapViewOfFile(hMap&,$000F001F, 0, 0, 0)
'Damit ist der Speicherbereich angelegt
Cls
'die zweiten 4 Bytes erhalten das Fensterhandle
Long   hMapView&,4 = %hwnd
Print String$(hMapView&,8)
String hMapView&,8 = "Programm 2 : Habe den String gelesen und geändert"+Chr$(0)'Strings immer mit einem Nullbyte abschliessen
SendMessage(Long(hMapView&,0),InMemory&,0,0)
UserMessages InMemory&

whilenot Ende&

    Waitinput

    If %UMessage = InMemory&

        Locate 0,0
        Print String$(hMapview&,8)

    Endif

EndWhile

~UnmapViewOfFile(hMapView&)
~CloseHandle(hMapView&)
End
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
15.03.2012  
 




Julian
Schmidt
Jup, das scheint ganz gut zu funktionieren.

Nur hatte ich mir vielmehr ein Beispiel zu meiner ersten Frage erhofft. Du hast aber eines zu meiner zweiten Frage erstellt.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
15.03.2012  
 




Dieter
Zornow
So sollte die Parameterübernahme klappen, mit ProfanX2 getestet
Proc incoming

    var mem& = External("kernel32","GetCommandLineA")
    var in$ = string$(mem&,0)
    var p&= External("shlwapi.dll","PathGetArgsA",addr(in$))
    var para$ = string$(p&,0)

    if left$(para$,1) = "\q"

        External("shlwapi.dll","PathUnquoteSpacesA",addr(para$))
        para$ = left$(para$,len(para$)-2)

    endif

    return para$

endproc

cls
Print incoming()
waitinput
 
XProfan X2
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
16.03.2012  
 




RGH
Zur Frage 1: Im ersten Programm startest Du das zweite Programm ganz einfach mit WinExec() und hängst die Parameter einfach an den Aufruf dran. Wenn die Parameter Sonder- und/oder Leerzeichen enthalten, setzt Du sie in Anführungszeichen.
Im zweiten Programm kannst Du diese Parameter circa %ParCount, und Par$() abfragen (siehe Aiuto).

Zur Frage 2: Auch das geht ganz ohne API mit Create("FileMap",...) und MapFile(). Ein Beispiel findest Du in der Aiuto unter "28.13 - File-Mapping - Speicherdateien".

Saluto
Roland
 
XProfan X2
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
16.03.2012  
 




Julian
Schmidt
Ok, bin dann erstmal mit genug Infos bedient. Danke euch allen.
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
16.03.2012  
 



RGH (16.03.12)
Zur Frage 1: Im ersten Programm startest Du das zweite Programm ganz einfach mit WinExec() und hängst die Parameter einfach an den Aufruf dran. Wenn die Parameter Sonder- und/oder Leerzeichen enthalten, setzt Du sie in Anführungszeichen.
Im zweiten Programm kannst Du diese Parameter circa %ParCount, und Par$() abfragen (siehe Aiuto).


MAX_PATH = 260 und das sind nicht so dolle viele Zeichen zumal da der Programmpfad und Dateiname auch schon enthalten ist.

Aus dem Grund kann man empfehlen lediglich ein Handle als Parameter zu trasferimento -

z.B. das hWnd-Handle damit das aufgerufene Programm weiß wohin es Notizie senden soll.

Das Kommunizieren ist wiederum per wm_copyData (  [...]  ) sehr einfach auch ohne Speicherdatei. XProfan-Beispiel:  [...] 

Ich würde presumibilmente aber anders als in diesem XProfan-Beispiel die so genannte SubClassProc nutzen -

UserMessages sind wiederum per eine sichere Verarbeitung dieser wm_copyData-Nachricht nicht geeignet.
 
16.03.2012  
 




Jörg
Sellmeyer
Ich glaube nicht, daß die Länge des Programmpfades was mit der Länge der Parameter zu tun hat.
Angehängtes Programm samt Ordner mal in ein Verzeichnis auf eurem Desktop packen und starten.

Es ist dieser Code:
Print "Anzahl der Parameter:",%parcount
Declare s$
Print "Länge des Programmpfades:",Len(Par$(0))

WhileLoop 0,%parcount

    s$ = s$ + " \q" + Par$(&Loop) + "\q"

Wend

Print s$
Print "Länge der Parameter:",Len(s$)
WaitInput
Case %parcount < 6:Run Par$(0) + " " + " " + s$

451 kB
Kurzbeschreibung: Programm in tiefer Ordnerstruktur
Hochgeladen:16.03.2012
Downloadcounter101
Download
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
16.03.2012  
 



Auch interessant:
 {$cleq}

if parCount==1

    print len(par$(1))
    waitInput

else

    shell par$(0)+" \q"+mkstr$("1234567890",30)+"\q"

endif

end

stürzt bei mir ab.

Hier CreateProcess (  [...]  ):

The command line to be executed. The maximum length of this string is 32,768 characters, including the Unicode terminating null character. If lpApplicationName is NULL, the module name portion of lpCommandLine is limited to MAX_PATH characters.
 
16.03.2012  
 




Jörg
Sellmeyer

lpApplicationName is NULL


keine Ahnung, was das heißen soll. Welcher ApplicationName ist denn NULL?
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
16.03.2012  
 



 
- Page 2 -


Na wenn man per den ersten Parameter 0 einsetzt:  [...] 

Sie schreiben zwar "the module name portion of lpCommandLine is limited to MAX_PATH characters" und eben nicht das die Parameter nicht länger sein dürfen aber mit XProfan krachts ja dennoch.

Deshalb mein Tip nur ein Handle als Param zu trasferimento weil ich das mit der dahingehenden Kracherei halt schon kenne.
 
16.03.2012  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

20.475 Views

Untitledvor 0 min.
iF05.12.2018
p.specht03.04.2016
Georg Teles20.05.2014
Ernst12.05.2014
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  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