网页功能: 加入收藏 设为首页 网站搜索  
软件开发中几个常用功能的实现
发表日期:2004-08-12作者:戚高[转贴] 出处:VCHELP  

  在进行软件开发过程中间,有很多小功能的实现,虽然这些东西你可以不用,但是如果应用仂将会是你的程序更具有专业性。 

一、设置程序自动运行。

  很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsoft\\Windows\\CurrentVersion\\Run。参考程序可以见下:(查找程序目录的执行文件,存在则进行添加注册表操作)

         HKEY RegKey;
         CString sPath;
         GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
         sPath.ReleaseBuffer();
         int nPos;
    nPos=sPath.ReverseFind('\\');
    sPath=sPath.Left(nPos);
    CString lpszFile=sPath+"\\****.exe";//这里加上你要查找的执行文件名称
    CFileFind fFind;
    BOOL bSuccess;
    bSuccess=fFind.FindFile(lpszFile);
    fFind.Close();
    if(bSuccess)
    {
        CString fullName;
        fullName=lpszFile;
        RegKey=NULL;
        RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&RegKey);
        RegSetValueEx(RegKey,"*****",0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());//这里加上你需要在注册表中注册的内容
        this->UpdateData(FALSE);
    }
    else
    {
        theApp.SetMainSkin();
        ::AfxMessageBox("没找到执行程序,自动运行失败");
        exit(0);
    }

二、自动配置数据源

  很多的程序都要用到数据库结合的操作,这里举例ACCESS,因为ACCESS在中小型VC系统开发中是最常用到的,如果程序的移植,如果对于很初级的用户来说,你还需要他到配置面板中进行数据源配置的话,那就有点说不过去了。

         #include <odbcinst.h>
         //配置数据源,数据库在应用程序目录下,这里比如数据库文件名为***.mdb,程序运行时候可以将数据库文件拷贝到程序目录下面。
    CString sPath;
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
    sPath.ReleaseBuffer();
    int nPos;
    nPos=sPath.ReverseFind('\\');
    sPath=sPath.Left(nPos);
    CString lpszFileName = sPath + "\\***.mdb";//这里修改成你的数据库文件名称
    CFileFind  fFind;
    if(!fFind.FindFile(lpszFileName))
    {
        ::AfxMessageBox("没有找到数据库");
        exit(0);
    }
    CString szDesc;
    szDesc.Format( "DSN=****;Description=****;DESCRIPTION=The DataBase For ***;FIL=MicrosoftAccess;DEFAULTDIR=%s;DBQ=%s;" ,sPath,lpszFileName);//这里***号可以添加成你的描述

    //添加数据源
    if(!::SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",(LPCSTR)szDesc))
    {
        ::AfxMessageBox("32位ODBC数据源配置错误!");
        exit(0);
    }

三、设置显示模式:

  很多的程序的移植的运行环境是改变的。有可能你的原来开发环境是1024X768,但是到了那些显示器大于17的时候(分辨率超过你的开发时的分辨率时),程序的显示可能就不好看了。

         DEVMODE lpDevMode;
    lpDevMode.dmPelsHeight=768;//Y方向象素点
    lpDevMode.dmPelsWidth=1024;//X方向象素点
    lpDevMode.dmDisplayFrequency=85;//屏幕刷新率
    lpDevMode.dmFields=DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY;
    ChangeDisplaySettings(&lpDevMode,0);

四、在你的程序中间加载其他应用程序:

  你的程序除了调用到各个模块进行协同工作外(DLL),还有可能调用不是同一个开发环境下的应用程序,比如VC环境下调用DELPHI,VB开发的执行程序,你就可以用到下面的方法(将调用的应用程序拷贝程序目录中):

         CString sPath;
    GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
    sPath.ReleaseBuffer();
    int nPos;
    nPos=sPath.ReverseFind('\\');
    sPath=sPath.Left(nPos);
    CString lpszFileName = sPath + "\\***.exe";//这里修改成你的调用应用程序的文件名称
    CFileFind  fFind;
    if(!fFind.FindFile(lpszFileName))
    {
        ::AfxMessageBox("没有找到调用的应用程序!");
        return FALSE;
    }
    else
        ShellExecute(NULL,NULL,_T("***.exe"),NULL,sPath,NULL);

五、结束进程:

  在你的程序中结束别的程序进程,采用的方法是进行进程列举,然后采用查找的方法进行:

         #include "TLHELP32.H"
         DWORD ProcessID[50];
    CString kkk[50];
    HANDLE SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32* info=new PROCESSENTRY32;
    PROCESSENTRY32 ProcessInfo;//声明进程信息变量
    ProcessInfo.dwSize=sizeof(ProcessInfo);//设置ProcessInfo的大小
    //返回系统中第一个进程的信息
    BOOL Status=Process32First(SnapShot,&ProcessInfo);
    int m_nProcess=0;
    while(Status)
    {
        CString s,str1,str2;
        s.Format("%d",ProcessInfo.cntThreads);
        str1.Format("%s",ProcessInfo.szExeFile);
        str1=ProcessInfo.szExeFile;
        kkk[m_nProcess]=ProcessInfo.szExeFile;
        ProcessID[m_nProcess]=ProcessInfo.th32ProcessID;
        if(str1=="***.exe")//***.exe就是你要结束的进程的名称
        {
            HANDLE ProcessHandle;
            ProcessHandle=OpenProcess (PROCESS_ALL_ACCESS,FALSE,ProcessID[m_nProcess]);
            TerminateProcess(ProcessHandle,0);    
        }
        Status=Process32Next(SnapShot,&ProcessInfo);
        m_nProcess++;
    }


我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 软件开发中几个常用功能的实现
本类热点文章
  C++新手必问之头文件
  基于VFW的视频应用程序开发
  VC入门宝典
  Visual C++ 入门精解
  送给正在学习C++朋友的50条建议
  用c++实现的"贪吃蛇"游戏源码
  对VC的批判,我要打击大家学VC的积极性了
  VC常用数据类型使用转换详解
  学好VC++的十大良好习惯
  用Debug函数实现API函数的跟踪
  用VC作的一个扑克游戏
  DirectX游戏开发入门
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2019 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00724