2012-05-02 17 views
4

asp.netページから、ClickOnceデプロイメントによって.Net WinFormsアプリケーションが起動します。 ある時点で、WinFormアプリケーションは、開始されたWebページを更新する必要があります。.Net WinFormsアプリケーションからブラウザのページをプログラムで更新します。

どうすればいいですか? .NETベースのWindowsアプリケーションで、ブラウザで既に開いているページをリフレッシュするにはどうすればよいですか?

+0

実際にWebブラウザをWinFormsアプリケーションから制御する必要がある場合は、おそらく 'WebBrowser'コントロールを使用しているはずです。 – jrummell

+0

WinFormアプリケーションは、問題のWebページが属するWebサイトが提供している機能のほんの一部を提供しています。だから不幸なことに、オプションではなく、ありがとう! – Tulinside

答えて

3

の変形であります堅牢です。たとえば、ユーザーがIEを使用していない可能性があります。

あなたがコントロールするのは、WebページとWindowsアプリケーションに共通するものは、Webサーバーだけです。

このソリューションは複雑ですが、私はそれがうまくいくと考えることができる唯一の方法です。

1)Windowsアプリケーションを実行する前に、Webサーバーに長いポーリング接続を開くようにWebページを取得します。今のところ、SignalRはこれに対して良いプレッシャーを得ています。

2)Webページを更新するときに、サーバーに信号を送信するようにWindowsアプリケーションを取得します。

3)サーバーで、長いポーリング要求を完了し、Webブラウザに信号を送り返します。

4)Webページで、ページを更新して応答を処理します。

私はそれが巻き返したと言った!

+0

それは巻き込まれるかもしれない...しかし、それを行う方法です。 – Reddog

+0

答えをありがとう。非常に興味深く、まったく新しいです。私は確かにこれを試してみます。しかし、当面はイカルスが提案したより速い選択肢が私の必要なものです。 – Tulinside

3

は、ここでは、(単に関連部分)必要なものを行うにはいくつかのサンプルコードです:

using System.Runtime.InteropServices; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     // Get a handle to an application window. 
     [DllImport("USER32.DLL", CharSet = CharSet.Unicode)] 
     public static extern IntPtr FindWindow(string lpClassName, 
      string lpWindowName); 

     // Activate an application window. 
     [DllImport("USER32.DLL")] 
     public static extern bool SetForegroundWindow(IntPtr hWnd); 


     private void RefreshExplorer() 
     { 
      //You may want to receive the window caption as a parameter... 
      //hard-coded for now. 
      // Get a handle to the current instance of IE based on window title. 
      // Using Google as an example - Window caption when one navigates to google.com 
      IntPtr explorerHandle = FindWindow("IEFrame", "Google - Windows Internet Explorer"); 

      // Verify that we found the Window. 
      if (explorerHandle == IntPtr.Zero) 
      { 
       MessageBox.Show("Didn't find an instance of IE"); 
       return; 
      } 

      SetForegroundWindow(explorerHandle); 
      //Refresh the page 
      SendKeys.Send("{F5}"); //The page will refresh. 
     } 
    } 
} 

注:コードは、これはそのように行うのは簡単ではありませんthis MSDN example.

+0

答えがありがとう、このような何かが私が予想していたものです、私は推測します。私は今試してみる。 – Tulinside

+0

@Tulinsideウィンドウを列挙し、必要なウィンドウを正確に見つける方法はたくさんあります。ブラウザウィンドウを「確実に」特定できないという下記の回答に必ずしも同意するわけではありません。 – Icarus

+0

それは動作します。私はIEのためだけに必要なので、この解決策は今のところ十分です。 – Tulinside

関連する問題