- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们公司正在将我们的帮助系统迁移到 Flare 下的 HTML5 格式。我们还在 URI 命令行上使用 Flare CSHID 添加了基于主题的帮助系统访问,以直接访问主题,例如 index.html#CSHID=GettingStarted
以启动 GettingStarted。 html
帮助页面。
我们的应用程序是用 C++ 编写的,并利用 Win32 ShellExecute()
函数生成与 HTTP 关联的默认应用程序以显示帮助系统。我们注意到 ShellExecute()
在没有指定标签时工作正常,例如
ShellExecute(NULL, _T("open"), _T("c:\\Help\\index.html"), NULL, NULL, SW_SHOWNORMAL);
此函数将启动与查看 HTML 页面关联的默认浏览器,在这种情况下,File:///
协议(protocol)处理程序将启动,浏览器将启动,您将看到 地址栏中的 file:///c:/Help/index.html
。
但是,一旦您为主题添加#
信息,ShellExecute()
将无法打开页面
ShellExecute(NULL,_T("open"),_T("c:\\Help\\index.html#cshid=GettingStarted"),NULL,NULL,SW_SHOWNORMAL);
如果浏览器完全打开,您将被定向到 file:///c:/Help/index.htm
l 而没有 #cshid=GettingStarted
主题识别。
请注意,如果通过 ShellExecute()
使用文件协议(protocol)处理程序,这只是一个问题,如果帮助系统存在于网络上,并且使用了 Http 或 Https 协议(protocol)处理程序,则一切效果很好。
对于我们的客户,其中一些客户使用私有(private) LAN,我们不能总是依赖 Internet 访问,因此我们的帮助系统必须随应用程序一起提供。
最佳答案
在与 Microsoft 的 MSDN 团队反复讨论之后,他们审查了 ShellExecute() 调用的源代码并确定是的,在 ShellExecute() 中处理基于 File:///的 URL 时,ShellExecute( ) 调用将在启动默认浏览器并发送 HTML 页面以打开之前删除 # 和它在 # 之后找到的任何数据。 MS 的立场是他们故意这样做是为了防止注入(inject)函数。
解决方案是通过在 URL 中搜索 # 来加强 ShellExecute() 调用,如果找到了,那么我们将使用该 URL 手动启动默认浏览器。这是伪代码
void WebDrive_ShellExecute(LPCTSTR szURL)
{
if ( _tcschr(szURL,_T('#')) )
{
//
//Get Default Browser from Registry, then launch it.
//
::RegGetStr(HKCR,_T("HTTP\\Shell\\Open\\Command"),szBrowser);
::CreateProcess ( NULL, szBrowser + _T(" ") + szURL, NULL, NULL, FALSE, 0, NULL, NULL, &sui, &pi);
}
else
ShellExecute(NULL,_T("open"),szURL,NULL,NULL,SW_SHOWNORMAL);
}
当然,C++ 代码还有更多内容,但这种通用设计对我们很有效。
关于http - 本地 html 或文件 URL 的 ShellExecute 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26305322/
我想使用 ShellExec 在“配置”模式下运行屏幕保护程序。我使用这个 (Delphi) 调用: i:= ShellExecute(0, 'open', PChar('c:\temp\test.
我需要使用 ShellExecute 从我的 VB6 代码执行一个外部程序:我面临的问题是,当路径字符串有任何空间时,它不起作用: Dim Path As String Path = "E:\PROY
我是shell脚本的新手,最近我在脚本中看到一个命令“:>文件”,我不明白它的意思,谁能告诉我这个命令在做什么? 提前致谢 最佳答案 :是一个空操作。 >是重定向,因此文件被 no-op 命令的输出覆
有了这个 ShellExecute(Handle, 'print', PChar(ExtractFilePath(ParamStr(0))+'Test.txt'), nil, nil, SW_H
我尝试通过delphi在shell中执行命令,但它不起作用。我使用这个脚本: var shellexecommand:string; begin ShellExecute(0, nil, 'cmd.e
我正在尝试使用ShellExecute在 Excel 中打开文件。我在MSDN论坛上阅读了有关该函数的信息,发现了以下有关句柄的信息,即第一个参数: “hwnd [in] 用于显示用户界面 (UI)
我有一个程序在执行 ShellExecute() 指令时崩溃。如果我使用 system() 方法,一切正常,但我读过 system() 是邪恶的...... 我使用的是 Visual Studio 2
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
例如我需要运行: ShellExecute(NULL, "open", "program.exe", NULL, NULL, SW_HIDE); 作为新线程,但我不知道如何。我试过这个: HANDLE
我的任务是每周检查一次数据库并检查所有链接。我通常在 PHP 中工作,但在 PHP 中这样做会非常慢(实际上它会在大约 100 个 URL 后使页面超时),所以我决定制作一个快速的 C++ 应用程序。
我正在使用 ShellExecute(NULL, L"open", szSomeDirectory, 0, 0, SW_SHOWDEFAULT) 在资源管理器中打开一个目录。 我正在尝试打开一个目录,
我正在使用 ShellExecute WIN API 来运行 DOS 命令,因为在我运行应用程序时会看到 DOS 命令闪烁。下面是 ShellExecute API 调用。 ret = ShellEx
Createprocess API 有一个选项可以创建带有 CREATE_SUSPENDED 标志的进程。相似之处是,ShellExecute API 是否有可能在挂起状态下创建进程。 最佳答案 没有
程序 1 使用 SetEnvironment 并调用 ShellExecute 来启动程序 2。程序 2 调用 GetEnvironment 并从中检索值。令人惊讶的是,正如我在 MSDN 中读到的那
我正在学习如何使用 Python 打印文件。我找到了很多方法来做到这一点,我见过的最常见的方法之一是使用 win32api 模块。 import win32api win32api.ShellExec
成功时,ShellExecute 返回一个句柄。 我们是否需要关闭这个句柄,如果需要,如何关闭? 根据我微软公布的例子,我们不需要关闭这个句柄。但是 ShellExecute 本身的文档对这个主题保持
我有一个 VB6 应用程序,它使用以下方法打开文件及其关联的应用程序: ShellExecute(0, "open", filename, params, vbNullString, vbNormal
我计划使用 ShellExecute 作为用 delphi 2007 编写的应用程序的更新程序,我想知道 ShellExecute 是否可以在大多数使用 Win 的计算机上运行,或者是否会因为某些
我有一个 Delphi 应用程序,它使用 ShellExecute 在按下按钮时调用第二个 Delphi 应用程序。 应用程序存储在同一服务器上的同一网络共享上。它们的路径格式如下: const
我有一个希望很快的问题:是否可以稍微延迟 ShellExecute 的执行? 我有一个带有自动更新程序的应用程序。下载所有必需的文件等后,它将当前文件重命名为 *.OLD,并将新文件重命名为以前的文件
我是一名优秀的程序员,十分优秀!