// myProgram.cpp : implementation file // #include "stdafx.h" #include "myTaskmgr.h" #include "myProgram.h" #include "myOpen.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // myProgram dialog myProgram::myProgram(CWnd* pParent /*=NULL*/) : CDialog(myProgram::IDD, pParent) { //{{AFX_DATA_INIT(myProgram) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void myProgram::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(myProgram) DDX_Control(pDX, IDC_LIST1, m_list); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(myProgram, CDialog) //{{AFX_MSG_MAP(myProgram) ON_BN_CLICKED(IDC_OPEN, OnOpen) ON_WM_TIMER() ON_BN_CLICKED(IDC_CLOSE, OnClose) ON_COMMAND(IDC_MENU_EXIT, OnMenuExit) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // myProgram message handlers BOOL myProgram::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_INFOTIP | LVS_EX_FULLROWSELECT); m_list.InsertColumn(0,_T("任务"),LVCFMT_LEFT,280,0); m_list.InsertColumn(1,_T("状态"),LVCFMT_LEFT,150,1); getState(); SetTimer(1,2000,NULL); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void myProgram::getState() { // TODO: Add your control notification handler code here int num = m_list.GetSelectedCount(); m_list.DeleteAllItems(); m_num = 0; CString StrCaption; //获取任务栏窗口句柄 CWnd* pWnd=AfxGetMainWnd()->GetWindow(GW_HWNDFIRST); int i=0; while (pWnd) { if (pWnd ->IsWindowVisible () && pWnd ->GetWindowTextLength () &&! pWnd ->GetOwner ()) { //获取窗口标题 pWnd ->GetWindowText (StrCaption); m_Program[m_num++] = StrCaption; //设置ListView显示内容 this->m_list.InsertItem(i,StrCaption); this->m_list.SetItemText(i,1,"正在运行"); i++; } //查看下一个窗口 pWnd=pWnd->GetWindow (GW_HWNDNEXT); } m_list.SetSelectionMark( num ); } void myProgram::OnOpen() { // TODO: Add your control notification handler code here myOpen dlg; if(dlg.DoModal() == IDOK) { ShellExecute(NULL,_T("open"),dlg.m_file,NULL,NULL,SW_SHOW); } getState(); } void myProgram::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default int nIndex; nIndex=m_list.GetSelectionMark(); getState(); m_list.SetSelectionMark( nIndex ); m_list.SetItemState(nIndex ,LVIS_SELECTED,LVIS_SELECTED); CDialog::OnTimer(nIDEvent); } void myProgram::OnClose() { // TODO: Add your control notification handler code here int nIndex; nIndex=m_list.GetSelectionMark(); if(MessageBox("确定要关闭"+m_Program[nIndex],"信息询问",MB_YESNO) == IDNO) { return; } CWnd *pWnd = CWnd::FindWindow(NULL,_T(m_Program[nIndex])); if( pWnd == INVALID_HANDLE_VALUE ) { AfxMessageBox("Nothing Find!"); return; } pWnd->SendMessage(WM_CLOSE,0); pWnd->ShowWindow(false); ShellExecute(NULL,_T("close"),m_Program[m_list.GetSelectedCount()],NULL,NULL,SW_SHOW); getState(); } void myProgram::OnMenuExit() { // TODO: Add your command handler code here OnOK(); } void myProgram::Run() { OnOpen(); }