标题:在运行程序前先关闭EXECEL各种表,怎么写?
只看楼主
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
得分:0 
威武,吹版.
2017-09-20 09:35
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
以下是引用吹水佬在2017-9-20 08:53:31的发言:

关闭EXCEL进程示例
** test.prg
#DEFINE MAX_PATH    260
#DEFINE TH32CS_SNAPPROCESS    0x00000002
#DEFINE PROCESS_ALL_ACCESS    0x001F0FFF  
 
DECLARE LONG CreateToolhelp32Snapshot IN Kernel32 LONG, LONG
DECLARE LONG CloseHandle IN Kernel32 LONG
DECLARE LONG Process32First IN Kernel32 LONG, STRING@
DECLARE LONG Process32Next IN Kernel32 LONG, STRING@
DECLARE LONG OpenProcess IN Kernel32 LONG, LONG, LONG
DECLARE LONG GetExitCodeProcess IN Kernel32 LONG, LONG@
DECLARE LONG TerminateProcess IN Kernel32 LONG, LONG
 
DO WHILE _TerminateProcess("EXCEL.EXE")
    INKEY(0.1)
ENDDO
RETURN
 
FUNCTION _IsProcessFileName(szFileName, dhProcess)
    LOCAL stPE, dhSnapshot, szExeFile, blRet, ddPID, ddRet
        * PROCESSENTRY32 结构
    stPE = BINTOC(36+MAX_PATH, "4RS") + REPLICATE(0h00, 32+MAX_PATH)
    blRet = .F.
    dhSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)    && 进程快照
    ddRet = Process32First(dhSnapshot, @stPE)        && 第一个进程  
    DO WHILE ddRet > 0
        szExeFile = RIGHT(stPE, MAX_PATH)
        szExeFile = LEFT(szExeFile, AT(0h00, szExeFile)-1)
        IF UPPER(szExeFile) == UPPER(szFileName)
            ddPID = CTOBIN(SUBSTR(stPE,9,4), "4RS")
            dhProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, ddPID)
            blRet = .T.
            EXIT
        ENDIF
        ddRet = Process32Next(dhSnapshot, @stPE)    && 下一个进程  
    ENDDO
    CloseHandle(dhSnapshot)
    RETURN blRet
ENDFUNC
 
FUNCTION _TerminateProcess(szFileName)
    LOCAL dhProcess, ddExitCode
    dhProcess = 0
    ddExitCode = 0
    IF _IsProcessFileName(szFileName, @dhProcess)
        **GetExitCodeProcess(dhProcess, @ddExitCode)
        **RETURN (TerminateProcess(dhProcess, ddExitCode) != 0)
        RETURN (TerminateProcess(dhProcess, 0) != 0)
    ENDIF
    RETURN .F.
ENDFUNC
吹班就是利害,看不懂是什么意思?
2017-09-20 10:52
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
我试试,这一句
    stPE = BINTOC(36+MAX_PATH, "4RS") + REPLICATE(0h00, 32+MAX_PATH)

弹出  函数名缺少)  的提示

请问是什么原因

只求每天有一丁点儿的进步就可以了
2017-09-21 08:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 13楼 wengjl
这句要VFP9支持
2017-09-21 09:55
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
我用8.0的。原来这样啊。谢谢!


VFP8.0下要换成什么能行?

[此贴子已经被作者于2017-9-21 13:00编辑过]


只求每天有一丁点儿的进步就可以了
2017-09-21 12:57
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用wengjl在2017-9-21 12:57:30的发言:

VFP8.0下要换成什么能行?

没用过VFP8,查看了一下VFP9的BINTOC()和CTOBIN()与VFP8的不一样。
可以自己写个类似功能的函数代替
如:无符号类型转换
  **模拟BINTOC()
FUNCTION UDWORDTOC(nExp)
    IF BETWEEN(nExp, 0x00000000, 0xFFFFFFFF)
        RETURN CHR(BITAND(nExp,0x000000FF)) +;
               CHR(BITRSHIFT(BITAND(nExp,0x0000FF00),  8)) +;
               CHR(BITRSHIFT(BITAND(nExp,0x00FF0000), 16)) +;
               CHR(BITRSHIFT(BITAND(nExp,0xFF000000), 24))
    ENDIF
    MESSAGEBOX("调用 UDWORDTOC() 参数数值范围无效")
    RETURN NULL
ENDFUNC
  **模拟CTOBIN()
FUNCTION CTOUDWORD(cExp)
    IF LEN(cExp) == 4
        RETURN ASC(SUBSTR(cExp,1,1));
               +BITLSHIFT(ASC(SUBSTR(cExp,2,1)),  8);
               +BITLSHIFT(ASC(SUBSTR(cExp,3,1)), 16);
               +BITLSHIFT(ASC(SUBSTR(cExp,4,1)), 16) * 0x0100
    ENDIF
    MESSAGEBOX("调用 C2UDWORD() 参数字串长度无效")
    RETURN NULL
ENDFUNC
2017-09-22 16:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
0h00相当CHR(0)
2017-09-22 16:34
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
谢谢!

只求每天有一丁点儿的进步就可以了
2017-09-26 10:47
qyzww
Rank: 2
等 级:论坛游民
帖 子:31
专家分:13
注 册:2008-5-11
得分:0 
吹版厉害
2017-10-04 10:24
网路盲流
Rank: 2
等 级:论坛游民
威 望:2
帖 子:19
专家分:11
注 册:2012-10-12
得分:0 
厉害,佩服!
2017-10-09 21:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480775-1-1.html




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

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