DoboWiki
Top
> .NETプログラミング研究/53 をテンプレートにして作成
.NETプログラミング研究/53 をテンプレートにして作成
開始行:
#title(.NETプログラミング研究 第53号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第53号 [#s2a805d9]
**お知らせ [#m4ebcd08]
***「.NETプログラミング研究」が「まぐまぐ!」殿堂入り [#k...
皆様のおかげでこのメールマガジン「.NETプログラミング研究...
-[[『まぐまぐ!』メールマガジン>http://www.mag2.com/]]
-[[『まぐまぐ!』殿堂入りメールマガジン一覧>科学・技術>h...
**.NET質問箱 [#f717ca80]
「.NET質問箱」では、「どぼん!のプログラミング掲示板」に...
-[[どぼん!のプログラミング掲示板>https://dobon.net/vb/bb...
***Buttonコントロールで矢印キーが押されたことを知るには?...
#column(注意){{
この記事の最新版は「[[コントロールで矢印、Tab、Enter、Esc...
}}
''【質問】''
System.Windows.Forms.ButtonコントロールのKeyDownイベント...
''【回答】''
System.Windows.Forms.ButtonクラスのProcessDialogKeyメソッ...
まず次のようなSystem.Windows.Forms.Buttonクラスの派生クラ...
#code(vbnet){{
Public Class MyButton
Inherits Button
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
'左キーが押されているか調べる
If (keyData And Keys.KeyCode) = Keys.Left Then
MessageBox.Show("左キーが押されました。")
'左キーの本来の処理(左側のコントロールにフォ...
'させたくないときは、trueを返す
'return true;
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
End Class
}}
#code(csharp){{
public class MyButton : Button
{
protected override bool ProcessDialogKey(Keys keyData)
{
//左キーが押されているか調べる
if ((keyData & Keys.KeyCode) == Keys.Left)
{
MessageBox.Show("左キーが押されました。");
//左キーの本来の処理(左側のコントロールにフ...
//させたくないときは、trueを返す
//return true;
}
return base.ProcessDialogKey(keyData);
}
}
}}
この様にして作成したMyButtonクラスをSystem.Windows.Forms....
○この記事の基になった掲示板のスレッド
-[[BUTTONのKeyPressイベントについて | 投稿者(敬称略) john...
○この記事の基になった掲示板のスレッド
-[[Tabキーイベントを発生させたい | 投稿者(敬称略) Dai, Co...
***Buttonコントロールにフォーカスがあるとフォームで矢印キ...
#column(注意){{
この記事の最新版は「[[Buttonコントロールにフォーカスがあ...
}}
''【質問】''
フォームのKeyPreviewプロパティをtrueにして、KeyDownやKeyU...
''【回答】''
矢印キーが押されたかをフォームで知る場合は、先の「Button...
具体的には、次のようなコードをフォームクラスに追加します...
#code(vbnet){{
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
If (keyData And Keys.KeyCode) = Keys.Left Then
'左キーが押されているか調べる
MessageBox.Show("左キーが押されました。")
'左キーの本来の処理(左側のコントロールにフォーカ...
'させたくないときは、trueを返す
Return True
ElseIf (keyData And Keys.KeyCode) = Keys.Tab Then
'Tabキーが押されているか調べる
MessageBox.Show("Tabキーが押されました。")
Return True
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
}}
#code(csharp){{
protected override bool ProcessDialogKey(Keys keyData)
{
//左キーが押されているか調べる
if ((keyData & Keys.KeyCode) == Keys.Left)
{
MessageBox.Show("左キーが押されました。");
//左キーの本来の処理(左側のコントロールにフォー...
//させたくないときは、trueを返す
return true;
}
//Tabキーが押されているか調べる
else if ((keyData & Keys.KeyCode) == Keys.Tab)
{
MessageBox.Show("Tabキーが押されました。");
return true;
}
return base.ProcessDialogKey(keyData);
}
}}
なおタブキーが押されたかを調べる場合は、Buttonのあるフォ...
#code(vbnet){{
Protected Overrides Function ProcessTabKey( _
ByVal forward As Boolean) As Boolean
MessageBox.Show("Tabキーが押されました。")
Return True
End Function
}}
#code(csharp){{
protected override bool ProcessTabKey(bool forward)
{
MessageBox.Show("Tabキーが押されました。");
return true;
}
}}
○この記事の基になった掲示板のスレッド
-[[フォーム での KeyDownイベント | 投稿者(敬称略) ヒロコ,...
***画面をキャプチャするには? [#qc3e4d0b]
#column(注意){{
この記事の最新版は「[[画面をキャプチャする>https://dobon....
}}
''【質問】''
画面をキャプチャ(ハードコピー)し、イメージをBitmapで取...
''【回答】''
最も簡単な方法は、Print ScreenキーストロークをSendKeys.Se...
ただしこの方法では確実に画面のイメージを取得できる保障は...
補足:MSDNには、「{PRTSC} (今後使用するために予約されてい...
-[[SendKeys.Send メソッド>http://www.microsoft.com/japan/...
この方法により画面全体のイメージを取得し、PictureBox(Pic...
#code(vbnet){{
'画面全体のイメージをクリップボードにコピー
SendKeys.SendWait("^{PRTSC}")
'次のようにすると、アクティブなウィンドウのイメージをコピー
'SendKeys.SendWait("{PRTSC}")
'SendKeys.SendWait("%{PRTSC}")
'DoEventsを呼び出したほうがよい場合があるらしい
'Application.DoEvents()
'クリップボードにあるデータの取得
Dim d As IDataObject = Clipboard.GetDataObject()
'ビットマップデータ形式に関連付けられているデータを取得
Dim img As Image = CType(d.GetData(DataFormats.Bitmap), I...
If Not (img Is Nothing) Then
'データが取得できたときはPictureBoxに表示する
PictureBox1.Image = img
'画面のイメージデータは大きいため、
'用がなくなればクリップボードから削除した方がいいかも...
Clipboard.SetDataObject(New DataObject)
End If
}}
#code(csharp){{
//画面全体のイメージをクリップボードにコピー
SendKeys.SendWait("^{PRTSC}");
//次のようにすると、アクティブなウィンドウのイメージをコ...
//SendKeys.SendWait("{PRTSC}");
//SendKeys.SendWait("%{PRTSC}");
//DoEventsを呼び出したほうがよい場合があるらしい
//Application.DoEvents();
//クリップボードにあるデータの取得
IDataObject d = Clipboard.GetDataObject();
//ビットマップデータ形式に関連付けられているデータを取得
Image img = (Image) d.GetData(DataFormats.Bitmap);
if (img != null)
{
//データが取得できたときはPictureBoxに表示する
PictureBox1.Image = img;
//画面のイメージデータは大きいため、
//用がなくなればクリップボードから削除した方がいいか...
Clipboard.SetDataObject(new DataObject());
}
}}
ちゃんとした画面キャプチャを行うには、Win32 APIを使うこと...
以下はC#のサンプルです。
-[[The Code Project - Screen Captures, Window Captures, a...
-[[Capture a Screen Shot (.NET) - Developer Fusion>http:/...
以下はVB.NETのサンプルです。
-[[Capture Screen>http://www.planet-source-code.com/vb/sc...
以下に画面全体をキャプチャするメソッド(CaptureScreen)と...
#code(vbnet){{
'Imports System.Runtime.InteropServices
Const SRCCOPY As Integer = 13369376
<DllImport("user32.dll")> _
Private Shared Function GetDC(ByVal hwnd As IntPtr) As In...
End Function
<DllImport("gdi32.dll")> _
Private Shared Function BitBlt(ByVal hDestDC As IntPtr, _
ByVal x As Integer, ByVal y As Integer, _
ByVal nWidth As Integer, ByVal nHeight As Integer, _
ByVal hSrcDC As IntPtr, _
ByVal xSrc As Integer, ByVal ySrc As Integer, _
ByVal dwRop As Integer) As Integer
End Function
<DllImport("user32.dll")> _
Private Shared Function ReleaseDC(ByVal hwnd As IntPtr, _
ByVal hdc As IntPtr) As IntPtr
End Function
''' <summary>
''' プライマリスクリーンの画像を取得する
''' </summary>
''' <returns>プライマリスクリーンの画像</returns>
Public Shared Function CaptureScreen() As Bitmap
'プライマリモニタのデバイスコンテキストを取得
Dim disDC As IntPtr = GetDC(IntPtr.Zero)
'Bitmapの作成
Dim bmp As New Bitmap(Screen.PrimaryScreen.Bounds.Wid...
Screen.PrimaryScreen.Bounds.Height)
'Graphicsの作成
Dim g As Graphics = Graphics.FromImage(bmp)
'Graphicsのデバイスコンテキストを取得
Dim hDC As IntPtr = g.GetHdc()
'Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, disDC, 0, 0,...
'解放
g.ReleaseHdc(hDC)
g.Dispose()
ReleaseDC(IntPtr.Zero, disDC)
Return bmp
End Function
<StructLayout(LayoutKind.Sequential)> _
Private Structure RECT
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
<DllImport("user32.dll")> _
Private Shared Function GetWindowDC(ByVal hwnd As IntPtr)...
End Function
<DllImport("user32.dll")> _
Private Shared Function GetForegroundWindow() As IntPtr
End Function
<DllImport("user32.dll")> _
Private Shared Function GetWindowRect(ByVal hwnd As IntPt...
ByRef lpRect As RECT) As Integer
End Function
''' <summary>
''' アクティブなウィンドウの画像を取得する
''' </summary>
''' <returns>アクティブなウィンドウの画像</returns>
Public Shared Function CaptureActiveWindow() As Bitmap
'アクティブなウィンドウのデバイスコンテキストを取得
Dim hWnd As IntPtr = GetForegroundWindow()
Dim winDC As IntPtr = GetWindowDC(hWnd)
'ウィンドウの大きさを取得
Dim winRect As New RECT
GetWindowRect(hWnd, winRect)
'Bitmapの作成
Dim bmp As New Bitmap(winRect.right - winRect.left, _
winRect.bottom - winRect.top)
'Graphicsの作成
Dim g As Graphics = Graphics.FromImage(bmp)
'Graphicsのデバイスコンテキストを取得
Dim hDC As IntPtr = g.GetHdc()
'Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, 0, 0,...
'解放
g.ReleaseHdc(hDC)
g.Dispose()
ReleaseDC(hWnd, winDC)
Return bmp
End Function
}}
#code(csharp){{
//using System.Runtime.InteropServices;
private const int SRCCOPY = 13369376;
[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("gdi32.dll")]
private static extern int BitBlt(IntPtr hDestDC,
int x,
int y,
int nWidth,
int nHeight,
IntPtr hSrcDC,
int xSrc,
int ySrc,
int dwRop);
[DllImport("user32.dll")]
private static extern IntPtr ReleaseDC(IntPtr hwnd, IntP...
/// <summary>
/// プライマリスクリーンの画像を取得する
/// </summary>
/// <returns>プライマリスクリーンの画像</returns>
public static Bitmap CaptureScreen()
{
//プライマリモニタのデバイスコンテキストを取得
IntPtr disDC = GetDC(IntPtr.Zero);
//Bitmapの作成
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.W...
Screen.PrimaryScreen.Bounds.Height);
//Graphicsの作成
Graphics g = Graphics.FromImage(bmp);
//Graphicsのデバイスコンテキストを取得
IntPtr hDC = g.GetHdc();
//Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height,
disDC, 0, 0, SRCCOPY);
//解放
g.ReleaseHdc(hDC);
g.Dispose();
ReleaseDC(IntPtr.Zero, disDC);
return bmp;
}
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[DllImport("user32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hwnd);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern int GetWindowRect(IntPtr hwnd,
ref RECT lpRect);
/// <summary>
/// アクティブなウィンドウの画像を取得する
/// </summary>
/// <returns>アクティブなウィンドウの画像</returns>
public static Bitmap CaptureActiveWindow()
{
//アクティブなウィンドウのデバイスコンテキストを取得
IntPtr hWnd = GetForegroundWindow();
IntPtr winDC = GetWindowDC(hWnd);
//ウィンドウの大きさを取得
RECT winRect = new RECT();
GetWindowRect(hWnd, ref winRect);
//Bitmapの作成
Bitmap bmp = new Bitmap(winRect.right - winRect.left,
winRect.bottom - winRect.top);
//Graphicsの作成
Graphics g = Graphics.FromImage(bmp);
//Graphicsのデバイスコンテキストを取得
IntPtr hDC = g.GetHdc();
//Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height,
winDC, 0, 0, SRCCOPY);
//解放
g.ReleaseHdc(hDC);
g.Dispose();
ReleaseDC(hWnd, winDC);
return bmp;
}
}}
○この記事の基になった掲示板のスレッド
-[[C#での画面ハードコピー | 投稿者(敬称略) Odagirizm, 管...
-[[指定範囲の画面のキャプチャについて | 投稿者(敬称略) to...
-[[画面のハードコピーをとりたい | 投稿者(敬称略) Dai, Cod...
***複数のRTFファイルを連結してRichTextBoxに表示するには?...
#column(注意){{
この記事の最新版は「[[複数のRTFファイルを連結してRichText...
}}
''【質問】''
複数のRTFファイルを連結したくて、RTFファイルをテキストと...
''【回答】''
RichTextBoxにRTFを挿入するには、RichTextBox.SelectedRtfプ...
次にRTFファイル"C:\1.rtf"、"C:\2.rtf"、"C:\3.rtf"を連結し...
#code(vbnet){{
'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Clear()
Dim i As Integer
For i = 1 To 3
'RTFファイルを読み込む
Dim sr As New System.IO.StreamReader( _
"C:\" + i.ToString() + ".rtf", _
System.Text.Encoding.GetEncoding(932))
Dim rtf As String = sr.ReadToEnd()
sr.Close()
'RichTextBox1に追加する
AppendRtfToRichTextBox(RichTextBox1, rtf)
Next i
End Sub
''' <summary>
''' RichTextBoxの末尾にRTFを追加
''' </summary>
''' <param name="rtb">RTFを追加するRichTextBox</param>
''' <param name="rtfText">追加するRTF文字列</param>
Public Shared Sub AppendRtfToRichTextBox( _
ByVal rtb As RichTextBox, ByVal rtfText As String)
rtb.SelectionStart = rtb.TextLength
rtb.SelectedRtf = rtfText
End Sub
}}
#code(csharp){{
//Button1のClickイベントハンドラ
private void Button1_Click(object sender, System.EventArg...
{
RichTextBox1.Clear();
for (int i = 1; i <= 3; i++)
{
//RTFファイルを読み込む
System.IO.StreamReader sr =
new System.IO.StreamReader(
"C:\\" + i.ToString() + ".rtf",
System.Text.Encoding.GetEncoding(932));
string rtf = sr.ReadToEnd();
sr.Close();
//RichTextBox1に追加する
AppendRtfToRichTextBox(RichTextBox1, rtf);
}
}
/// <summary>
/// RichTextBoxの末尾にRTFを追加
/// </summary>
/// <param name="rtb">RTFを追加するRichTextBox</param>
/// <param name="rtfText">追加するRTF文字列</param>
public static void AppendRtfToRichTextBox(
RichTextBox rtb, string rtfText)
{
rtb.SelectionStart = rtb.TextLength;
rtb.SelectedRtf = rtfText;
}
}}
参考:
-[[The Code Project - Insert Plain Text and Images into R...
○この記事の基になった掲示板のスレッド
-[[リッチテキストの文字列連結 | 投稿者(敬称略) 四季, りょ...
**コメント [#sad3f2ff]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2005-03-18 (金) 06:00:00,DOB...
終了行:
#title(.NETプログラミング研究 第53号)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第53号 [#s2a805d9]
**お知らせ [#m4ebcd08]
***「.NETプログラミング研究」が「まぐまぐ!」殿堂入り [#k...
皆様のおかげでこのメールマガジン「.NETプログラミング研究...
-[[『まぐまぐ!』メールマガジン>http://www.mag2.com/]]
-[[『まぐまぐ!』殿堂入りメールマガジン一覧>科学・技術>h...
**.NET質問箱 [#f717ca80]
「.NET質問箱」では、「どぼん!のプログラミング掲示板」に...
-[[どぼん!のプログラミング掲示板>https://dobon.net/vb/bb...
***Buttonコントロールで矢印キーが押されたことを知るには?...
#column(注意){{
この記事の最新版は「[[コントロールで矢印、Tab、Enter、Esc...
}}
''【質問】''
System.Windows.Forms.ButtonコントロールのKeyDownイベント...
''【回答】''
System.Windows.Forms.ButtonクラスのProcessDialogKeyメソッ...
まず次のようなSystem.Windows.Forms.Buttonクラスの派生クラ...
#code(vbnet){{
Public Class MyButton
Inherits Button
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
'左キーが押されているか調べる
If (keyData And Keys.KeyCode) = Keys.Left Then
MessageBox.Show("左キーが押されました。")
'左キーの本来の処理(左側のコントロールにフォ...
'させたくないときは、trueを返す
'return true;
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
End Class
}}
#code(csharp){{
public class MyButton : Button
{
protected override bool ProcessDialogKey(Keys keyData)
{
//左キーが押されているか調べる
if ((keyData & Keys.KeyCode) == Keys.Left)
{
MessageBox.Show("左キーが押されました。");
//左キーの本来の処理(左側のコントロールにフ...
//させたくないときは、trueを返す
//return true;
}
return base.ProcessDialogKey(keyData);
}
}
}}
この様にして作成したMyButtonクラスをSystem.Windows.Forms....
○この記事の基になった掲示板のスレッド
-[[BUTTONのKeyPressイベントについて | 投稿者(敬称略) john...
○この記事の基になった掲示板のスレッド
-[[Tabキーイベントを発生させたい | 投稿者(敬称略) Dai, Co...
***Buttonコントロールにフォーカスがあるとフォームで矢印キ...
#column(注意){{
この記事の最新版は「[[Buttonコントロールにフォーカスがあ...
}}
''【質問】''
フォームのKeyPreviewプロパティをtrueにして、KeyDownやKeyU...
''【回答】''
矢印キーが押されたかをフォームで知る場合は、先の「Button...
具体的には、次のようなコードをフォームクラスに追加します...
#code(vbnet){{
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
If (keyData And Keys.KeyCode) = Keys.Left Then
'左キーが押されているか調べる
MessageBox.Show("左キーが押されました。")
'左キーの本来の処理(左側のコントロールにフォーカ...
'させたくないときは、trueを返す
Return True
ElseIf (keyData And Keys.KeyCode) = Keys.Tab Then
'Tabキーが押されているか調べる
MessageBox.Show("Tabキーが押されました。")
Return True
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
}}
#code(csharp){{
protected override bool ProcessDialogKey(Keys keyData)
{
//左キーが押されているか調べる
if ((keyData & Keys.KeyCode) == Keys.Left)
{
MessageBox.Show("左キーが押されました。");
//左キーの本来の処理(左側のコントロールにフォー...
//させたくないときは、trueを返す
return true;
}
//Tabキーが押されているか調べる
else if ((keyData & Keys.KeyCode) == Keys.Tab)
{
MessageBox.Show("Tabキーが押されました。");
return true;
}
return base.ProcessDialogKey(keyData);
}
}}
なおタブキーが押されたかを調べる場合は、Buttonのあるフォ...
#code(vbnet){{
Protected Overrides Function ProcessTabKey( _
ByVal forward As Boolean) As Boolean
MessageBox.Show("Tabキーが押されました。")
Return True
End Function
}}
#code(csharp){{
protected override bool ProcessTabKey(bool forward)
{
MessageBox.Show("Tabキーが押されました。");
return true;
}
}}
○この記事の基になった掲示板のスレッド
-[[フォーム での KeyDownイベント | 投稿者(敬称略) ヒロコ,...
***画面をキャプチャするには? [#qc3e4d0b]
#column(注意){{
この記事の最新版は「[[画面をキャプチャする>https://dobon....
}}
''【質問】''
画面をキャプチャ(ハードコピー)し、イメージをBitmapで取...
''【回答】''
最も簡単な方法は、Print ScreenキーストロークをSendKeys.Se...
ただしこの方法では確実に画面のイメージを取得できる保障は...
補足:MSDNには、「{PRTSC} (今後使用するために予約されてい...
-[[SendKeys.Send メソッド>http://www.microsoft.com/japan/...
この方法により画面全体のイメージを取得し、PictureBox(Pic...
#code(vbnet){{
'画面全体のイメージをクリップボードにコピー
SendKeys.SendWait("^{PRTSC}")
'次のようにすると、アクティブなウィンドウのイメージをコピー
'SendKeys.SendWait("{PRTSC}")
'SendKeys.SendWait("%{PRTSC}")
'DoEventsを呼び出したほうがよい場合があるらしい
'Application.DoEvents()
'クリップボードにあるデータの取得
Dim d As IDataObject = Clipboard.GetDataObject()
'ビットマップデータ形式に関連付けられているデータを取得
Dim img As Image = CType(d.GetData(DataFormats.Bitmap), I...
If Not (img Is Nothing) Then
'データが取得できたときはPictureBoxに表示する
PictureBox1.Image = img
'画面のイメージデータは大きいため、
'用がなくなればクリップボードから削除した方がいいかも...
Clipboard.SetDataObject(New DataObject)
End If
}}
#code(csharp){{
//画面全体のイメージをクリップボードにコピー
SendKeys.SendWait("^{PRTSC}");
//次のようにすると、アクティブなウィンドウのイメージをコ...
//SendKeys.SendWait("{PRTSC}");
//SendKeys.SendWait("%{PRTSC}");
//DoEventsを呼び出したほうがよい場合があるらしい
//Application.DoEvents();
//クリップボードにあるデータの取得
IDataObject d = Clipboard.GetDataObject();
//ビットマップデータ形式に関連付けられているデータを取得
Image img = (Image) d.GetData(DataFormats.Bitmap);
if (img != null)
{
//データが取得できたときはPictureBoxに表示する
PictureBox1.Image = img;
//画面のイメージデータは大きいため、
//用がなくなればクリップボードから削除した方がいいか...
Clipboard.SetDataObject(new DataObject());
}
}}
ちゃんとした画面キャプチャを行うには、Win32 APIを使うこと...
以下はC#のサンプルです。
-[[The Code Project - Screen Captures, Window Captures, a...
-[[Capture a Screen Shot (.NET) - Developer Fusion>http:/...
以下はVB.NETのサンプルです。
-[[Capture Screen>http://www.planet-source-code.com/vb/sc...
以下に画面全体をキャプチャするメソッド(CaptureScreen)と...
#code(vbnet){{
'Imports System.Runtime.InteropServices
Const SRCCOPY As Integer = 13369376
<DllImport("user32.dll")> _
Private Shared Function GetDC(ByVal hwnd As IntPtr) As In...
End Function
<DllImport("gdi32.dll")> _
Private Shared Function BitBlt(ByVal hDestDC As IntPtr, _
ByVal x As Integer, ByVal y As Integer, _
ByVal nWidth As Integer, ByVal nHeight As Integer, _
ByVal hSrcDC As IntPtr, _
ByVal xSrc As Integer, ByVal ySrc As Integer, _
ByVal dwRop As Integer) As Integer
End Function
<DllImport("user32.dll")> _
Private Shared Function ReleaseDC(ByVal hwnd As IntPtr, _
ByVal hdc As IntPtr) As IntPtr
End Function
''' <summary>
''' プライマリスクリーンの画像を取得する
''' </summary>
''' <returns>プライマリスクリーンの画像</returns>
Public Shared Function CaptureScreen() As Bitmap
'プライマリモニタのデバイスコンテキストを取得
Dim disDC As IntPtr = GetDC(IntPtr.Zero)
'Bitmapの作成
Dim bmp As New Bitmap(Screen.PrimaryScreen.Bounds.Wid...
Screen.PrimaryScreen.Bounds.Height)
'Graphicsの作成
Dim g As Graphics = Graphics.FromImage(bmp)
'Graphicsのデバイスコンテキストを取得
Dim hDC As IntPtr = g.GetHdc()
'Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, disDC, 0, 0,...
'解放
g.ReleaseHdc(hDC)
g.Dispose()
ReleaseDC(IntPtr.Zero, disDC)
Return bmp
End Function
<StructLayout(LayoutKind.Sequential)> _
Private Structure RECT
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
<DllImport("user32.dll")> _
Private Shared Function GetWindowDC(ByVal hwnd As IntPtr)...
End Function
<DllImport("user32.dll")> _
Private Shared Function GetForegroundWindow() As IntPtr
End Function
<DllImport("user32.dll")> _
Private Shared Function GetWindowRect(ByVal hwnd As IntPt...
ByRef lpRect As RECT) As Integer
End Function
''' <summary>
''' アクティブなウィンドウの画像を取得する
''' </summary>
''' <returns>アクティブなウィンドウの画像</returns>
Public Shared Function CaptureActiveWindow() As Bitmap
'アクティブなウィンドウのデバイスコンテキストを取得
Dim hWnd As IntPtr = GetForegroundWindow()
Dim winDC As IntPtr = GetWindowDC(hWnd)
'ウィンドウの大きさを取得
Dim winRect As New RECT
GetWindowRect(hWnd, winRect)
'Bitmapの作成
Dim bmp As New Bitmap(winRect.right - winRect.left, _
winRect.bottom - winRect.top)
'Graphicsの作成
Dim g As Graphics = Graphics.FromImage(bmp)
'Graphicsのデバイスコンテキストを取得
Dim hDC As IntPtr = g.GetHdc()
'Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, 0, 0,...
'解放
g.ReleaseHdc(hDC)
g.Dispose()
ReleaseDC(hWnd, winDC)
Return bmp
End Function
}}
#code(csharp){{
//using System.Runtime.InteropServices;
private const int SRCCOPY = 13369376;
[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("gdi32.dll")]
private static extern int BitBlt(IntPtr hDestDC,
int x,
int y,
int nWidth,
int nHeight,
IntPtr hSrcDC,
int xSrc,
int ySrc,
int dwRop);
[DllImport("user32.dll")]
private static extern IntPtr ReleaseDC(IntPtr hwnd, IntP...
/// <summary>
/// プライマリスクリーンの画像を取得する
/// </summary>
/// <returns>プライマリスクリーンの画像</returns>
public static Bitmap CaptureScreen()
{
//プライマリモニタのデバイスコンテキストを取得
IntPtr disDC = GetDC(IntPtr.Zero);
//Bitmapの作成
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.W...
Screen.PrimaryScreen.Bounds.Height);
//Graphicsの作成
Graphics g = Graphics.FromImage(bmp);
//Graphicsのデバイスコンテキストを取得
IntPtr hDC = g.GetHdc();
//Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height,
disDC, 0, 0, SRCCOPY);
//解放
g.ReleaseHdc(hDC);
g.Dispose();
ReleaseDC(IntPtr.Zero, disDC);
return bmp;
}
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[DllImport("user32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hwnd);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern int GetWindowRect(IntPtr hwnd,
ref RECT lpRect);
/// <summary>
/// アクティブなウィンドウの画像を取得する
/// </summary>
/// <returns>アクティブなウィンドウの画像</returns>
public static Bitmap CaptureActiveWindow()
{
//アクティブなウィンドウのデバイスコンテキストを取得
IntPtr hWnd = GetForegroundWindow();
IntPtr winDC = GetWindowDC(hWnd);
//ウィンドウの大きさを取得
RECT winRect = new RECT();
GetWindowRect(hWnd, ref winRect);
//Bitmapの作成
Bitmap bmp = new Bitmap(winRect.right - winRect.left,
winRect.bottom - winRect.top);
//Graphicsの作成
Graphics g = Graphics.FromImage(bmp);
//Graphicsのデバイスコンテキストを取得
IntPtr hDC = g.GetHdc();
//Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height,
winDC, 0, 0, SRCCOPY);
//解放
g.ReleaseHdc(hDC);
g.Dispose();
ReleaseDC(hWnd, winDC);
return bmp;
}
}}
○この記事の基になった掲示板のスレッド
-[[C#での画面ハードコピー | 投稿者(敬称略) Odagirizm, 管...
-[[指定範囲の画面のキャプチャについて | 投稿者(敬称略) to...
-[[画面のハードコピーをとりたい | 投稿者(敬称略) Dai, Cod...
***複数のRTFファイルを連結してRichTextBoxに表示するには?...
#column(注意){{
この記事の最新版は「[[複数のRTFファイルを連結してRichText...
}}
''【質問】''
複数のRTFファイルを連結したくて、RTFファイルをテキストと...
''【回答】''
RichTextBoxにRTFを挿入するには、RichTextBox.SelectedRtfプ...
次にRTFファイル"C:\1.rtf"、"C:\2.rtf"、"C:\3.rtf"を連結し...
#code(vbnet){{
'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Clear()
Dim i As Integer
For i = 1 To 3
'RTFファイルを読み込む
Dim sr As New System.IO.StreamReader( _
"C:\" + i.ToString() + ".rtf", _
System.Text.Encoding.GetEncoding(932))
Dim rtf As String = sr.ReadToEnd()
sr.Close()
'RichTextBox1に追加する
AppendRtfToRichTextBox(RichTextBox1, rtf)
Next i
End Sub
''' <summary>
''' RichTextBoxの末尾にRTFを追加
''' </summary>
''' <param name="rtb">RTFを追加するRichTextBox</param>
''' <param name="rtfText">追加するRTF文字列</param>
Public Shared Sub AppendRtfToRichTextBox( _
ByVal rtb As RichTextBox, ByVal rtfText As String)
rtb.SelectionStart = rtb.TextLength
rtb.SelectedRtf = rtfText
End Sub
}}
#code(csharp){{
//Button1のClickイベントハンドラ
private void Button1_Click(object sender, System.EventArg...
{
RichTextBox1.Clear();
for (int i = 1; i <= 3; i++)
{
//RTFファイルを読み込む
System.IO.StreamReader sr =
new System.IO.StreamReader(
"C:\\" + i.ToString() + ".rtf",
System.Text.Encoding.GetEncoding(932));
string rtf = sr.ReadToEnd();
sr.Close();
//RichTextBox1に追加する
AppendRtfToRichTextBox(RichTextBox1, rtf);
}
}
/// <summary>
/// RichTextBoxの末尾にRTFを追加
/// </summary>
/// <param name="rtb">RTFを追加するRichTextBox</param>
/// <param name="rtfText">追加するRTF文字列</param>
public static void AppendRtfToRichTextBox(
RichTextBox rtb, string rtfText)
{
rtb.SelectionStart = rtb.TextLength;
rtb.SelectedRtf = rtfText;
}
}}
参考:
-[[The Code Project - Insert Plain Text and Images into R...
○この記事の基になった掲示板のスレッド
-[[リッチテキストの文字列連結 | 投稿者(敬称略) 四季, りょ...
**コメント [#sad3f2ff]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2005-03-18 (金) 06:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]