用键盘操作静态链接打开应用程序中的URLs
2006-07-23 11:20:37 来源:WEB开发网Process::Start("http://www.microsoft.com");
哦,回来一试,还是不行。此调用丢出 Win32Exception 异常,它甚至在 NativeErrorCode 属性中产生更莫名其妙的错误代码:ERROR_SXS_KEY_NOT_FOUND。此错误的描述是:“请求的查找键在所有的活动上下文中未找到。”怎么回事呢?
如果你认真看一看 Process 的文档,你会发现 Process 使用一个叫 StartInfo 的东西来告诉它如何启动该进程。StartInfo 的属性之一便是 UseShellExecute。默认情况下,UseShellExecute 为 True,由此告诉框架用外壳启动进程,也就是说用 ShellExecuteEx。好了,试一下将它置成 False。结果正像文档所说的,你只能启动 EXEs,而非文件名或URLs。两种方法都行不通,你在兜圈子。
再仔细看看 Process::Start 的文档,它告诉你如果你想用 UseShellExecute,你必须保证指 定 [STAThread](单线程公寓模型)作为应用程序 main 函数的特征:
// in C#
public class MyForm : Form {
[STAThread]
public static void Main(string[] args) {
...
}
}
那么,对 C# 或者是“纯”(非 MFC)C++ 程序能行得通,它们有自己的 main 函数,但 MFC 程序怎么办?如果是那样的话,main,_tmain,_tWinMain 或任何平台入口点都深藏在 MFC 内部,无法编辑源代码添加 [STAThread]。你可以使用 /ENTRY:MyMain 并编写自己的调用 CRT 启动例程的 [STAThread] MyMain,碰到这种情况太糟了。肯定有比这个简单的方法。
实际上,在 MFC 应用程序中有一种强制线程为单线程(STA)模型的方法,而不使用 [STAThread]。你只要在框架试图调用 CoInitializeEx(COINIT_MULTITHREADED) 之前调用 CoInitialize(NULL) 即可。用一个小类来做这件事情。代码如下:
- ››键盘样式风格有关设置
- ››静态照片完美合成 美图秀秀幻影动感效果
- ››操作系统资源不足两种方案解决办法
- ››操作DHTML表格的C++对象
- ››操作微软文档的JAVA api项目:Apache POI 3.6发布...
- ››操作系统拾遗之进程和线程
- ››键盘流必备 - Windows 7常用快捷键整理之基础篇
- ››键盘流必备 - Windows 7常用快捷键整理之WIN键篇
- ››键盘流必备 - Windows 7常用快捷键整理之任务栏篇...
- ››键盘流必备 - Windows 7常用快捷键整理之资源管理...
- ››键盘极客 - 使用组合键来关闭Windows 7
- ››操作系统还原:你需要明白的几件事
更多精彩
赞助商链接