常駐とTWebBrowserについて


初心者+1  2004-09-17 10:30:05  No: 10965

いつもお世話になっております

自分で作ったソフトに常駐機能を付けたくて
http://www.borland.co.jp/qanda/delphi/d0009410.html
上記ページに書かれた内容をそのまま使用した所、作成したソフトの自動で
サイトにログインするという機能が動作しなくなってしまいました
(常駐無しの場合きちんと動作しています)

と言っても動作しなくなるのは
「起動直後から常駐を初めてその後一度も常駐を解除しなかった時」
つまり一度でもウィンドウを表示させてから常駐し直すと動作します

また、OnCreateイベントの
>procedure TForm1.FormCreate(Sender: TObject);
>begin
>  Application.ShowMainForm := False;
>  MoveToTaskTray;
>end;
「Application.ShowMainForm := False;」という行を削除し、
ウィンドウが表示されてからButton1をクリックして常駐させた場合には
問題なく動作します(上と言ってる事同じ?)

自動でサイトにログインする機能には TWebBrowserのOnDocumentComplete
イベントを使っていて、

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  hIE:HWND;
  tmp:OleVariant;
begin
  if LogingIn = true then
  begin
    hIE := FindWindowEx(WebBrowser1.Handle,0,'Shell DocObject View',nil);
    hIE := FindWindowEx(hIE,0,'Internet Explorer_Server',nil);
    if hIE = 0 then exit;
    //ID記述
    SendMessage(hIE,WM_LBUTTONDOWN,0,MakeLParam(X1,Y1));
    SendMessage(hIE,WM_LBUTTONUP,0,MakeLParam(X1,Y1));
    Edit1.SelectAll;
    Edit1.CopyToClipboard;
    WebBrowser1.ExecWB(OLECMDID_PASTE,OLECMDEXECOPT_DONTPROMPTUSER,tmp,tmp);
    //Pass記述
    SendMessage(hIE,WM_LBUTTONDOWN,0,MakeLParam(X2,Y2));
    SendMessage(hIE,WM_LBUTTONUP,0,MakeLParam(X2,Y2));
    Edit2.SelectAll;
    Edit2.CopyToClipboard;
    WebBrowser1.ExecWB(OLECMDID_PASTE,OLECMDEXECOPT_DONTPROMPTUSER,tmp,tmp);
    //ログインボタンを押す
    SendMessage(hIE,WM_LBUTTONDOWN,0,MakeLParam(X3,Y3));
    SendMessage(hIE,WM_LBUTTONUP,0,MakeLParam(X3,Y3));
    LogingIn := false;
  end;
end;

としているのですが、最初から常駐させていてウィンドウを一度も表示していない場合
常駐を解除した直後にこのイベントが実行されているようです。

よって別のURLを開いた後に常駐を解除してもログインできません
(Timerを使用して複数のサイトに順番にログイン)

上手く質問をまとめる事ができず、わかり難い文章になってしましました(汗

とりあえずお聞きしたいのは、
・何故一度常駐を解除(ウィンドウを表示)する必要があるのか
・ウィンドウを表示せずに一度は表示したのと同じ結果を得る方法
です


jam  2004-09-28 09:50:27  No: 10966

>・何故一度常駐を解除(ウィンドウを表示)する必要があるのか
おそらくウィンドハンドルが作成されていない為でしょう。

>・ウィンドウを表示せずに一度は表示したのと同じ結果を得る方法
FormCreate の最後にでも
 WebBrowser1.HandleNeeded;
を実行してみてはいかがでしょうか。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加