用vc怎么关闭一个外部程序?

用vc怎么关闭一个外部程序?比如下面这个程序调用了txt文本,怎么关闭这个文本呢?#include<Windows.h>#include<iostream>usingna... 用vc怎么关闭一个外部程序?
比如下面这个程序调用了txt文本,怎么关闭这个文本呢?
#include <Windows.h>
#include <iostream>
using namespace std;

int main()
{
WinExec( "C:\\WINDOWS\\NOTEPAD.EXE", SW_SHOW);
cout<< "我的功能是运行一个记事本." <<endl;
return 0;
}
展开
 我来答
匿名用户
2009-04-24
展开全部
终止指定进程

#include "tlhelp32.h"

void KillExe(const char* szExeName)
{
if (szExeName == NULL)
return 0;
int lsr = lstrlen(szExeName);
if (lsr == 0)
return 0;

PROCESSENTRY32 my;
HANDLE l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (((int)l) != -1)
{
my.dwSize = sizeof(my);
if (Process32First(l, &my))
{
do
{
if (lstrcmpi(szExeName, my.szExeFile + lstrlen(my.szExeFile) - lsr) == 0)
{
HANDLE hProcessHandle;
hProcessHandle = OpenProcess(0x1F0FFF, true, my.th32ProcessID);
if (hProcessHandle != NULL)
{
if (TerminateProcess(hProcessHandle, 0) != NULL)
{
CloseHandle(hProcessHandle);
}
}
CloseHandle(l);
return;
}
}while (Process32Next(l, &my));
}
CloseHandle(l);
}
}

调用方式
KillExe("c:\\windows\\notepad.exe");

完整或部分路径名,不区分大小写
百度网友e1b9539c0c
2009-04-24 · TA获得超过734个赞
知道大有可为答主
回答量:2241
采纳率:33%
帮助的人:724万
展开全部
void main( VOID )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line).
"C:\\WINDOWS\\NOTEPAD.EXE", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
ErrorExit( "CreateProcess failed." );
}

// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );

// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rlwhappy
2009-04-24 · TA获得超过250个赞
知道小有建树答主
回答量:226
采纳率:75%
帮助的人:101万
展开全部
findwindow(null,"无标题 - 记事本"),找到句柄,然后向该句柄投递wm-post消息,就能关闭了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
spotatoes
2009-04-24 · TA获得超过3910个赞
知道小有建树答主
回答量:2363
采纳率:0%
帮助的人:730万
展开全部
结束EXE进程,如果运行多个可能结束不准
所以还是用CreateProess,这个函数,创建一个进程,最后一个参数就是
句柄,有了句柄

调用TerminateProcess( handle,0 );
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
stone_dongdong
2009-04-24 · TA获得超过2853个赞
知道大有可为答主
回答量:1636
采纳率:0%
帮助的人:1000万
展开全部
楼上的,怎么都要改楼主的程序呢?
人家用WinExec启动的;

HWND hRecordWnd[32]; // 当然可以定义更大,或者采用链表
memset( hRecordWnd, 0, sizeof(hRecordWnd) );
int nCount = 0;
hRecordWnd[nCount]= FindWindowEx( NULL, NULL, _T("NotePad", NULL) );
while ( hRecordWnd[nCount] )
{
nCount++;
hRecordWnd[nCount]= FindWindowEx(NULL, hRecordWnd[nCount-1],_T("NotePad"), NULL);
}

WinExec( "C:\\WINDOWS\\NOTEPAD.EXE", SW_SHOW);

HWND hGetTheNewNotePad = NULL;
HWND hFindWnd = FindWindowEx( NULL, NULL, _T("NotePad", NULL) );
while( hFindWnd)
{
hFindWnd= FindWindowEx( NULL, hFindWnd, _T("NotePad", NULL) );

BOOL bFineSame = FALSE;
for ( int i = 0 ; i < nCount&& hFindWnd; i++)
{
if ( hRecordWnd[i]== hFindWnd)
{
bFineSame= TRUE;
break;
}
}
if ( !bFineSame)
{
hGetTheNewNotePad= hFindWnd;
break;
}
}

::SendMessage( hGetTheNewNotePad, WM_CLOSE, 0, 0);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式