Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi NET SEND für Windows 98? REPLACEMENT (https://www.delphipraxis.net/20545-net-send-fuer-windows-98-replacement.html)

FlorianK 19. Apr 2004 19:12


NET SEND für Windows 98? REPLACEMENT
 
Hallo,

ich möchte gerne eine Anwendung schreiben die wie der NET SEND Befehl funktioniert.
Ich möchte aber auch einen "Nachrichtendienst" haben.

Das heißt:
Ich mochte eine NetSend.exe programmieren, die Nachrichten an den Nachrichtendienst (oder WinPopUp) sendet. Außerdem möchte ich einen Nachrichtendienst programmieren der wenn eine Nachricht reinkommt, diese dann in einer MessageBox ausgibt.

Danke vielmals schon im Voraus

Florian K.

PS.: Ich würde gerne nicht nur Tipps erhalten, sondern auch Codeschnipsel.

fkerber 19. Apr 2004 19:29

Re: NET SEND für Windows 98? REPLACEMENT
 
Hi!

Luckie hat doch mal ne Unit zu diesem Thema gepostet, oder?

Ciao fkerber

FlorianK 19. Apr 2004 19:31

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von fkerber
Hi!

Luckie hat doch mal ne Unit zu diesem Thema gepostet, oder?

Ciao fkerber

Hallo,

kann gut sein ich weiß aber nicht wo...

Danke für die schnelle Antwort
Florian K.

fkerber 19. Apr 2004 19:34

Re: NET SEND für Windows 98? REPLACEMENT
 
Hi!

Die Suche ist dein Freund!!!

http://www.delphipraxis.net/internal...902&highlight=


Ciao fkerber

dizzy 19. Apr 2004 20:29

Re: NET SEND für Windows 98? REPLACEMENT
 
Falsche Rubrik!!!

mfg,
dizzy

DP-Maintenance 19. Apr 2004 20:34

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Ist eine Problemschilderung, kein fertiger Beitrag ;-)

FlorianK 20. Apr 2004 14:24

Re: NET SEND für Windows 98? REPLACEMENT
 
Hallo,

@fkerber: Danke für den Hinweis. :thuimb:

bin neu hier, ich wusste ja nicht wo ich den Beitrag posten soll. :|


Also:
Noch mal zum
Zitat:

Außerdem möchte ich einen Nachrichtendienst programmieren der wenn eine Nachricht reinkommt, diese dann in einer MessageBox ausgibt.
Weiß jemand wie das hinbekommen kann? Oder hat zumindest eine Idee? :gruebel:


Florian K.


Luckie 20. Apr 2004 14:26

Re: NET SEND für Windows 98? REPLACEMENT
 
Sollte über mailslots gehen. Wenn man in der DP nach net send sucht, sollte man auch auf diese Lösung stoßen. Etwas Recherearbeit ist natürlich nötig.

FlorianK 20. Apr 2004 14:28

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von Luckie
Sollte über mailslots gehen. Wenn man in der DP nach net send sucht, sollte man auch auf diese Lösung stoßen. Etwas Recherearbeit ist natürlich nötig.

Danke für den Hinweis, werde mal ein bisschen Suchen.

Florian K.


Evian 20. Apr 2004 14:53

Re: NET SEND für Windows 98? REPLACEMENT
 
Vielleicht hilft Dir das hier auch schon weiter: net send implementieren

gruss

Evian

alcaeus 20. Apr 2004 15:09

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von FlorianK
Hallo,

Noch mal zum
Zitat:

Außerdem möchte ich einen Nachrichtendienst programmieren der wenn eine Nachricht reinkommt, diese dann in einer MessageBox ausgibt.
Weiß jemand wie das hinbekommen kann? Oder hat zumindest eine Idee? :gruebel:


Sieh dir mal die Hilfe zu MessageDlg oder MessageDlgPos an, das wirkt wunder.
Falls du es direkt mit der WinAPI lösen willst, dort heißt die Funktion MessageBox oder MessageBoxEx. Die Hilfe enthält genug Informationen zu diesen beiden Befehlen.

FlorianK 20. Apr 2004 15:15

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von alcaeus
Zitat:

Zitat von FlorianK
Hallo,

Noch mal zum
Zitat:

Außerdem möchte ich einen Nachrichtendienst programmieren der wenn eine Nachricht reinkommt, diese dann in einer MessageBox ausgibt.
Weiß jemand wie das hinbekommen kann? Oder hat zumindest eine Idee? :gruebel:


Sieh dir mal die Hilfe zu MessageDlg oder MessageDlgPos an, das wirkt wunder.
Falls du es direkt mit der WinAPI lösen willst, dort heißt die Funktion MessageBox oder MessageBoxEx. Die Hilfe enthält genug Informationen zu diesen beiden Befehlen.

Ich mein den
Nachrichtendienst
und nicht die MessageBox!

Florian K.

alcaeus 20. Apr 2004 15:17

Re: NET SEND für Windows 98? REPLACEMENT
 
:oops:
Sorry, ich dachte an die MessageBox, da das Wort kursiv war, kommt nicht wieder vor.
Ich habs zwar noch nie gemacht, aber wenigstens bei meinem D7Ent kann man einen Dienst erstellen (Datei->Neu->Andere, dann Dienst). Ich kenne mich damit aber überhaupt nicht aus, und gebe den Ball an erfahrene Leute ab...

MathiasSimmack 20. Apr 2004 15:38

Re: NET SEND für Windows 98? REPLACEMENT
 
1. Ein Programm zum Senden gibt es unter Win9x. Nennt sich WinPopup und kann auch Kontakt zu NT/2000/XP-Rechern aufnehmen.

2. Mailslots funktionieren zwar, allerdings können Nachrichten dann nur an PC-Namen geschickt werden. WinPopup dagegen empfängt auch Nachrichten für den Benutzernamen. Aber wer mit Mailslots arbeiten will: eine Dialogbox im Stil des Nachrichtenempfangs von NT/2000/XP schlägt nonVCL mit knapp 30k zu Buche. Ich glaube so groß war mein Empfänger. Muss ich mal gucken ...

alcaeus 20. Apr 2004 15:46

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von MathiasSimmack
Mailslots funktionieren zwar, allerdings können Nachrichten dann nur an PC-Namen geschickt werden.

Das letzte Programm das ich mit Mailslots gesehen habe konnte an IP-Ranges schicken, also müsste es möglich sein. Vielleicht wurde aber nur ein Lookup-durchgeführt, ich weiß aber nicht ob das möglich ist.

MathiasSimmack 20. Apr 2004 16:20

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von alcaeus
Das letzte Programm das ich mit Mailslots gesehen habe konnte an IP-Ranges schicken, also müsste es möglich sein. Vielleicht wurde aber nur ein Lookup-durchgeführt, ich weiß aber nicht ob das möglich ist.

Hä? Ich sprach von Benutzernamen (= Benutzerkonten!), du redest von IP-Adressbereichen, die üblicherweise nicht Benutzern sondern Computern zugeordnet sind.

FlorianK 20. Apr 2004 20:40

Re: NET SEND für Windows 98? REPLACEMENT
 
Hallo,
irgendwo habe ich mal den Code fürs herausfinden von Usern übers Netzwerk gefunden, ich weiß nicht ob er funktioniert:
Delphi-Quellcode:
unit NetworkUser;

interface

uses Windows;

type
   ATStrings = array of string;
   function GetUser(const ServerName: string): string;

implementation

function GetUser(const ServerName: string): string;
const MAX_NAME_STRING = 1024;
var userName,
  domainName: array [0..MAX_NAME_STRING] of Char;
  subKeyName: array [0..MAX_PATH] of Char;
  ArryList: ATStrings;
  subKeyNameSize: DWORD;
  index: DWORD;
  userNameSize: DWORD;
  domainNameSize: DWORD;
  lastWriteTime: FILETIME;
  usersKey: HKEY;
  sid: PSID;
  sidType: SID_NAME_USE;
  authority: SID_IDENTIFIER_AUTHORITY;
  subAuthorityCount: BYTE;
  authorityVal: DWORD;
  revision: DWORD;
  subAuthorityVal: ARRAY[0..7] OF DWORD;

  function getvals(s: string): integer;
  var i, j, k, l: integer;
    tmp: string;
  begin
    delete(s, 1, 2);
    j := pos('-', s);
    tmp := copy(s, 1, j - 1);
    val(tmp, revision, k);
    delete(s, 1, j);
    j := pos('-', s);
    tmp := copy(s, 1, j - 1);
    val('$' + tmp, authorityVal, k);
    delete(s, 1, j);
    i := 2;
    s := s + '-';
    for l := 0 to 7 do begin
      j := pos('-', s);
      if j > 0 then begin
        tmp := copy(s, 1, j - 1);
        val(tmp, subAuthorityVal[l], k);
        delete(s, 1, j);
        inc(i);
      end
      else break;
    end;
    result := i;
  end;

begin
  setlength(ArryList, 0);
  revision := 0;
  authorityVal := 0;
  FillChar(subAuthorityVal, SizeOf(subAuthorityVal), #0);
  FillChar(userName, SizeOf(userName), #0);
  FillChar(domainName, SizeOf(domainName), #0);
  FillChar(subKeyName, SizeOf(subKeyName), #0);
  if ServerName <> '' then begin
    usersKey := 0;
    if (RegConnectRegistry(pchar(ServerName), HKEY_USERS, usersKey) <> 0) then
      Exit;
  end
  else begin
    if (RegOpenKey(HKEY_USERS, NIL, usersKey) <> ERROR_SUCCESS) then
      Exit;
  end;
  index := 0;
  subKeyNameSize := SizeOf(subKeyName);
  while (RegEnumKeyEx(usersKey, index, subKeyName, subKeyNameSize, NIL, NIL, NIL,
  @lastWriteTime) = ERROR_SUCCESS) do begin
    if (lstrcmpi(subKeyName, '.default') <> 0) and (Pos('Classes', STRING(subKeyName)) = 0)
    then begin
      subAuthorityCount := getvals(subKeyName);
      if (subAuthorityCount >= 3) then begin
        subAuthorityCount := subAuthorityCount - 2;
        if (subAuthorityCount < 2) then subAuthorityCount := 2;
        authority.Value[5] := PByte(@authorityVal)^;
        authority.Value[4] := PByte(DWORD(@authorityVal) + 1)^;
        authority.Value[3] := PByte(DWORD(@authorityVal) + 2)^;
        authority.Value[2] := PByte(DWORD(@authorityVal) + 3)^;
        authority.Value[1] := 0;
        authority.Value[0] := 0;
        sid := NIL;
        userNameSize := MAX_NAME_STRING;
        domainNameSize := MAX_NAME_STRING;
        if AllocateAndInitializeSid(authority, subAuthorityCount, subAuthorityVal[0],
        subAuthorityVal[1], subAuthorityVal[2], subAuthorityVal[3], subAuthorityVal[4],
        subAuthorityVal[5], subAuthorityVal[6], subAuthorityVal[7], sid) then begin
          if LookupAccountSid(Pchar(ServerName), sid, userName, userNameSize, domainName,
          domainNameSize, sidType) then begin
            setlength(ArryList, length(ArryList) + 1);
            ArryList[length(ArryList) - 1] := string(domainName) + '\' + string(userName);
            result := string(userName);
          end;
        end;
        if Assigned(sid) then FreeSid(sid);
      end;
    end;
    subKeyNameSize := SizeOf(subKeyName);
    Inc(index);
  end;
  RegCloseKey(usersKey);
end;

end.
Vielleicht kann jemand der ein Netzwerk besitzt diesen Code testen?

Danke schon im voraus

Florian K.

FlorianK 26. Apr 2004 19:09

Re: NET SEND für Windows 98? REPLACEMENT
 
Hi,
habe jetzt eine Version ohne Benutzer compeliert. :hello:

Bitte Anregungen und Kritiken!!!!! :!:

Weitere Ziele:

Wie orginal "NET SEND" Nachrichten an User verschicken. :idea:




Florian K.


INFO: Die Datei NetSend.exe ist mit UPX verkleinert worden. 8)


[edit=FlorianK] Datei entfernt, BUGS!!!!! [/edit]

alcaeus 26. Apr 2004 19:19

Re: NET SEND für Windows 98? REPLACEMENT
 
Hi, konnte das Programm leider noch nicht testen, habe zur Zeit kein Netz...
Zitat:

Zitat von Haftung.txt
Für Schäden an der Gesundheit, dem Körper oder dem Leben des Nutzers haftet
der Autor uneingeschränkt. Ebenso haftet er für die Verletzung von Pflichten,
die zur Erreichung des Vertragszwecks von besonderer Bedeutung sind
(Kardinalspflichten).

:lol: Schäden an Gesundheit...das heißt, wenn jemand psychiatrisch behandelt werden muss, weil ich ihn mit Nachrichten bombardiere haftest du? *malschnellnetzeinrichten*

FlorianK 26. Apr 2004 19:28

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von alcaeus
Hi, konnte das Programm leider noch nicht testen, habe zur Zeit kein Netz...
Zitat:

Zitat von Haftung.txt
Für Schäden an der Gesundheit, dem Körper oder dem Leben des Nutzers haftet
der Autor uneingeschränkt. Ebenso haftet er für die Verletzung von Pflichten,
die zur Erreichung des Vertragszwecks von besonderer Bedeutung sind
(Kardinalspflichten).

:lol: Schäden an Gesundheit...das heißt, wenn jemand psychiatrisch behandelt werden muss, weil ich ihn mit Nachrichten bombardiere haftest du? *malschnellnetzeinrichten*

Hahahahahahaahah :evil:

wenn DU ihn bombadierst hafte ich nicht!!!

Ich hafte nur wenn mein Programm ohne eingreifen Fremder die Gesundheit anderer beschädigt! :!: :!: :!:

Ach noch'n kleiner Hinweis: Den Server startet man mit "NetSend.exe -ss"

FlorianK 26. Apr 2004 19:36

Re: NET SEND für Windows 98? REPLACEMENT
 
@alcaeus:
Wenn du nen Proggi schreibst was einen Headcrash verursacht (auch wenn es nicht beabsichtigt war :smile2: ),
haftest du uneingeschränkt. Das heißt ... :warn: ... du musst ihm oder ihr ne neue Festplatte kaufen, usw.


Soviel zum Thema Haftungsausschluss... :tongue:

Florian K.

edosoft 21. Sep 2004 21:04

Re: NET SEND für Windows 98? REPLACEMENT
 
so kann manns auch übersetzen...

aber sonst: weils auch einfach so zufällig en headcrash gibt...
naja

übrigens: "net send" (d.h. nachrichten NUR VERSCHICKEN) geht so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  S: String;
  H: THandle;
  C: Cardinal;
begin
////////
//edit1: pc, der die msg empfängt(IP oder NAME)
//edit2: "nachricht von x"...
//edit3: ..."an x am <datum - wird von windows gesetzt>"
//memo1: nachrichtentext
////////

S := Edit2.Text + #0 + Edit3.Text + #0 + Memo1.Text + #0;
H := CreateFile(PChar('\\' + Edit1.Text + '\mailslot\messngr'), GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
WriteFile(H, S[1], Length(S), C, nil);
CloseHandle(H);
end;
/EDIT: UUH ein formalitätsfehler im code (leerzeichen nach ":=" vergessen...)

edosoft 21. Sep 2004 21:07

Re: NET SEND für Windows 98? REPLACEMENT
 
achja vergas ich fast zu erwähnen:
so kann man ja auch "net send"s bauen, die den absender(meistens die ip bzw. der besitzername bei win98) unterdrücken

[man kann natürlich auch BOMBER bauen...]

Tubos 21. Sep 2004 21:18

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

so kann man ja auch "net send"s bauen, die den absender(meistens die ip bzw. der besitzername bei win98) unterdrücken
Zitat:

[man kann natürlich auch BOMBER bauen...]
Und beides geht mit der Windows-FunktionMSDN-Library durchsuchenNetMessageBufferSend auch :stupid:
(nur halt nicht unter Win98 ;) )

edosoft 21. Sep 2004 21:21

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von Tubos
(nur halt nicht unter Win98 ;) )

tja...
a) das ding hab ich AUCH gebaut weil des winpopup für win98 scheisse ist und du bei xp ja auch einfach den befehl "net send" aufrufen kannst

b) ich die anleitung für des ding da net glesen hab weil ich zu faul war und mein code ja viel kürzer is

--und sowieso auf allen windowses funktionell

NicoDE 21. Sep 2004 21:42

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von Tubos
Und beides geht mit der Windows-Funktion MSDN-Library durchsuchenNetMessageBufferSend auch :stupid:
(nur halt nicht unter Win98 ;) )

NetMessageBufferSend gibt es auch unter Win9x - ist aber nicht dokumentiert und schwierig auf direktem Wege aufzurufen, da es sich dort in einer 16-Bit DLL befindet.
Siehe: http://www.bendlins.de/nico/delphi/NetSend.zip (88 KB)

ps: das Problem bei der Mailslot-Methode ist das Senden von Win9x an WinNT...

edosoft 21. Sep 2004 21:49

Re: NET SEND für Windows 98? REPLACEMENT
 
jut thänx

ist aber auf jeden fall komplizierter als meine methode, wobei mal auszuprobieren wäre ob die auf z.b. win longhorn noch geht...

NicoDE 21. Sep 2004 21:53

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von edosoft
ist aber auf jeden fall komplizierter als meine methode, wobei mal auszuprobieren wäre ob die auf z.b. win longhorn noch geht...

Solange es ein Win32-Subsystem/Emulator gibt, wird es funktionieren (das o.g. Programm funktioniert auch noch unter WoW64 (Win64)) ...

Tubos 21. Sep 2004 21:53

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

NetMessageBufferSend gibt es auch unter Win9x - ist aber nicht dokumentiert und schwierig auf direktem Wege aufzurufen, da es sich dort in einer 16-Bit DLL befindet.
Ahaa...habe ich nicht gewusst! :thumb:

Zitat:

ist aber auf jeden fall komplizierter als meine methode, wobei mal auszuprobieren wäre ob die auf z.b. win longhorn noch geht...
Unter Longhorn geht es sicher, weil Win32-Programme noch wie vorher (also bei XP) ausgeführt werden, so wie heute DOS-Programme unter XP.
Für .NET braucht man dann klarerweise was anderes.

edit:
zu spät...

edosoft 21. Sep 2004 21:55

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von Tubos
Unter .NET braucht man dann klarerweise was anderes.

Warum meinst?
das ähem "protokoll" für die messages wird ja wahrscheinlich noch gleich sein, sonst könnte ein nt/2000/xp rechner ja auch keine nachrichten mehr an .net schicken...

Tubos 21. Sep 2004 21:58

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Warum meinst?
das ähem "protokoll" für die messages wird ja wahrscheinlich noch gleich sein, sonst könnte ein nt/2000/xp rechner ja auch keine nachrichten mehr an .net schicken...
achso...
habe das falsch verstanden.
Meinte dass du einen anderen Code brauchst.

NicoDE 21. Sep 2004 22:01

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von edosoft
das ähem "protokoll" für die messages wird ja wahrscheinlich noch gleich sein

Nunja, NetBIOS over TCP/IP (NBT) sollte meiner bescheidenen Meinung nach abgeschafft werden. Ich hab es schon seit Ewigkeiten deaktiviert...

ps: es ist einfacher einen eigenen Nachrichtendienst zu schreiben, als zu versuchen das von Microsoft (undokumentiert) erweiterte SMB-Protokoll zu implementieren (zumal der Nachrichtendienst in aktuellen Windowsversionen ohnehin standardmäßig deaktiviert ist).

edosoft 21. Sep 2004 22:02

Re: NET SEND für Windows 98? REPLACEMENT
 
Zitat:

Zitat von Tubos
achso...
habe das falsch verstanden.
Meinte dass du einen anderen Code brauchst.

Warum brauch ich en andren code?
gehts bei .net vielleicht nimme ne datei so zu öffnen?

edosoft 21. Sep 2004 22:24

Re: NET SEND für Windows 98? REPLACEMENT
 
@nicoDE:
jo des ja klar.
aber dann muss ich des system halt überall installieren, was schon eher ein problem darstellen sollte.

Zitat:

(zumal der Nachrichtendienst in aktuellen Windowsversionen ohnehin standardmäßig deaktiviert ist).
das schon, aber wenn du ein pc kaufst mit windows vorinstalliert (was ja otto normalverbraucher macht) wird das oft von den leuten da aktivert. (bsp: letzte woche eues laptop gekauft von sony mit winxp pro drauf -> nachrichtendienst is aktivert(+autostart)

NicoDE 21. Sep 2004 22:35

Re: NET SEND für Windows 98? REPLACEMENT
 
Wenn jemand einen 'echten' Empfänger für 'net send' schreiben will, dann empfehle ich mindestens diese Lektüre - insbesondere die Abschnitte NetBIOS Datagram Services und NetBIOS Name Registration and Resolution for Multihomed Computers.

...aber gleich vorab, das ist ne Menge Arbeit (die IMHO, außer dem Lerneffekt, nichts bringt).


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz