• 検索結果がありません。

ウィンドウ操作 詳細

N/A
N/A
Protected

Academic year: 2021

シェア "ウィンドウ操作 詳細"

Copied!
16
0
0

読み込み中.... (全文を見る)

全文

(1)

■ ウィンドウ操作 ■ 目次 ■ FindWindow 関数 3 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウ( 親を持たないウィンド ウ)のハンドルを返す。此の関数は、子ウィンドウは探さない。亦、検索では、大文字小文字は区別されない。 ■ FindWindowEx 関数 3 指定された文字列と一致するクラス名とウィンドウ名文字列を持つウィンドウのハンドルを返す。此の関数は、 子ウィンドウを検索する。此の関数に依る検索は、指定された子ウィンドウの直後の子ウィンドウから開始され る。大文字小文字は区別されない。 ■ WindowFromPoint 関数 5 指定された座標を含むウィンドウのハンドルを取得する。 ■ EnumWindows 関数 15 画面上の総てのトップレベルウィンドウを列挙する。此の関数を呼び出すと、各ウィンドウのハンドルが順々に アプリケーション定義のコールバック関数に渡される。EnumWindows 関数は、総てのトップレベルウィンドウ を列挙し終えるか、又は、アプリケーション定義のコールバック関数から0(False)が返される迄、処理を続け る。 ■ ChildWindowFromPoint 関数 6 指定された親ウィンドウの子ウィンドウで有り、指定された座標を含むウィンドウのハンドルを返す。 ■ ChildWindowFromPointEx 関数 6 指定された親ウィンドウの子ウィンドウで有り、指定された座標を含むウィンドウのハンドルを返す。非表示の 子ウィンドウ、無効化されて居る子ウィンドウ、透明な子ウィンドウは、必要に応じて無視出来る。 ■ EnumChildWindows 関数 7 指定された親ウィンドウに属する子ウィンドウを列挙する。此の関数を呼び出すと、子ウィンドウのハンドルが 順々にアプリケーション定義のコールバック関数に渡される。EnumChildWindows 関数は、総ての子ウィンド ウを列挙し終えるか、又は、アプリケーション定義のコールバック関数から0(FALSE)が返される迄、列挙を 続ける。 ■ GetFocus 関数 8 呼出側のスレッドに関連付けられて居るウィンドウの中から、キーボードフォーカスを持つウィンドウのハンド ルを取得する。

W

W

i

i

n

n

3

3

2

2

A

A

P

P

I

I

(2)

■ GetForegroundWindow 関数 9 フォアグラウンドウィンドウ( 現在ユーザーが作業して居るウィンドウ)のハンドルを返す。Windows システ ムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若干高い優先順位を割り 当てる。 ■ GetDlgItem 関数 9 指定されたダイアログボックス内のコントロールのハンドルを取得する。 ■ GetClassName 関数 10 指定されたウィンドウが属するクラスの名前を取得する。 ■ GetWindowText 関数 11 指定されたウィンドウのタイトルバーのテキストをバッファへコピーする。指定されたウィンドウがコントロー ルの場合は、コントロールのテキストをコピーする。但し、他のアプリケーションのコントロールのテキストを 取得する事は出来ない。 ■ SetFocus 関数 12 指定されたウィンドウにキーボードフォーカスを設定する。此のウィンドウは、呼出側スレッドのメッセージキ ューにアタッチされて居る物でなければ成らない。 ■ SetForegroundWindow 関数 12 指定されたウィンドウを作成したスレッドをフォアグラウンドにし、其のウィンドウをアクティブにする。キー ボード入力は此のウィンドウに直接送られる様に成り、ユーザーに此れ解る様に画面での様々な表示が変更され る。Windows システムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若 干高い優先順位を割り当てる。 ■ SetWindowText 関数 14 指定されたウィンドウのタイトルバーのテキストを変更する。指定されたウィンドウがコントロールの場合は、 コントロールのテキストを変更する。但し、他のアプリケーション内のコントロールのテキストを変更する事は 出来ない。 ■ SendDlgItemMessage 関数 14 ダイアログボックス内の指定されたコントロールへメッセージを送信する。GetDlgItem 関数と SendMessage 関数を纏めて記述する事が出来る。

(3)

■ FindWindow 関数 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウ( 親を持たないウィンド ウ)のハンドルを返す。此の関数は、子ウィンドウは探さない。亦、検索では、大文字小文字は区別されない。 子ウィンドウを探すには、FindWindowEx 関数を使用する。FindWindowEx 関数に依る検索は、指定した子 ウィンドウから開始される。 Visual Basic

< DllImport ( "user32.dll", SetLastError:=True, CharSet:=CharSet.Auto )> _ Private Shared Function FindWindow ( _

ByVal lpClassName As String, _

ByVal lpWindowName As String ) As IntPtr End Function

C#

[ DllImport ( "user32.dll", SetLastError = true )]

static extern IntPtr FindWindow( string lpClassName, string lpWindowName );

C/C++ HWND FindWindow ( LPCTSTR lpClassName, // クラス名 LPCTSTR lpWindowName // ウィンドウ名 ); パラメータは、下記の通りで有る。 引数 解説 lpClassName NULL で終わる文字列へのポインタか、クラスアトムを指定する。クラスアトムを指定する 場合は、RegisterClass 関数、又は、RegisterClassEx 関数の呼出に依り作成した物を使用す る。lpClassName パラメータの下位ワードにアトムを格納し、上位ワードに 0 を格納する。 文字列を指定する場合は、ウィンドウクラスの名前を指定する。クラス名には、RegisterClass 関数、又は、RegisterClassEx 関数で登録した名前か、定義済みのコントロールクラス名を 指定出来る。 lpWindowName ウィンドウ名(ウィンドウのタイトル)が入った NULL で終わる文字列へのポインタを指定 する。NULL を指定すると、総てのウィンドウ名が該当する物と看做される。 戻り値には、関数が成功すると、指定したクラス名とウィンドウ名を持つウィンドウのハンドルが返り、失敗す ると、NULL が返る。拡張エラー情報を取得するには、 FindWindowEx 関数を使用する。

lpWindowName パラメータが NULL でない場合、FindWindow 関数は、GetWindowText 関数を呼び出して、 比較に使用するウィンドウ名を取得する。此の処理で発生する可能性のある問題に付いて、GetWindowText 関 数の解説を参照され度い。 ■ FindWindowEx 関数 指定された文字列と一致するクラス名とウィンドウ名文字列を持つウィンドウのハンドルを返す。此の関数は、 子ウィンドウを検索する。此の関数に依る検索は、指定された子ウィンドウの直後の子ウィンドウから開始され る。大文字小文字は区別されない。

(4)

Visual Basic

< DllImport ( "user32.dll", SetLastError:=True, CharSet:=CharSet.Auto )> _ Private Shared Function FindWindowEx ( _

ByVal parentHandle As IntPtr, _ ByVal childAfter As IntPtr, _ ByVal lclassName As String, _

ByVal windowTitle As String ) As IntPtr End Function

C#

[ DllImport ( "user32.dll", SetLastError = true )] static extern IntPtr FindWindowEx (

IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow );

C/C++ HWND FindWindowEx ( HWND hwndParent, // 親ウィンドウのハンドル HWND hwndChildAfter, // 子ウィンドウのハンドル LPCTSTR lpszClass, // クラス名 LPCTSTR lpszWindow // ウィンドウ名 ); パラメータは、下記の通りで有る。 引数 解説 hwndParent 検索する子ウィンドウの親ウィンドウのハンドルを指定する。NULL を指定すると、デス クトップウィンドウが親ウインドウと仕て使われ、デスクトップの子ウィンドウが探され る。 hwndChildAfter 子ウィンドウのハンドルを指定する。Z オーダーで此のウィンドウの次に来る子ウィンドウ から検索が開始される。此処に指定するウインドウは、hwndParent パラメータに指定した ウィンドウの直接の子でなければ成らない。孫以下のウィンドウを指定する事は出来ない。 NULL を指定すると、hwndParent パラメータに指定したウィンドウの最初の子ウィンド ウから検索が開始される。hwndParent パラメータにも hwndChildAfter パラメータにも NULL を指定すると、総てのトップレベルウィンドウとメッセージ専用ウィンドウが検索 される。 lpszClass NULL で終わる文字列へのポインタか、クラスアトムを指定する。クラスアトムを指定す る場合は、RegisterClass 関数、又は、RegisterClassEx 関数の呼出に依り作成した物を使 用する。lpClassName パラメータの下位ワードにアトムを格納し、上位ワードに 0 を格納 する。文字列を指定する場合は、ウィンドウクラスの名前を指定する。クラス名には、 RegisterClass 関数、又は、RegisterClassEx 関数で登録した名前か、定義済みのコントロ ールクラス名を指定出来る。 lpszWindow ウィンドウ名(ウィンドウのタイトル)が入ったNULL で終わる文字列へのポインタを指 定する。NULL を指定すると、総てのウィンドウ名が該当する物と看做される。 戻り値には、関数が成功すると、指定したクラスとウィンドウ名を持つウィンドウのハンドルが返り、失敗する と、NULL が返る。

lpszWindow パラメータが NULL でない場合、FindWindow 関数は、GetWindowText 関数を呼び出して、比較 に使用するウィンドウ名を取得する。此の処理で発生する可能性の有る問題に付いては、GetWindowText 関数 の解説を参照され度い。

(5)

■ WindowFromPoint 関数

指定された座標を含むウィンドウのハンドルを取得する。

Visual Basic

< DllImport ( "user32.dll" )> _

Private Shared Function WindowFromPoint ( ByVal Point As POINT ) As IntPtr End Function

C#

[ DllImport ( "user32.dll" )]

static extern IntPtr WindowFromPoint ( POINT Point );

C/C++ HWND WindowFromPoint ( POINT Point // 座標 ); パラメータは、下記の通りで有る。 引数 解説 Point 調査する座標が入った構造体を指定する。 POINT 構造体の定義を、下記に示す。 Visual Basic Structure POINTAPI Public X As Integer Public Y As Integer End Structure C# struct POINT { LONG x; LONG y; }; C/C++

typedef struct tagPOINT { LONG x; LONG y; } POINT; 戻り値には、関数が成功すると、指定した座標を含むウィンドウのハンドルが返る。指定した座標にウィンドウ が無い時は、NULL が返る。指定した座標が、スタティックテキストコントロールに重なって居た場合は、其の スタティックテキストコントロールの下に有るウィンドウのハンドルが返る。 此の関数は、非表示のウィンドウや無効化されて居るウィンドウのハンドルは取り出さない。此の様な制限の無 い検索を行い度い場合は、ChildWindowFromPoint 関数を使用する。

(6)

■ ChildWindowFromPoint 関数

指定された親ウィンドウの子ウィンドウで有り、指定された座標を含むウィンドウのハンドルを返す。 特定の子ウィンドウを処理の対象から外し度い場合は、ChildWindowFromPointEx 関数を使用する。

Visual Basic

< DllImport ( "user32.dll" )> _

Private Shared Function ChildWindowFromPoint ( _ ByVal hWndParent As IntPtr , _

ByVal Point As POINT ) As IntPtr End Function

C#

[ DllImport ( "user32.dll" )]

static extern IntPtr ChildWindowFromPoint ( IntPtr hWndParent, POINT Point );

C/C++

HWND ChildWindowFromPoint (

HWND hWndParent, // 親ウィンドウのハンドル POINT Point // 座標値の入った POINT 構造体 ); パラメータは、下記の通りで有る。 引数 解説 hWndParent 親ウィンドウのハンドルを指定する。 Point 調査する点のクライアント座標を入れた構造体を指定する。 戻り値には、指定した座標を含む子ウィンドウのハンドルが返る。該当する子ウィンドウが非表示の場合や無効 化されて居る場合でも、其の子ウィンドウのハンドルが返る。指定した座標が親ウィンドウの外側に在る場合は NULL が返る。指定した座標が親ウィンドウの内部に在り、其の座標を含む子ウィンドウが存在しない場合は、 親ウィンドウのハンドルが返る。 親ウィンドウに関連付けられて居る子ウィンドウのハンドルは、システムの内部リストに格納して管理されて居 る。内部リストでのハンドルの順序は、子ウィンドウのZ オーダーに依り決まる。指定した座標を含む子ウィン ドウが複数存在する場合は、内部リスト内で最初に見付かった子ウィンドウのハンドルが返る。 ■ ChildWindowFromPointEx 関数 指定された親ウィンドウの子ウィンドウで有り、指定された座標を含むウィンドウのハンドルを返す。非表示の 子ウィンドウ、無効化されて居る子ウィンドウ、透明な子ウィンドウは、必要に応じて無視出来る。 Visual Basic

< DllImport ( "user32", CharSet:=CharSet.Ansi, SetLastError:=True, ExactSpelling:=True )> _ Public Function ChildWindowFromPointEx ( _

ByVal hWndParent As IntPtr, _ ByVal P As POINTAPI, _

ByVal uFlags As CWPFlags ) As IntPtr End Function

(7)

C#

[ DllImport ( "user32.dll" )]

static extern IntPtr ChildWindowFromPointEx ( IntPtr hWndParent, Point pt, uint uFlags );

C/C++ HWND ChildWindowFromPointEx ( HWND hwndParent, // 親ウィンドウのハンドル POINT pt, // 座標値の入った POINT 構造体 UINT uFlags // 無視するかどうかのオプション ); パラメータは、下記の通りで有る。 引数 解説 hwndParent 親ウィンドウのハンドルを指定する。 pt 調査する点のクライアント座標を入れた構造体を指定する。 uFlags 無視する子ウィンドウの種類を指定する。下記の表の値を指定出来る。 値 意味 CWP_ALL 何の子ウィンドウも無視しない。 CWP_SKIPINVISIBLE 非表示の子ウィンドウを無視する。 CWP_SKIPDISABLED 無効化されて居る子ウィンドウを無視する。 CWP_SKIPTRANSPARENT 透明な子ウィンドウを無視する。 戻り値には、指定した座標を含んで居り、uFlags パラメータの指定に依り処理の対象と成る子ウィンドウが存在 する場合は、該当する最初の子ウィンドウのハンドルが返る。指定した座標が親ウィンドウの内部には在るが、 処理対象の子ウィンドウの中に其の座標を含む子ウィンドウが存在しない場合は、親ウィンドウのハンドルが返 る。指定した座標が親ウィンドウの外側に在る場合、及び、関数が失敗した場合は、NULL が返る。 親ウィンドウに関連付けられて居る子ウィンドウのハンドルは、システムの内部リストに格納して管理されて居 る。内部リストでのハンドルの順序は、子ウィンドウのZ オーダーに依り決まる。指定した座標を含んで居り、 uFlags パラメータの指定に依り処理の対象と成る子ウィンドウが複数存在する場合は、内部リスト内で最初に見 付かった子ウィンドウのハンドルが返る。 ■ EnumChildWindows 関数 指定された親ウィンドウに属する子ウィンドウを列挙する。此の関数を呼び出すと、子ウィンドウのハンドルが 順々にアプリケーション定義のコールバック関数に渡される。EnumChildWindows 関数は、総ての子ウィンド ウを列挙し終えるか、又は、アプリケーション定義のコールバック関数から0(FALSE)が返される迄、列挙を 続ける。 Visual Basic

< DllImport ( "user32.dll", CharSet:=CharSet.Auto )> _ Private Shared Function EnumChildWindows ( _ ByVal hWndParent As System.IntPtr, _ ByVal lpEnumFunc As EnumWindowsProc, _ ByVal lParam As Integer ) As Boolean End Function

(8)

[ DllImport ( "user32.dll" )]

[return: MarshalAs( UnmanagedType.Bool )] static extern bool EnumChildWindows (

IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam );

C/C++ BOOL EnumChildWindows ( HWND hWndParent, // 親ウィンドウのハンドル WNDENUMPROC lpEnumFunc, // コールバック関数へのポインタ LPARAM lParam // アプリケーション定義の値 ); パラメータは、下記の通りで有る。 引数 解説 hWndParent 親ウィンドウのハンドルを指定する。此のウィンドウの子ウィンドウが列挙される。NULL を 指定すると、デスクトップウィンドウが指定された物と看做され、総てのトップレベルウィン ドウが列挙される。 lpEnumFunc アプリケーション定義のコールバック関数へのポインタを指定する。 lParam コールバック関数に渡すアプリケーション定義の値を指定する。 戻り値には、関数が成功すると、0 以外の値が返り、失敗すると、0 が返る。 子ウィンドウが更に子ウィンドウを持つ場合、EnumChildWindows 関数は、其等のウィンドウも列挙する。 子ウィンドウの列挙中に何れかの子ウィンドウを移動したり、其のZ オーダーを変更したりしても、列挙は正確 に行われる。列挙される前に破棄された子ウィンドウや列挙中に作成された子ウィンドウは列挙されない。 ■ GetFocus 関数 呼出側のスレッドに関連付けられて居るウィンドウの中から、キーボードフォーカスを持つウィンドウのハンド ルを取得する。 Visual Basic

< DllImport ( "user32.dll", SetLastError:=True )> _ Private Shared Function GetFocus( ) As IntPtr End Function

C#

[ DllImport ( "user32.dll" )]

static extern IntPtr GetFocus( );

C/C++ HWND GetFocus( VOID ); パラメータは、無い。 戻り値には、関数が成功すると、呼出側のスレッドに関連付けられて居るキーボードフォーカスを持つウィンド ウのハンドルが返る。呼出側のスレッドのメッセージキューが、キーボードフォーカスを持つウィンドウを持た ない時は、NULL が返る。

(9)

GetFocus 関数は、現在のスレッドのメッセージキューに対応するキーボードフォーカスを持つウィンドウを返 す。GetFocus 関数が NULL を返した場合、キーボードフォーカスを持つウィンドウに、他のスレッドのキュー が関連付けられて居る。 現在ユーザーが作業して居るウィンドウのハンドルを取得するには、GetForegroundWindow 関数を使用する。 AttachThreadInput 関数を使うと、現在のスレッドのメッセージキューを、他のスレッドが保持して居るウィン ドウに関連付ける事が出来る。 Windows 98 及び Windows NT 4.0 SP3 以降では、フォアグラウンドキュー、又は、他のスレッドのキューのキ ーボードフォーカスを持つウィンドウを取得するには、GetGUIThreadInfo 関数を使用する。 ■ GetForegroundWindow 関数 フォアグラウンドウィンドウ( 現在ユーザーが作業して居るウィンドウ)のハンドルを返す。Windows システ ムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若干高い優先順位を割り 当てる。 Visual Basic

< DllImport ( "user32.dll", SetLastError:=True )> _

Private Shared Function GetForegroundWindow ( ) As IntPtr End Function

C#

[ DllImport ( "user32.dll" )]

private static extern IntPtr GetForegroundWindow( );

C/C++ HWND GetForegroundWindow( VOID ); パラメータは、無い。 戻り値には、フォアグラウンドウィンドウのハンドルが返る。フォアグラウンドウィンドウのハンドルは、ウィ ンドウがフォーカスを失った等の特定の状況下でNULL に成る場合も有る。 ■ GetDlgItem 関数 指定されたダイアログボックス内のコントロールのハンドルを取得する。 Visual Basic < DllImport( "user32.dll" )> _

Public Shared Function GetDlgItem ( _ ByVal hDlg As IntPtr, _

ByVal nIDDlgItem As Integer ) As IntPtr End Function

Declare Function GetDlgItem Lib "user32.dll" ( _

ByVal hDlg As Integer, ByVal nIDDlgItem As Integer ) As Integer

C#

[ DllImport("user32.dll")]

static extern IntPtr GetDlgItem( IntPtr hDlg, int nIDDlgItem );

C/C++

HWND GetDlgItem (

(10)

int nIDDlgItem // コントロールの識別子 ); パラメータは、下記の通りで有る。 引数 解説 hDlg 希望のコントロールを保持して居るダイアログボックスのハンドルを指定する。 nIDDlgItem ハンドルを取得し度いコントロールの識別子を指定する。 戻り値には、関数が成功すると、指定したコントロールのウィンドウハンドルが返り、失敗すると、NULL が返 る。此れは、ダイアログボックスのハンドルが無効だった事、又は、コントロールが存在しなかった事を意味す る。 此の関数は、ダイアログボックス丈で無く、任意の親ウィンドウと子ウィンドウのペアに対して使う事も出来る。 hDlg パラメータで親ウィンドウを指定し、子ウィンドウの識別子が一意で有る場合(子ウィンドウを作成する 際にCreateWindow 関数、又は、CreateWindowEx 関数の hMenu パラメータで設定)、GetDlgItem 関数は子 ウィンドウの有効なハンドルを返す。

■ GetClassName 関数

指定されたウィンドウが属するクラスの名前を取得する。

Visual Basic

< DllImport ( "user32.dll", CharSet:=CharSet.Auto )> _ Private Shared Sub GetClassName ( _

ByVal hWnd As System.IntPtr, _

ByVal lpClassName As System.Text.StringBuilder, _ ByVal nMaxCount As Integer )

' Leave function empty End Function

C#

[ DllImport ( "user32.dll", SetLastError = true, CharSet = CharSet.Auto )]

static extern int GetClassName ( IntPtr hWnd, StringBuilder lpClassName,int nMaxCount );

C/C++ int GetClassName ( HWND hWnd, // ウィンドウのハンドル LPTSTR lpClassName, // クラス名 int nMaxCount // クラス名バッファのサイズ ); パラメータは、下記の通りで有る。 引数 解説 hWnd ウィンドウのハンドルを指定する。クラスも間接的に指定した事に成る(指定したウィンドウの 属するクラスが使用される)。 lpClassName バッファへのポインタを指定する(此のバッファに、クラスの名前が文字列で格納される)。 nMaxCount lpClassName パラメータがポイントするバッファの長さを TCHAR 単位で指定する(バッファ

に入り切らない部分は、切り捨てられる)。

(11)

■ GetWindowText 関数

指定されたウィンドウのタイトルバーのテキストをバッファへコピーする。指定されたウィンドウがコントロー ルの場合は、コントロールのテキストをコピーする。但し、他のアプリケーションのコントロールのテキストを 取得する事は出来ない。

Visual Basic

< DllImport ( "user32.dll", SetLastError:=True, CharSet:=CharSet.Auto )> _ Private Shared Function GetWindowText ( _

ByVal hwnd As IntPtr, _

ByVal lpString As StringBuilder, _ ByVal cch As Integer ) As Integer End Function

C#

[ DllImport ( "user32.dll", CharSet = CharSet.Auto, SetLastError = true )]

static extern int GetWindowText ( IntPtr hWnd, StringBuilder lpString, int nMaxCount );

C/C++ int GetWindowText ( HWND hWnd, // ウィンドウ又はコントロールのハンドル LPTSTR lpString, // テキストバッファ int nMaxCount // コピーする最大文字数 ); パラメータは、下記の通りで有る。 引数 解説 hWnd ウィンドウ(又は、テキストを持つコントロール)のハンドルを指定する。 lpString バッファへのポインタを指定する(此のバッファにテキストが格納される)。 nMaxCount バッファにコピーする文字の最大数を指定する(テキストの此のサイズを超える部分は、切り捨 てられ、亦、NULL 文字も数に含められる)。 戻り値には、関数が成功すると、コピーされた文字列の文字数が返る(終端のNULL 文字は含められない)。タ イトルバーやテキストが無い場合、タイトルバーが空の場合、及び、hWnd パラメータに指定したウィンドウハ ンドルやコントロールハンドルが無効な場合は0 が返る。 他のアプリケーションのエディットコントロールのテキストを此の関数で取得する事は出来ない。 ターゲットウィンドウが現在のプロセスに所有されて居る場合は、ウィンドウやコントロールにメッセージが送 られる。ターゲットウィンドウが他のプロセスに所有されて居り、キャプションを持つ場合は、ウィンドウのキ ャプションテキストがコピーされる。ウィンドウがキャプションを持たない場合は、NULL 文字列が返る。此の 動作は、設計上決められた物で有る。此れに依り、アプリケーションは、ターゲットウィンドウを所有するプロ セスがハングして居る場合にGetWindowText 関数を呼び出してもハングせずに済む。但し、ターゲットウィン ドウがハングして居り、其のウィンドウが関数を呼び出したアプリケーションに属する場合は、GetWindowText 関数を呼び出した事に依りアプリケーションもハングする。 他のプロセス内のコントロールのテキストを取得するには、GetWindowText 関数を呼び出すのではなく、直接 WM_GETTEXT メッセージを送る(SendMessage 関数、PostMessage 関数を使用)。

(12)

■ SetFocus 関数

指定されたウィンドウにキーボードフォーカスを設定する。此のウィンドウは、呼出側スレッドのメッセージキ ューにアタッチされて居る物でなければ成らない。

Visual Basic

< DllImport ( "user32.dll", SetLastError:=True, CharSet:=CharSet.Auto )> _

Private Shared Function SetFocus ( ByVal hwnd As IntPtr ) As Integer End Function

C#

[ DllImport ( "user32.dll" )]

static extern IntPtr SetFocus ( IntPtr hWnd );

C/C++ HWND SetFocus ( HWND hWnd // ウィンドウのハンドル ); パラメータは、下記の通りで有る。 引数 解説 hWnd キーボードフォーカスを設定し度いウィンドウのハンドルを指定する。NULL を指定すると、キ ーストロークは無視される。 戻り値には、関数が成功すると、以前にキーボードフォーカスを持って居たウィンドウのハンドルが返る。hWnd パラメータが無効な場合や、指定のウィンドウが呼出側のスレッドのメッセージキューにアタッチされて居ない 場合は、NULL が返る。 此の関数は、キーボードフォーカスを失うウィンドウへWM_KILLFOCUS メッセージを送信し、キーボードフ ォーカスを受け取るウィンドウへWM_SETFOCUS メッセージを送信する。亦、フォーカスを受け取るウィン ドウかフォーカスを受け取るウィンドウの親ウィンドウをアクティブにする。 或るウィンドウがアクティブで有ってフォーカスを設定されて居ない場合、何かキーを押すと、WM_SYSCHAR、 WM_SYSKEYDOWN、WM_SYSKEYUP の孰れかのメッセージが生成される。VK_MENU キーも押されて 居た場合、其のメッセージのIParam パラメータのビット 30 がセットされる。VK_MENU キーが押されて居な かった場合、生成されるメッセージはビット30 をセットしない。 任意のスレッドは AttachThreadInput 関数を使う事に依り、自らの入力処理を他のスレッドへアタッチする事 が出来る。此の方法に依り、任意のスレッドはSetFocus を呼び出して、他のスレッドのメッセージキューにア タッチされて居るウィンドウへキーボードフォーカスを設定出来る。 ■ SetForegroundWindow 関数 指定されたウィンドウを作成したスレッドをフォアグラウンドにし、其のウィンドウをアクティブにする。キー ボード入力は此のウィンドウに直接送られる様に成り、ユーザーに此れ解る様に画面での様々な表示が変更され る。Windows システムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若 干高い優先順位を割り当てる。

(13)

Visual Basic

< DllImport ( "user32.dll" )> _

Private Shared Function SetForegroundWindow ( _

ByVal hWnd As IntPtr ) As <MarshalAs( UnmanagedType.Bool )> Boolean End Function

C#

[ DllImport ( "user32.dll" )]

[return: MarshalAs( UnmanagedType.Bool )]

static extern bool SetForegroundWindow ( IntPtr hWnd );

C/C++ BOOL SetForegroundWindow ( HWND hWnd // ウィンドウのハンドル ); パラメータは、下記の通りで有る。 引数 解説 hWnd アクティブにし、フォアグラウンドにするウィンドウのハンドルを指定する。 戻り値には、ウィンドウがフォアグラウンドに成れば、0 以外の値が返り、ウィンドウがフォアグラウンドに成 らなかった場合は、0 が返る。 フォアグラウンドウィンドウは、優先順位の最も高いウィンドウで有り、現在ユーザーが作業して居るウィンド ウで有る。プリエンプティブなマルチタスク環境では、一般的には、何のウィンドウをフォアグラウンドウィン ドウにするかの決定はユーザーに委ねる。 Windows 98 や Windows 2000 では、フォアグラウンドウィンドウを設定する事が出来るプロセスは、システム に依り制限される。下記の条件が満たされて居なければ、プロセスがフォアグラウンドウィンドウを設定する事 は出来ない。 ・其のプロセスがフォアグラウンドプロセスで有る。 ・其のプロセスはフォアグラウンドプロセスに依り開始された。 ・其のプロセスが最後の入力イベントを受け取った。 ・フォアグラウンドプロセスが無い。 ・フォアグラウンドプロセスがデバッグ中で有る。 ・フォアグラウンドがロックされて居ない ・フォアグラウンドロックのタイムアウトが発生して居る ・Windows 2000:アクティブなメニューが無い。 此の旧バージョンからの変更に依り、アプリケーションは、ユーザーが他のウィンドウで作業して居る時に強制 的にフォアグラウンドウィンドウを設定する事は出来なく成った。其の代わりに、SetForegroundWindow 関数 は、ウィンドウをアクティブにし、関数を呼び出してユーザーに通知する。 フォアグラウンドウィンドウを設定できるプロセスは、AllowSetForegroundWindow 関数を呼び出す事に依り、 他のプロセスにフォアグラウンドウィンドウを設定する能力を与える事が出来る。此の関数のdwProcessId パラ メータで指定されたプロセスは、次にユーザーが其のプロセス以外のプロセスに対して入力操作を行った時か、 又は、他のプロセスの指定されたAllowSetForegroundWindow 関数の呼出が有った時に、フォアグラウンドウ ィンドウを設定する能力を失う。

(14)

フォアグラウンドプロセスは、LockSetForegroundWindow 関数を呼び出す事に依り SetForegroundWindow 関 数の呼出を無効化出来る。 ■ SetWindowText 関数 指定されたウィンドウのタイトルバーのテキストを変更する。指定されたウィンドウがコントロールの場合は、 コントロールのテキストを変更する。但し、他のアプリケーション内のコントロールのテキストを変更する事は 出来ない。 Visual Basic

< DllImport ( "user32.dll", SetLastError:=True, CharSet:=CharSet.Auto )> _ Private Shared Function SetWindowText ( _

ByVal hwnd As IntPtr, _

ByVal lpString As String ) As Boolean End Function

C#

[ DllImport ( "user32.dll", SetLastError = true, CharSet = CharSet.Auto )]

public static extern bool SetWindowText ( IntPtr hwnd, String lpString );

C/C++ BOOL SetWindowText ( HWND hWnd, // ウィンドウ又はコントロールのハンドル LPCTSTR lpString // タイトル又はテキスト ); パラメータは、下記の通りで有る。 引数 解説 hWnd ウィンドウ、又は、コントロールのハンドルを指定する。 lpString 新しいウィンドウタイトル、又は、コントロールのテキストと仕て使われるNULL で終わる文字 列へのポインタを指定する。 戻り値には、関数が成功すると、0 以外の値が返り、失敗すると、0 が返る。 ターゲットウィンドウが現在のプロセスに所有されて居る場合は、ウィンドウやコントロールにメッセージが送 られる。WS_CAPTION スタイルを指定して作成したリストボックスコントロールに SetWindowText 関数を実 行すると、リストボックスエントリのテキストではなく、コントロールのテキストが設定される。 他のプロセス内のコントロールのテキストを設定するには、SetWindowText 関数を呼び出すのではなく、直接 WM_SETTEXT メッセージを送る。 SetWindowText 関数は、タブ文字(ASCII コード 0x09)の展開は行わない。タブ文字は、縦線文字(|)と仕 て表示される。 ■ SendDlgItemMessage 関数 ダイアログボックス内の指定されたコントロールへメッセージを送信する。GetDlgItem 関数と SendMessage 関数を纏めて記述する事が出来る。

(15)

Visual Basic

< DllImport ( "user32.dll", SetLastError:=True, CharSet:=CharSet.Auto )> _ Private Shared Function SendDlgItemMessage ( _

ByVal hDlg As IntPtr, _

ByVal nIDDlgItem As Integer, _ ByVal Msg As UInteger, _ ByVal wParam As IntPtr, _

ByVal lParam As IntPtr ) As IntPtr End Function

C#

[ DllImport ( "user32.dll" )]

static extern IntPtr SendDlgItemMessage ( IntPtr hDlg, int nIDDlgItem, uint Msg, UIntPtr wParam, IntPtr lParam );

C/C++ LRESULT SendDlgItemMessage ( HWND hDlg, // ダイアログボックスのハンドル int nIDDlgItem, // コントロールの識別子 UINT Msg, // 送信するメッセージ WPARAM wParam, // 最初のメッセージパラメータ LPARAM lParam // 2 番目のメッセージパラメータ ); パラメータは、下記の通りで有る。 引数 解説 hDlg コントロールを保持して居るダイアログボックスのハンドルを指定する。 nIDDlgItem メッセージを受け取るコントロールの識別子を指定する。 Msg 送信するメッセージを指定する。 wParam メッセージの追加情報を指定する(意味はメッセージに依り異なる)。 lParam メッセージの追加情報を指定する(意味はメッセージに依り異なる)。 戻り値には、メッセージ処理の結果が返る。此の値の意味は、送信されたメッセージにより異なる。 此の関数は、メッセージの処理が完了する迄、制御を返さない。 SendDlgItemMessage 関数の動作は、指定されたコントロールのハンドルを取得して、SendMessage 関数を呼 び出す事と同じで有る。 ■ EnumWindows 関数 画面上の総てのトップレベルウィンドウを列挙する。此の関数を呼び出すと、各ウィンドウのハンドルが順々に アプリケーション定義のコールバック関数に渡される。EnumWindows 関数は、総てのトップレベルウィンドウ を列挙し終えるか、又は、アプリケーション定義のコールバック関数から0(False)が返される迄、処理を続け る。 Visual Basic

< DllImport ( "user32.dll", SetLastError:=True, CharSet:=CharSet.Auto )> _ Private Shared Function EnumWindows ( _

ByVal Proc As EnumWinProc, _

ByVal lParam As Integer ) As Boolean End Function

(16)

C#

[DllImport("user32.dll")]

[return: MarshalAs(UnmanagedType.Bool)]

static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);

C/C++ BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // コールバック関数 LPARAM lParam // アプリケーション定義の値 ); パラメータは、下記の通りで有る。 引数 解説 lpEnumFunc アプリケーション定義のコールバック関数へのポインタを指定します。詳細については、 EnumWindowsProc 関数の説明を参照してください。 lParam コールバック関数に渡すアプリケーション定義の値を指定します。 戻り値には、関数が成功すると、0 以外の値が返り、関数が失敗すると、0 が返る。 EnumWindowsProc 関数が 0 を返すと、戻り値は 0 に成る。 EnumWindows 関数は、子ウィンドウは列挙しない。但し、WS_CHILD スタイルを持つ、システムに依り所 有された幾つかのトップレベルウィンドウは例外で有る。 此の関数を呼び出すと、GetWindow 関数をループ処理で呼び出すよりも信頼性の高い結果が得られる。 GetWindow 関数を呼び出してトップレベルウィンドウを列挙すると、無限ループに陥ったり、既に破棄されて 居るウィンドウのハンドルを参照する危険性が出て来る。

参照

関連したドキュメント

“Microsoft Outlook を起動できません。Outlook ウィンドウを開けません。このフォルダ ーのセットを開けません。Microsoft Exchange

注意: 操作の詳細は、 「BD マックス ユーザーズマニュ アル」 3) を参照してください。. 注意:

ZoomのHP https://zoom.us にアクセスし、画面右上の「サインアップは無料です」をクリッ

実際, クラス C の多様体については, ここでは 詳細には述べないが, 代数 reduction をはじめ類似のいくつかの方法を 組み合わせてその構造を組織的に研究することができる

気候変動対策 詳細は P22 知的財産活動 詳細は P32 財務戦略 詳細は P13–14. 基礎研究の強化

本研修会では、上記クリーニング&加工作業の 詳細は扱いません。午後のPower BIレポート

入札説明書等の電子的提供 国土交通省においては、CALS/EC の導入により、公共事業の効率的な執行を通じてコスト縮減、品

操作は前章と同じです。但し中継子機の ACSH は、親機では無く中継器が送信する電波を受信します。本機を 前章①の操作で