社区
C++ Builder
帖子详情
3个简单的问题
zyplwt
2003-09-18 11:34:40
1 一程序使另一个程序的exe文件开始运行,怎样写
2 一程序使另一个程序的exe文件结束,怎样写
3 把一个exe文件隐藏执行,怎样写
...全文
35
4
打赏
收藏
3个简单的问题
1 一程序使另一个程序的exe文件开始运行,怎样写 2 一程序使另一个程序的exe文件结束,怎样写 3 把一个exe文件隐藏执行,怎样写
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gloom
2003-09-18
打赏
举报
回复
1.ShellExecute
2.关闭进程
用下面的函数KillProgram(LPCSTR ExeName)就可以了,这儿ExeName是全路径名。
#include <tlhelp32.h>
BOOL EnumProcess(DWORD dwPID, LPCSTR ExeName)
{
BOOL bRet;
char *File;
char buf[512];
HANDLE hModuleSnap;
MODULEENTRY32 me32;
bRet = FALSE;
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == (HANDLE)-1) return FALSE;
memset(&me32, 0, sizeof(me32));
me32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hModuleSnap,&me32)) {
do {
GetFullPathName(me32.szExePath,
sizeof(buf), buf, &File);
if (strcmpi(ExeName,buf)==0) {
bRet = TRUE; break;
}
}
while(Module32Next(hModuleSnap, &me32));
}
CloseHandle(hModuleSnap); return bRet;
}
BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID;
GetWindowThreadProcessId(hwnd, &dwID);
if (dwID == (DWORD)lParam) {
PostMessage(hwnd, WM_QUIT, 0, 0);
return FALSE;
}
return TRUE;
}
void KillProgram(LPCSTR ExeName)
{
char *File;
char FullName[512];
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
if (!ExeName || !ExeName[0])
return;
hProcessSnap = CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE)-1) return;
memset(&pe32, 0, sizeof(pe32));
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
{
MODULEENTRY32 me32;
GetFullPathName(ExeName, sizeof(FullName), FullName, &File);
do {
memset(&me32, 0, sizeof(me32));
me32.dwSize = sizeof(me32);
if (EnumProcess(pe32.th32ProcessID,
FullName)) {
//这儿在EnumWinProc里通过给主窗口
//发消息WM_QUIT使程序退出
EnumWindows((WNDENUMPROC)EnumWinProc,
pe32.th32ProcessID);
/*如果用发消息WM_QUIT不行的话
TerminateProcess(OpenProcess(
PROCESS_ALL_ACCESS,0,pe32
.th32ProcessID), 0);
*/
}
}
while(Process32Next(hProcessSnap,&pe32));
}
CloseHandle(hProcessSnap);
}
3.用ShellExecute,最后一个参数设为SW_HIDE
gloom
2003-09-18
打赏
举报
回复
1.ShellExecute
2.关闭进程
用下面的函数KillProgram(LPCSTR ExeName)就可以了,这儿ExeName是全路径名。
#include <tlhelp32.h>
BOOL EnumProcess(DWORD dwPID, LPCSTR ExeName)
{
BOOL bRet;
char *File;
char buf[512];
HANDLE hModuleSnap;
MODULEENTRY32 me32;
bRet = FALSE;
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == (HANDLE)-1) return FALSE;
memset(&me32, 0, sizeof(me32));
me32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hModuleSnap,&me32)) {
do {
GetFullPathName(me32.szExePath,
sizeof(buf), buf, &File);
if (strcmpi(ExeName,buf)==0) {
bRet = TRUE; break;
}
}
while(Module32Next(hModuleSnap, &me32));
}
CloseHandle(hModuleSnap); return bRet;
}
BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID;
GetWindowThreadProcessId(hwnd, &dwID);
if (dwID == (DWORD)lParam) {
PostMessage(hwnd, WM_QUIT, 0, 0);
return FALSE;
}
return TRUE;
}
void KillProgram(LPCSTR ExeName)
{
char *File;
char FullName[512];
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
if (!ExeName || !ExeName[0])
return;
hProcessSnap = CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE)-1) return;
memset(&pe32, 0, sizeof(pe32));
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
{
MODULEENTRY32 me32;
GetFullPathName(ExeName, sizeof(FullName), FullName, &File);
do {
memset(&me32, 0, sizeof(me32));
me32.dwSize = sizeof(me32);
if (EnumProcess(pe32.th32ProcessID,
FullName)) {
//这儿在EnumWinProc里通过给主窗口
//发消息WM_QUIT使程序退出
EnumWindows((WNDENUMPROC)EnumWinProc,
pe32.th32ProcessID);
/*如果用发消息WM_QUIT不行的话
TerminateProcess(OpenProcess(
PROCESS_ALL_ACCESS,0,pe32
.th32ProcessID), 0);
*/
}
}
while(Process32Next(hProcessSnap,&pe32));
}
CloseHandle(hProcessSnap);
}
3.用ShellExecute,最后一个参数设为SW_HIDE
he_Fly
2003-09-18
打赏
举报
回复
对了,结束就有个简单方法,发送WM_QUIT。
he_Fly
2003-09-18
打赏
举报
回复
运行ShellExecute,如果另一个程序是你自己写的,那么通过发送消息就可以了,如果不是,可能会麻烦一点,你可能通过消息钩子进入其进程空间,这样你在你的消息处理一个你自定义消息,收到ExitProcess.隐藏执行是不是要求在WINDOWS里查看不到进程,那会比较麻烦。具体我也没做过。。。:(
简单
的注册登录功能(JavaWeb项目)
在JavaWeb开发中,构建一个
简单
的注册登录功能是基础且重要的任务。这涉及到用户认证、数据持久化以及前端...通过这个
简单
的项目,开发者可以学习到如何将理论知识应用到实际项目中,为更复杂的系统打下坚实的基础。
Android省市区三级联动滚轮选择——Cascade_Master
"Android省市区三级联动滚轮选择——Cascade_Master"是一个专门为解决这一
问题
而设计的组件。这个组件是从实际项目中提炼出来的,旨在提供一个高效、直观且易于集成的解决方案。 该组件是基于开源库`Android-wheel`...
Android 打造史上最
简单
的侧滑菜单
本文将深入探讨如何利用Android SDK来打造一个史上最
简单
的侧滑菜单,同时也会涉及到一些相关的炫酷效果。 首先,侧滑菜单的基本原理是通过触摸事件监听用户的滑动操作,然后动态调整布局中的视图位置。在Android中...
Socket编程例子
在提供的"TestSocket"文件中,可能包含了一个
简单
的Socket通信实例,可能包括了客户端和服务器的代码。客户端代码通常会包含创建Socket、连接服务器、发送数据和关闭Socket的过程。服务器端则涉及创建Socket、绑定...
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章