Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[9764] Re:Re:Re:Re:Re:Re:[질문]유영인님 한번 더 부탁합니다.
이동안 [] 1294 읽음    2004-07-19 13:47
감사합니다.
더욱더 열심히 하겠습니다.

유영인  Cuperido 님이 쓰신 글 :
: 마우스 위치만을 판단하셔서 작업하신다면 아래와 같이 하실 수 있습니다.
: 단순하게 클립보드에 복사하셔서 붙여넣기 하는 식으로 작업하시면 될것 같습니다.
:
:
: cuperido
:
:
: unit Unit1;
:
: interface
:
: uses
:   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
:   StdCtrls, ExtCtrls, OleCtrls, SHDocVw;
:
: type
:   TForm1 = class(TForm)
:     Panel1: TPanel;
:     Edit1: TEdit;
:     Edit2: TEdit;
:     Button1: TButton;
:     WebBrowser1: TWebBrowser;
:     Button2: TButton;
:     procedure Button1Click(Sender: TObject);
:     procedure Button2Click(Sender: TObject);
:   private
:     { Private declarations }
:   public
:     { Public declarations }
:   end;
:
: var
:   Form1: TForm1;
:
: implementation
:
: {$R *.DFM}
:
: procedure MouseClick(itX : Integer; itY : Integer);
: begin
:
:  SetCursorPos(itX, itY);
:  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
:  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
:  Application.ProcessMessages();
:
: end;
:
: procedure Paste();
: begin
:
:  keybd_event(VK_CONTROL, 0, 0, 0);
:  keybd_event(ord('V'), 0, 0, 0);
:  keybd_event(ord('V'), 0, KEYEVENTF_KEYUP, 0);
:  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
:  Application.ProcessMessages();
:
: end;
:
: procedure TForm1.Button1Click(Sender: TObject);
: begin
:
:  WebBrowser1.Navigate('http://kr.yahoo.com/');
:
: end;
:
: procedure TForm1.Button2Click(Sender: TObject);
: begin
:
:  MouseClick(Form1.Left + 550, Form1.Top + 225);
:  Edit1.SelectAll;
:  Edit1.CopyToClipboard;
:  Paste();
:
:  Sleep(100);
:
:  MouseClick(Form1.Left + 550, Form1.Top + 250);
:  Edit2.SelectAll;
:  Edit2.CopyToClipboard;
:  Paste();
:
:  Sleep(100);
:
:  MouseClick(Form1.Left + 670, Form1.Top + 230);
:
: end;
:
: end.
:
:
: 이동안 님이 쓰신 글 :
: : 정말 성실히 답변에 주셔서 감사합니다.
: : 너무나 큰 도움이 되었습니다.
: : 그런데 제가 정확히 알려고 하는것은
: : id의 입력버턴에 마우스(SetCursorPos(500,600))로 위치하여 edit1.text값을 id에 대입하는것입니다.
: : 그런데 그 id값(vaDocument.Forms.Item(itCount).Item(itItemCount).Name)이 login으로 변수가 정해진것은 아닙니다.
: : 또 그 입력버턴이 1개 2개 정해진것이 아닙니다.
: : 만일 입력버턴에 테스트의 값을 대입시키는 방법만 알고 싶은것입니다.
: : 그리고 입력버턴이 정해진것이 아니기 때문에 위치(x,y)를 화일처리 할려고 합니다.
: : 너무나 제가 저의 노력은 안하고 제 입장만 말하는것 같아 죄송합니다. 그런데 이쪽은 전혀 가닥이 잡히지 안습니다.
: : 또 웹브라우저에 대하여 노력하겠습니다.
: : 그리고 저는 델6를 사용하고 있습니다.
: : 갑사합니다.
: : ////////////////////////////////////////////////////////////////////////////////////////////////////
: :
: : 유영인  Cuperido 님이 쓰신 글 :
: : : 3번 방법을 이용하여 한 방법이 보다 정확해서 그렇게 예제를 꾸미다가
: : : 보통은 이렇게 하고 Submit 이벤트를 호출하면 되는데,
: : : Yahoo는 조금 특별해서 자동 로그인 검사까지 하는군요.
: : : (마우스로 클릭을 하였을때 특정 변수를 올려서 로그인 폼을 직접 찍었는지 검사합니다)
: : :
: : : 그래서, 아이디와 패스워드는 소스 파일을 이용해서 갈아치우는 방법
: : : 로그인 버튼은 직접 눌러주는 방법으로 예제를 만들었습니다.
: : : (전체 소스와 실행을 해보시려면 첨부파일을 참조하세요)
: : :
: : : 계속 연구해서 Submit 을 호출하는 방법으로 깔끔히 처리해 보시는 것도... :)
: : :
: : :
: : : cuperido
: : :
: : :
: : : unit Unit1;
: : :
: : : interface
: : :
: : : uses
: : :   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
: : :   StdCtrls, ExtCtrls, OleCtrls, SHDocVw;
: : :
: : : type
: : :   TForm1 = class(TForm)
: : :     Panel1: TPanel;
: : :     Edit1: TEdit;
: : :     Edit2: TEdit;
: : :     Button1: TButton;
: : :     WebBrowser1: TWebBrowser;
: : :     procedure Button1Click(Sender: TObject);
: : :     procedure WebBrowser1DocumentComplete(Sender: TObject;
: : :       const pDisp: IDispatch; var URL: OleVariant);
: : :   private
: : :     { Private declarations }
: : :   public
: : :     { Public declarations }
: : :   end;
: : :
: : : var
: : :   Form1: TForm1;
: : :
: : : implementation
: : :
: : : {$R *.DFM}
: : :
: : : procedure TForm1.Button1Click(Sender: TObject);
: : : begin
: : :
: : :  WebBrowser1.Navigate('http://kr.yahoo.com/');
: : :
: : : end;
: : :
: : : procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
: : : var
: : :  stSource, stURL : string;
: : :  vaDocument : OleVariant;
: : :  itCount, itItemCount : Integer;
: : :  blHaveToLogin : boolean;
: : : begin
: : :
: : :  // Home에서만 처리하도록 함
: : :  stURL := URL;
: : :  if stURL <> 'http://kr.yahoo.com/' then exit;
: : :
: : :  if VarIsEmpty(WebBrowser1.Document) or VarIsNull(WebBrowser1.Document) then exit;
: : :  vaDocument := WebBrowser1.Document;
: : :
: : :  blHaveToLogin := false;
: : :
: : :  for itCount := 0 to vaDocument.Forms.Length - 1 do
: : :  begin
: : :    for itItemCount := 0 to vaDocument.Forms.Item(itCount).Length - 1 do
: : :    begin
: : :      if vaDocument.Forms.Item(itCount).Item(itItemCount).Name = 'login' then
: : :      begin
: : :        vaDocument.Forms.Item(itCount).Item(itItemCount).Value := Edit1.Text;
: : :        blHaveToLogin := true;
: : :      end;
: : :
: : :      if vaDocument.Forms.Item(itCount).Item(itItemCount).Name = 'passwd' then
: : :      begin
: : :        vaDocument.Forms.Item(itCount).Item(itItemCount).Value := Edit2.Text;
: : :        blHaveToLogin := true;
: : :      end;
: : :    end;
: : :  end;
: : :
: : :  if blHaveToLogin then
: : :  begin
: : :    SetCursorPos(Form1.Left + 670, Form1.Top + 230);
: : :    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
: : :    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
: : :  end;
: : :
: : : end;
: : :
: : : end.
: : :
: : :
: : : 이동안 님이 쓰신 글 :
: : : : 답변 감사합니다.
: : : : 그럼 제가 올린소스는 왜 안된느지 또는 어떤 방법으로 해야 되는지 좀 부탁합니다.
: : : : 마우스로까지는 id와 passsword에 포커스를 이동하는것까지는 하였습니다,
: : : : 또 마우스 다운 업 또는 리턴까지도 가능합니다.
: : : : 그런데 클릭보드(Edit1.Text)에 들어있는 값을 id포커스에 자동으로 보내고 하는 작업은 아직 헤메고 있습니다.
: : : : 또 밑에 소스를 보시고 작성하는 순서가 올바른지 아니면 방법을 좀 부탁합니다.
: : : : 하여튼 감사합니다.
: : : :
: : : : //////////////////////////////////
: : : :
: : : : 유영인  Cuperido 님이 쓰신 글 :
: : : : : 자동 로그인을 구현하기 위해서는 몇가지 정도의 방법이 있습니다.
: : : : :
: : : : : 1. 시뮬레이션
: : : : : 이동안님께서 하신 방법처럼 하시는 방법인데, 이 방법은 다른 사람들에게 배포시에는
: : : : : 상당한 여러움이 발생할 수 있습니다. 객체의 위치가 OS마다 IE 버젼, IE를 크기를
: : : : : 어디에 맞추었는지에 따라 다르기 때문 인데요, 물론 자신만 사용할 것이면 상관이
: : : : : 없겠지만, 그렇지 않은 경우에는 당연히 엉뚱한 곳을 찍는 문제가 발견됩니다.
: : : : : 하지만 매우 쉽게 구현할 수 있겠지요.
: : : : :
: : : : : 2. 쿠키 생성
: : : : : IE를 이용하지 않는 객체라면, 쿠키값을 만들어줌으로써 자동 로그인을 구현할 수 있습니다.
: : : : : 당연히, IE에서만 지원되는 것은 처리되지 않지만, 자동 게시물 쓰기 라든지의 프로그램등에서
: : : : : 볼 수 있는 기능들처럼, IE 기능이 필요한 없는 곳에서는 사용이 편리하고 꽤 정확합니다.
: : : : :
: : : : : 3. IE 객체 생성
: : : : : WebBrowser 컴포넌트로 생성된 IE에서 이벤트를 이용함으로 보다 정확하게 접근할 수 있겠습니다.
: : : : : 결과적으로는 아래의 COM 방식과 동일하겠지만, 프로그래머 입장으로서는 이미 맵핑되어 있는
: : : : : 이벤트를 만질 수 있어 보다 조금 정확하게 구현할 수 있습니다. 이러한 방법으로는 홈페이지가
: : : : : 모드 로드되었을때를 기준으로 해서 소스를 바꿔치기 해버리는 방법으로 구현합니다.
: : : : :
: : : : : 4. IE COM 연결
: : : : : COM 객체로 연결하여 인터페이스를 생성하고 원하는 객체를 바꾸는 방법입니다. 이 방법의 장점은
: : : : : 굳이 내포시키지 않더라도, 사용자가 따로 띄운 IE에서도 동작을 할 수 있게끔 할 수 있다는
: : : : : 것이고요. 자동 로그인 프로그램들이 이러한 방식을 사용하고 있습니다. 물론, 이 방법이 가장
: : : : : 까다롭고, 로그인 정도면 무난하겠지만, 더 깊은 부분의 경우에는 책 한권을 봐야할 정도의 많은
: : : : : 레퍼런스가 필요합니다.
: : : : :
: : : : :
: : : : : 1번 방법을 답변해 드리려고 하니, 제 PC에 맞춰서 설명을 드리자면 실행을 하실때 실행이 안되는
: : : : : 경우가 발생할것 같아서, 여러 방법을 다시 말씀드렸습니다. 원하시는 스펙에 따른 방법을 선택해
: : : : : 주시면 그 해당하는 방법을 답변해 드리겠습니다. :)
: : : : :
: : : : :
: : : : : cuperido
: : : : :
: : : : :
: : : : :
: : : : : 이동안 님이 쓰신 글 :
: : : : : : 안녕하세요
: : : : : : 좀처럼 처음 해보는 일입니다. 도움좀 부탁합니다.
: : : : : : //////////////////////////////////////////////////////////////////
: : : : : :      //
: : : : : :      IE := CreateOLEObject('InternetExplorer.Application');
: : : : : :      IE.Visible     := True;
: : : : : :      IE.ToolBar     := False;
: : : : : :      IE.Resizable   := False;
: : : : : :      //.TheaterMode := True ;
: : : : : :      IE.Left        := 0    ;
: : : : : :      IE.Top         := 0    ;
: : : : : :      IE.Width       := 800  ;
: : : : : :      IE.Height      := 700  ;
: : : : : :      IE.Navigate(URL);
: : : : : :      //
: : : : : :      Setcursorpos(400,130);        // 커서를 x,y 좌표이용하여 id에 위치 시킵니다.
: : : : : :      Edit1.text := 'winsoft';      // id
: : : : : :      Edit1.setfocus;
: : : : : :      Edit1.copyToClipboard;
: : : : : :      //
: : : : : :      Edit2.text := 'winsoft';      // password
: : : : : :      Edit2.setfocus;
: : : : : :      Edit3.copyToClipboard;
: : : : : :
: : : : : : 위에 테스트문자값을 야후의 id와 password에 입력후 자동으로  Login를 클릭할려고 합니다.
: : : : : : 그런데 그 방법좀 부탁합니다.
: : : : : : 감사합니다.
: : : : : : 
: : : : : :

+ -

관련 글 리스트
9750 [질문]야후 싸이트에서 Edit1,Edit2값을 id,password를 보내기 입니다.......부탁합니다. 이동안 1163 2004/07/17
9752     Re:[질문]야후 싸이트에서 Edit1,Edit2값을 id,password를 보내기 입니다.......부탁합니다. 유영인 Cuperido 1393 2004/07/17
9753         Re:Re:[질문]유영인님 한번 더 부탁합니다. 이동안 1087 2004/07/18
9755             Re:Re:Re:[질문]유영인님 한번 더 부탁합니다. 유영인 Cuperido 1297 2004/07/18
9757                 Re:Re:Re:Re:[질문]유영인님 한번 더 부탁합니다. 이동안 1128 2004/07/18
9760                     Re:Re:Re:Re:Re:[질문]유영인님 한번 더 부탁합니다. 유영인 Cuperido 1475 2004/07/18
9764                         Re:Re:Re:Re:Re:Re:[질문]유영인님 한번 더 부탁합니다. 이동안 1294 2004/07/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.