怎样隐藏应用程序的任务条图标

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  首先,请看看这些术语。系统托盘是一个在任务条右角的小方框,在托盘了应用程序可以显示小图标 。任务条是可以在屏幕上伸展的工具栏。它就是程序图标所在的位置。想隐藏程序的任务条图标,你可以应用ShowWindow函数并传给它Application->Handle窗口句柄。
  ShowWindow(Application->Handle, SW_HIDE);
  若想让任务条图标再出现,只需将SW_HIDE改为SW_SHOW。
  ShowWindow(Application->Handle, SW_SHOW);
  注: 你可以设置主窗口的Visible属性为false来隐藏它。
  注: 通过ShowWindow来隐藏窗口的任务条图标是不持久的。某些动作会使任务条图标重现。你可以将隐藏的应用程序窗口设为Tool Window来移走程序的任务条图标而避免它再次出现。Tool Windows永远不会有任务条图标。 使应用程序窗口成为一个Tool Window有一个副作用:当用户按下Alt-TAB时它将不在程序列表中出现。你可以调用API函数GetWindowLong和SetWindowLong来使应用程序窗口成为一个Tool Window。
  WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
  DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE); dwExStyle |= WS_EX_TOOLWINDOW; SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);
  try {
  Application->Initialize();
  Application->CreateForm(__classid(TForm1), &Form1);
  Application->Run();
  } catch (Exception &exception) {
  Application->ShowException(&exception);
  }
  return 0;
  }
  注:程序启动后要隐藏主窗体,则可以在WinMain中添加如下代码:(Project->View Scource)
  ShowWindow(Application->Handle,SW_HIDE);
  Application->ShowMainForm=false;
  当你想显示程序时执行下面这两行代码:(记住,如果代码定位在主窗口类的一个方法中,Application->MainForm->Visible=true可以用Visible=true 来代替。)
  ShowWindow(Application->Handle, SW_SHOW);
  Application->MainForm->Visible = true;

  发送电子邮件

  2000年第一期的《电脑报》刊登了题目为《自己动手编写电子邮件软件》的文章,文章讲述了如何用VB编写一个简单的电子邮件发送程序。其实,如果你是一个C++Builder爱好者,完全可以更快、更简捷地编写出这类软件。请听我下文分解:
  与E-mail密切相关的两个协议是POP3和SMTP,POP3是Post Protocol 3的缩写,用于从POP3服务器接收电子邮件,SMTP是Simple Mail Transfer Protocol的缩写,用于通过SMTP服务器发送电子邮件。这两个协议本身是很复杂的,但C++Builder从NetManage公司引进了POP、SMTP控件,这样,我们完全可以不去管那些收发邮件的机理,只要设置好这些控件就可以编出一个C++Builder的发送邮件程序了。下面介绍SMTP控件:
  SMTP控件位于控件栏的Internet页面上,名称为:NMSMTP。SMTP的主要属性有:
  Host属性,用来指定SMTP服务器的主机名。
  Port属性,用于指定SMTP服务器的端口号,一般设为25。
  UserId属性,登录SMTP服务器时用于设置用户名。
  PostMessage属性,此属性非常重要,从以下它的内容你就可以看出来了:
  FromName 用于指定发件人的名称。
  FromAddress 用于指定发件人的e-mail地址。
  LocalProgram 用于指定发件人所使用的邮件客户程序。
  ToAddress 收件人的地址。
  Body 邮件正文。
  Subject 邮件主题。
  SMTP控件的方法:
  Connect函数,用于登录到SMTP服务器,使用此函数前,Host、Port、UserId等属性必须已设好。
  Disconnect函数,用于断开与SMTP服务器的连接。
  SendMail函数,用于向SMTP服务器发送邮件。知道了这些,我们就可以写程序了。
  新建应用程序,将工程名保存为sendmail,在Form1上加入NMSMTP控件,Host属性添入SMTP服务器的名称,如:“smtp.yeah.net”,UserId属性添入你在此邮箱申请的用户名,其它属性保持默认值;加入4个Label控件,将其Caption分别设为:“发件人名称”、“收件人地址”、“邮件主题”和“邮件正文”;加入4个Edit控件,将其Name分别设为:“Name1”、“Address1”、“Subject1”和“Body1”;一个SpeedButton控件,Caption为:“发送”(以上属性均不含引号),Click事件代码为:
  NMSMTP1- >Connect();
  NMSMTP1- >PostMessageA->FromName=Name1->Text;
  NMSMTP1- >PostMessageA->FromAddress=〃suPerlink@yeah.net〃;
  NMSMTP1- >PostMessageA->ToAddress->Add(Address1->Text);
  NMSMTP1- >PostMessageA->Subject=Subject1->Text;
  NMSMTP1- >PostMessageA->Body->Add(Body1->Text);
  NMSMTP1- >PostMessageA->LocalProgram=〃SendMail〃;
  NMSMTP1- >SendMail();
  Application- >MessageBoxA(〃发送完成!〃,〃邮件系统〃,MB_OK);
  NMSMTP1- >Disconnect();
  完成!有人不禁要问:“就这么简单?”,的确就这么简单。不过,NMSMTP控件还有大量的功能没在此一一列出,同时还有NMPOP3控件可用来编写接收邮件的程序,如果喜爱C++Builder的朋友感兴趣,完全可以写出象OutLook Express、FoxMail这样的电子邮件软件。

  C++builder编程修改注册表的问题

  RootKey是注册表的根键值,比如运行regedit后看到的HKEY_USERS,HKEY_LOCAL_MACHINE就是RootKey,在TRegIniFile中缺省的RootKey是HKEY_USERS.
  下面的例子是TReGIStry的,TRegIniFile也差不多
  void __fastcall TfrmMainForm::WriteToMyRegistry(int table_count)
  {
  //TODO: Add your source code here
  TRegistry *MyRegistry=new TRegistry;
  MyRegistry- >RootKey=HKEY_LOCAL_MACHINE;  //改变缺省Rootkey
  if(!MyRegistry->OpenKey("Software//Microsoft//Windows//Current/Version//Run",true)) { //打开主键
  //这样双引号里面的东西就变成了CurrentKey
  Application- >MessageBox("注册表内容无效", "读取注册表出错",MB_ICONERROR);
  MyRegistry- >CloseKey();
  delete MyRegistry;
  return;
  }
  MyRegistry- >WriteString("myrun","c://sthVCd//sthvcd.exe");
  MyRegistry- >CloseKey();
  delete MyRegistry;
  }
  怎样隐藏应用程序不让它出现在CTRL-ALT-DEL对话框中
  把你的应用程序从CTRL-ALT-DEL对话框中隐藏的一个简单办法是去应用程序的标题。如果一个程序的主窗口没有标题,Windows不把它放到CTRL-ALT-DEL对话框中。清除标题属性的最好地方是在WinMain函数里。
  WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
  {
  try{
  Application->Title = "";
  Application->Initialize();
  Application->CreateForm(__classid(TForm1), &Form1);
  Application->Run();
  }
  catch (Exception &exception)
  {
  Application->ShowException(&exception);
  }
  return 0;
  }
  另一种方法是:调用RegisterServiceProcess API 函数将程序注册成为一个服务模式程序。 RegisterServiceProcess是一个在Kernel32.dll里相关但无正式文件的函数。在MS SDK头文件里没有该函数的原型说明,但在Borland import libraries for C++ Builder里能找到。很显然,这个函数的主要目的是创建一个服务模式程序。之所以说很显然,是因为MSDN里实质上对这个函数没有说什么。
  下面的例子代码演示了在Windows95/98下怎样通过使用RegisterServiceProcess来把你的程序从CTRL-ALT-DEL对话框中隐藏起来。
  //------------Header file------------------------------
  typedef DWORD (__stdcall *pRegFunction)(DWORD, DWORD);
  class TForm1 : public TForm
  {
  __published:
  TButton *Button1;
  private:
  HINSTANCE hKernelLib;
  pRegFunction RegisterServiceProcess;
  public:
  __fastcall TForm1(TComponent* Owner);
  __fastcall ~TForm1();
  };
  //-----------CPP file------------------------------
  #include "Unit1.h"
  #define RSP_SIMPLE_SERVICE 1
  #define RSP_UNREGISTER_SERVICE 0
  __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
  {
  hKernelLib = LoadLibrary("kernel32.dll");
  if(hKernelLib){
  RegisterServiceProcess =(pRegFunction)GetProcAddress(hKernelLib,"RegisterServiceProcess");
  if(RegisterServiceProcess)
  RegisterServiceProcess(GetCurrentProcessId(),RSP_SIMPLE_SERVICE);
  }
  }
  __fastcall TForm1::~TForm1()
  {
  if(hKernelLib){
  if(RegisterServiceProcess)
  RegisterServiceProcess(GetCurrentProcessId(),RSP_UNREGISTER_SERVICE);
  FreeLibrary(hKernelLib);
  }
  }

上一页12345下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答