社区
C++ Builder
帖子详情
怎样让我的程序在强行关掉时出现“无法完成操作,串绑定无效”
钛哥
2002-07-20 03:23:07
注册成服务器模式好像不行
...全文
125
13
打赏
收藏
怎样让我的程序在强行关掉时出现“无法完成操作,串绑定无效”
注册成服务器模式好像不行
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
钛哥
2002-07-21
打赏
举报
回复
另外,我发现不能杀掉的进程用ctrl+alt+del键 通过任务管理器来关闭应用程序时出现“无法完成操作,串绑定无效”
钛哥
2002-07-21
打赏
举报
回复
漏了一个
#include <tlhelp32.h>
钛哥
2002-07-21
打赏
举报
回复
季老大有一篇文章,号称可以杀掉一切知道名字的进程,我一个个的试,发现有些不能杀掉,不知道他们怎么做的?不过肯定不是楼上的办法。
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
BOOL EnumProcess(DWORD dwPID, LPCSTR ExeName)
{
BOOL bRet;
char *File;
char buf[512];
String sModule;
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);
sModule = buf;
sModule = sModule.LowerCase();
// ExeName = ExeName.LowerCase();
if (sModule.Pos(ExeName) > 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,
ExeName)) {
//这儿在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);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
KillProgram(Edit1->Text.LowerCase().c_str());
}
//---------------------------------------------------------------------------
烟波三千里人鬼五百年
2002-07-20
打赏
举报
回复
:)
kingcaiyao
2002-07-20
打赏
举报
回复
To cker:
如果用户在程序中模拟这个退出按钮的单击,那么bNormal标志一样会设置成TURE,表明是正常退出。
烟波三千里人鬼五百年
2002-07-20
打赏
举报
回复
那他要是向这个按钮发消息模拟按下来推出呢?....:)
kingcaiyao
2002-07-20
打赏
举报
回复
我考虑两种情况来实现你的要求。
1.当我们认定用户按下ctrl+alt+del键,通过任务管理器来关闭应用程序是一种强行关闭的操作时,我们可以采取如下措施:
class TForm1:public TForm
{
private:
bool bNoraml;
定义一布尔类型变量来判断用户是否是强行关闭。
public:
protected:
virtual __fastcall ~TForm1();
}
.cpp File
//Constructor
//Deconstructor
void __fastcall TForm1::FormCreate(TObject *Sender)
{
bNormal=FALSE;//初始值设定为假。
}
__fastcall TForm1::~TForm1()
{
if(!bNormal)
{
ShowMessage("无法完成操作,串绑定无效,系统异常中止");
}
}
//这里要注意的是当用户正常退出时,要将bNormal设置成为true
假定正常退出是从单击一按钮或单击一菜单(这里假定是按钮吧)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int button=Application->MessageBox("Do you really want to exit thisform?”,"Confirmation",MB_YESNO+MB_ICONQEUSTION);
if(button==IDYES)
{
bNormal=TRUE;//表明用户是正常退出
}
}
2.假定用户从开始菜单进行关机重启或注销为强行关闭操作,应该采取下列措施:原理和1类似,不过上例中我用析构函数,这里我用消息
class TForm1:public TForm
{
private:
bool bNormal;
void __fastcall WMQueryEndSession(TMessage &Message);
public:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_QUERYENDSESSION,TMessage,WMQueryEndSession);
END_MESSAGE_MAP(TForm);
protected:
virtual void __fastcall WndProc(TMessage &Message);
}
.cpp File
//Constructor
...
void __fastcall TForm1::FormCreate(TObject *Sender)
{
bNormal=FALSE;
}
void __fastcall TForm1::WMQueryEndSession(TMessage &Message)
{
if(!bNormal)
{
ShowMessage("无法完成操作,串绑定无效,程序异常中止");
}
Message.Result=1;
Dispatch(&Message);
}
void __fastcall TForm1::WndProc(TMessage &Message)
{
//Do my job
TForm::WndProc(Message);
}
//正常退出
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int button=Application->MessageBox("Do you really want to exit thisform?”,"Confirmation",MB_YESNO+MB_ICONQEUSTION);
if(button==IDYES)
{
bNormal=TRUE;//表明用户是正常退出
}
}
talisman
2002-07-20
打赏
举报
回复
什么意思?
kingcaiyao
2002-07-20
打赏
举报
回复
你所指的强行关闭是指的哪一种,是用户按下CTRL+ALT+DEL,还是用户重启或注销或关闭Windows系统,你必须考虑全面。
huzhangyou
2002-07-20
打赏
举报
回复
我乱说的
呵呵
learning......................................
huzhangyou
2002-07-20
打赏
举报
回复
不知道你看过cih没有
进到ring0后好像管不了
钛哥
2002-07-20
打赏
举报
回复
再顶
钛哥
2002-07-20
打赏
举报
回复
up
MATLAB软件概述-下载即用.zip
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 MATLAB-GUI- 基于MATLAB的图像处理GUI软件 软件说明 本资源为基于MATLAB设计的数字图像处理软件源码,有自己设计的GUI、移植于MATLAB官网的标签页设计方法,实现基础的数字图像处理任务,包含各种图像加噪、去噪、空间变换、边缘检测、尺度变换、图像增强、图像分析的功能,可以用来作为数字图像处理入门学习的例子,其中使用到的算法也可以自行移植到自己的项目中,方便使用。 simpletab.m
程序
,为标签页生成
程序
(MATLAB官网下载)。
深度学习短文本语义相似度
打开链接下载源码: https://pan.quark.cn/s/1843d5c08171 基于深度学习的短文本语义相似度计算,运用深度学习的理念来衡量语义相似程度。
STM32+原理图+PCB
程序
直流充电桩主控方案源
内容概要:本资源提供一套完整的基于STM32的直流充电桩主控系统设计方案,涵盖核心控制器选型、电路原理图设计、PCB布局布线及配套控制
程序
源码,构成一个软硬件一体化的嵌入式系统解决方案。方案聚焦充电桩主控单元的功能实现,包括电源管理、信号采集、充放电控制、通信接口等模块的集成设计,适用于直流快充应用场景,具有较高的工程实践参考价值。; 适合人群:具备嵌入式系统开发基础,熟悉STM32单片机应用,从事电力电子、新能源汽车充电设备研发的工程师或相关专业高年级本科生、研究生。; 使用场景及目标:① 学习和掌握直流充电桩主控系统的整体架构与工作原理;② 借鉴和复用该方案进行自主产品开发或毕业设计、科研项目;③ 深入理解充电桩中STM32在实
时
控制、多任务调度及安全保护机制方面的具体应用。; 阅读建议:学习者应结合提供的原理图、PCB文件与源
程序
代码进行对照分析,有条件的情况下可搭建实物平台进行功能验证与调试,重点关注系统安全性、稳定性和电磁兼容性(EMC)的设计考量。
三大法师打发斯蒂芬胜多负少的
三大法师打发斯蒂芬胜多负少的
avaryholding.7z.001
avaryholding.7z.001
C++ Builder
13,874
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章