久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

VC 從一個(gè)程序中啟動(dòng)和關(guān)閉另一個(gè)程序

 杰杰梅梅一生一世 2012-11-19

今天正在編寫的程序是一個(gè)插件(PlugIn),。插件其實(shí)就是一個(gè)動(dòng)態(tài)鏈接庫(kù),,可以被主程序裝入內(nèi)存中,,并調(diào)用插件中按照主程序規(guī)定編寫的函數(shù),。由于插件受制于主程序,,因此我必須另外提供一個(gè)程序可以擴(kuò)展插件的功能,。于是乎,,我就編寫了一個(gè)更加復(fù)雜的程序來完成更多的功能,,但是為了使這個(gè)程序可以看起來是和使用插件的程序象是集成在一起的,就必須在啟動(dòng)插件程序的過程中,,也同時(shí)啟動(dòng)我后來編寫的程序,,并且還要在插件主程序關(guān)閉之前,將我編寫的程序也關(guān)閉,。為了實(shí)現(xiàn)這一目的,,ShellExecuteEx()以及FindWindow()就被使用了。
ShellExecute()和ShellExecuteEx()被設(shè)計(jì)可以通過系統(tǒng)來啟動(dòng)一個(gè)程序,。為了可以正確執(zhí)行程序,,那么就要為ShellExecute()和ShellExecuteEx()指定正確的目錄和程序名。

下面是一個(gè)使用ShellExecuteEx的例子:

SHELLEXECUTEINFO  ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask    = NULL;
ShExecInfo.hwnd      = NULL;
ShExecInfo.lpVerb    = NULL;
ShExecInfo.lpFile      = _T(“C:\\MyProgram.exe“);        // 執(zhí)行的程序名
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory    = NULL;
ShExecInfo.nShow          = SW_MAXIMIZE;                // 全屏顯示這個(gè)程序
ShExecInfo.hInstApp = NULL;

ShellExecuteEx(&ShExecInfo);

如果ShellExecuteEx()沒有執(zhí)行正確,,GetLastError 會(huì)幫助你找到問題所在,。如果ShellExecuteEx執(zhí)行正確,那么這個(gè)函數(shù)會(huì)返回TRUE.

要關(guān)閉一個(gè)程序,,我們可以通過FindWindow()找到這個(gè)窗口,,然后向窗口發(fā)送關(guān)閉消息,就可以了。問題就在于如何找到正確的窗口,。

HWND FindWindow(
  LPCTSTR lpClassName,  // class name
  LPCTSTR lpWindowName  // window name
);

FindWindow的兩個(gè)參數(shù)可以幫助你定位一個(gè)窗口,。如果你確實(shí)知道一個(gè)窗口的窗口名稱,那么可以這樣用,。
HWND hWnd = ::FindWindow(NULL, _T(“NotePad”));
if (NULL != hWnd) {
    ::SendMessage(hWnd, WM_CLOSE, 0, 0);
}

如果窗口的標(biāo)題是可變的,,那么就要利用窗口的類名。類名可以通過使用Spy++得到,。如果這個(gè)窗口是自己編寫的,,就要注冊(cè)一個(gè)好記的窗口類名,在創(chuàng)建窗口之前,,注冊(cè)這個(gè)窗口,。

BOOL CMyWnd::Create(DWORD dwStyle, CRect& rect, CWnd* pParent, UINT nID)
{
    WNDCLASS wndcls;
    HINSTANCE hinst = AfxGetInstanceHandle();
    LPCTSTR lpszClassName = _T(“MyWindow“);
    if(!(::GetClassInfo(hinst, lpszClassName,&wndcls)))
    {
        //not yet,so register it
        wndcls.style        =  CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW;
        wndcls.lpfnWndProc  =  ::DefWindowProc;
        wndcls.cbClsExtra    =  wndcls.cbWndExtra = 0;
        wndcls.hInstance    =  hinst;
        wndcls.hIcon        =  NULL;
        wndcls.hCursor      =  NULL;
        wndcls.lpszMenuName  =  NULL;
        wndcls.hbrBackground =  (HBRUSH)(COLOR_3DFACE + 1);
        wndcls.lpszClassName =  lpszClassName;
        if(!AfxRegisterClass(&wndcls)) {
            AfxThrowResourceException();
        }
    }

    return CWnd::Create(lpszClassName, NULL, dwStyle, rect, pParentWnd,NULL));
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
HWND hWnd = ::FindWindow(_T(“MyWindow“), NULL);
if (NULL != hWnd) {
    ::SendMessage(hWnd, WM_CLOSE, 0, 0);
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多