Q&A

  • Sendmessage 사용이 않돼네요?
두개의 실행모듈간 interface 가 필요합니다.
팁에 게시된 오병종님의 Source 를 참조했으나 잘안되어서.....
Delphi V4 이고요 os는 Windows me 입니다.......

Sned.exe Source
-----------------------------------------
unit Send;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  WinTypes, WinProcs, StdCtrls, Grids, ExtCtrls, Buttons, shellapi;

type
  TsendF = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Memo1: TMemo;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  sendF: TsendF;

implementation

{$R *.DFM}

procedure TsendF.Button1Click(Sender: TObject);
var
   hWndMe  : HWnd;
   str1,str2 : string;
begin
   str1 := '12345';
   hwndme := FindWindow('TApplication', pchar(str1));
   if (hWndMe <> 0) then
      begin
      showmessage(' 이미 수행중입니다.!!');
      SetactiveWindow(hWndMe);
      BringWindowToTop(hWndMe);
      ShowWindow(hWndMe, SW_SHOWNORMAL);
      exit;
      end;

   str2 := 'project2.exe ' + '12345 ';
   shellExecute(0,'',PChar(ExtractFileDirApplication.ExeName) +
               '\Project2.exe'), PChar(str2),'',SW_SHOWNORMAL);
end;

procedure TsendF.FormCreate(Sender: TObject);
var
   hWndMe  : HWnd;
begin

   hwndme := FindWindow('TApplication','send');
   if (hWndMe <> 0) then
      begin
      showmessage(' 이미 send 프로그램이 수행중입니다.!!');
      SetForegroundWindow(hWndMe);
      SetactiveWindow(hWndMe);
      BringWindowToTop(hWndMe);
      ShowWindow(hWndMe, SW_SHOWNORMAL);
      exit;
      end
   else
      begin
      Application.Title := 'send';
      hwndme := FindWindow('TApplication','send');
      BringWindowToTop(hWndMe);
      end;

end;

procedure TsendF.Button4Click(Sender: TObject);
var  hWndMe  : HWnd;
     str1 : string;
begin
   str1 := '12345';
   hwndme := FindWindow('TApplication', pchar(str1));
   if (hWndMe <> 0) then
      begin
      SendMessage(hwndme, WM_USER + 1,1,1 );
//      SendMessage(hwndme, WM_CLOSE,0,0 );
// WM_CLOSE 는 잘됨.....
      end;
end;

Receive.exe Source
-----------------------------------------
unit Receive;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, WinTypes, WinProcs, StdCtrls, Grids, ExtCtrls, Buttons,
  shellapi;

type
  TReceiveF = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure UserFunction(var AUserMessage: TMessage); Message
                          WM_USER + 1;
  private
    { Private declarations }
  public
    { Public declarations }
end;

var
  ReceiveF: TReceiveF;

implementation

{$R *.DFM}

procedure TReceiveF.UserFunction(var AUserMessage: TMessage);
var
begin
     showmessage('receive');
end;

procedure TReceiveF.FormCreate(Sender: TObject);
var
   hWndMe  : HWnd;
   d_strTmp : string;
begin
   d_strTmp :=  paramstr(2);
   hwndme := FindWindow('TApplication',pchar(d_strTmp));
   if (hWndMe <> 0) then
      begin
      showmessage(' 이미 rec 프로그램이 수행중입니다.!!');
      SetForegroundWindow(hWndMe);
      SetactiveWindow(hWndMe);
      BringWindowToTop(hWndMe);
      ShowWindow(hWndMe, SW_SHOWNORMAL);
      exit;
      end
   else
      begin
      Application.Title := d_strTmp;
      hwndme := FindWindow('TApplication',pchar(d_strTmp));
      BringWindowToTop(hWndMe);
      end;

end;

end.end.
1  COMMENTS
  • Profile
    서기원 2004.08.26 00:12
    procedure TsendF.Button4Click(Sender: TObject);
    var  hWndMe  : HWnd;
         str1 : string;
    begin
       str1 := '12345';
       hwndme := FindWindow('TReceiveF', nil);
       if (hWndMe <> 0) then
          begin
          SendMessage(hwndme, WM_USER + 1,1,1 );
    //      SendMessage(hwndme, WM_CLOSE,0,0 );
    // WM_CLOSE 는 잘됨.....
          end;
    end;

    FindWindow에서 첫번째 인자가 클래스 명이니까
    메시지를 받는 폼의 클래스 명을 입력해야하지 않나요?
    아니면 두번째 인자인 윈도우 이름을 맞춰주시던지...

    즐프하세요..

    • [勳]후니
      2004.08.26 03:29
      에러가 발생하는 부분이 try 절 안에서가 맞나요? 거기 지나가고 나서 에러가 발생하는거 같은데요... ...
    • 깨구락지
      2004.08.27 06:42
      예, try 절이 맞습니다. delete 와 insert 를 하고 있지요. starttransaction try   delete ...
    • 모아
    • 2004.08.25 05:05
    • 1 COMMENTS
    • /
    • 1 LIKES
    • 서기원
      2004.08.26 00:12
      procedure TsendF.Button4Click(Sender: TObject); var  hWndMe  : HWnd;  &nb...
    • 최용일
      2004.08.25 04:24
      안녕하세요. 최용일입니다. 메뉴 클릭이벤트에서 Sender란 파라매터를 참조하세요... procedure Form...
    • 최동열
    • 2004.08.25 02:37
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 주재환
      2004.08.25 02:56
      Chart1.Series[0].ValueFormat := '#.000';  <- 소숫점 셋째자리까지 표현하기...
    • 최동열
      2004.08.25 04:18
      procedure TMain_Form.sbtn_graphClick(Sender: TObject); var I: Integer; begin    chart1...
    • 최용일
      2004.08.25 04:23
      안녕하세요. 최용일입니다. 아마도 StrToInt에서 에러가 난거 같은데... grdmain.cells[I, 0].asstri...
    • 김형균
    • 2004.08.25 00:35
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 김형균
      2004.08.25 02:21
    • 착한천사
      2004.08.25 02:25
    • 김형균
      2004.08.25 02:32
    • 착한천사
      2004.08.25 02:37
    • 김형균
      2004.08.25 02:40
    • 착한천사
      2004.08.30 01:50
    • 초롱
    • 2004.08.25 00:25
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김춘경
      2004.09.07 19:00
      저는 개인적으로 "인스톨팩토리"를 추천합니다. 저도 과거에 인스톨 쉴드 써 봤지만, 너무 많은 환경을 ...
    • 주재환
      2004.08.25 03:02
      빌드하기전에 Project Option에서 Packages 탭을 클릭하면 Runtime Packages에 Build with runtime packa...
    • 초롱
      2004.08.25 03:09
      아 감사합니다..... 조금더 공부를 해봐야 겠네여...^^
    • 김진국
    • 2004.08.25 00:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2004.08.25 02:22
      우회적인 답변을 해 드리도록 하겠습니다.. 간단히, Oracle에 접속해서 DB작업을 하는 Application을 개발...
    • 김태혁
    • 2004.08.25 00:08
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김진국
      2004.08.25 00:21
      이런 답변 드려도 될지 모르겠는데, Delphi 책중에 DB 관련 도서를 딱  한 권만 보세요.. ...
    • 최용일
      2004.08.24 23:10
      안녕하세요. 최용일입니다. 그냥 Navigate하시면 됩니다...   WebBrowser1.Navigate('C:\T...
    • 착한천사
      2004.08.25 02:29
      제가 옛날에 개발했던 경험으로는 Paradox를 썼을때에는 BDE나 ODBC를 통하지 않고, 직접 제어를 했었습...
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.08.24 20:53
      애궁 해결했어요... 제가 dll이름을 잘못 기입한거 있죠...
    • 최용일
      2004.08.24 18:24
      안녕하세요. 최용일입니다. 인수는 도스에서 프로그램실행할 때 처럼 스페이스로 한칸 띄우고 쓰시면 됩...
    • 물방울
      2004.08.24 18:59
      그냥 QRExpr에서 count변수만 지정해주면 됩니다.
    • 미소^^
      2004.08.24 22:28
      이렇게 했거든요.. COUNT(Q062150.BANK_NAME)
    • 물방울
      2004.08.24 23:22
      QRExpr 의 프로퍼티 Expression   Function 에서 Count선택후 Continue => OK 자동카...
    • 이진기
    • 2004.08.24 04:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2004.08.31 00:53
      DsPack샘플에 저장하는 예제가 있습니다. ^^
    • 물방울
    • 2004.08.24 03:32
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 서기원
      2004.08.24 04:57
      값을 Chart에 어떻게 입력하시는지 모르겠는데.. TChartSeries에서 AddXY함수를 이용하시면 될 것 같습...
    • 물방울
      2004.08.24 06:38
      제가 원하는 내용의 이미지를 첨부합니다. 그리드에 임의로 값을 넣구요 그리드의 값에 따라 TChart에 ...
    • 이중철
      2004.08.24 07:18
      chart1.series[I].add(strtoint(grdmain.cells[J, I].asstring)       &nb...
    • 물방울
      2004.08.24 18:52
    • 서기원
      2004.08.24 02:42
      폼의 Icon프로퍼티에 아이콘을 등록했는데 안된다는 말씀이신가요? 어디서 지정하셨다는 것인지?
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.08.24 02:44
      폼의 아이콘에서요...
    • 서기원
      2004.08.24 04:53
      제가 테스트 한 바로는 잘 되는데... 혹시나 해서 제가 테스트한 프로젝트를 첨부하였습니다. 뭔가 다...
    • 야수
    • 2004.08.24 00:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2004.08.25 02:53
      방법적으로만 설명을 드리면, 일단, 퀵리포트는 단일 리포트를 사용하시면 되구요.. 퀵리포트에는 Page...
    • 물방울
      2004.08.24 19:13
      방법은 몇가지가 있을지 모르겠습니다만 Temp테이블을 만든후에 Temp테이블에 저장한후 미리보기하시고 ...
    • 곽영배
    • 2004.08.24 00:15
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 서기원
      2004.08.24 01:05
      uses절에 MSHTML을 추가하고 var   MyDocument : IHtmlDocument2; 이렇게 정의해 주시면 ...
    • 곽영배
      2004.08.24 02:27
    • 서기원
      2004.08.24 02:38
      WebBrowser1.Navigate를 호출하신 후에 btnPassingClick을 호출하신 것 맞는지요? WebBrowser1.Navigat...
    • 이추형
      2004.08.24 02:24
      음냥, 실행여부는 작업관리자의 리스트를 통해 알수 있지만 어느경로에서 실행되었는지를 알려면 찾기 ...