社区
C++ Builder
帖子详情
CreateProcess创建的进程,用什么方式关闭好,怎么关?
hyz_cs
2011-05-17 09:27:04
ExitProcess应该可以,但是又不建议用.
ExitProcess
VB声明 Declare Sub ExitProcess Lib "kernel32" Alias "ExitProcess" (ByVal uExitCode As Long)
应尽量避免用该函数来关闭进程。不要在自己的VB程序中使用它。此时,应试着向要关闭的那个程序的主窗口投递一条WM_CLOSE消息.
...全文
1023
9
打赏
收藏
CreateProcess创建的进程,用什么方式关闭好,怎么关?
ExitProcess应该可以,但是又不建议用. ExitProcess VB声明 Declare Sub ExitProcess Lib "kernel32" Alias "ExitProcess" (ByVal uExitCode As Long) 应尽量避免用该函数来关闭进程。不要在自己的VB程序中使用它。此时,应试着向要关闭的那个程序的主窗口投递一条WM_CLOSE消息.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jaffy
2011-05-19
打赏
举报
回复
DWORD dwHandle = 0;
HANDLE hProcess1 = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dw_pid);
if(!hProcess1)
return;
//向目标进程地址空间写入DLL名称
DWORD dwSize,dwWritten;
dwSize = str_dllname.Length()+1;
LPVOID lpBuf = VirtualAllocEx(hProcess1,NULL,dwSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(!WriteProcessMemory(hProcess1,lpBuf,(LPVOID)str_dllname.c_str(),dwSize,&dwWritten))
{
VirtualFreeEx(hProcess1,lpBuf,dwSize,MEM_DECOMMIT);
CloseHandle(hProcess1);
return;
}
//使目标进程调用LoadLibraryA,装载DLL
LPVOID pFun = GetProcAddress(GetModuleHandle("Kernel32"),"LoadLibraryA");
HANDLE hThread =CreateRemoteThread(hProcess1,NULL,0,(LPTHREAD_START_ROUTINE)pFun,lpBuf,0,NULL);
//等待LoadLibraryA装载完毕
WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);
CloseHandle(hProcess1);
sczyq
2011-05-18
打赏
举报
回复
PROCESS_INFORMATION proc;
结束 Terminate
TerminateProcess(proc.hProcess, 1);
最后关闭 Release
CloseHandle(proc.hProcess);
CloseHandle(proc.hThread);
fxworld
2011-05-17
打赏
举报
回复
[Quote=引用 5 楼 hyz_cs 的回复:]
PostThreadMessage(pi.dwThreadId ,WM_QUIT,0,0); 可以关
WM_QUIT我是不是可以换个自定义消息.实现我上面的功能,那边的程序怎么写.
[/Quote]
当然可以,参考
UINT RegisterWindowMessage( LPCTSTR lpString); 看一下msdn就明白了。
Waiting4you
2011-05-17
打赏
举报
回复
[Quote=引用 1 楼 waiting4you 的回复:]
最好是让进程自己关。
如果子进程是你自己写的,可以用一些进程间通信的方法(比如共享内存,消息,管道之类的东东),向这个子进程发送消息要求关闭。
如果不是你写的,温和点的方法好像也只有向它的所有窗体发WM_CLOSE了,等指定时间还没关的话再用ExitProcess。
[/Quote]
简单一点就是用消息了,楼上的PostThreadMessage(pi.dwThreadId ,WM_QUIT,0,0)不错,不过直接发WM_QUIT可能会有问题,毕竟正常的顺序应该是窗体关完了才发送WM_QUIT的,呵呵。可以把WM_QUIT改成自定义消息,在子进程里用TApplicationEvents的OnMessage或者TApplication::OnMessage应该可以取得。
hyz_cs
2011-05-17
打赏
举报
回复
PostThreadMessage(pi.dwThreadId ,WM_QUIT,0,0); 可以关
WM_QUIT我是不是可以换个自定义消息.实现我上面的功能,那边的程序怎么写.
fxworld
2011-05-17
打赏
举报
回复
呵呵,楼主的头像咋和我的差不多。
fxworld
2011-05-17
打赏
举报
回复
CreatProcess 调用成功可以返回子进程的主线程句柄,
可以使用 PostThreadMessage(hChildThread,WM_QUIT,0,0)试试。
hyz_cs
2011-05-17
打赏
举报
回复
是自己写的.
打开的这个程序只是类似播放一个视频的功能,之所以要关闭,是因为主进程这边要求播放另一个视频(打开时会给视频的路径地址)
如果用进程间通信其实也可以不用关闭,直接发新视频的地址,让他重新播放这个视频就可以.
但还没用过进程间通信,有没有简单的例子.
Waiting4you
2011-05-17
打赏
举报
回复
最好是让进程自己关。
如果子进程是你自己写的,可以用一些进程间通信的方法(比如共享内存,消息,管道之类的东东),向这个子进程发送消息要求关闭。
如果不是你写的,温和点的方法好像也只有向它的所有窗体发WM_CLOSE了,等指定时间还没关的话再用ExitProcess。
用
CreateProcess
创建
进程
用
CreateProcess
创建
进程
用
CreateProcess
创建
进程
用
CreateProcess
创建
进程
用
CreateProcess
创建
进程
CreateProcess
创建
暂停
进程
进行DLL注入-[VC.Dll+VB.Code]
CreateProcess
创建
暂停
进程
进行DLL注入-[VC.Dll+VB.Code]
使用C#
创建
进程
管理程序.rar
使用C#
创建
进程
管理程序.rar使用C#
创建
进程
管理程序.rar
VC
创建
进程
CreateProcess
的方法
主要介绍了VC
创建
进程
CreateProcess
的方法,涉及VC操作
进程
的基本技巧,需要的朋友可以参考下
创建
进程
和销毁
进程
在vs2008中
创建
和销毁
进程
,打开记事本
关
闭
记事本 简单的demo c++
C++ Builder
13,867
社区成员
102,694
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章