社区
C++ Builder
帖子详情
3个简单的问题
zyplwt
2003-09-18 11:34:40
1 一程序使另一个程序的exe文件开始运行,怎样写
2 一程序使另一个程序的exe文件结束,怎样写
3 把一个exe文件隐藏执行,怎样写
...全文
52
4
打赏
收藏
3个简单的问题
1 一程序使另一个程序的exe文件开始运行,怎样写 2 一程序使另一个程序的exe文件结束,怎样写 3 把一个exe文件隐藏执行,怎样写
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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项目)
简单
的注册,登录功能,注册功能使用MySQL数据库,采用mvc编程模式,注册功能有详细的表单填写限制
简单
的扑克牌游戏程序
一个
简单
的扑克牌游戏程序.
Android省市区三级联动滚轮选择——Cascade_Master
从真实项目中提取出来的,Android省市区三级联动滚轮选择组件,基于开源组件Android-wheel来实现,效果非常不错,可以直接拿去用。
Socket编程例子
Socket编程例子
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章