Delphi가 핸들을 가져와 메시지를 보내는 방법

7014 단어 Delphi문단소식
본고는 델파이가 핸들을 얻고 메시지를 보내는 방법을 실례 형식으로 상세하게 설명하였으며, 구체적인 용법은 다음과 같다.
다른 창의 핸들을 찾습니다.

handle := FindWindow(nil,PChar(' '));// 
하위 창 찾기:

childHandle := FindWindowEx(handle,0,' ',' '); 
또한 매거 하위 창의 API가 있습니다.

EnumChildWindows( ,@ , );
이 함수를 사용하려면 다음과 같은 리셋 함수를 직접 써야 합니다.

function EnumChildProc(ahWND:HWND; param:LPARAM):boolean; stdcall;
sendmessage(handle,message,wl,rl)

unit Unit1; 

interface 

uses Windows,Messages,Tlhelp32,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;

type
 TForm1=class(TForm)
procedure FormCreate(Sender: TObject);

 private
 {
Private declarations
} 
 public 
 {
Public declarations
}
 end; 
var Form1: TForm1;
implementation
{ 
$R *.DFM
}

procedure TForm1.FormCreate(Sender: TObject);
var a,b:PAnsiChar;
h:HWND;
begin
h:= FindWindow(nil,'abc.txt -  ');
h:= FindWindowEx(h,0,'edit',nil);
SendMessage(h,WM_SETTEXT,255,Integer(PChar(' ')));
ShowMessage( IntToStr(h));
end;


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);   Button 
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 설명: 창의 창 함수를 호출하여 그 창에 메시지를 보냅니다.메시지 처리가 끝나지 않으면 이 함수는 되돌아오지 않습니다
SendMessage에는 다음과 같은 4개의 매개변수가 있습니다.
1. hwnd 32비트의 창 핸들 창은 모든 종류의 화면 대상이 될 수 있습니다. 왜냐하면 Win32는 대부분의 시각적 대상의 핸들을 유지할 수 있기 때문입니다.
2. wMsg는 다른 메시지를 구별하는 상수 값입니다. 이 상수는 Windows 단원에서 미리 정의한 상수일 수도 있고 사용자 정의 상수일 수도 있습니다.
3. wParam은 보통 메시지와 관련된 상수 값이며, 창이나 컨트롤의 핸들일 수도 있습니다.
4. lParam은 보통 메모리의 데이터를 가리키는 바늘입니다.WParm, lParam, Pointer 모두 32비트이므로 상호 변환 가능
wMsg 함수 상세 설명:
★WM_창 만들기
★WM_DESTROY 창이 파괴되었을 때 보내기
★WM_MOVE 창 이동
★WM_SIZE 창 크기 변경
★WM_ACTIVATE 창이 활성화되거나 활성화되지 않음
★WM_SETFOCUS 창에 초점 맞추기
★WM_KILLFOCUS 창의 초점 잃음
★WM_ENABLE 창이 Enable 상태로 변경됨
★WM_SETREDRAW 설정 창을 다시 그릴 수 있는지 여부
★WM_SETTEXT 응용 프로그램에서 이 메시지를 보내서 창의 텍스트를 설정합니다.
★WM_GETTEXT 응용 프로그램에서 이 메시지를 보내서 해당 창의 텍스트를 버퍼로 복사합니다.
★WM_GETTEXTLENGTH는 한 창과 관련된 텍스트의 길이를 얻습니다(빈 문자는 포함되지 않음).
★WM_PAINT는 창을 다시 그려야 합니다.
★WM_닫기 창이나 응용 프로그램이 닫힐 때 신호 보내기
★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 button,combobox,listbox,menu의 시각적 외관이 바뀔 때 발송
★WM_MEASUREITEM button,combobox,listbox,listview control,ormenuitem이 생성될 때
★WM_VKEYTOITEM 이 메시지에는 LBS_WANTKEYBOARDINPUT 스타일로 소유자에게 보내서 WM_KEYDOWN 메시지
★WM_CHARTOITEM 이 메시지는 LBS_WANTKEYBOARDINPUT 스타일의 목록 상자를 소유자에게 보내 WM_CHAR 메시지
★WM_SETFONT 텍스트를 그릴 때 프로그램이 이 메시지를 보내면 컨트롤에 사용할 색을 가져옵니다.
★WM_GETFONT 응용 프로그램에서 현재 컨트롤에서 텍스트를 그리는 글꼴로 이 메시지를 보냅니다.
★WM_SETHOTKEY 응용 프로그램에서 이 메시지를 보내면 창이 핫키와 연결됩니다.
★WM_GETHOTKEY 응용 프로그램에서 이 메시지를 보내서 핫키가 창에 연결되어 있는지 여부를 판단합니다.
★WM_QUERYDRAGICON 이 메시지는 최소화 창에 전송됩니다. 창이 드래그되고 클래스에 정의된 아이콘이 없으면 프로그램이 아이콘이나 커서의 핸들을 되돌려줍니다. 사용자가 아이콘을 드래그할 때 시스템이 이 아이콘이나 커서를 표시합니다.
★WM_COMPAREITEM 이 메시지를 보내서combobobox나listbox에 새로 추가된 항목의 상대적 위치를 판정합니다
★WM_COMPACTING 메모리가 거의 없어졌어요.
★WM_WINDOWPOSCHANGING 이 메시지를 보내는 창의 크기와 위치가 바뀔 때 setwindowpos 함수나 다른 창 관리 함수를 호출합니다
★WM_WINDOWPOSCHANGED 이 메시지를 그 창의 크기와 위치가 바뀌었을 때 setwindowpos 함수나 다른 창 관리 함수를 호출합니다
★WM_POWER 시스템이 일시 중지 상태로 들어갈 때 이 메시지를 보냅니다.
★WM_COPYDATA는 한 응용 프로그램이 다른 응용 프로그램에 데이터를 전달할 때 이 메시지를 보냅니다.
★WM_CANCELJOURNA 사용자가 프로그램 로그 활성화 상태를 취소하면 프로그램에 이 메시지를 제출합니다
★WM_NOTIFY 컨트롤의 이벤트가 발생했거나 이 컨트롤이 정보를 필요로 할 때 부모 창에 이 메시지를 보냅니다.
★WM_INPUTLANGCHANGEREQUEST 사용자가 입력 언어를 선택하거나 입력 언어의 단축키를 변경할 때
★WM_INPUTLANGCHANGE 플랫폼 현장이 변경된 후 영향을 받는 최상위 창에 이 메시지를 보냅니다.
★WM_TCARD 프로그램이 윈도우즈 도움말 루틴을 초기화했을 때 이 메시지를 응용 프로그램에 보내기
★WM_HELP 이 메시지는 사용자가 F1을 눌렀음을 나타냅니다. 만약 메뉴가 활성화되어 있다면, 이 메시지는 이 창과 연결된 메뉴로 보내고, 그렇지 않으면 초점이 있는 창으로 보내고, 초점이 없는 경우 현재 활성화된 창으로 보냅니다.
★WM_USERCHANGED 사용자가 로그인하거나 종료한 후 모든 창에 이 메시지를 보내고, 사용자가 로그인하거나 종료할 때 시스템이 사용자의 구체적인 설정 정보를 업데이트하고, 사용자가 설정을 업데이트할 때 시스템이 바로 이 메시지를 보냅니다.
★WM_NOTIFYFORMAT 공용 컨트롤, 사용자 정의 컨트롤과 부모 창은 이 메시지를 통해 컨트롤이 ANSI 또는 UNICODE 구조를 사용하는지 판단합니다

function EnumChildWindowsProc(hwnd, lparam: Integer): Boolean;  
  var  
 buffer: array[0..255] of char;  
  begin  
 Result := True;  
 GetClassName(hwnd,buffer,256);  
 if StrPas(Buffer)='Edit' then  
 begin  
 SendMessage(hwnd,WM_GETTEXT,256,lparam);  
 Result:=False;  
 end;  
  end;  
  
  procedure TForm1.Button1Click(Sender: TObject);  
  var  
 hwnd: Integer;  
 buffer: array[0..255] of char;  
  Begin  
 hwnd := FindWindow('CabinetWClass',nil);  
 if hwnd<> 0 then  
 begin  
 EnumChildWindows(hwnd,@EnumChildWindowsProc,Longint(@buffer[0]));  
 Caption := StrPas(buffer);  
 end;  
  end;

좋은 웹페이지 즐겨찾기