请各位大侠帮忙!! 如何在对话框中获取屏保的状态?? 如何在对话框中获取屏保的状态?? 我想获取系统刚进入屏保时隐藏对话框和屏保刚解除时再显示对话框。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果在你的程序中需要一个很长的时间段来进行大量的数据处理,这段时间长得足以使Windows因检测不到用户动作而激活屏幕保护程序,一旦启动了屏幕保护程序,你的程序运行实际上就变慢了,这会大大影响程序的正常运行。有没有一种方法,使程序在进行长时间的数据处理前关掉屏幕保护呢?答案是肯定的。Windows在启动屏幕保护程序前会向当前激活的应用程序发送WM_SYSCOMMAND消息,其中wParam参数指定了即将执行的系统命令类型,在本例中其值为SC_SCREENSAVE。问题在于程序如何捕获这个消息呢?在C++ Builder中可以利用TApplication类的OnMessage事件句柄来处理这个消息。应用程序在接收到任何Windows消息后都会触发TApplication类的OnMessage事件,通过定义这个事件的处理程序,可以捕获发送给应用程序的所有Windows消息(这当然不包括在程序中用SendMessage函数发送的消息)。 OnMessage事件的定义如下: typedef void__fastcall(__closure *TMessageEvent)(tagMSG &Msg,bool&Handled); __property TMessageEvent OnMessage={read=FOnMessage,write=FOnMessage}; 其中TMessageEvent类型是OnMessage事件的类型,它定义了处理消息的方法,Msg参数给出了Windows消息的相关信息,其结构如下: typedef struct tagMSG{ HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt;} Handled参数决定了如何对消息进行下一步处理,如果在接收到一个消息后将Handled参数设为true,则这个消息将不会得到进一步的处理,在本例中就是取消屏幕保护程序的激活。 启动C++ Builder,新建一工程文件,在头文件中的Private段增加对成员函数CaptureMessage的声明: class TForm1 : public TForm { __published: private: void __fastcall CaptureMessage(tagMSG &Msg,bool &Handled); public: __fastcall TForm1(TComponent* Owner); }; 在.cpp文件中增加CaptureMessage的定义: void __fastcall TForm1::CaptureMessage(tagMSG &Msg,bool &Handled) { if(Msg.message= =WM_SYSCOMMAND && Msg.wParam= =SC_SCREENSAVE) Handled=true; //阻止屏幕保护的启动 else Handled=false; //进行该消息的缺省处理 } 再将定义好的CaptureMessage函数作为OnMessage事件的事件处理器,将以下代码加到主窗体的OnCreate事件处理器中: void __fastcall TForm1::FormCreate(TObject *Sender) { Application->OnMessage=CaptureMessage; } 按F9编译并运行程序,你可以事先将屏幕保护的等待时间设为一个尽可能小的值来检验程序的运行情况。你会发现在程序运行期间,屏幕保护程序将无法被激活,关闭运行的程序后再等待一会儿,屏幕保护程序就会正常出现。以上代码在C++ Builder3、win98环境中运行通过。 SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,0,&isActive, 0); CAB文件打包后嵌入网页中没有提示下载且显示红叉 抓包工具已经看到数据到本机,但是recvfrom 读不到数据的问题? ListCtrl派生类从DLL中导出后丢失属性 简单问题,CPoint对象可以直接用 =0 初始化吗? VC 一个奇怪的现象 ODBC编程问题(ODBC+Oracle) 求救:已经找到了另外一个进程中的listview的句柄,如何读出它的内容 为什么有时在窗口上放了控件,但是在warzid中找不到它的id呢,在*、rc中能找到它! sql语句执行有时成功有时Error#3092 吐血啦... vc 应用picture控件显示图片的问题? VC中中文字符比较的问题
__property TMessageEvent OnMessage={read=FOnMessage,write=FOnMessage}; 其中TMessageEvent类型是OnMessage事件的类型,它定义了处理消息的方法,Msg参数给出了Windows消息的相关信息,其结构如下: typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} Handled参数决定了如何对消息进行下一步处理,如果在接收到一个消息后将Handled参数设为true,则这个消息将不会得到进一步的处理,在本例中就是取消屏幕保护程序的激活。 启动C++ Builder,新建一工程文件,在头文件中的Private段增加对成员函数CaptureMessage的声明: class TForm1 : public TForm
{
__published:
private:
void __fastcall CaptureMessage(tagMSG &Msg,bool &Handled);
public:
__fastcall TForm1(TComponent* Owner);
}; 在.cpp文件中增加CaptureMessage的定义: void __fastcall TForm1::CaptureMessage(tagMSG &Msg,bool &Handled)
{
if(Msg.message= =WM_SYSCOMMAND && Msg.wParam= =SC_SCREENSAVE)
Handled=true; //阻止屏幕保护的启动
else
Handled=false; //进行该消息的缺省处理
} 再将定义好的CaptureMessage函数作为OnMessage事件的事件处理器,将以下代码加到主窗体的OnCreate事件处理器中: void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage=CaptureMessage;
} 按F9编译并运行程序,你可以事先将屏幕保护的等待时间设为一个尽可能小的值来检验程序的运行情况。你会发现在程序运行期间,屏幕保护程序将无法被激活,关闭运行的程序后再等待一会儿,屏幕保护程序就会正常出现。以上代码在C++ Builder3、win98环境中运行通过。