| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3507 人关注过本帖
标题:请教 从Citrix 上 Sap 拷贝数据到vfp 乱码问题
只看楼主 加入收藏
ksbbzhr
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2012-12-4
收藏
得分:0 
貌似  _edPaste  要搞懂它有非常大的难度啊  要累死人的 动力不足啊   就用原来的方法吧
2012-12-14 15:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用ksbbzhr在2012-12-14 15:39:22的发言:

我是在Sap上 鼠标指向那个utf-8 的编辑框   鼠标右键  弹出快捷菜单   选择存为本地文件

用CtrlC 的方法   完全没有办法得到

哦,早说嘛,害我百思不得其解。

授人以渔,不授人以鱼。
2012-12-14 15:42
wasun2012
Rank: 2
等 级:论坛游民
帖 子:12
专家分:17
注 册:2012-11-17
收藏
得分:4 
回复 50楼 ksbbzhr
使用VBScript 读取 sap.txt 文件:

Set objFSO = CreateObject("scripting.filesystemobject")
    strContents =  objFSO .OpenTextFile("sap.txt", 1, False, False).ReadAll
    WScript.Echo strContents


[ 本帖最后由 wasun2012 于 2012-12-14 17:16 编辑 ]
2012-12-14 16:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
测试了一下,在VFP中使用Win32 API中获取系统剪贴板的内容,存在一个技术问题,即无法(方便地)把远程内存中的句柄块强制转换为VFP中的字符串,所以暂时使用中介的办法,用C写了一个外部小程序,获取剪贴板中的内容储存为一个文本文件,再让VFP中的编辑控件读取,不足之处是画面会闪现RUN黑屏(不能取消,因为必须等待程序执行完成才能进行下一动作),这个调用外部程序的行为在VFP中速度稍有点慢(但肯定比启动Word快得多,也不会遗留进程在内存中),不知你是否能够忍受。

那个控件使用如下的类代码创建即可:
程序代码:
DEFINE CLASS myEditBox AS EditBox 

    #DEFINE K_CTRL_ENTER    10
    PROCEDURE Keypress(tnKeyCode, tnShiftAltCtrl)
        LOCAL lcText
       
        IF (tnKeyCode == K_CTRL_ENTER) .AND. (tnShiftAltCtrl == 2)
            * 定义按CTRL+ENTER组合键获取剪贴板内容
            RUN GetClipboardText                    && 执行外部GetClipboardText.exe程序
            lcText = FILETOSTR("Clipboard.txt")     && Clipboard.txt是GetClipboardText.exe生成的文本文件
            IF !EMPTY(lcText)
                This.Value = lcText
            ELSE
                MESSAGEBOX("当前剪贴板中没有内容", 64, ThisForm.Caption, 2000)
            ENDIF
            This.SetFocus
        ENDIF
       
    ENDPROC
    #UNDEFINE K_CTRL_ENTER
   
ENDDEFINE

GetClipboardText.exe.zip (7.5 KB)

附件不是zip压缩包,把扩展名.zip删掉即可。用VC11写成,需要vc110运行库,启动时若报缺少运行库把文件名告诉我,另外上传。

以下是该C程序的源代码,如果嫌复杂,自己找个C编译器重新创建一个可执行程序即可:
程序代码:
#include <Windows.h>
#include <clocale>
#include <cstdio>

void SaveToFile(const wchar_t* filename, const wchar_t* text);

void wmain(void)
{
    setlocale(LC_ALL, "chs");
    if (OpenClipboard(NULL))
    {
        wchar_t* text = (wchar_t*)GetClipboardData(CF_UNICODETEXT);
        SaveToFile(L"Clipboard.txt", text);
        EmptyClipboard();
        CloseClipboard();
    }
}

void SaveToFile(const wchar_t* filename, const wchar_t* text)
{
    FILE* file;
    if (_wfopen_s(&file, filename, L"wt") == 0)
    {
        fwprintf_s(file, L"%s", (text != NULL) ? text : L"");
        fclose(file);
    }
}


[ 本帖最后由 TonyDeng 于 2012-12-15 03:27 编辑 ]

授人以渔,不授人以鱼。
2012-12-15 02:53
ksbbzhr
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2012-12-4
收藏
得分:0 
非常感谢  还是我原来的方法比较好用
2012-12-17 08:47
ksbbzhr
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2012-12-4
收藏
得分:0 
创建OLE对象   可不可以 在OLE    word对象中 粘贴  剪切? 怎么操作?
谢谢

好像创建的OLE对象 与Createobject创建的对象相比   比较容易退出    不容易造成word滞留内存的问题

[ 本帖最后由 ksbbzhr 于 2012-12-17 08:50 编辑 ]
2012-12-17 08:48
快速回复:请教 从Citrix 上 Sap 拷贝数据到vfp 乱码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014044 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved