用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;
} 展开
比如下面这个程序调用了txt文本,怎么关闭这个文本呢?
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
WinExec( "C:\\WINDOWS\\NOTEPAD.EXE", SW_SHOW);
cout<< "我的功能是运行一个记事本." <<endl;
return 0;
} 展开
7个回答
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");
完整或部分路径名,不区分大小写
#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");
完整或部分路径名,不区分大小写
展开全部
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 );
}
{
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 );
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
findwindow(null,"无标题 - 记事本"),找到句柄,然后向该句柄投递wm-post消息,就能关闭了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结束EXE进程,如果运行多个可能结束不准
所以还是用CreateProess,这个函数,创建一个进程,最后一个参数就是
句柄,有了句柄
调用TerminateProcess( handle,0 );
所以还是用CreateProess,这个函数,创建一个进程,最后一个参数就是
句柄,有了句柄
调用TerminateProcess( handle,0 );
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的,怎么都要改楼主的程序呢?
人家用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);
人家用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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询