1
ryd994 2017-08-08 20:48:31 +08:00 via Android
切,我 kde 还能开 sftp 呢
|
2
yksoft1 2017-08-08 20:56:41 +08:00
你查一下 notepad.exe 的导入表,有用到一个和网络有关的函数吗
|
3
geelaw 2017-08-08 21:00:49 +08:00
这是 common dialog 想要访问这个网络位置(当成文件夹,类似 network drive mapping ),而不是“下载并打开文件”。
|
4
yksoft1 2017-08-08 21:05:44 +08:00
Windows 标准文件操作的 CreateFile 那一套能不能支持 http 之类互联网上的协议都是问题吧
|
5
ProjectAmber 2017-08-08 21:18:43 +08:00
可能是 WebDAV。
|
6
lzhr 2017-08-08 21:46:54 +08:00 1
有些人不懂,又不去实践。
测试: https://www.v2ex.com ,直接下载打开 html ; https://baidu.com ,直接; https://www.baidu.com ,需要密码; https://www.12306.cn ,出现选择证书 |
8
yksoft1 2017-08-08 22:24:05 +08:00 1
win8.1 cmd、“运行”对话框下 notepad http://www.cnbeta.com 出现 messagebox
--------------------------- 记事本 --------------------------- 文件名、目录名或卷标语法不正确。 --------------------------- 确定 --------------------------- 用 comdlg32 打开 对话框打开 还真出现了 html。 用 process explorer 查看 notepad 打开的文件,实际打开的是磁盘上的 C:\Users\user\AppData\Local\Microsoft\Windows\INetCache\counters.dat 这个文件,标题栏显示的文件名是典型的 IE 缓存文件名格式。 然后查看加载的模块,出现了 ieframe.dll 。 打开另一个记事本,不打开 打开 对话框,没有看到 ie 的 DLL 被加载;用 打开 对话框打开一个本地文件,ieframe.dll 被加载,但是,前面提到的那个文件没有被打开。 结论是,管理通用打开对话框的 comdlg32.dll 调用了 IE 的 com 组件将目标 url 下载到 ie 缓存并向记事本返回了 ie 缓存中的文件路径。 可以自己写一个用 GetOpenFileName 函数的程序测试一下。 |
9
yksoft1 2017-08-08 23:00:38 +08:00
测试例程
#include <stdio.h> #include <string.h> #include <windows.h> int main(int argc, char** argv) { int r; char retpath[MAX_PATH+1]; OPENFILENAME ofn ; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = NULL; ofn.lpstrDefExt = NULL; ofn.lpstrFile = retpath; if(argc>=2) strncpy(retpath, argv[1], strlen(argv[1])<MAX_PATH?strlen(argv[1]):MAX_PATH); else ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = MAX_PATH; ofn.lpstrFilter = NULL; ofn.nFilterIndex = 0; ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = "Test"; ofn.Flags = 0; r=GetOpenFileName(&ofn); if(r) printf("GetOpenFileName got filename %s", retpath); else printf("error: %d", GetLastError()); return 0; } 编译: D:\>c:\mingw2\bin\gcc gofn.c -lcomdlg32 -ogofn.exe 运行第一次(不输入命令行参数),弹出对话框输入 https://www.v2ex.com 后,对话框卡了一下后返回 D:\>gofn GetOpenFileName got filename C:\Users\user\AppData\Local\Microsoft\Windows\INetCache\IE\TJ1BE227\3OQBB5YK 运行第二次,命令行输入 D:\>gofn c:\windows\win.ini GetOpenFileName got filename C:\Windows\win.ini 对话框正常弹出并自动定位到正确的目录。 运行第三次,命令行输入 D:\>gofn https://www.v2ex.com error: 0 对话框不弹出且 GetLastError 不能得到错误码。这就不知道为什么了。 |
10
yksoft1 2017-08-08 23:07:41 +08:00
将 GetLastError 改为 comdlg32 专用的 CommDlgExtendedError,结果如下
D:\>gofn h tt p s:// www.v2ex.com error: 12290 返回错误代码 0x3002,即 FNERR_INVALIDFILENAME,错误的文件名。 |
12
yksoft1 2017-08-08 23:40:09 +08:00
|
13
yksoft1 2017-08-09 00:12:33 +08:00
另外,Windows 记事本好像只支持 DOS 行尾吧。。。
|
14
popok 2017-08-09 08:44:32 +08:00
抓个包看下
首先是 OPTIONS 请求 然后是 PROPFIND 请求,然后就弹出登录框了,这个和服务器配置有关吧 |
15
hx1997 2017-08-09 09:06:49 +08:00 via Android
我昨晚测试的爱奇艺和百度 ( https://www.XXX.com/) 都没有弹出要求凭据的对话框,Windows 10,不知道为啥
|
16
y1261474584 OP Google 一样如此 https://i.loli.net/2017/08/10/598bc292763cc.png
|