• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何關閉其他的應用程序

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    問題 有的 程序員 希望能夠從自己的應用程序中啟動其他的應用程序,并在操作完成后關閉應用程序。例如: 從應用程序中啟動 Windows 應用程序 Write,作記錄或者寫備忘錄,然后關閉此應用程序。有時,還希望 能夠忽略應用程序 Write 的消息框,消息框是用來詢
    問題
      有的程序員希望能夠從自己的應用程序中啟動其他的應用程序,并在操作完成后關閉應用程序。例如: 從應用程序中啟動 Windows 應用程序 Write,作記錄或者寫備忘錄,然后關閉此應用程序。有時,還希望 能夠忽略應用程序 Write 的消息框,消息框是用來詢問用戶是否保存文件的改變。
      如何使用 Windows 9x API 函數盡量簡單地實現這兩個功能呢?

    方法
      在 3.2 節中,介紹了如何列出當前正在運行的任務以及如何激活選中的任務。本節要實現的功能類似, 但在應用程序程序中要激活的和關閉的任務一般是一定的。不過為了使本節的例子程序更具有普遍性,仍然 由用戶來選擇要關閉的應用程序,并決定使用的關閉方法。
      為了實現這些功能,需要使用 Windows API 函數 PostMessage。

    步驟
      按照下列步驟實現一個例子程序。運行此例子程序,從菜單 Tasks 中選擇菜單項 Terminate Tasks, 將彈出一個對話框,顯示當前運行的窗口。選擇一個窗口并點擊按鈕 Close App 或按鈕 Quit App,對話 框將關閉,選中的窗口也將關閉。
      啟動 Windows 應用程序 WordPad,并鍵入一些文本,測試兩個按鈕的功能,會發現例子程序有時詢問 是否存儲已改變的文本,而有時不詢問。

      實現例子程序的具體步驟如下:
      1.在 Visual C++ 中,利用 AppWizard 創建新的項目文件,并命名此項目文件為 LD33.MAK.
      2.進入 AppStudio 并創建新的對話框。添加一個列表框,改變按鈕 OK 的標題為 Close,刪除 Cancel 按鈕。將對話框的標題改為 Terminate Task。
      3.在對話框中添兩個按鈕,標題分別為 Close App 和 Quit App。
      4.進入 ClassWizard 為此對話框生成新的對話框類,類名為 CTerminateTaskDlg。從對象列表中選 擇 CTerminateTaskDlg,從消息列表中選擇消息 WM_INITDIALOG。點擊按鈕 Add Function,在方法 OnInitDialog 中輸入下列代碼:


    BOOL CTerminateTaskDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();

        CListBox * list=(CListBox *)GetDlgItem(IDC_LIST1);

        list->ResetContent();

        FARPROC EnumProcInstance=MakeProcInstance(
    (FARPROC)EnumWindowsProc,AfxGetInstanceHandle());
        EnumWindows((WNDENUMPROC)EnumProcInstance,(LPARAM)list);
        FreeProcInstance(EnumProcInstance);
        CenterWindow();

        return TRUE;  // return TRUE unless you set the focus to a control
    }

      5.在文件 TerminateTaskDlg.cpp 中,方法 OnInitDialog 的前面,添加下列代碼:

    static BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
    {
        CListBox * list=(CListBox *)lParam;

        char  buf[256];
        GetWindowText(hwnd,buf,256);

        if(strlen(buf))
        {
    int idx=list->AddString(buf);
    list->SetItemData(idx,(DWORD)hwnd);
        }

        return TRUE;
    }

      6.從對象列表中選擇 ID_BUTTON1,從消息列表中選擇消息 BN_CLICKED,命名方法為 OnCloseApp,并在此方法中添加下列代碼:

    void CTerminateTaskDlg::OnCloseApp()
    {
        CListBox * list=(CListBox *)GetDlgItem(IDC_LIST1);

        int idx=list->GetCurSel();

        if(idx==LB_ERR)
        {
    MessageBox("You must select a window to active!",
        "Error",MB_OK|MB_APPLMODAL);
    return;
        }

        HWND hWnd=(HWND)list->GetItemData(idx);
        ::PostMessage(hWnd,WM_CLOSE,0,0L);

        EndDialog(IDOK);
    }

      7.從對象列表中選擇 ID_BUTTON2,從消息列表中選擇消息 BN_CLICKED,命名方法為 OnQuitApp,并在此方法中添加下列代碼:

    void CTerminateTaskDlg::OnQuitApp()
    {
        CListBox * list=(CListBox *)GetDlgItem(IDC_LIST1);

        int idx=list->GetCurSel();

        if(idx==LB_ERR)
        {
    MessageBox("You must select a window to active!",
        "Error",MB_OK|MB_APPLMODAL);
    return;
        }

        HWND hWnd=(HWND)list->GetItemData(idx);
        ::PostMessage(hWnd,WM_QUIT,0,0L);

        EndDialog(IDOK);
    }

      8.在菜單 Tasks 中添加新的菜單項 Terminate Tasks,ID 命名為 ID_TERMINATE_TASK。
      9.在 ClassWizard 中.從下拉列表中選擇對象 CMainFrame,從對象列表中選擇 ID_TERMINATE_TASK,選擇消息 COMMAND,點擊按鈕 Add Function,在方法 OnTerminateTask 中輸入下列代碼:
    void CMainFrame::OnTerminateTask()
    {
        CTerminateTaskDlg dlg;

        dlg.DoModal();
    }

      10.在文件 MAINFRM.CPP 的頂部添加下列行:
    #include "TerminateTaskDlg.h"
      11.編譯并運行此例子程序。

     

    用法
      同前一節一樣,本節也使用了 API 函數 EnumWindows 及回調函數 EnumWindowsProc 來列出窗 口,同樣,也將 Windows 句柄存放在列表框附加數據部分。
      當用戶從對話框中選擇了按鈕 Close App 后,選中的列表項及句柄將被取回。使用此句柄傳送標識 符為 WM_CLOSE 的消息給窗口,表示窗口應被關閉。使用消息 WM_CLOSE 關閉窗口,將不會提示用戶保 存已改變的文本。
      當用戶從對話框中選擇了按鈕 Quit App 后,選中的列表項及句柄將被取回。使用此句柄傳送標識符 為 WM_QUIT 的消息給窗口,表示窗口應被關閉。使用消息 WM_CLOSE 關閉窗口,將會提示用戶保存已改 變的文本,并允許用戶撤消關閉窗口的請示。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>