51Testing软件测试论坛

标题: 适用于 QTP 的 dll 及源代码(直接调用 WINAPI 实现),功能:按进程名关闭进程 [打印本页]

作者: intothehit    时间: 2007-2-28 16:53
标题: 适用于 QTP 的 dll 及源代码(直接调用 WINAPI 实现),功能:按进程名关闭进程
花了一天半时间做出来的,参考了 MSDN ,WIN32 API 说明,又上 CSDN 讨论,我记得以前哪位仁兄发过一个类似的 dll,但是下到我的机器上后不能用,因为需要 MFC 的某某dll,于是自己写了一个 dll (VC++6.0),没用 MFC ,直接调用 WINDOWS API 实现的,并在 winxp 和 win2003 下测试了一下,均 OK,本人编程菜鸟一个,高手勿笑,希望借此程序抛砖引玉,给大家提供一个自动化测试思路,如果你喜欢,可以在源代码上进行扩展,实现自己想要的功能,如果发现 bug,请通知我,谢谢

核心代码如下
**********************************************************
WINDLL_API int killprocess(char * processname)
{
      
        HANDLE hSnapshot;
        int flag;
        int eqflag=0;
        long int pid=-1;
        hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        PROCESSENTRY32* processInfo=new PROCESSENTRY32;
        processInfo->dwSize=sizeof(PROCESSENTRY32);
    flag=Process32First(hSnapshot,processInfo);
        while(flag!=0)
        {
        eqflag=0;
    for(int i=0;processInfo->szExeFile!='\0';i++)
        {
             
        if(processInfo->szExeFile!=processname)
                eqflag=1;
               
        }
        //printf("%d\n",eqflag);
        if(eqflag==0)
    pid=processInfo->th32ProcessID;
        flag=Process32Next(hSnapshot,processInfo);
        }
        CloseHandle(hSnapshot);
        //printf("%d",pid);
        if(pid==-1)
        return 0;
        HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);
        //printf("%d",hProcess);
        TerminateProcess(hProcess,0);
        return 1;


}

***********************************************************


使用说明及 dll 见附件,如果此贴不沉,可能放上注释版源码
作者: ebuluo    时间: 2007-2-28 17:00
我第一!
作者: intothehit    时间: 2007-2-28 17:05
唉,原来源码不能整个复制的,复制后就出错了,呵呵,发现 HTML 语言的一个 BUG,后面的斜体实际上是因为源码中含有 i 变量,这在 HTML 表示斜体,不好意思,稍后放上新版源码
作者: intothehit    时间: 2007-2-28 17:08
新版代码

**********************************************
WINDLL_API int killprocess(char * processname)
{
      
        HANDLE hSnapshot;
        int flag;
        int eqflag=0;
        long int pid=-1;
        hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        PROCESSENTRY32* processInfo=new PROCESSENTRY32;
        processInfo->dwSize=sizeof(PROCESSENTRY32);
    flag=Process32First(hSnapshot,processInfo);
        while(flag!=0)
        {
        eqflag=0;
    for(int j=0;processInfo->szExeFile[j]!='\0';j++)
        {
             
        if(processInfo->szExeFile[j]!=processname[j])
                eqflag=1;
               
        }
        //printf("%d\n",eqflag);
        if(eqflag==0)
    pid=processInfo->th32ProcessID;
        flag=Process32Next(hSnapshot,processInfo);
        }
        CloseHandle(hSnapshot);
        //printf("%d",pid);
        if(pid==-1)
        return 0;
        HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);
        //printf("%d",hProcess);
        TerminateProcess(hProcess,0);
        return 1;


}

***********************************************
作者: ajasa    时间: 2007-2-28 17:16
顶了




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2