控制台怎么写托盘程序( 二 )


void __fastcall TForm1::OKButtonClick(TObject *Sender) { Form1->Visible=false; ShowWindow(Application->Handle,SW_HIDE); Application->ShowMainForm=false; }//--------------------------------------------------------------------------- void __fastcall TForm1::CancelButtonClick(TObject *Sender) { Application->Terminate(); } 最后,在WinMain函数中增加两行代码以便程序在开始运行时就隐藏主窗体 。WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); ShowWindow(Application->Handle,SW_HIDE); Application->ShowMainForm=false; Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } 程序在C++ Builder 4 与Windows 98 环境下编译运行通 。
2.VC中怎样建立一个只有系统托盘的程序其实这个建立的过程很简单,与系统托盘通信的函数只有一个:Shell_NotifyIcon(DWORD dwMessage ,PNOTIFYICONDATA pnid) 。
第一个参数dwMessage 的取值有NIM_ADD 、NIM_MODIFY及NIM_DELETE 。第二个参数pnid 是NOTIFYICONDATA 结构体一个指针,结构体内容用来配合第一个参数dwMessage进行图标操作 。
下面的程序,将AddSystemTrayIcon( )放到OnPaint( )下增加一个系统托盘图标,在OnDestroy或OnClose中调用DeleteSystemTrayIcon( )来删除这个系统托盘图标 。
BOOL AddSystemTrayIcon()
{
HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICONTRAY);
char lpszTip[]="Text Spy"; //提示信息
//给NOTIFYICONDATA 结构赋值
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hIcon = hIcon;
tnid.uID = IDI_ICONTRAY;
tnid.hWnd = m_hWnd;
tnid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnid.uCallbackMessage = WM_TASKBAR; //可以写OnTaskBar(WPARAM wParam,LPARAM lParam)函数来处理收到的消息
lstrcpyn(tnid.szTip,lpszTip,sizeof(tnid.szTip));
// lstrcpy(tnid.szTip,"Text Spy");
// ShowWindow(SW_HIDE);
return Shell_NotifyIcon(NIM_ADD,&tnid);
}
【控制台怎么写托盘程序】BOOL DeleteSystemTrayIcon()
{
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.uID = IDI_ICONTRAY;
tnid.hWnd = m_hWnd;
return Shell_NotifyIcon(NIM_DELETE,&tnid);
}
LRESULT OnTaskBar(WPARRM wParam,LPARAM lParam)//WM_TASKBAR消息的响应函数
{
UINT uMouseMsg = (UINT)lParam;
switch(uMouseMsg)
{
case WM_LBUTTONDOWN:
ShowWindow(SW_SHOWNORMAL);
break;
case WM_RBUTTONUP;
MessageBox("The mouse rightkey !");
break
}
return 0;
}
3.C#如何编写调用控制台命令的语句你可以把这篇文定义为一篇蛋疼的回答,应为这个东西不怎么实用,还费神,没事折腾这做什么 。
恩,的确,蛋疼 。我也同意,就算蛋疼也有它的小众范围,当你不想做webservers,winform等,就想蛋疼的拿控制台来做服务,做程序,行吗?行,但是控制台一点关闭就退出了,有时会点错,控制台没有托盘图标,想最小化到托盘图标等,还有什么蛋疼的想法,来吧,让我们来实现他们 。
需要了解:console application是控制台程序 。控制台不是winform,我们不能设置它的关闭事件等 。
控制台虽然可以通过添加引用来增加托盘图标,但是托盘图标没有事件 。哇,怎么都是不能,那不是不能实现 。
所以你还需要了解:我们可以通过引用外部dll的api来捕获到关闭事件等 。我们可以给控制台添加消息事件循环来捕获事件响应让托盘图标可以触发事件 。
那么我们的思路是:禁用关闭按钮,让用户在控制台输入exit进行退出,当控制台被其他事件关闭时可以进行处理 。用Application.DoEvents()来捕获消息事件处理,但是要用死循环来控制,那么我们怎么监听输入呢?我们在开一个线程用来监听输入 。