zoukankan      html  css  js  c++  java
  • C++进程间通信之剪贴板

    转载:http://blog.csdn.net/hk627989388/article/details/53693636

    转载:http://blog.csdn.net/heihei36/article/details/46636275

    转载:http://bbs.csdn.net/topics/392043890

    //GMEM_FIXED    分配固定的内存,返回值是一个指针.
    //GMEM_MOVEABLE    
    //分配可移动的内存,在Win32中内存块在物理内存中是不可移动的,但在缺省堆中可以. 返回值是该内存对象的句柄,可使用函数 GlobalLock 将该句柄转换为一个指针.
    //这个标识不能与 GMEM_FIXED 组合使用.
    
    //ansi
    void SetClipboardByAnsi()
    {
        HWND hWnd = NULL; 
        HANDLE hHandle;//保存调用GlobalAlloc函数后分配的内存对象的句柄
        string strTemp;
        char *pBuf;//保存调用AllocLock函数后返回的内存地址
    
        OpenClipboard( hWnd );//打开剪切板  
        EmptyClipboard();//清空剪切板  
    
        strTemp="巴萨VS皇马";
    
        hHandle = GlobalAlloc(GMEM_MOVEABLE, strTemp.length()+1);//分配内存
    
        if (hHandle)//若函数调用失败,则返回NULL
        {
            pBuf = (char*) GlobalLock(hHandle);//锁定内存,返回申请内存的首地址  
            //wcscpy(pBuf, strTemp.c_str());  
            strcpy(pBuf, strTemp.c_str());  
    
            GlobalUnlock(hHandle);//解除锁定 
            SetClipboardData(CF_TEXT, hHandle);//设置剪切板数据 
            CloseClipboard();//关闭剪切板 
        }
    }
    
    //Unicode
    void  SetClipboardByUnicode()
    {
        // 打开剪贴板   
        if (!OpenClipboard(NULL)|| !EmptyClipboard())    
        {   
            printf("打开或清空剪切板出错!
    ");   
            return ;   
        }
    
        HANDLE hHandle;//保存调用GlobalAlloc函数后分配的内存对象的句柄
        wstring strText = L"宽字符测试剪切板";
    
        //hHandle = GlobalAlloc(GMEM_MOVEABLE, strText.length()+1);//错误的 
        hHandle = GlobalAlloc(GMEM_MOVEABLE, ((wcslen(strText.c_str()))*sizeof(TCHAR))*2); 
    
        if (hHandle)//若函数调用失败,则返回NULL
        {
            LPWSTR lpStr = (LPWSTR)GlobalLock(hHandle);
            wcscpy(lpStr, strText.c_str()); 
            GlobalUnlock(hHandle);//解除锁定 
            SetClipboardData(CF_UNICODETEXT, hHandle);//设置剪切板数据 
            CloseClipboard();//关闭剪切板 
        }
    }
    
    
    void GetClipboard()
    {
        OpenClipboard(NULL);//打开剪切板
    
        if (IsClipboardFormatAvailable(CF_UNICODETEXT))//剪切板上是否存在文本格式
        {
            HANDLE hClip;
            wchar_t* pBuf;
            
            hClip = GetClipboardData(CF_UNICODETEXT);//获取剪切板文本数据
    
            pBuf = (wchar_t*)GlobalLock(hClip);
            GlobalUnlock(hClip);
            CloseClipboard();
            wstring temp = pBuf;
            wprintf(L"%s",pBuf);
        }
    }
    
    int main()
    {
        //SetClipboardByAnsi();
        //SetClipboardByUnicode();
        GetClipboard();
    
        getchar();
        return 0;
    }
  • 相关阅读:
    Unity物理系统随记
    Unity相机跟随小结
    unity制作赛车游戏
    动态编程
    C#-特性,反射,动态编程
    BASE64加解密
    idea快捷键
    git安装和git命令:全局设置用户名邮箱配置
    基于Node.js+MySQL开发的开源微信小程序商城(微信小程序)部署环境
    微信小程序开发入门(一),Nodejs搭建本地服务器
  • 原文地址:https://www.cnblogs.com/chechen/p/7601850.html
Copyright © 2011-2022 走看看