1

SendMessage/PostMessage を使用して、いくつかのキーをアプリケーションのテキスト ボックスに送信したいと考えています。Microsoft Spyxx を使用して、このテキスト ボックスのクラス名を取得しました。このアプリには、同じクラス名 (「WindowsForms10.EDIT.app.0.2e0c681」) と同じウィンドウ名を持つ複数のテキスト ボックスがあるという問題があります。

正しいもののハンドルを取得する方法は?

PS: Visual c# 2008 Express を使用して c# でコーディングしています。

4

2 に答える 2

0

異なる hWnd 値が API 関数に対して同じ結果を返す場合

[DllImport( "user32.dll" )]
public static extern int GetClassNameW( HandleRef hWnd, [MarshalAs( UnmanagedType.LPWStr )] StringBuilder className, int nMaxCount );

[DllImport( "user32.dll" )]
public static extern int GetWindowTextLength( HandleRef hWnd );

[DllImport( "user32.dll" )]
public static extern int GetWindowTextW( HandleRef hWnd, [MarshalAs( UnmanagedType.LPWStr )] StringBuilder text, int maximum );

オブジェクトがフォーム上に存在する位置に基づいて編集を行わなければならない場合があります。

public struct WindowPlacement {
  public int length;
  public int flags;
  public int showCmd;
  public Point minPosition;
  public Point maxPosition;
  public Rectangle normalPosition;
}

[DllImport( "user32.dll" )]
public static extern bool GetWindowPlacement( HandleRef hWnd, ref WindowPlacement position );
于 2010-02-22T23:45:12.397 に答える
0

たとえば、特定の所有者を持つテキスト ボックスを検索し、前の子ウィンドウが何であるかを確認できます... コントロールにラベルがある場合は、次のことができます。最初にラベルを見つけてから、その右側にあるコントロールを見つけます。

于 2010-02-21T22:24:11.127 に答える