用MFC建了一个基于对话框的程序,怎样按一个按钮可以关闭一个.exe文件
我用MFC建了一个基于对话框的程序,上面有两个按钮,一个按钮实现打开一个.exe文件,另一个按钮关闭这个.exe文件,应该怎样为这两个按钮编写程序呢?...
我用MFC建了一个基于对话框的程序,上面有两个按钮,一个按钮实现打开一个.exe文件,另一个按钮关闭这个.exe文件,应该怎样为这两个按钮编写程序呢?
展开
展开全部
如果你是MFC程序,直接向导就有2个按钮了,一个是"确定"按钮,一个是"取消"按钮.
在资源那里直接双击"确定"按钮,就会进入代码.
写上:
WinExec("C:\\Program Files\\Tencent\\QQ\\QQ.exe",SW_SHOW);
退出程序:
HWND hWnd = FindWindow("QQ",NULL);
if(hWnd)
{
PostMessage(hWnd,WM_CLOSE,NULL,NULL);
}
这个不一定能成功,FindWidow主要是根据窗口标题来查找的,如果你打开的exe窗口标题知道的就可以用.像qq这个标题不确定,就不可以.我举例说明而已.
在资源那里直接双击"确定"按钮,就会进入代码.
写上:
WinExec("C:\\Program Files\\Tencent\\QQ\\QQ.exe",SW_SHOW);
退出程序:
HWND hWnd = FindWindow("QQ",NULL);
if(hWnd)
{
PostMessage(hWnd,WM_CLOSE,NULL,NULL);
}
这个不一定能成功,FindWidow主要是根据窗口标题来查找的,如果你打开的exe窗口标题知道的就可以用.像qq这个标题不确定,就不可以.我举例说明而已.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、在打开exe的时候用CreateProcess,返回一个句柄,然后Get其Process ID ,保存起来。
代码示例如下:
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( π, sizeof(pi) );
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line).
TEXT("MyChildProcess"), // 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.
π ) // Pointer to PROCESS_INFORMATION structure.
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
通过
DWORD GetProcessId(
HANDLE Process
);
得到ID。
2、通过进程ID,得到句柄,然后调用API :
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);
将其关闭。
3、第三种方法就是通过枚举的方法,用EnumProcess,枚举到你要杀掉的进程然后通过TerminateProcess关闭。
代码示例如下:
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( π, sizeof(pi) );
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line).
TEXT("MyChildProcess"), // 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.
π ) // Pointer to PROCESS_INFORMATION structure.
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
通过
DWORD GetProcessId(
HANDLE Process
);
得到ID。
2、通过进程ID,得到句柄,然后调用API :
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);
将其关闭。
3、第三种方法就是通过枚举的方法,用EnumProcess,枚举到你要杀掉的进程然后通过TerminateProcess关闭。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分别双击两个按钮就加入了ONBUTTON消息响应函数
然后分别在里面加上如下代码就可以了:
WinExec("C:\ab.exe",SW_SHOW);//打开一个.exe文件.
关闭你打开的那个文件可以在你的程序里调用下面DOS命令就可以完成!
c:\>ntsd -c q -p PID 它可以杀掉大部分的进程
你只需要把PID改成你要关掉的进程PID就可以了
PID可以在任务管理器里得到!当然你也可以使用API函数遍历系统上所有进程,然后关闭你指定的进程,但是实现起对新手来说还是比较麻烦的
有什么问题可以发消息给我!
然后分别在里面加上如下代码就可以了:
WinExec("C:\ab.exe",SW_SHOW);//打开一个.exe文件.
关闭你打开的那个文件可以在你的程序里调用下面DOS命令就可以完成!
c:\>ntsd -c q -p PID 它可以杀掉大部分的进程
你只需要把PID改成你要关掉的进程PID就可以了
PID可以在任务管理器里得到!当然你也可以使用API函数遍历系统上所有进程,然后关闭你指定的进程,但是实现起对新手来说还是比较麻烦的
有什么问题可以发消息给我!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询