2012-02-23 10 views
1

コンソールアプリケーションのようなGUIウィンドウを表示せずにC#フォームアプリケーションを実行する方法はありますか?私はwebkit.net controlにロードされたウェブページのスクリーンショーツを取ろうとしています。guiウィンドウを表示せずに(コンソールアプリケーションのように)C#フォームアプリケーションを実行する方法はありますか?

すべてがうまくいき、スクリーンショットを取得できますが、ウィンドウを表示せずにアプリケーションを実行する方法があれば、それをスクリプトに組み込んでウェブページのキャプチャを自動化することができます。

私は試してみました:form.hide()メソッドですが、どういう方法で何も隠さない方法です。

+2

コンソールアプリケーションを作成しようとしましたか? –

+0

私は彼がコンソールを望んでいないと思う。何らかの理由で@ LBの提案がうまくいかない場合、彼はバックグラウンドで(サービスとしてではなく)実行させるためにポップアップを望んでいないと思います。 –

+0

メインウィンドウは最小化された –

答えて

6

新しいWinFormsアプリケーションを作成するときは、アプリケーション内でForm1.csとデザイナーファイルを削除します。

その後、次のコードを持っているProgram.csのmainメソッド内:

Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 

これらの行を削除し、あなたの代わりに必要なものを置きます。内部に何らかのループを追加してプログラムを実行し続ける場合は、Mainメソッドが返されないことを確認してください。

NotifyIconの作成を検討して、プログラムがタスクバーの通知領域内に通知アイコンを表示するようにすることもできます。この方法で、通知アイコンにメニューを追加して、ユーザーがアプリケーションを操作して閉じることができるようにします。

+0

私はこれがOPが求めているとは思わない - 私は彼がWebページをフェッチして、それをスクリーンではなくビットマップに直接レンダリングしたいと思う –

1

ここでやりたいことはAPIによってサポートされていない可能性があります。私の提案は、WinFormsコントロールを必要とせずにスクリーンショットを作成する何らかの方法でWebKitライブラリを検索することです。あなたが解決策にこのパスを取りたい場合は

次で「Program.csの」でApplication.Run(new Form1());を交換しようとするかもしれません:

using (Form1 form = new Form1()) 
{ 
    form1.webKit1.DoScreenshot() // Just guessing on the API here 
} 

私は、これは実際に動作することを保証することはできません。それとも、Webkit.netの新しい将来のバージョンで動作し続けるだろうか。

2

私はWebkit.net APIに慣れていませんが、Windowsフォームコントロールを提供すると述べました。コントロールをビットマップにペイントするSystem.Windows.Forms.Control.DrawToBitmapがあります。また、コントロールをフォームに配置する必要はありません。あなたのwebkit.netコントロールをペイントするためにそれを修正する必要があります - 私はボタンを使用することを

static void Main() 
{ 
    // Leave these lines here! 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    // change this in order to use the webkit control 
    Control ctrl = new Button { Width = 100, Height = 23, Text = "abc" }; 

    using (Bitmap bitmap = new Bitmap(ctrl.Width, ctrl.Height, PixelFormat.Format32bppRgb)) 
    { 
     ctrl.DrawToBitmap(bitmap, new Rectangle(0, 0, ctrl.Width, ctrl.Height)); 
     bitmap.Save("test.png"); 
    } 
} 

注:ØyvindKnobloch-Bråthenのアプローチを使用して

、サンプルMain方法は次のようになります。

0

自分のアプリケーションでサードパーティのコントロールからスクリーングラバーを取得することはほとんどできません。画面にウィンドウが表示されていない場合(開いていない、オフスクリーンで開かれたもの、または何かの背後でさえも)レンダリングされません。

Webkitにオフスクリーンビットマップにレンダリングするための特定のメカニズムがある場合、コントロールを表示せずに必要な画像を生成することができます。@Stephanが指摘したように、DrawToBitmapが機能するかもしれません。それを超えると、隠されたデスクトップやその他のハッカーでアプリケーションを実行する複雑な領域になる可能性があります。

関連する問題