Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Net Send über VB
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 19.02.2009, 18:08    Titel: Net Send über VB Antworten mit Zitat

Hallo Leute,

Ich wollte mal zu Testzwecken ein NetSend-System bei mir zu Hause einrichten.
Da ich aber kein ein Fan vom shell-Befehl bin, habe ich nach einer Alternative gesucht. Mir ist da ein VB-Code bzw. Api-Befehl in die Häde gefallen:
NetMessageBufferSend
http://msdn.microsoft.com/de-de/library/bb979101.aspx

Kann ich das auch irgendwie unter FreeBasic nutzbar machen? - Denn eigentlich wollte ich nur die FB-Bortmittel verwenden. zwinkern
Mir will das nicht so recht gelingen. Mag vielleicht daran liegen, dass ich nicht so die Ahnung von VB oder der Win-Api habe.

Könnt ihr mir da helfen?

MfG Type
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 19.02.2009, 18:28    Titel: Antworten mit Zitat

Was funktioniert denn nicht? Die FB- und VB-Syntax ist nahezu identisch, so schwierig sollte das doch nicht sein. Und was willst du mit FB-Bordmitteln lösen? FB hat keinen eingebauten Net Send-Client. Zunge rausstrecken
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 19.02.2009, 18:37    Titel: Antworten mit Zitat

Hallo,

Code:
#INCLUDE "windows.bi"

DECLARE FUNCTION NetMessageBufferSend(servername AS STRING,msgname AS STRING, fromname AS STRING,buf AS STRING, buflen AS LONG)

PRINT NetMessageBufferSend ("", "rechner", "Hugo", "TEXT", 8)
'Zeichen = 2 Byte

So sieht mein Code bis jetzt aus. Nur funktioniert er leider nicht.
Der Compiler wirft folgenden Fehler aus:
Zitat:
compiling: E:\FreeBASIC\netsend\send.bas -o E:\FreeBASIC\netsend\send.asm
assembling: E:\FREEBA~1\FREEBA~1\bin\win32\as.exe --32 --strip-local-absolute "E:\FreeBASIC\netsend\send.asm" -o "E:\FreeBASIC\netsend\send.o"
linking: -T "E:\FREEBA~1\FREEBA~1\lib\win32\i386pe.x" -subsystem console -s --stack 1048576,1048576 -L "E:\FREEBA~1\FREEBA~1\lib\win32" -L "./" "E:\FREEBA~1\FREEBA~1\lib\win32\crt2.o" "E:\FREEBA~1\FREEBA~1\lib\win32\crtbegin.o" "E:\FreeBASIC\netsend\send.o" -o "E:\FreeBASIC\netsend\send.exe" -( -lkernel32 -lgdi32 -luser32 -lversion -ladvapi32 -lfb -lgcc -lmsvcrt -lmingw32 -lmingwex -lmoldname -lsupc++ "E:\FREEBA~1\FREEBA~1\lib\win32\fbrt0.o" -) "E:\FREEBA~1\FREEBA~1\lib\win32\crtend.o"


Leider kann ich damit nich viel anfangen. Ich glaube auch irgendwie nicht, dass es so einfach ist...

MfG Type
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 19.02.2009, 18:52    Titel: Antworten mit Zitat

wo kriegst du denn so eine meldung her O_o

Zitat:
FbTemp.bas(3) error 136: Default types or suffixes are only valid in -lang deprecated or fblite or qb in 'DECLARE FUNCTION NetMessageBufferSend(servername AS STRING,msgname AS STRING, fromname AS STRING,buf AS STRING, buflen AS LONG)'

okay, lässt sich noch leicht beheben. neuer versuch:

Zitat:
FbTemp.o:fake:(.text+0xdc): undefined reference to `NETMESSAGEBUFFERSEND@20'

die Funktion existiert also nicht in der passenden .dll.a-Datei von freebasic, die müsste wohl aktualisiert werden?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 19.02.2009, 19:04    Titel: Antworten mit Zitat

Das heißt FreeBasic kann ich dafür momentan vergessen?

Gibt's da keine Alternative? (Jetz mal abgesehen von shell)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 19.02.2009, 19:07    Titel: Antworten mit Zitat

Schau Win-API Befehle lieber auf der englischen Seite an, da steht wenigstens, welche Header nötig sind: http://msdn.microsoft.com/en-us/library/aa370605.aspx

Der benötigte Header ist bei FreeBASIC nicht dabei, soweit ich das gesehen hab. Musst dir halt die Header-Datei besorgen und SWIG FB benutzen.


Der Fehler mit der Funktion liegt daran, dass der Typ der Rückgabe der Funktion auch angegeben werden muss, also
Code:
DECLARE FUNCTION NetMessageBufferSend(servername AS STRING,msgname AS STRING, fromname AS STRING,buf AS STRING, buflen AS LONG) AS INTEGER
oder so.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 19.02.2009, 19:46    Titel: Antworten mit Zitat

Also das
MOD hat Folgendes geschrieben:
Code:
DECLARE FUNCTION NetMessageBufferSend(servername AS STRING,msgname AS STRING, fromname AS STRING,buf AS STRING, buflen AS LONG) AS INTEGER

hat mir zwar eingeleuchtet, aber nix gebracht...
Ich habe folgende Fehlermeldung bekommen:
Zitat:
compiling: E:\FreeBASIC\netsend\send.bas -o E:\FreeBASIC\netsend\send.asm
assembling: E:\FREEBA~1\FREEBA~1\bin\win32\as.exe --32 --strip-local-absolute "E:\FreeBASIC\netsend\send.asm" -o "E:\FreeBASIC\netsend\send.o"
linking: -T "E:\FREEBA~1\FREEBA~1\lib\win32\i386pe.x" -subsystem console -s --stack 1048576,1048576 -L "E:\FREEBA~1\FREEBA~1\lib\win32" -L "./" "E:\FREEBA~1\FREEBA~1\lib\win32\crt2.o" "E:\FREEBA~1\FREEBA~1\lib\win32\crtbegin.o" "E:\FreeBASIC\netsend\send.o" -o "E:\FreeBASIC\netsend\send.exe" -( -lkernel32 -lgdi32 -luser32 -lversion -ladvapi32 -lfb -lgcc -lmsvcrt -lmingw32 -lmingwex -lmoldname -lsupc++ "E:\FREEBA~1\FREEBA~1\lib\win32\fbrt0.o" -) "E:\FREEBA~1\FREEBA~1\lib\win32\crtend.o"

'nen header hab ich, denk ich, gefunden:
http://www.virtualbox.org/browser/trunk/src/VBox/Additions/WINNT/Graphics/Wine/include/lmmsg.h?rev=16410

aber was ist denn SWIG FB?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 19.02.2009, 20:01    Titel: Antworten mit Zitat

http://www.freebasic-portal.de/index.php?s=download&id=70

Damit kannst du aus der .h-Datei eine .bi machen.
In der README steht, wie es geht.

Zuvor brauchst du auch gar nicht mehr rumzuprobieren, wenn er die Funktionen nicht kennt, dann wird der Compiler natürlich immer Fehler melden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 19.02.2009, 20:21    Titel: Antworten mit Zitat

Die offiziellen C++/C Header aus dem Microsoft Windows SDK 6.0a habe ich dir unter http://wurzinger.bplaced.net/files/LM_Header_60a.zip hochgeladen. Die C++ Header (*.H) musst du dann mit dem swig fb wrapper in FreeBasic Header (*.BI) umwandeln lassen und ggf. manuell die "Übersetzung" korrigieren. Ich glaube dass auch die Header von Wine funktionieren sollten, die du oberhalb schon erwähnt hast.

Du hast Glück, denn in den *.DEF Dateien und somit in den *.DLL.A-Dateien ist die Funktion schon definiert. Die Funktion befindet sich übrigens in der NETAPI32.DLL
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 19.02.2009, 20:33    Titel: Antworten mit Zitat

So, ich habe jetzt die .BI-Datei erstellt:
Code:
''
''
'' lmmsg -- header translated with help of SWIG FB wrapper
''
'' NOTICE: This file is part of the FreeBASIC Compiler package and can't
''         be included in other distributions without authorization.
''
''
#ifndef __lmmsg_bi__
#define __lmmsg_bi__

type _MSG_INFO_0
   msgi0_name as LPWSTR
end type

type MSG_INFO_0 as _MSG_INFO_0
type PMSG_INFO_0 as _MSG_INFO_0 ptr
type LPMSG_INFO_0 as _MSG_INFO_0 ptr

type _MSG_INFO_1
   msgi1_name as LPWSTR
   msgi1_forward_flag as DWORD
   msgi1_forward as LPWSTR
end type

type MSG_INFO_1 as _MSG_INFO_1
type PMSG_INFO_1 as _MSG_INFO_1 ptr
type LPMSG_INFO_1 as _MSG_INFO_1 ptr

#define MSGNAME_NOT_FORWARDED 0
#define MSGNAME_FORWARDED_TO &h04
#define MSGNAME_FORWARDED_FROM &h10

#endif

Sieht eingentlich auch ganz gut aus. (Soweit ich das beurteilen kann zwinkern )
Allerdings konnte SWIG FB nicht alles konvertieren.
Die NET_API_STATUS NET_API_FUNCTION-Blöcke konnten nicht geändert werden, glaub ich. Aber durch meinen DECLARE FUNCTION-Befehl sollte das ja eigentlich nicht so schlimm sein.

Leider bekomme ich immernoch die gleiche Fehlermeldung. mit dem Kopf durch die Mauer wollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 19.02.2009, 21:12    Titel: Antworten mit Zitat

Ich bin mal so frei:
Wenn es nur um Netsend geht, läuft das nämlich über Mailslots, die man ganz einfach wie eine Datei ansprechen kann.
Einfach MailSlot("ABSENDER", "ZIEL-PC-NAME-ODER-IP", "MEINE NACHRICHT")
Code:
Function SendToMailSlot(Server As String, Slot As String="messngr", Mail As String) As Boolean
   Dim As HANDLE hToSlot
   Dim As Dword BytesWritten
   Dim As String FullSlot
   
   FullSlot = Server + "\mailslot\" + Slot
   hToSlot = CreateFile(StrPtr(FullSlot), _
      GENERIC_WRITE, _
      FILE_SHARE_READ, _
      NULL, _
      OPEN_EXISTING, _
      FILE_ATTRIBUTE_NORMAL, _
      0 _
   )
   
   If hToSlot = INVALID_HANDLE_VALUE Then Return FALSE
   
   If (WriteFile(hToSlot, StrPtr(Mail), Len(Mail), @BytesWritten, NULL) = FALSE) Or (BytesWritten <> Len(Mail)) Then
      CloseHandle(hToSlot)
      Return FALSE
   EndIf
   
   CloseHandle(hToSlot)
   
   Return TRUE
End Function

Function MailSlot(From As String, To_ As String, Mail As String) As Integer
   Return SendToMailSlot(To_,, From & Chr(0) & To_ & Chr(0) & Mail)
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 19.02.2009, 22:39    Titel: Antworten mit Zitat

Hallo

also der Code lässt sich problemlos compilieren...

Nur irgendwie passiert da nichts...
Als Ausgabewert bekomme ich 0. - Was ja eigentlich auch hinkommen sollte. peinlich
Allerdings wird keine Meldung ausgegeben.

MfG Type
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 19.02.2009, 22:46    Titel: Antworten mit Zitat

Code:
net start nachrichtendienst

Code:
C:\WINDOWS\system32\svchost.exe -k netsvcs
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 20.02.2009, 20:50    Titel: Antworten mit Zitat

hm... das ändert nicht wirklich viel.
Zumal der Nachrichtendienst ja schon aktiviert ist, um net send verwenden zu können.

Mfg Type
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 20.02.2009, 23:38    Titel: Antworten mit Zitat

Auch auf dem Zielrechner?
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 21.02.2009, 12:35    Titel: Antworten mit Zitat

Der Button ist eigentlich nur für Mainframe/Terminal Systeme gedacht, wo man nur auf einem Rechner diesen Service starten muss, damit er automatisch auf allen anderen auch läuft.
Zum Versenden mit Mailnerd/diesem Code braucht der Nachrichtendienst nicht aktiviert sein, der Empfänger braucht ihn aber auf jeden Fall, damit die Nachricht auch in eine Messagebox umgewandelt wird.

Ganz nebenbei: NetMessageBufferSend ist eine undokumentierte Windows Funktion, die sich auch durchaus von Version zu Version verändern kann! zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 21.02.2009, 15:44    Titel: Antworten mit Zitat

Hallo,

also bei mir passiert überhauptnichts.
Net Send funktioniert problemlos, da ja auch der Nachrichtendienst aktiviert ist zwinkern , aber das Programm leider nicht.
Aber irgendwie muss das doch gehen.
Ich mein adere Programme, die nicht mit NetSend arbeiten, laufen doch auch.
Das muss dich irgendwie auch mit FreeBasic möglich sein.

MfG Type

Edit:
Kann nicht irgendwie überprüfen, ob wenigstens irgendwas ankommt? - Also das Singal quasi abfangen?


Zuletzt bearbeitet von Type am 21.02.2009, 15:53, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 21.02.2009, 15:46    Titel: Antworten mit Zitat

Hast du mal mein Programm Mailnerd ausprobiert?
Das hat bei allen Testumgebungen (XP x64, XP Home, XP Prof, 2k, 2003, ...) funktioniert... zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Type



Anmeldungsdatum: 24.02.2006
Beiträge: 187
Wohnort: Dresden

BeitragVerfasst am: 21.02.2009, 16:02    Titel: Antworten mit Zitat

also dein Programm läuft ohne Probleme.

Aber warum geht dann der Code nicht?

Mach ich Irgendwas falsch?

Code:
#INCLUDE "windows.bi"

FUNCTION SendToMailSlot(Server AS STRING, Slot AS STRING="messngr", Mail AS STRING) AS Boolean
   DIM AS HANDLE hToSlot
   DIM AS Dword BytesWritten
   DIM AS STRING FullSlot
   
   FullSlot = Server + "\mailslot\" + Slot
   hToSlot = CREATEFILE(STRPTR(FullSlot), _
      GENERIC_WRITE, _
      FILE_SHARE_READ, _
      NULL, _
      OPEN_EXISTING, _
      FILE_ATTRIBUTE_NORMAL, _
      0 _
   )
   
   IF hToSlot = INVALID_HANDLE_VALUE THEN RETURN FALSE
   
   IF (WRITEFILE(hToSlot, STRPTR(Mail), LEN(Mail), @BytesWritten, NULL) = FALSE) OR (BytesWritten <> LEN(Mail)) THEN
      CLOSEHANDLE(hToSlot)
      RETURN FALSE
   ENDIF
   
   CLOSEHANDLE(hToSlot)
   
   RETURN TRUE
END FUNCTION

FUNCTION MailSlot(From AS STRING, To_ AS STRING, Mail AS STRING) AS INTEGER
   RETURN SendToMailSlot(To_,, From & CHR(0) & To_ & CHR(0) & Mail)
END FUNCTION

PRINT MailSlot ("Absender","*", "Text")
SLEEP


MfG Type
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 21.02.2009, 17:44    Titel: Antworten mit Zitat

Der To_ Parameter muss im Format \\IP_ADDRESSE_ODER_NAME sein zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz