搜索
aardio官方社区 门户 查看主题

运用API钩子直接给只读的表单上传控件赋值

发布者: Jacen.He | 发布时间: 2011-10-29 10:36| 查看数: 19602| 评论数: 22|帖子模式



import win.ui;
/*DSG{{*/
var winform = win.form(text="演示表单上传控件赋值";right=744;bottom=523)
/*}}*/

import web.form;
var wb = web.form( winform );
wb.html =
/**
<!doctype html>
<html>
<head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <title>演示表单上传控件赋值</title>
</head>
<body>
        <form id="form1" name="form1" enctype="multipart/form-data" method="post" action="">
        <label for="upload0"></label>
        <input type="file" name="upload0" id="upload0" />
        </form>
        <p>文件上传控件的值是只读的,不能修改.<br />
        这里使用aardio中的raw.hookApi创建一个函数钩子,拦截网页对文件对话框的调用,<br />
        并直接返回我们预设的值即可。</p>
</body>
</html>
**/


winform.show()  
wb.wait();

import raw.apiHook;
var hookGetOpenFileNameW = function (pfn) {  
   
var openFileName = raw.convert(pfn,{
        INT structSize;
        INT hwndOwner;
        pointer instance;
        ustring filter;
        pointer customFilter;
        INT maxCustFilter;
        INT filterIndex;
        pointer file
    });
   
   
var path = string.toUnicode(io._exepath)
    ::CopyMemory( openFileName.file, path, #path+2);
   
    winform.setTimeout(
function(hook) hook.unInstall(),1,owner);//卸载钩子
    return true;
}
var hook = raw.apiHook("comdlg32.dll", "GetOpenFileNameW", "int(pointer)", hookGetOpenFileNameW)
hook.install();

win.loopMessage();

最新评论

蝈蝈 发表于 2011-10-29 10:42:23

太强啦,感谢Jacen

太强啦,感谢Jacen
fyy 发表于 2011-10-29 10:52:10

钩子比较强大,好好学习下

钩子比较强大,好好学习下
ninja911 发表于 2011-10-29 10:52:43

老大,强大终于又范例了,注入中^_^

老大,强大终于又范例了,注入中^_^
lujjjh 发表于 2011-10-29 12:58:53

支持一下,很好很强大

支持一下,很好很强大
qqmmcc 发表于 2011-10-29 13:12:25

非常不错,谢谢老大

非常不错,谢谢老大
aiwen 发表于 2011-10-29 13:14:30

好东东啊,老大V5!!!

好东东啊,老大V5!!!
wanderer_hh 发表于 2011-10-29 15:38:27

看不明白啊,纯支持

看不明白啊,纯支持
COODY 发表于 2011-10-29 16:29:31

请问不可以更新到最新版吗

请问不可以更新到最新版吗
aauaau 发表于 2011-10-31 13:59:46

[quote][size=2][color=#999999]Dic 发表于 2011-10-31 13:36[/color] [url=http://bbs.a

Dic 发表于 2011-10-31 13:36
这个用处不大吧,一般控件上禁止的文件类型上传时服务器端都会同时禁止的,写进去也没用啊


用处是方便,不需要你手工操作赋值,不把服务器禁止的文件上传。
http://bbs.aardio.com/thread-891-1-1.html 看到吗 这里有需求
yanyang2009 发表于 2011-11-1 16:06:00

假如上传表单是flash控件,有什么思路,可以控制它呢?{:soso_e132:}[url]http://bbs.aardio.com/thread-3325-

假如上传表单是flash控件,有什么思路,可以控制它呢?{:soso_e132:}http://bbs.aardio.com/thread-3325-1-2.html

点评

只能用POST  发表于 2011-11-1 16:58
我是老废 发表于 2011-11-1 17:51:53

[i=s] 本帖最后由 我是老废 于 2011-11-1 17:52 编辑 [/i]
本帖最后由 我是老废 于 2011-11-1 17:52 编辑

  <input type="file" name="upload0" id="upload0"  readonly = 1 />
这样才是只读的吧

点评

不是这个意思,上传控件是禁止编程赋值的。  发表于 2011-11-1 19:06

yanyang2009 发表于 2011-11-2 11:05:37

[quote][size=2][color=#999999]yanyang2009 发表于 2011-11-1 16:06[/color] [url=forum

yanyang2009 发表于 2011-11-1 16:06
假如上传表单是flash控件,有什么思路,可以控制它呢?http://bbs.aardio.com/thread-3325-1-2.html

恩..多谢指点,上次试了,没有成功!我再试试..
jesonray 发表于 2011-11-4 15:21:30

这个太有用了,太感谢老大了

这个太有用了,太感谢老大了
ghl781258 发表于 2011-11-4 21:31:19

这个需要研究研究

这个需要研究研究
ghl781258 发表于 2011-11-4 21:43:11

有用,备查

有用,备查
smjk 发表于 2011-11-10 21:02:02

API钩子是否可以拦截其它进程的函数呀

API钩子是否可以拦截其它进程的函数呀
风行者 发表于 2012-3-6 04:52:06

强大,学习了

强大,学习了
qgly_2005 发表于 2016-6-7 23:53:49

麻烦帮忙大家解答一下

麻烦帮忙大家解答一下:apihook上传图片编码出错



运行错误 :       E:\1.jpg&#40912;洱&#14698;泸碸&#1257;&#54464;ì&#62924;

正确应该是这样子的  :      E:\1.jpg


以下是运行的代码:

import web.form;
/*DSG{{*/
var winform = win.form(text="演示表单上传控件赋值";right=744;bottom=523)
winform.add()
/*}}*/

var wb = web.form( winform );
wb.html = /**
<!doctype html>
<html>
<head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <title>演示表单上传控件赋值</title>
</head>
<body>
        <form id="form1" name="form1" enctype="multipart/form-data" method="post" action="">
        <label for="upload0"></label>
        <input type="file" name="upload0" id="upload0" />
        </form>
        <p>文件上传控件的值是只读的,不能修改.<br />
        这里使用aardio中的raw.hookApi创建一个函数钩子,拦截网页对文件对话框的调用,<br />
        并直接返回我们预设的值即可。</p>
</body>
</html>
**/

winform.show()  
wb.wait();

import fsys.dlg;


//导入函数钩子支持库
import raw.apiHook;


//声明钩子需要用到的结构体
OPENFILENAMEW = class{
   INT structSize;
   INT hwndOwner;
   pointer instance ;
   pointer filter;
   pointer customFilter;
   INT maxCustFilter;
   INT filterIndex;
   pointer file ;
   INT maxFile;
   pointer fileTitle;
   INT maxFileTitle;
   pointer initialDir;
   pointer title;
   INT flags;
   WORD fileOffset;
   WORD fileExtension;
   pointer defExt;
   pointer lCustData;
   pointer lpfnHook;
   pointer lpTemplateName;
   pointer pvReserved;
   INT dwReserved;
   INT flagsEx;
}   

GetOpenFileNameW_Hook = function (pfn) {

var path = string.toUnicode("E:\1.jpg");

     
::CopyMemory(  raw.convert(pfn ,OPENFILENAMEW() ).file,path,#path );  
     
    winform.setTimeout(
        function(){
            hook.unInstall();//用完立即卸载钩子
        }
    )   
    return 1;
}

//安装API钩子
hook = raw.apiHook("comdlg32.dll", "GetOpenFileNameW", "int(pointer)", GetOpenFileNameW_Hook).install();

//浏览图片
var ele = wb.getEle("upload0")  
ele.click()

win.loopMessage();

12下一页

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-5-28 11:21 , Processed in 0.062500 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表