델파이 postmessage 예제

Delphi를 사용하면 Windows 메시지 큐에 게시된 다음 응용 프로그램에서 사용자 지정 처리기로 처리할 수 있는 시기를 정의할 수 있습니다. 서비스를 사용하고 PostThreadMessage 디스패치를 처리하는 예가 여기에 있습니다. Mick이 언급했듯이 보안 컨텍스트가 다른 응용 프로그램(특히 Vista)간에 메시지 처리를 사용할 수 없습니다. 명명된 파이프 또는 이와 유사한 파이프를 사용해야 합니다. 마이크로소프트는 여기에 이에 대해 설명합니다. Delphi 애플리케이션 프로그래머는 VCL이 제공하는 이벤트가 대부분의 요구 사항에 적합하다는 것을 알게 될 것입니다. 가끔씩만 Win32 메시지 처리의 세계를 탐구해야 합니다. 그러나 Delphi 구성 요소 개발자는 많은 Windows 메시지를 직접 처리한 다음 해당 메시지에 해당하는 이벤트를 호출해야 하기 때문에 여러분과 메시지는 매우 좋은 친구가 될 것입니다. 하지만 물론 당신은 또한 자신을 위해이 프로그램을 할 수 있습니다., 그리고 델파이 전에 델파이 버전에 대 한 해야 합니다 2007.

나는 단순히 수년에 걸쳐 진화하고 수십 개의 프로그램에서 작동하는 내부 라이브러리에서 몇 가지 조각을 추가 할 것입니다. 나는 버그가 없다고 주장하지 않습니다. 코드와 비교할 수 있으며, 문제가 발생하면 언제든지 물어보고 명확히 하려고 노력할 것입니다. 메시지는 Windows에서 응용 프로그램에 보낸 일부 발생에 대한 알림입니다. 예를 들어, 마우스 단추를 클릭하거나, 창 크기를 조정하거나, 키보드의 키를 누르면 Windows에서 발생한 일을 알리는 메시지를 응용 프로그램에 보냅니다. 델파이에서 Windows 메시지를 처리하는 것은 간단하기 때문에 보낼 데이터로 채워진 WM_CopyData와 함께 SendMessage API 호출을 발급하는 것은 매우 간단합니다. 이것은 단지 예일 뿐이지만 실제 코드베이스를 동일한 아이디어로 작동합니다. 이 클래스의 개체를 만들 면 해당 클래스에 메시지를 보내기 시작 하는 스레드를 만듭니다. Log.Log()는 데이터를 텍스트 파일에 저장합니다. 새 서비스 응용 프로그램에서이 코드를 사용하면 모든 것이 잘 작동합니다. 나는 `깨진`서비스에 넣을 때, 그것은하지 않습니다. 메시지를 수신하기 위해 메시지 대기 루프를 사용하지 않습니다.

새 서비스를 만들고 위의 코드를 입력한 다음 클래스의 개체를 만들었습니다. 그게 전부에요. 메시지는 Windows에서 응용 프로그램에 전달된 레코드로 나타납니다. 이 레코드에는 발생한 이벤트 유형 및 메시지와 관련된 추가 정보와 같은 정보가 포함됩니다. 예를 들어 마우스 단추 클릭 메시지의 메시지 레코드에는 단추를 누를 때의 마우스 좌표가 포함됩니다. 응용 프로그램에 Windows에서 전달 된 레코드 유형은 다음 코드에 표시된 대로 Windows 장치에 정의 된 TMsg라고합니다 : 예를 들어, 양식은 위에서 정의 한 메시지 중 하나를 보낼 수 있습니다 : 이러한 메모는 Microsoft Windows에서 실행되는 Delphi에 적용됩니다. 플랫폼. Windows 메시징은 프로세스가 쉽게 통신할 수 있는 방법입니다. 아래에서 이러한 메시지를 보내는 예제와 메시지를 수신하는 예제 메시지 처리기를 찾을 수 있습니다.

Mghie가 언급했듯이 메시지 처리 루프가 필요합니다. 이것이 바로 PeekMessage가 메시지를 올바르게 반환하는 이유입니다. 메시지가 없는 것이 아니라 메시지를 처리하지 않는 것입니다. 표준 응용 프로그램에서 Delphi는 TApplication 클래스를 만들고 Application.Run을 호출합니다. 일반 앱의 메시지 처리 루프입니다. 그것은 기본적으로 구성: 이 노트는 델파이에 대 한 올바른 것으로 추정 된다 6 그리고 델파이 7 마이크로소프트 윈도우에서 실행. 다음 예제에서는 PostMessage 기능을 사용하여 개인 창 메시지를 게시하는 방법을 보여 주며 있습니다. WM_COMPLETE라는 개인 창 메시지를 정의했다고 가정: wParam 및 lParam 멤버는 정수 데이터를 전달하는 데 이상적으로 적합하지만 개체를 전달하는 데도 사용할 수 있습니다. 다른.