이 문서에서는 Delphi가 핸들을 얻고 메시지를 예제 형식으로 보내는 방법을 자세히 설명합니다.
다른 창의 핸들을 찾으십시오.
handler := FindWindow(nil,PChar('창 제목'));//폼 핸들 찾기
하위 양식 찾기:
childHandle := FindWindowEx(handle,0,'하위 양식 클래스','하위 양식 제목');
하위 양식을 열거하기 위한 API도 있습니다.
EnumChildWindows(본체 핸들, @callback 함수, 사용자 매개변수);
이 함수를 사용하려면 다음과 같은 콜백 함수를 직접 작성해야 합니다.
function EnumChildProc(ahWND:HWND; param:LPARAM):boolean;stdcall;sendmessage(handle,message,wl,rl)
단위 Unit1; 인터페이스는 Windows,Messages,Tlhelp32,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;type TForm1=class(TForm)procedure FormCreate(Sender: TObject) public {Public 선언}을 사용합니다. end; var Form1: TForm1;구현{ $R *.DFM}절차 TForm1.FormCreate(보내기: 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)); TV 배경색 설정 SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0); 마우스 왼쪽 버튼 누르기 SendMessage(Button.Handle,WM_LBUTTONUP , 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);
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 설명: 창의 창 기능을 호출하여 해당 창에 메시지를 보냅니다. 이 함수는 메시지가 처리되지 않으면 반환되지 않습니다.
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 창과 관련된 텍스트의 길이를 가져옵니다(널 문자 제외).
★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의 Hook 프로그램에 의해 분리됩니다.
★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): Boolean; var buffer: array[0..255] of char; start Result := True; if StrPas(Buffer)='Edit' SendMessage(hwnd,WM_GETTEXT,256,lparam) 시작:=False; end; 절차 TForm1.Button1Click(Sender: TObject); var hwnd: Integer; array[0..255] of char; 시작 hwnd:= FindWindow('CabinetWClass',nil); (hwnd,@EnumChildWindowsProc,Longint(@buffer[0])); 캡션 := StrPas(버퍼); end;