CDHTMLDIALOG中对input type=file的操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CDHTMLDIALOG中对input type=file的操作相关的知识,希望对你有一定的参考价值。

如题。我想做的仅仅是一个CDhtmlDIALOG程序,打开一个页面,里面有一个HTML元素<input type=file id=filename>,想不必通过用户选择,程序直接生成文件路径并赋值给这个元素。
我已经获得了其句柄IHTMLElement *p,本来想通过put_innerText方法对其直接赋值的,但是<input type=file id=filename>这个元素的value值是只读的,无法用put_innerText直接赋值,只能够用户通过点击选择文件。
网上有些文章说到可以对网页源代码改写,但是我打开的页面是网络上的,无法编辑源代码。
希望有高手帮忙解决这个问题,用多底层的技术都可以!也欢迎讨论啊。

基于安全性考虑,IE的Trident引擎不支持用程序设置input type=file的值。CDHTMLDialog是对Trident引擎的封装,所以也不支持。本来还可以模拟键盘输入的,IE8把这个漏洞也补上了。既然自己写客户端,就没有必要非要用CDHTMLDialog上传,自己用WinInet或者WinHttp发http请求也是可以的。 参考技术A 先取得<input type=file id=filename>的value值,判断它否为空,如果为空就使用程序生成文件路径,在表单提交的时候,把这个值提交上去就行了

如何在Sql中对表进行分组?

【中文标题】如何在Sql中对表进行分组?【英文标题】:How to group a table in Sql? 【发布时间】:2021-11-16 13:20:31 【问题描述】:

我有下表,Tasks

ID Task Type Time_Taken
1 task1 type1 01h:00m
2 task1 type2 02h:00m
3 task2 type1 00h:30m
4 task2 type2 00h:30m
5 task3 type1 01h:00m
6 task3 type2 04h:00m

我想从Tasks 表创建一个新表,应该是

Task type1_time type2_time
task1 01h:00m 02h:00m
task2 00h:30m 00h:30m
task3 01h:00m 04h:00m

您能帮我为此构建一个 sql 查询吗?

【问题讨论】:

【参考方案1】:

我假设这个 SQL 查询是在 MySQL 数据库中处理的。请参考以下查询:

select Task, 
sum(if(Type='type1', Time_Taken,0)) as type1_time,
sum(if(Type='type2', Time_Taken,0)) as type2_time from Tasks 
group by Task

【讨论】:

感谢您的回答,但如果 time_taken 列是 'char' 类型怎么办。 我已经修改了问题供您参考。【参考方案2】:
-- Solution INNER JOIN
SELECT type1.Task, type1.Time_Taken as 'type1_time', type2.Time_Taken as 'type2_time'
FROM Task type1 
INNER JOIN Task type2 on type1.Task = type2.Task
WHERE type1.Type = 'type1'
    AND type2.Type = 'type2';

--Solution GROUP_CONCAT
SELECT  
        t.Task,
        GROUP_CONCAT(IF(t.Type = "type1", t.Time_Taken, NULL)) AS 'type1_time',
        GROUP_CONCAT(IF(t.Type = "type2", t.Time_Taken, NULL)) AS 'type2_time'
FROM Task t
GROUP BY t.Task;

演示:https://paiza.io/projects/e/V9GtkWoJQAqewynjRXZ9-Q?theme=twilight

【讨论】:

【参考方案3】:

我的查询会给你你所期望的结果。演示链接:db-fiddle

SELECT Task, 
SEC_TO_TIME(sum(if(Type='type1', TIME_TO_SEC(Time_Taken),0))) as type1_time,
SEC_TO_TIME(sum(if(Type='type2', TIME_TO_SEC(Time_Taken),0))) as type2_time 
FROM Tasks 
GROUP BY Task

【讨论】:

【参考方案4】:

每个任务和类型都有一个条目。如果要按任务分组,可以使用MINMAX 访问类型的值,因为只有一个。

select
  task,
  min(case when type = 'type1' then time_taken end) as type1time,
  min(case when type = 'type2' then time_taken end) as type2time
from tasks
group by task
order by task;

这称为条件聚合,因为我们在条件上使用聚合函数(这里:当行匹配所需类型时)。

【讨论】:

以上是关于CDHTMLDIALOG中对input type=file的操作的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在尝试调用 CDHtmlDialog::OnInitDialog() 时看到崩溃

如何在页面加载之前隐藏 CDHTMLDialog?

MFC FormView+ CDHtmlDialog

CDHtmlDialog加壳HTML5页面跳转错误解决(原)

一个 CDHtmlDialog 派生类 可不可以不绑定某一个html, 而动态的指定要显示在上面的html资源?

试问 MFC中 CDHtmlDialog的 IHTMLElement用法