pppguest3962
狐狸大王
狐狸大王
  • UID26872
  • 注册日期2008-11-01
  • 最后登录2023-08-16
  • 发帖数343
  • 经验158枚
  • 威望0点
  • 贡献值236点
  • 好评度5点
阅读:2840回复:13

请教各位大大,修改一个Custim Buttons的按钮,不知道这个想法可行吗?

楼主#
更多 发布于:2013-06-22 11:13
下面这个按钮是去执行一个程序,我想在执行这个程序之前,
把当前页面的内容复制到粘贴板,就像:
Ctrl+A,Ctrl+C那样

如果可以的话,可不可以进一部增强到这样:
先把当前粘贴板的内容(有可能是位图)
先存放到一个临时
然后把当前的页面字符内容(不是页面html源代码)复制到粘贴板,
然后执行这个程序
等待三秒
然后把临时的内容放回到粘贴板?

谢谢各位大大解答!!!

目前使用的按钮代码:

var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
file.initWithPath("D:\\All\\MyTools\\ReadWord.exe");
file.launch();

最新喜欢:

infinityinfini...
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
1楼#
发布于:2013-06-22 11:13
伪代码,参考 https://developer.mozilla.org/en/docs/U ... _Clipboard

var 剪切板cache = {};
  剪切板cahce = 获取剪切板内容对象();
  设置剪切板内容( 获取当前页面字符的函数(content.document) );
  执行程序();
  window.setTimeout(function(){
         设置剪切板内容( 剪切板cache );
     },
     3000
  );



操作剪切板很麻烦的,OLE对象什么的
你程序支持参数传递的话用下面的方法会简单很多

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   file.initWithPath( 程序路径 );
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
   process.init(file);
   var args = [];
   args.push( 获取当前页面字符的函数(content.document) );
   process.runwAsync(args, args.length, null, false);
-いたんですか? -ええ、ずっと
pppguest3962
狐狸大王
狐狸大王
  • UID26872
  • 注册日期2008-11-01
  • 最后登录2023-08-16
  • 发帖数343
  • 经验158枚
  • 威望0点
  • 贡献值236点
  • 好评度5点
2楼#
发布于:2013-06-22 11:13
我的程序不支持参数传递。。。。囧
想知道
获取当前页面字符的函数
是什么呢? ^_^,文档实在看不懂。。。
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
3楼#
发布于:2013-06-22 11:13
pppguest3962:我的程序不支持参数传递。。。。囧
想知道
获取当前页面字符的函数
是什么呢? ^_^,文档实在看不懂。。。
回到原帖


伪代码的意思呢,就是你要自己实现咯¯ ▽¯)つノ
-いたんですか? -ええ、ずっと
pppguest3962
狐狸大王
狐狸大王
  • UID26872
  • 注册日期2008-11-01
  • 最后登录2023-08-16
  • 发帖数343
  • 经验158枚
  • 威望0点
  • 贡献值236点
  • 好评度5点
4楼#
发布于:2013-06-22 11:13
嗯嗯,了解了,看来操作粘贴板很困难,伪代码其实我是大概知道怎么回事,但毕竟自己不是编程出身的,当年这个按钮,也是请教高手的。。。。

如果发送页面的Ctrl+A,CTRL+C不太可能,

那是否可以把整个页面的html代码复制到粘贴板呢?
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
5楼#
发布于:2013-06-22 11:13
pppguest3962:嗯嗯,了解了,看来操作粘贴板很困难,伪代码其实我是大概知道怎么回事,但毕竟自己不是编程出身的,当年这个按钮,也是请教高手的。。。。

如果发送页面的Ctrl+A,CTRL+C不太可能,

那是否可以把整个页面的html代码复制到粘贴板呢?
回到原帖


操作剪贴板是很简单的,你要等待三秒,然后把临时的内容放回到粘贴板?如果3秒内程序都没开好,剪贴板还是原来的内容。

这种外置的操作如果参数传递不支持,我会用 autohotkey 来解决。
pppguest3962
狐狸大王
狐狸大王
  • UID26872
  • 注册日期2008-11-01
  • 最后登录2023-08-16
  • 发帖数343
  • 经验158枚
  • 威望0点
  • 贡献值236点
  • 好评度5点
6楼#
发布于:2013-06-22 11:13
折腾了一个星期,还是未能找到把页面内容复制到粘贴板的方法,
求助各位高手,如何把FF当前页面的全部内容复制到粘贴板?
或者
把FF当前页面的html代码全部复制到粘贴板?
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
7楼#
发布于:2013-06-22 11:13
仅供参考,写的很简单
(function(){

    let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;

    var ns = {
        init: function(){
            var win = this.getFocusedWindow();

            var text = win.document.documentElement.outerHTML;
            this.copy(text);
        },
        copy: function(aText){
            Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(aText);
        },
        getFocusedWindow: function() {
            var win = document.commandDispatcher.focusedWindow;
            return (!win || win == window) ? content : win;
        },
    };

    ns.init();

})();
pppguest3962
狐狸大王
狐狸大王
  • UID26872
  • 注册日期2008-11-01
  • 最后登录2023-08-16
  • 发帖数343
  • 经验158枚
  • 威望0点
  • 贡献值236点
  • 好评度5点
8楼#
发布于:2013-06-22 11:13
hzzhaiqi:仅供参考,写的很简单
(function(){

    let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;

    var ns = {
        init: function(){
            var win = this.getFocusedWindow();

            var text = win.document.documentElement.outerHTML;
            this.copy(text);
        },
        copy: function(aText){
            Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(aText);
        },
        getFocusedWindow: function() {
            var win = document.commandDispatcher.focusedWindow;
            return (!win || win == window) ? content : win;
        },
    };

    ns.init();

})();
回到原帖



感谢感谢!!!,我大概理解了一下代码,修改成这样,似乎不能工作,
Readword.exe没能执行起来,估计中间三句直接使用似乎不行,呵呵呵,烦请各位高手帮我看看吧,谢谢!!


var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);

var win = document.commandDispatcher.focusedWindow;
var text = win.document.documentElement.outerHTML;
Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(aText);

file.initWithPath("D:\\All\\MyTools\\ReadWord.exe");
file.launch();
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
9楼#
发布于:2013-06-22 11:13
pppguest3962回到原帖

let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;

function getFocusedWindow() {
    var win = document.commandDispatcher.focusedWindow;
    return (!win || win == window) ? content : win;
}

function exec(path, args, blocking){
    blocking = typeof(blocking) == 'undefined' ? false : blocking;

    var file    = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
    var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
    try {
        file.initWithPath(path);

        if (!file.exists()) {
            Cu.reportError('File Not Found: ' + path);
        }

        if (file.isExecutable()) {
            process.init(file);
            process.run(blocking, args, args.length);
        } else {
            file.launch();
        }

    } catch(e) {}
}


var win = getFocusedWindow();
var text = win.document.documentElement.outerHTML;
Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(text);

exec("D:\\All\\MyTools\\ReadWord.exe", []);
pppguest3962
狐狸大王
狐狸大王
  • UID26872
  • 注册日期2008-11-01
  • 最后登录2023-08-16
  • 发帖数343
  • 经验158枚
  • 威望0点
  • 贡献值236点
  • 好评度5点
10楼#
发布于:2013-06-22 11:13
非常感激hzzhaiqi大大的帮助,
代码实现出现问题,可以执行,
能执行到
exec("D:\\All\\MyTools\\ReadWord.exe", []);
这一步没问题的,能把Readword.exe调动起来,Readword的显示粘贴板是空的,
我打开notepad.exe,ctrl+v,没有贴出东西
我打开mspaint.exe,ctrl+v,似乎也没有位图,
我也不知道是不是我环境有问题呢,还是粘贴板的东西还需要转换一下?
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
11楼#
发布于:2013-06-22 11:13
pppguest3962:非常感激hzzhaiqi大大的帮助,
代码实现出现问题,可以执行,
能执行到
exec("D:\\All\\MyTools\\ReadWord.exe", []);
这一步没问题的,能把Readword.exe调动起来,Readword的显示粘贴板是空的,
我打开notepad.exe,ctrl+v,没有贴出东西
我打开mspaint.exe,ctrl+v,似乎也没有位图,
我也不知道是不是我环境有问题呢,还是粘贴板的东西还需要转换一下?
回到原帖


你怎么调用的?完整代码发出来看看。
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
12楼#
发布于:2013-06-22 11:13
你前面贴的代码有错误,不是 aText,是 text
pppguest3962
狐狸大王
狐狸大王
  • UID26872
  • 注册日期2008-11-01
  • 最后登录2023-08-16
  • 发帖数343
  • 经验158枚
  • 威望0点
  • 贡献值236点
  • 好评度5点
13楼#
发布于:2013-06-22 11:13
hzzhaiqi:你前面贴的代码有错误,不是 aText,是 text回到原帖


成功了,太感谢您了,如果您在广州,我是可以请你吃饭的,^_^,如果很远,那只能     了。。。。。。
游客

返回顶部