社区
C++ Builder
帖子详情
3个简单的问题
zyplwt
2003-09-18 11:34:40
1 一程序使另一个程序的exe文件开始运行,怎样写
2 一程序使另一个程序的exe文件结束,怎样写
3 把一个exe文件隐藏执行,怎样写
...全文
43
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项目)
在JavaWeb开发中,构建一个
简单
的注册登录功能是基础且重要的任务。这涉及到用户认证、数据持久化以及前端...通过这个
简单
的项目,开发者可以学习到如何将理论知识应用到实际项目中,为更复杂的系统打下坚实的基础。
ThinkPHP新闻发布系统(前台+后台)绝对易学易用
MVC模式将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分,有助于提高代码的可维护性和可扩展性。在ThinkPHP中,你可以通过
简单
的路由配置实现URL美化,同时,其强大的自动验证和填充功能...
读和写注册表文件的例子
下面,我们将通过一个名为"Registry Editor"的
简单
示例程序来深入探讨这一概念。 **标题解析:** "读和写注册表文件的例子"这个标题表明了本文档或程序的核心内容是关于如何实现对Windows注册表的读取操作,以及...
Android二维码扫描Demo 程序源码
7. **用户界面**:ScannerTest的界面设计
简单
,通常包含一个全屏的SurfaceView用于显示相机预览,以及可能的控制按钮(如开启/关闭闪光灯,切换前后摄像头等)。 四、实践与优化 实际开发中,需要注意以下几点: ...
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章