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

  • 相关阅读:
    关于js计算非等宽字体宽度的方法
    [NodeJs系列]聊一聊BOM
    Vue.js路由管理器 Vue Router
    vue 实践技巧合集
    微任务、宏任务与Event-Loop
    事件循环(EventLoop)的学习总结
    Cookie、Session和LocalStorage
    MySQL 树形结构 根据指定节点 获取其所在全路径节点序列
    MySQL 树形结构 根据指定节点 获取其所有父节点序列
    MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators
  • 原文地址:https://www.cnblogs.com/Dincat/p/13431054.html
Copyright © 2011-2022 走看看