Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 19.02.2009, 18:08 Titel: Net Send über VB |
|
|
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.
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.02.2009, 18:28 Titel: |
|
|
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.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 19.02.2009, 18:37 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.02.2009, 18:52 Titel: |
|
|
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 |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 19.02.2009, 19:04 Titel: |
|
|
Das heißt FreeBasic kann ich dafür momentan vergessen?
Gibt's da keine Alternative? (Jetz mal abgesehen von shell) |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 19.02.2009, 19:07 Titel: |
|
|
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 |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 19.02.2009, 19:46 Titel: |
|
|
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 19.02.2009, 20:01 Titel: |
|
|
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 |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 19.02.2009, 20:21 Titel: |
|
|
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 |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 19.02.2009, 20:33 Titel: |
|
|
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 )
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.  |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 19.02.2009, 21:12 Titel: |
|
|
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 |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 19.02.2009, 22:39 Titel: |
|
|
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.
Allerdings wird keine Meldung ausgegeben.
MfG Type |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 19.02.2009, 22:46 Titel: |
|
|
Code: | net start nachrichtendienst |
Code: | C:\WINDOWS\system32\svchost.exe -k netsvcs |
|
|
Nach oben |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 20.02.2009, 20:50 Titel: |
|
|
hm... das ändert nicht wirklich viel.
Zumal der Nachrichtendienst ja schon aktiviert ist, um net send verwenden zu können.
Mfg Type |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 20.02.2009, 23:38 Titel: |
|
|
Auch auf dem Zielrechner? _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.02.2009, 12:35 Titel: |
|
|
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!  |
|
Nach oben |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 21.02.2009, 15:44 Titel: |
|
|
Hallo,
also bei mir passiert überhauptnichts.
Net Send funktioniert problemlos, da ja auch der Nachrichtendienst aktiviert ist , 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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.02.2009, 15:46 Titel: |
|
|
Hast du mal mein Programm Mailnerd ausprobiert?
Das hat bei allen Testumgebungen (XP x64, XP Home, XP Prof, 2k, 2003, ...) funktioniert...  |
|
Nach oben |
|
 |
Type
Anmeldungsdatum: 24.02.2006 Beiträge: 187 Wohnort: Dresden
|
Verfasst am: 21.02.2009, 16:02 Titel: |
|
|
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 |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.02.2009, 17:44 Titel: |
|
|
Der To_ Parameter muss im Format \\IP_ADDRESSE_ODER_NAME sein  |
|
Nach oben |
|
 |
|