하나의 VB 응용 프로그램에서 Delphi 응용 프로그램으로 짧은 문자열 (30 바이트 미만이지만 1 초마다 전송)을 보내야합니다. Windows에서 CopyDataStruct, WM_COPYDATA 및 SendMessage 함수를 사용하여 가능합니까?Visual Basic 응용 프로그램에서 Delphi 응용 프로그램으로 짧은 문자열을 보내는 방법은 무엇입니까?
1
A
답변
3
나는 WM_COPYDATA가 이것을 수행하는 완벽한 방법이라고 말할 수 있습니다. WM_COPYDATA에 대한 메시지 처리기를 구현하기 위해 델파이 기본 폼을 가져와야합니다. 델파이 끝에
그것은 다음과 같은 :TMyMainForm = class(TForm)
protected
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
end;
procedure TMyMainForm.WMCopyData(var Msg: TWMCopyData);
begin
//do something with Msg.lpData
end;
귀하의 VB 코드를 델파이 기본 폼의 창 핸들을 얻는해야합니다.
0
이것은 DDE를 사용하는 것과 비슷합니다. 또 다른 방법은 문자열을 레지스트리의 임시 영역에 쓴 다음 다른 프로그램을 호출하여이를 읽은 다음 임시 레지스트리 키를 삭제하는 것입니다. 명령 줄에서 문자열을 매개 변수로 전달하고 프로그램을 실행할 수도 있습니다.
안녕하세요. 도움을 주셔서 감사합니다.받는 프로그램의 핸들을 가져 오는 방법을 묻는 것이 필요합니다. VB에서 보내는 앱에 대해 Me.Handle을 사용할 수는 있지만 수신 핸들로 입력 한 것, 나는 아무런 결과도 얻지 못할 것이다. hwnd는 긴 숫자를 보낸다. 예를 들어 4759178910518738944는 명령이 전송 될 때마다 바뀐다. 또한 수동으로 델파이 창 핸들을 VB에서 처리하려고 시도했다. 수신기 PID는 "pid = 쉘 (C : \ Receive.exe, vbNormalFocus) ".. VB에서 델파이를 시도 할 때 아무런 결과가 없지만 VB에서 VB로 OK이고 델파이로도 OK입니다. 내가 뭘 잘못하고 있니? :-) – Fred
FindWindowEx를 호출하여 Delphi 창 캡션 및 창 클래스 이름을 전달합니다. 당신은 Spy ++에서 이것을 찾을 수 있습니다. EnumWindows를 호출하여 최상위 창을 열거합니다.이 중 하나가 사용자의 것입니다. –
Dim iHwnd As LongDim SS As String = "테스트 문자열 30 자 미만" Dim ls As Integer = Len (SS) Dim cds As는 CopyDataStruct = 새 CopyDataStruct를 {.dwData = 0, .cbData = ls,. 035, "Receive" SendMessage (iHwnd, & H4A, Me.Handle, cds) 이것은 내가 사용하는 VB 코드 중 일부입니다. CopyDataStruct를 보내는 Delphi 프로그램 잘 작동하는 "수신"프로그램,하지만 동일한 문자열을 보내 VB를 사용하여 지금까지 성공하지 못했습니다. 내가 할 필요가 구체적으로 뭐야? – Fred