마우스 위치만을 판단하셔서 작업하신다면 아래와 같이 하실 수 있습니다.
단순하게 클립보드에 복사하셔서 붙여넣기 하는 식으로 작업하시면 될것 같습니다.
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를 클릭할려고 합니다.
: : : : : 그런데 그 방법좀 부탁합니다.
: : : : : 감사합니다.
: : : : :
: : : : :