| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1244 人关注过本帖
标题:win7下Help命令如何使用
只看楼主 加入收藏
tyjhcw
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2013-3-21
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:9 
win7下Help命令如何使用
在winxp+VFP9环境下开发了一套系统
其中一个表单的init事件中写入:
set help on
set help to myhelp.chm
表单上放置了一个按钮cmd_help,在cmd_help.click中写入:
help

连编成exe文件后,安装在winxp的机器中,点击cmd_help或按F1键,能调出帮助窗口,运行正常。安装在win7的机器中,点击cmd_help或按F1键均无反应,也不产生错误信息。如何解决?
搜索更多相关主题的帖子: 如何 开发 信息 
2015-06-19 11:32
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:7 
不清楚的说
2015-06-19 11:53
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:7 
直接通过API打开帮助文件。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-06-19 14:57
tyjhcw
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2013-3-21
收藏
得分:0 
能否详细点?请教了
2015-06-19 16:43
tyjhcw
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2013-3-21
收藏
得分:0 
按楼上的思路,做好了。谢谢!
myhelp = 'shkhelp.chm'
DECLARE INTEGER ShellExecute IN "Shell32.dll" INTEGER hwnd,STRING lpVerb,STRING lpFile,STRING lpParameters,STRING lpDirectory,LONG nShowCmd
=Shellexecute(1,"Open", ,myhelp,"",1)
2015-06-19 16:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:7 
ON KEY LABEL F1 MyHelp()

** Command1.Click
MyHelp()

FUNCTION MyHelp()
    oApp = CREATEOBJECT("Shell.Application")
    oApp.ShellExecute("MyHelp.chm", "", "", "", 1)
ENDFUNC
2015-06-19 17:00
tyjhcw
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2013-3-21
收藏
得分:0 
本人不太懂API函数,继续请教。

用上面的方法解决了打开帮助文件的问题,如何做到不重复打开帮助文件呢?
即:
if 帮助文件没有打开
    打开帮助文件
else
    使帮助文件窗口成为活动窗口
endif

(在VFP中,我通过测试oApp的属性无法判断打开的窗口是否关闭)
2015-06-20 10:24
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用tyjhcw在2015-6-20 10:24:36的发言:

本人不太懂API函数,继续请教。

用上面的方法解决了打开帮助文件的问题,如何做到不重复打开帮助文件呢?
即:
if 帮助文件没有打开
    打开帮助文件
else
    使帮助文件窗口成为活动窗口
endif

(在VFP中,我通过测试oApp的属性无法判断打开的窗口是否关闭)

oApp与打开的帮助文件进程无关。

打开的是外部进程,要直接知道外部进程的运行情况(进程间的通信)有点麻烦。
如果只想知道有窗口的应用是否在运行,可以按窗口类名或窗口标题搜索窗口。

也可用 ShellExecuteEx() API 打开外部进程,这个API函数的参数是一个数据结构,其中含有进程句柄(hProcess),有了进程句柄对进程的了解就方便多了。VFP调用ShellExecuteEx()涉及到内存分配/释放、内存读/写,内容不少,有兴趣可以参考与进程有关的API说明。

个人意见:就象我们用资源管理器一样,用户喜欢就由她开多几个帮助,不用前后翻页,也许对她真的有帮助。
2015-06-20 15:39
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
用 ShellExecuteEx() API 打开/关闭外部进程示例
程序代码:
CLEAR
DECLARE LONG GetProcessHeap   IN Kernel32
DECLARE LONG HeapAlloc        IN Kernel32 LONG, LONG, LONG
DECLARE LONG HeapFree         IN Kernel32 LONG, LONG, LONG
DECLARE LONG TerminateProcess IN Kernel32 LONG, LONG
DECLARE LONG ShellExecuteEx   IN Shell32 STRING@

szFile = "c:\program files (x86)\microsoft visual foxpro 9\dv_foxhelp.chm"
dhFile = HeapAlloc(GetProcessHeap(), 8, LEN(szFile))
SYS(2600, dhFile, LEN(szFile), szFile)

stSEI = BINTOC(60,     "4RS");
      + BINTOC(0x40,   "4RS") + REPLICATE(0h00,  8);
      + BINTOC(dhFile, "4RS") + REPLICATE(0h00,  8);
      + BINTOC(1,      "4RS") + REPLICATE(0h00, 28)

ShellExecuteEx(@stSEI)
HeapFree(GetProcessHeap(), 8, dhFile)
dhProcess = CTOBIN(RIGHT(stSEI, 4), "4RS")
** 3秒后关闭
INKEY(3)
TerminateProcess(dhProcess, 0)
CLEAR DLLS
RETURN
2015-06-20 16:09
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
打开外部进程并检测是否已经关闭
程序代码:
CLEAR
#DEFINE STILL_ACTIVE    259
DECLARE LONG GetProcessHeap     IN Kernel32
DECLARE LONG HeapAlloc          IN Kernel32 LONG, LONG, LONG
DECLARE LONG HeapFree           IN Kernel32 LONG, LONG, LONG
DECLARE LONG GetExitCodeProcess IN Kernel32 LONG, LONG@
DECLARE LONG ShellExecuteEx     IN Shell32 STRING@

szFile = "c:\program files (x86)\microsoft visual foxpro 9\dv_foxhelp.chm"
dhFile = HeapAlloc(GetProcessHeap(), 8, LEN(szFile))
SYS(2600, dhFile, LEN(szFile), szFile)

stSEI = BINTOC(60,     "4RS");
      + BINTOC(0x40,   "4RS") + REPLICATE(0h00,  8);
      + BINTOC(dhFile, "4RS") + REPLICATE(0h00,  8);
      + BINTOC(1,      "4RS") + REPLICATE(0h00, 28)

ShellExecuteEx(@stSEI)
HeapFree(GetProcessHeap(), 8, dhFile)
dhProcess = CTOBIN(RIGHT(stSEI, 4), "4RS")
** 5秒后检测是否已经关闭
INKEY(5)
ddExitCode = 0
GetExitCodeProcess(dhProcess, @ddExitCode)
? IIF(ddExitCode == STILL_ACTIVE, "已打开", "已关闭")
CLEAR DLLS
RETURN


[ 本帖最后由 吹水佬 于 2015-6-21 20:46 编辑 ]
2015-06-21 20:43
快速回复:win7下Help命令如何使用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018633 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved