• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 14, comments - 4, trackbacks - 0, articles - 0

            VISUAL C++軟件開發(fā)中幾個常用功能

            Posted on 2006-07-05 00:26 will 閱讀(468) 評論(0)  編輯 收藏 引用 所屬分類: 技術探索
            ?????????在進行軟件開發(fā)過程中間,有很多小功能的實現(xiàn),雖然這些東西你可以不用,但是如果應用仂將會是你的程序更具有專業(yè)性。?
            一、設置程序自動運行。??
            ???????很多監(jiān)控軟件要求軟件能夠在系統(tǒng)重新啟動后不用用戶去點擊圖標啟動項目,而是直接能夠啟動運行,方法是寫注冊表Software\\Microsoft\\Windows\\CurrentVersion\\Run。參考程序可以見下:(查找程序目錄的執(zhí)行文件,存在則進行添加注冊表操作)?
            ???????? 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";//這里加上你要查找的執(zhí)行文件名稱?
            ??? 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());//這里加上你需要在注冊表中注冊的內(nèi)容?
            ??????? this->UpdateData(FALSE);?
            ??? }?
            ??? else?
            ??? {?
            ??????? theApp.SetMainSkin();?
            ??????? ::AfxMessageBox("沒找到執(zhí)行程序,自動運行失敗");?
            ??????? exit(0);?
            ??? }?

            二、自動配置數(shù)據(jù)源?
            ??? 很多的程序都要用到數(shù)據(jù)庫結合的操作,這里舉例ACCESS,因為ACCESS在中小型VC系統(tǒng)開發(fā)中是最常用到的,如果程序的移植,如果對于很初級的用戶來說,你還需要他到配置面板中進行數(shù)據(jù)源配置的話,那就有點說不過去了。?
            ???????? #include <odbcinst.h>?
            ???????? //配置數(shù)據(jù)源,數(shù)據(jù)庫在應用程序目錄下,這里比如數(shù)據(jù)庫文件名為***.mdb,程序運行時候可以將數(shù)據(jù)庫文件拷貝到程序目錄下面。?
            ??? 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";//這里修改成你的數(shù)據(jù)庫文件名稱?
            ??? CFileFind? fFind;?
            ??? if(!fFind.FindFile(lpszFileName))?
            ??? {?
            ??????? ::AfxMessageBox("沒有找到數(shù)據(jù)庫");?
            ??????? exit(0);?
            ??? }??
            ??? CString szDesc;?
            ??? szDesc.Format( "DSN=****;Description=****;DESCRIPTION=The DataBase For ***;FIL=MicrosoftAccess;DEFAULTDIR=%s;DBQ=%s;" ,sPath,lpszFileName);//這里***號可以添加成你的描述?

            ??? //添加數(shù)據(jù)源?
            ??? if(!::SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",(LPCSTR)szDesc))?
            ??? {?
            ??????? ::AfxMessageBox("32位ODBC數(shù)據(jù)源配置錯誤!");?
            ??????? exit(0);?
            ??? }?

            三、設置顯示模式:?
            ??? 很多的程序的移植的運行環(huán)境是改變的。有可能你的原來開發(fā)環(huán)境是1024X768,但是到了那些顯示器大于17的時候(分辨率超過你的開發(fā)時的分辨率時),程序的顯示可能就不好看了。?
            ???????? DEVMODE lpDevMode;?
            ??? lpDevMode.dmPelsHeight=768;//Y方向象素點?
            ??? lpDevMode.dmPelsWidth=1024;//X方向象素點?
            ??? lpDevMode.dmDisplayFrequency=85;//屏幕刷新率?
            ??? lpDevMode.dmFields=DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY;?
            ??? ChangeDisplaySettings(&lpDevMode,0);?

            四、在你的程序中間加載其他應用程序:?
            ??? 你的程序除了調(diào)用到各個模塊進行協(xié)同工作外(DLL),還有可能調(diào)用不是同一個開發(fā)環(huán)境下的應用程序,比如VC環(huán)境下調(diào)用DELPHI,VB開發(fā)的執(zhí)行程序,你就可以用到下面的方法(將調(diào)用的應用程序拷貝程序目錄中):?
            ???????? 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";//這里修改成你的調(diào)用應用程序的文件名稱?
            ??? CFileFind? fFind;?
            ??? if(!fFind.FindFile(lpszFileName))?
            ??? {?
            ??????? ::AfxMessageBox("沒有找到調(diào)用的應用程序!");??
            ??????? 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的大小?
            ??? //返回系統(tǒng)中第一個進程的信息?
            ??? 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++;?
            ??? }?

            免费一级欧美大片久久网| 久久se精品一区精品二区国产| 久久亚洲精品无码播放| 国产福利电影一区二区三区久久老子无码午夜伦不| 久久青青草原精品影院| 久久久久一本毛久久久| 久久97久久97精品免视看秋霞| 国产精品日韩欧美久久综合| 国产精品久久久久9999高清| 99久久精品免费看国产免费| 无码AV波多野结衣久久| 国产亚洲色婷婷久久99精品91| 久久久久综合中文字幕| 无码伊人66久久大杳蕉网站谷歌 | 久久国产色av免费看| 成人久久久观看免费毛片| 久久综合伊人77777| 国产精品久久久久国产A级| 伊人久久精品无码av一区| 一本一道久久a久久精品综合| 久久久久亚洲AV无码去区首| 成人资源影音先锋久久资源网| 模特私拍国产精品久久| 综合久久精品色| 亚洲精品国产成人99久久| 国产激情久久久久影院老熟女免费 | 2021最新久久久视精品爱 | 2020国产成人久久精品| 久久精品国产亚洲综合色| 一本大道久久a久久精品综合| 中文国产成人精品久久不卡| 一级a性色生活片久久无| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲国产精品高清久久久| 久久天天躁夜夜躁狠狠躁2022| 国产精品久久久久久| 色综合久久中文字幕无码| 99精品国产免费久久久久久下载| 久久国产高清一区二区三区| 国产精品熟女福利久久AV| 久久国产香蕉视频|