搜索
查看: 21151|回复: 27

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

    [复制链接]

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2011-10-29 10:36:24 | 显示全部楼层 |阅读模式


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();
回复

使用道具 举报

4

主题

18

帖子

127

积分

一级会员

Rank: 2

积分
127
发表于 2011-10-29 10:42:23 | 显示全部楼层

太强啦,感谢Jacen

太强啦,感谢Jacen
回复

使用道具 举报

5

主题

129

帖子

1403

积分

四级会员

Rank: 6Rank: 6

积分
1403
发表于 2011-10-29 10:52:10 | 显示全部楼层

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

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

使用道具 举报

39

主题

195

帖子

1269

积分

四级会员

Rank: 6Rank: 6

积分
1269
发表于 2011-10-29 10:52:43 | 显示全部楼层

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

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

使用道具 举报

33

主题

543

帖子

3304

积分

荣誉会员

Rank: 8Rank: 8

积分
3304
发表于 2011-10-29 12:58:53 | 显示全部楼层

支持一下,很好很强大

支持一下,很好很强大
回复

使用道具 举报

52

主题

1340

帖子

7326

积分

荣誉会员

Rank: 8Rank: 8

积分
7326
发表于 2011-10-29 13:12:25 | 显示全部楼层

非常不错,谢谢老大

非常不错,谢谢老大
回复

使用道具 举报

3

主题

57

帖子

1009

积分

四级会员

Rank: 6Rank: 6

积分
1009
发表于 2011-10-29 13:14:30 | 显示全部楼层

好东东啊,老大V5!!!

好东东啊,老大V5!!!
回复

使用道具 举报

3

主题

29

帖子

189

积分

一级会员

Rank: 2

积分
189
发表于 2011-10-29 15:38:27 | 显示全部楼层

看不明白啊,纯支持

看不明白啊,纯支持
回复

使用道具 举报

3

主题

22

帖子

145

积分

一级会员

Rank: 2

积分
145
发表于 2011-10-29 16:29:31 | 显示全部楼层

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

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

使用道具 举报

13

主题

89

帖子

491

积分

二级会员

Rank: 3Rank: 3

积分
491
发表于 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 看到吗 这里有需求
帮我解决问题 我会送分分喔
回复

使用道具 举报

41

主题

170

帖子

902

积分

三级会员

Rank: 4

积分
902
发表于 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
回复

使用道具 举报

18

主题

122

帖子

688

积分

三级会员

各种菜

Rank: 4

积分
688
发表于 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

aardio,让我的心插上翅膀
回复

使用道具 举报

41

主题

170

帖子

902

积分

三级会员

Rank: 4

积分
902
发表于 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

恩..多谢指点,上次试了,没有成功!我再试试..
回复

使用道具 举报

0

主题

5

帖子

33

积分

新手入门

Rank: 1

积分
33
发表于 2011-11-4 15:21:30 | 显示全部楼层

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

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

使用道具 举报

4

主题

150

帖子

861

积分

三级会员

Rank: 4

积分
861
发表于 2011-11-4 21:31:19 | 显示全部楼层

这个需要研究研究

这个需要研究研究
回复

使用道具 举报

4

主题

150

帖子

861

积分

三级会员

Rank: 4

积分
861
发表于 2011-11-4 21:43:11 | 显示全部楼层

有用,备查

有用,备查
回复

使用道具 举报

0

主题

1

帖子

8

积分

新手入门

Rank: 1

积分
8
发表于 2011-11-10 21:02:02 | 显示全部楼层

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

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

使用道具 举报

10

主题

50

帖子

552

积分

三级会员

Rank: 4

积分
552
发表于 2012-3-6 04:52:06 | 显示全部楼层

强大,学习了

强大,学习了
回复

使用道具 举报

2

主题

8

帖子

52

积分

一级会员

Rank: 2

积分
52
发表于 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();

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2018-11-15 18:57 , Processed in 0.078128 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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