#内容
別の測定器のデータ抜き出しのために、RPAを作っています。
EXCEL(VBA)をベースに開発していますが、いくつか機能が足りないので、win32のAPIを触っています。
#課題
現在、直面している課題は、ウィンドウフォームの画面をスクリーンコピーする部分ですが、
ウィンドウにスクロールバーが縦、横に配置されていて、フォーム画面をキャプチャする場合に
エリア全体がデスクトップ画面に無い状態です。
ウィンドウに最大化のメッセージを送っても、画面の矩形寸法が固定されているようで、
それ以上が大きく出来ない状態です。
#質問内容
確認したいことは、下記の2点です。
1)非表示エリアへのアクセス方法
そもそも、グラフィック画面の中に、データは表示されているのであれば、
スクロールバーを触らずに、スクリーンショットに相当する画像データーを
直接引き出したいです。
2)ウィンドウの最大化
フォームのプロパティを触って、最大化する寸法を変更できるのであれば、
スクロールバーが無くなるぐらい状態まで拡大して、それをキャプチャしたいです。
いずれにしろ、上記ができないとなると、
スクロールバーを動かして、キャプチャを繰り返して、
後処理で画像結合などの、面倒な手続きになります。
#補足
いろいろWEBで調査をしているのですが、WINFORMへのアクセスして、
ウィンドウハンドルへのメッセージ送信で最大化は出来ましたが、
フォームに指定された寸法以上にはなりませんでした。
BITBLTで画像転送サイズを指定しても、グラフィック情報からは、
PC画面に出ているものしか得られませんでした
1)については、スクロールしていない箇所は、メモリにも存在しない・・・?
ので、無理のような気がしています。
2)については、サブクラス化という方法で、PROCESSを奪い取り、
WINPROCのメッセージで処理できることを理解しましたが、
やはりプロパティに直接アクセスする方法が分かりません。
https://stackoverflow.com/questions/49913981/win-form-vanishes-on-maximizing
c#
1[DllImport("user32.dll")] 2 static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int 3nHeight, bool bRepaint); 4 private void button1_Click(object sender, System.EventArgs e) 5 { 6 MoveWindow(this.Handle, 0,0, 2000, 2000, true); 7 //Call UpdateBounds in order form to relayout its controls 8 this.UpdateBounds(); 9 } 10 11Don't forget to set form's MaximumSize property to some bigger value
回答1件
あなたの回答
tips
プレビュー