MailSlot - Nachrichten im Netzwerk verschicken

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

MailSlot - Nachrichten im Netzwerk verschicken

Beitrag von mk-soft »

Wenn mal Net Send vom Admin gesperrt ist, hier ein kleines Beispielprogramm zum senden von Nachrichten.
Habe ich noch nicht mit mehreren Rechnern getestet.

Code: Alles auswählen

;-Top
; Kommentar    : MailSlot
; Author       : mk-soft
; Erstellt am  : 18.03.2006
; Geändert am  : 08.08.2006

Global *buffer
*buffer = AllocateMemory(2048)

; ---------------------------------------------------------

Procedure.l MakeSlot(Name.s)
  
  ProcedureReturn CreateMailslot_("\\.\mailslot\" + Name, 2048, #MAILSLOT_WAIT_FOREVER, #Null)
  
EndProcedure

; ---------------------------------------------------------

Procedure ReadSlot(hSlot.l)

  result = GetMailslotInfo_(hSlot, @lpMaxMessageSize, @lpNextSize.l, @lpMessageCount.l, 0)
  If result <> 0
    If lpNextSize >= 0
      ReadFile_(hSlot, *buffer, lpNextSize, @lpNumberOfBytesRead, 0)
      AddGadgetItem(0, -1, PeekS(*buffer,lpNumberOfBytesRead))
    EndIf
  EndIf
  
EndProcedure

; ---------------------------------------------------------

Procedure WriteSlot(Von.s, Text.s)

  Name.s = StringField(text, 1, " ")
  Send.s = Von + ": " + Right(text, Len(text) - Len(name) - 1)
  
  If OpenFile(0, "\\*\mailslot\" + Name)
    WriteString(0, Send)
    CloseFile(0)
  EndIf

EndProcedure

; ---------------------------------------------------------

handle = 0

Name.s = InputRequester("Startup MailSlot", "Dein Name", "Name")
If Name = ""
  End
EndIf

If OpenWindow(0,20,20,300,200,"MailSlot - " + Name)

  CreateGadgetList(WindowID(0))
    ListViewGadget(0, 0, 0, 300, 170) 
    StringGadget(1, 4, 172, 290, 24, "Name Nachricht")
    
  handle = MakeSlot(Name)
  If handle = #INVALID_HANDLE_VALUE    
    Debug "Fehler beim anlegen von Mail Slot"
    End
  EndIf

  AddKeyboardShortcut(0, #PB_Shortcut_Return, 13)
  SetActiveGadget(1)
  
  exit = 0
  Repeat
    event = WindowEvent()
    gadget = EventGadget()
    type = EventType()
    menu = EventMenu()
     
    ReadSlot(handle)
    
    Select event
      
      Case #PB_Event_CloseWindow
        CloseHandle_(handle)
        exit = 1
      
      Case #PB_Event_Menu         
        If menu = 13
          WriteSlot(Name, GetGadgetText(1))
          SetGadgetText(1, "")
        EndIf
         
      Case 0
        Delay(10)
      
    EndSelect
    
  Until exit
  
EndIf
FF :allright:

Update PB4
- Name im Fenstertitel
Zuletzt geändert von mk-soft am 08.08.2006 21:41, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kyoko12
Beiträge: 45
Registriert: 22.11.2004 20:56

Beitrag von Kyoko12 »

Hi <)

Also wenn ich das Ausführen will, kommen Massenweiße Fehler?? Ist das Code für PB 4??

mfg,
Maximilian Mayerl
Hallo, ich bin eine Sig...(ENDE DER DEMOVERSION, BITTE VOLLVERSION KAUFEN!)

PB 3.92
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Kurzer Blick:

Code: Alles auswählen

gadget = EventGadget()
JA, ist es.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Das WindowEvent() vielleicht tauschen gegen:WaitWindowEvent(10)
und Delay entfernen.
Das Arbeitet laut Aussage von Freak Systemkonformer.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Code für 3.94, Bug korrigiert:

Code: Alles auswählen

;-Top
; Kommentar    : MailSlot
; Author       : mk-soft
; Erstellt am  : 18.03.2006
; Geändert am  :

Global *buffer
*buffer = AllocateMemory(2048)

; ---------------------------------------------------------

Procedure.l MakeSlot(Name.s)
 
  ProcedureReturn CreateMailslot_("\\.\mailslot\" + Name, 2048, #MAILSLOT_WAIT_FOREVER, #Null)
 
EndProcedure

; ---------------------------------------------------------

Procedure ReadSlot(hSlot.l)

  result = GetMailslotInfo_(hSlot, @lpMaxMessageSize, @lpNextSize.l, @lpMessageCount.l, 0)
  If result <> 0
    If lpNextSize >= 0
    PokeS(*buffer,Space(1023),1024)
      ReadFile_(hSlot, *buffer, lpNextSize, @lpNumberOfBytesRead, 0)
      AddGadgetItem(0, -1, PeekS(*buffer))
    EndIf
  EndIf
 
EndProcedure

; ---------------------------------------------------------

Procedure WriteSlot(Von.s, Text.s)

  Name.s = StringField(text, 1, " ")
  Send.s = Von + ": " + Right(text, Len(text) - Len(name) - 1)
 
  If OpenFile(0, "\\*\mailslot\" + Name)
    WriteString( Send)
    CloseFile(0)
  EndIf

EndProcedure

; ---------------------------------------------------------

handle = 0

Name.s = InputRequester("Startup MailSlot", "Dein Name", "Name")
If Name = ""
  End
EndIf
Name.s=ReplaceString(name.s," ","_")

If OpenWindow(0,20,20,300,200,#PB_Window_SystemMenu,"MailSlot")

  CreateGadgetList(WindowID(0))
    ListViewGadget(0, 0, 0, 300, 170)
    StringGadget(1, 4, 172, 290, 24, "Name Nachricht")
   
  handle = MakeSlot(Name)
  If handle = #INVALID_HANDLE_VALUE   
    Debug "Fehler beim anlegen von Mail Slot"
    End
  EndIf

  AddKeyboardShortcut(0, #PB_Shortcut_Return, 13)
  ActivateGadget(1)
 
  exit = 0
  Repeat
    event = WindowEvent()
    gadget = EventGadgetID()
    type = EventType()
    menu = EventMenuID()
     
    ReadSlot(handle)
   
    Select event
     
      Case #PB_Event_CloseWindow
        CloseHandle_(handle)
        exit = 1
     
      Case #PB_Event_Menu         
        If menu = 13
          WriteSlot(Name, GetGadgetText(1))
          SetGadgetText(1, "")
        EndIf
         
      Case 0
        Delay(10)
     
    EndSelect
   
  Until exit
 
EndIf
Der Bug ist, das du den Nachrichtenbuffer nicht löscht, was zu folgenden führt:

macros: Und Klappt es?
****: Ja, es funktioniert
macros:gut Klappt es?
***:Was meinstetioniert
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Noch ein kleinen Nachtrag zu WriteSlot()

"\\.\mailslot\name" Retrieves a client handle to a local mailslot.
"\\computername\mailslot\name" Retrieves a client handle to a remote mailslot.
"\\domainname\mailslot\name" Retrieves a client handle to all mailslots with the specified name in the specified domain.
"\\*\mailslot\name" Retrieves a client handle to all mailslots with the specified name in the system's primary domain.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Meinen Beitrag gelesen?
Du hast einen Fehler.
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Meinst du Poke(*buffer, ...) was du eingefügt hast.

Das habe ich gelesen und eingeflegt

?? :|
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten