关于windows下面不同程序间用clipboard通信

前面讲到,新界面用delphi写,而底层程序用c++做的,且有以前的源代码,我实在不想把c++源代码转到pascal语言。怎么办?试过用dll,但是dll里面对象实在没有办法,现在只能用clipboard粘贴板实现通信,这样就可以delphi程序调用c++的底层程序。
我尝试采用文本方式,通过clipboard传递信息,函数名称和参数之间采用换行隔开,到另外一端解析里面的内容,调用相关函数就实现了程序自己的通信和调用。
在这里插入图片描述
delphi里面程序非常简单:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
     senddata:string;
begin
   clipboard.Open;
   senddata:='linchao:'+#13#10+edit1.Text+#13#10+ edit2.Text+#13#10+edit3.Text;
   clipboard.SetTextBuf(Pchar(senddata));
   clipboard.close;
   sleep(200);      //等待结束
  // NextClipHwnd:=SetClipBoardViewer(Handle);
end;

c++里面的程序需要增加消息处理程序:

case WM_DRAWCLIPBOARD:
    if(!OpenClipboard(hWnd))//打开剪贴板
    {
        MessageBox(hWnd,_T("clip board open error "),_T("hi"),MB_OK);
        return 0; 
    }

    if(IsClipboardFormatAvailable(CF_TEXT))
    {
         HANDLE hCilpData = GetClipboardData(CF_TEXT);
         DWORD Len = GlobalSize(hCilpData);

        char* pData;
		WCHAR clipData[1000];
        pData = (char*)GlobalLock(hCilpData);//内存控制句柄加锁,其他进程不能再访问
		MultiByteToWideChar(CP_ACP,0,pData,strlen(pData)+1,clipData,
		sizeof(clipData)/sizeof(clipData[0]));
		MessageBox(hWnd,clipData,_T("hi"),MB_OK);
        GlobalUnlock(hCilpData);//内存控制句柄解锁,其他进程可以访问
    }

   // EmptyClipboard();//清空剪贴板,这一步才真正拥有剪贴板

		CloseClipboard();//关闭剪贴板
		
		SendMessage(m_hWndNextViewer, WM_DRAWCLIPBOARD, 0, 0); 
		break;

在能够接收消息前,要把消息通道处理好:
主要是使用函数记录原来的窗口消息链表
m_hWndNextViewer=SetClipboardViewer(hWnd);

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   
   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
    m_hWndNextViewer=SetClipboardViewer(hWnd); 
   return TRUE;
}

最后,可以实现通过delphi发送消息给c++。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值