zoukankan      html  css  js  c++  java
  • WSH访问剪贴板

    介绍 我最近进行了一

      

    些Windows脚本主机编程,它的强大功能、特性和灵活性让我感到惊喜。有一件事是我无法从WSH访问剪贴板。在互联网上,我发现了一些解决方案,比如这个基于Internet Explorer自动化的解决方案。这种方法有几个问题,你可以在我的文章中读到关于Internet Explorer自动化:Internet Explorer自动化有什么问题? 使用的代码 在WSH中编写剪贴板内容脚本的解决方案是使用vc++和ATL创建一个常规的COM对象。要安装COM对象,请运行register.bat。 下面是一个使用来自WSH的组件的简单示例: 隐藏,复制Code

    var clipboardHelper = null;
    
    try
    {
        clipboardHelper = WScript.CreateObject("ClipboardHelper.ClipBoard");
    }
    catch (ex)
    {
        WScript.Echo(ex.message + "\n\nClipboardHelper library is not properly registered!");
        WScript.Quit(1);
    }
    
    var msg = "Some text";
    
    // Put the text into the clipboard.
    clipboardHelper.SetClipboardText(msg);
    
    // Get the text from clipboard.
    var text = clipboardHelper.GetClipboardText();
    
    WScript.Echo(text);

    的兴趣点 实现只是常规的ATL/COM代码。Win32 API函数用于访问剪贴板文本(OpenClipboard, IsClipboardFormatAvailable, GetClipboardData, SetClipboardData, CloseClipboard, GlobalAlloc, GlobalLock, GlobalFree)。 下面是从剪贴板(CF_TEXT和CF_UNICODETEXT格式支持)中检索文本的方法的实现: 隐藏,收缩,复制Code

    STDMETHODIMP CClipBoard::GetClipboardText(BSTR* pBstrClipboardText)
    {
        if (NULL == pBstrClipboardText)
        {
            return E_INVALIDARG;
        }
    
        CComBSTR bstrResult = L"";
    
        if (::OpenClipboard(NULL))
        {
            if (::IsClipboardFormatAvailable(CF_TEXT) || 
                ::IsClipboardFormatAvailable(CF_UNICODETEXT))
            {
                // First try to ge UNICODE text.
                BOOL   bUnicode   = TRUE;
                HANDLE hClipboard = ::GetClipboardData(CF_UNICODETEXT);
    
                if (NULL == hClipboard)
                {
                    // If UNICODE text was not available try to get ANSI text.
                    bUnicode   = FALSE;
                    hClipboard = ::GetClipboardData(CF_TEXT);
                }
    
                if (hClipboard != NULL)
                {
                    LPCSTR szClipboardData = (LPCSTR)::GlobalLock(hClipboard);
    
                    if (szClipboardData != NULL)
                    {
                        if (bUnicode)
                        {
                            LPCWSTR szClipboardWText = (LPCWSTR)szClipboardData;
    
                            bstrResult       = szClipboardWText;
                            szClipboardWText = NULL;
                        }
                        else
                        {
                            LPCSTR szClipboardText = (LPCSTR)szClipboardData;
    
                            bstrResult      = szClipboardText;
                            szClipboardText = NULL;
                        }
    
                        ::GlobalUnlock(hClipboard);
    
                        *pBstrClipboardText = bstrResult.Detach();
                        hClipboard = NULL;
                    }
                    else
                    {
                        ATLTRACE("GlobalLock failed in CClipBoard::GetClipboardText\n");
                    }
                }
                else
                {
                    ATLTRACE("GetClipboardData failed in CClipBoard::GetClipboardText\n");
                }
    
                hClipboard = NULL;
            }
            else
            {
                ATLTRACE("CF_TEXT NOT available in CClipBoard::GetClipboardText\n");
            }
    
            BOOL bRes = ::CloseClipboard();
            ATLASSERT(bRes);
        }
        else
        {
            ATLTRACE("Can NOT OpenClipboard in CClipBoard::GetClipboardText\n");
        }
    
        return S_OK;
    }

    本文转载于:http://www.diyabc.com/frontweb/news188.html

  • 相关阅读:
    Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间
    Mybatis---在控制台打印sql语句
    多线程实现的四种方法
    Restful架构
    maven中的pom配置文件一——spring,mybatis,oracle,jstl,json,文件上传
    spring mvc配置
    spring的事务
    cglib动态代理
    jdk动态代理
    spring总结————AOP面向切面总结
  • 原文地址:https://www.cnblogs.com/Dincat/p/13431054.html
Copyright © 2011-2022 走看看