この記事では、Delphi がハンドルを取得し、メッセージを送信する方法を例の形式で詳しく説明します。具体的な使用方法は次のとおりです。
別のウィンドウのハンドルを見つけます。
handle := FindWindow(nil,PChar('ウィンドウのタイトル'));//フォームハンドルを見つける
サブフォームを検索します。
childHandle := FindWindowEx(handle,0,'サブフォーム クラス','サブフォーム タイトル');
サブフォームを列挙するための API もあります。
EnumChildWindows(本体ハンドル、@callback関数、ユーザーパラメータ);
この関数を使用するには、次のようなコールバック関数を自分で記述する必要があります。
関数 EnumChildProc(ahWND:HWND; param:LPARAM):boolean;sendmessage(ハンドル、メッセージ、wl、rl)
ユニット Unit1; インターフェイスは Windows,Messages,Tlhelp32,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls を使用します;type TForm1=class(TForm)procedure FormCreate(Sender: TObject);終了; var Form1: TForm1;実装{ $R *.DFM} プロシージャTForm1.FormCreate(Sender: TObject);var a,b:PAnsiChar;h:HWND;beginh:= FindWindow(nil,'abc.txt - Notepad');h:= FindWindowEx(h,0,'edit', nil );SendMessage(h,WM_SETTEXT,255,Integer(PChar('測定するために来ました')));ShowMessage( IntToStr(h));終了;
SendMessage(TreeView.Handle,TVM_SETBKCOLOR,0,RGB(255,0,0)); テレビの背景色を設定します。 SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0); マウスの左ボタンを押します。 、0,0);マウスの左ボタンを上げます。 SendMessage(Edit.Handle,WM_SETTEXT,255,Integer(PChar('abc'))); テキストを渡します SendMessage(Edit.Handle,WM_Char,Wparam('Q'),2); SendMessage( Button.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1);ボタンのスタイルを変更する SendMessage(ComboBox.Handle,CB_SETDropPEDWIDTH,300,0); CBDownWidth を変更する
WM_CUT、WM_COPY、および WM_PASTE の切り取り、コピー、貼り付け
任意のキーの組み合わせを実装します。
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0);keybd_event(ord('V') 、MapVirtualKey(ord('V')、0)、 KEYEVENTF_KEYUP, 0);keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
SendMessageA の説明: ウィンドウの window 関数を呼び出して、そのウィンドウにメッセージを送信します。この関数は、メッセージが処理されない限り戻りません。
SendMessage には 4 つのパラメータが含まれます。
1. hwnd 32 ビット ウィンドウ ハンドル Win32 はほとんどのビジュアル オブジェクトへのハンドルを維持できるため、ウィンドウは任意の種類の画面オブジェクトにすることができます。
2. wMsg は、他のメッセージを区別するために使用される定数値です。これらの定数は、Windows ユニットで事前定義された定数またはカスタマイズされた定数です。
3. wParam は通常、メッセージに関連する定数値、またはウィンドウまたはコントロールのハンドルである場合があります。
4. lParam は通常、メモリ内のデータを指すポインタです。 WParm、lParam、Pointer はすべて 32 ビットであるため、相互に変換できます。
wMsg 関数の詳細な説明:
★WM_Createはウィンドウを作成します
★WM_DESTROY ウィンドウが破壊されたときに送信されます。
★WM_MOVE ウィンドウを移動します
★WM_SIZE ウィンドウのサイズを変更します。
★WM_ACTIVATE ウィンドウがアクティブまたは非アクティブになります。
★WM_SETFOCUS ウィンドウがフォーカスを取得します
★WM_KILLFOCUS ウィンドウがフォーカスを失います。
★WM_ENABLE はウィンドウを有効状態に変更します。
★WM_SETREDRAW ウィンドウを再描画できるかどうかを設定します。
★WM_SETTEXT アプリケーションはウィンドウのテキストを設定するためにこのメッセージを送信します。
★WM_GETTEXT アプリケーションは、対応するウィンドウのテキストをバッファにコピーするためにこのメッセージを送信します。
★WM_GETTEXTLENGTH ウィンドウに関するテキストの長さ(null文字を除く)を取得します。
★WM_PAINT はウィンドウに自身の再描画を要求します。
★WM_CLOSEは、ウィンドウまたはアプリケーションを閉じるときにシグナルを送信します。
★WM_QUERYENDSESSION ユーザーがダイアログ ボックスを終了することを選択するか、プログラムが ExitWindows 関数自体を呼び出します。
★WM_QUITはプログラムの実行を終了するために使用されます。
★WM_QUERYOPEN ユーザーウィンドウが以前のサイズと位置に戻ったら、このメッセージをアイコンに送信します
★WM_ERASEBKGND ウィンドウの背景を消去する必要がある場合(ウィンドウのサイズが変更された場合など)
★WM_SYSCOLORCHANGE システムの色が変更されると、このメッセージをすべてのトップレベル ウィンドウに送信します
★WM_QUERYENDSESSION メッセージの後、このメッセージはアプリケーションに送信され、会話が終了したかどうかを通知します。
★WM_SHOWWINDOW このメッセージは、ウィンドウが非表示または表示されているときにこのウィンドウに送信されます。
★WM_ACTIVATEAPPは、どのウィンドウがアクティブでどのウィンドウが非アクティブであるかをアプリケーションに送信します。
★WM_FONTCHANGE このメッセージは、システムのフォント リソース ライブラリが変更されたときに、すべてのトップレベル ウィンドウに送信されます。
★WM_TIMECHANGE システム時刻が変更されたときに、すべてのトップレベル ウィンドウにこのメッセージを送信します。
★WM_CANCELMODE 進行中のモード(操作)をキャンセルするには、このメッセージを送信します。
★WM_SETCURSOR マウスによりウィンドウ内でカーソルが移動する場合
★WM_ENDSESSION システムプロセスが発行され、マウス入力がキャプチャされなかった場合、ウィンドウにメッセージが送信されます。
★WM_MOUSEACTIVATE は、カーソルが非アクティブなウィンドウ内にあり、ユーザーがマウス ボタンを押しているときに、このメッセージを現在のウィンドウに送信します。
★WM_CHILDACTIVATE ユーザーがこのウィンドウのタイトル バーをクリックしたとき、またはウィンドウがアクティブ化、移動、またはサイズ変更されたときに、このメッセージを MDI 子ウィンドウに送信します。
★WM_QUEUESYNC このメッセージはコンピュータベースのトレーニングプログラムによって送信され、ユーザー入力メッセージはWH_JOURNALPALYBACKのフックプログラムによって分離されます。
★WM_GETMINMAXINFO このメッセージは、ウィンドウのサイズや位置を変更しようとしているときに送信されます。
★WM_PAINTICON アイコンが再描画されるときに最小化されたウィンドウに送信されます。
★WM_ICONERASEBKGND このメッセージは、アイコンを描画する前に背景を再描画する必要がある場合にのみ、最小化されたウィンドウに送信されます。
★WM_NEXTDLGCT★このメッセージをダイアログ ボックス プログラムに送信して、フォーカス位置を変更します。
★WM_SPOOLERSTATUS このメッセージは、印刷管理キューにジョブが追加または削除されるたびに発行されます。
★WM_DRAWITEM ボタン、コンボボックス、リストボックス、メニューの外観が変更されたときに送信されます。
★WM_MEASUREITEM ボタン、コンボボックス、リストボックス、リストビューコントロール、メニューアイテムの作成時
★WM_VKEYTOITEM このメッセージには、WM_KEYDOWN メッセージに応答して所有者に発行された LBS_WANTKEYBOARDINPUT スタイルが含まれています
★WM_CHARTOITEM このメッセージは、WM_CHAR メッセージへの応答として、LBS_WANTKEYBOARDINPUT スタイルのリスト ボックスによってその所有者に送信されます。
★WM_SETFONT テキストを描画するとき、プログラムはコントロールで使用される色を取得するためにこのメッセージを送信します。
★WM_GETFONT アプリケーションは、現在のコントロールによって描画されるテキストのフォントを取得するためにこのメッセージを送信します。
★WM_SETHOTKEY アプリケーションは、ウィンドウをホットキーに関連付けるためにこのメッセージを送信します。
★WM_GETHOTKEY アプリケーションは、ホットキーがウィンドウに関連付けられているかどうかを判断するためにこのメッセージを送信します。
★WM_QUERYDRAGICON このメッセージは、最小化されたウィンドウに送信され、そのクラスにアイコンが定義されていない場合、システムはこのアイコンまたはカーソルを表示します。ユーザーがアイコンをドラッグ アンド ドロップします。
★WM_COMPAREITEM このメッセージを送信して、コンボボックスまたはリストボックスに新しく追加された項目の相対位置を決定します。
★WM_COMPACTINGはメモリが非常に少ないことを示します。
★WM_WINDOWPOSCHANGING ウィンドウのサイズや位置を変更しようとしているときに、このメッセージを setwindowpos 関数または他のウィンドウ管理関数に送信します。
★WM_WINDOWPOSCHANGED ウィンドウのサイズと位置が変更されたときに、このメッセージを setwindowpos 関数または他のウィンドウ管理関数に送信します。
★WM_POWER システムが一時停止状態に入る直前に送信されるメッセージです。
★WM_COPYDATA このメッセージは、あるアプリケーションが別のアプリケーションにデータを渡すときに送信されます。
★WM_CANCELJOURNA ユーザーがプログラムログのアクティブ化状態をキャンセルする場合、このメッセージをプログラムに送信します
★WM_NOTIFY コントロールのイベントが発生したとき、またはコントロールが何らかの情報を取得する必要があるとき、このメッセージは親ウィンドウに送信されます。
★WM_INPUTLANGCHANGEREQUEST ユーザーが入力言語を選択したとき、または入力言語のホットキーが変更されたとき
★WM_INPUTLANGCHANGE このメッセージは、プラットフォーム シーンが変更されたときに、影響を受けるトップレベル ウィンドウに送信されます。
★WM_TCARD このメッセージは、プログラムが Windows ヘルプ ルーチンを初期化したときにアプリケーションに送信されます。
★WM_HELP このメッセージは、ユーザーが F1 を押したことを示します。メニューがアクティブ化されている場合、このメッセージは、このウィンドウに関連付けられているメニューに送信されます。そうでない場合は、フォーカスのあるウィンドウに送信されます。現在アクティブなウィンドウに対してメッセージが送信されます。
★WM_USERCHANGED このメッセージは、ユーザーがログインまたはログアウトした後、ユーザーの特定の設定情報を更新するときに、すべてのウィンドウに送信されます。
★WM_NOTIFYFORMAT パブリック コントロール、カスタム コントロール、およびその親ウィンドウは、このメッセージを使用して、コントロールが ANSI 構造を使用するか UNICODE 構造を使用するかを判断します。
function EnumChildWindowsProc(hwnd, lparam: Integer): ブール値; var バッファ: char の配列 [0..255] 開始 Result := True; if StrPas(Buffer); beginSendMessage(hwnd,WM_GETTEXT,256,lparam); 結果:=False;終了; プロシージャ TForm1.Button1Click(Sender: TObject); var hwnd: Integer: array[0..255] of char; hwnd<> 0 の場合、EnumChildWindows を開始します。 (hwnd,@EnumChildWindowsProc,Longint(@buffer[0])); StrPas(バッファ) 終了;