::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-30 02:39:14, Hit : 5279, Vote : 1198
 윈도우즈 네트워크로 메시지 보내기

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

function NetSend(dest, Source, Msg: string): Longint; overload;
type
  TNetMessageBufferSendFunction = function(servername, msgname, fromname: PWideChar;
    buf: PWideChar; buflen: Cardinal): Longint;  
  stdcall;
var
  NetMessageBufferSend: TNetMessageBufferSendFunction;
  SourceWideChar: PWideChar;
  DestWideChar: PWideChar;
  MessagetextWideChar: PWideChar;
  Handle: THandle;
begin
  Handle := LoadLibrary('NETAPI32.DLL');
  if Handle = 0 then
  begin
    Result := GetLastError;
    Exit;
  end;
    @NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend');
  if @NetMessageBufferSend = nil then
  begin
    Result := GetLastError;
    Exit;
  end;

  MessagetextWideChar := nil;
  SourceWideChar      := nil;
  DestWideChar        := nil;

  try
    GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
    GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1);
    StringToWideChar(Msg, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
    StringToWideChar(Dest, DestWideChar, 20 * SizeOf(WideChar) + 1);

    if Source = '' then
      Result := NetMessageBufferSend(nil, DestWideChar, nil,
        MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1)
    else
    begin
      GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1);
      StringToWideChar(Source, SourceWideChar, 20 * SizeOf(WideChar) + 1);
      Result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar,
        MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);
      FreeMem(SourceWideChar);
    end;
  finally
    FreeMem(MessagetextWideChar);
    FreeLibrary(Handle);
  end;
end;

function NetSend(Dest, Msg: string): Longint; overload;
begin
  Result := NetSend(Dest, '', Msg);
end;

function NetSend(Msg: string): Longint; overload;
begin
  Result := NetSend('', '', Msg);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  NERR_BASE = 2100;
  NERR_NameNotFound = NERR_BASE + 173;
  NERR_NetworkError = NERR_BASE + 36;
  NERR_Success = 0;
var
  Res: Longint;
  sMsg: string;
begin
  Res := NetSend('컴퓨터이름', '보낼 메시지');
  case Res of
    ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the requested information.';
    ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is invalid.';
    ERROR_NOT_SUPPORTED: sMsg := 'This network request is not supported.';
    NERR_NameNotFound: sMsg := 'The user name could not be found.';
    NERR_NetworkError: sMsg := 'A general failure occurred in the network hardware.';
    NERR_Success: sMsg := 'Message sent!';
  end;
  ShowMessage(sMsg);
end;

end.





371   [일반/컴포넌트] RichEdit 에서 문자(열)를 찾아 글자속성 바꾸기  김영대 2003/03/06 4658 1210
370   [일반/컴포넌트] StringGrid의 Column의 크기(width) 자동 조절  김영대 2003/03/04 6605 1210
369   [일반/컴포넌트] ListView 의 column header 오른쪽에 이미지 넣기  김영대 2003/03/07 4937 1209
368   [일반/컴포넌트] 마우스커서를 특정위치로 이동시키기  김영대 2003/03/05 5732 1209
367   [일반/컴포넌트] ListBox의 item을 mouse로 이동시키기  김영대 2003/03/04 4266 1209
366   [일반/컴포넌트] 이미지를 마우스로 drag시 테두리 효과를 주면서 이동 시키기  김영대 2003/03/31 5347 1208
365   [윈도우즈 API] KeyDown의 Beep음을 없애자...  김영대 2003/03/06 4547 1208
364   [멀티미디어] wave파일 연주  김영대 2003/03/04 4149 1208
363   [윈도우즈 API] 내 프로그램의 화면을 가리는 프로그램 리스트  김영대 2004/07/24 4527 1207
362   [시스템] 프로세서를 생성시켜보자!  김영대 2003/03/06 4523 1207
361   [일반/컴포넌트] 콤포넌트를 Redraw할때 깜박임을 방지하려면...  김영대 2003/03/05 4678 1207
360   [윈도우즈 API] Taskbar 의 특정 위치에 popup 메뉴 띄우기  김영대 2004/07/24 4573 1206
359   [윈도우즈 API] 외부 프로그램의 크기를 내 프로그램에서 변경하기  김영대 2003/03/07 4563 1206
358   [윈도우즈 API] 스크린 세이버 실행하기  김영대 2003/03/05 4303 1206
357   [일반/컴포넌트] thread-safe Queue 구현  김영대 2003/08/18 6008 1205
356   [윈도우즈 API] 레지스트리가 변경된 사실을 알리려면...  김영대 2003/03/06 4459 1205
355   [일반/컴포넌트] 다이얼로그 박스가 이미 떠있는지 검사하기  김영대 2004/10/16 4463 1204
354   [데이터베이스] how to get records from Oracle StoredProcedure  김영대 2003/03/07 4471 1204
353   [윈도우즈 API] window의 maximize, minimize 알아내기  김영대 2003/03/07 4598 1204
352   [윈도우즈 API] 스크린 세이버 비밀번호 알아내기  김영대 2003/03/07 4874 1203
351   [시스템] PC 스피커 울리기(Sound, NoSound)  김영대 2003/03/07 4409 1203
350   [일반/컴포넌트] ComboBox 가 dropped 상태인지 검사  김영대 2003/03/04 4051 1203
349   [네트웍/인터넷] LAN 에 접속했는지 검사하기  김영대 2003/03/07 4457 1202
348   [시스템] PC에 설치된 DirectX 버전 읽기  김영대 2003/03/07 3890 1202
347   [윈도우즈 API] keyboard, mouse 메시지 무시(skip) 하기  김영대 2003/03/07 4338 1200
346   [COM/OLE] TWebBrowser 순차 네비게이션 예제  김영대 2004/10/01 5231 1199
345   [일반/컴포넌트] 서식(format) 주기  김영대 2003/03/05 4474 1199
344   [윈도우즈 API] 아이콘 변경 화면 띄우기  김영대 2004/08/26 4447 1198
  [네트웍/인터넷] 윈도우즈 네트워크로 메시지 보내기  김영대 2003/03/30 5279 1198
342   [시스템] 파일의 소유자와 도메인 구하기  김영대 2004/08/04 4292 1197
341   [알고리즘] String Hash 함수  김영대 2004/09/17 4508 1196
340   [일반/컴포넌트] 벽에 들러붙는 자석폼 만들기  김영대 2004/08/06 4735 1196
339   [일반/컴포넌트] ASCII printing  김영대 2003/03/06 4940 1196
338   [시스템] Redirecting DOS Application Output  김영대 2003/03/06 4422 1196
337   [데이터베이스] DataSet의 현재 레코드 복사하여 붙여넣기(?)  김영대 2003/03/05 5207 1196
336   [일반/컴포넌트] Algorithm to sort a TStringGrid #2  김영대 2003/03/07 4744 1195
335   [데이터베이스] Query한 결과를 수정하기...  김영대 2003/03/07 4861 1195
334   [윈도우즈 API] 네트워크 환경의 "컴퓨터 찾아보기" 화면 띄우기  김영대 2003/04/01 5133 1194
333   [알고리즘] String ELF Hash 함수  김영대 2004/09/17 4646 1193
332   [시스템] CPU 종류 구하기  김영대 2003/03/07 4761 1193

[이전 10개] [1]..[11][12][13][14][15] 16 [17][18][19][20]..[25] [다음 10개]
 

Copyright 1999-2021 Zeroboard / skin by zero