隱藏視窗和工作列圖示的實現
網上也有這類小程式,用過2個都覺得不夠方便,所以就想著自己來實現一個。
功能:響應快捷鍵或者按鈕隱藏(顯示)包含關鍵字的視窗和工作列圖示,可設定隱藏關鍵字、設定快捷鍵、程式最小化到托盤。
主要包含以下幾個模組:
1. 設定和響應快捷鍵 2.設定關鍵字,列舉執行的視窗並隱藏之 3.程式最小化到托盤。 下面分別介紹一下程式的實現
1. 響應快捷鍵,最小化到托盤情況下響應全域性快捷鍵
設定就不提了。
a. .h中新增
afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
b.
ON_MESSAGE(WM_HOTKEY,OnHotKey)
c. 響應函式:
LRESULT CADA_HideTaskDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(HideTaskClass::m_Hide == TRUE)
{
gShowTaskBar();
HideTaskClass::m_Hide = FALSE;
}
else
{
gHideTaskBar();
HideTaskClass::m_Hide = TRUE;
}
return TRUE;
}
2. 列舉並隱藏視窗
a. 列舉視窗
EnumWindows(ADA_EnumWindowsProc,NULL);
b. 在列舉視窗函式內取得視窗名進行處理
BOOL CALLBACK ADA_EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
char * bTaskName;
int cTxtLen,i;
CString cTitle,strtmp;
//be sure the current window is visible
if(::GetWindowLong(hWnd,GWL_STYLE)& WS_VISIBLE)
{
//Get the task name
cTxtLen = ::GetWindowTextLength(hWnd);
bTaskName = (char *) VirtualAlloc((LPVOID) NULL,(DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE);
::GetWindowText(hWnd,bTaskName, cTxtLen + 1);
cTitle = bTaskName;
cTitle.MakeUpper();
for(i=0;i<HideTaskClass::m_HideString.GetSize();i++)
{
strtmp = HideTaskClass::m_HideString[i];
if(cTitle.Find(strtmp) >=0)
{
HideTaskClass::m_HideTaskTitle.Add(cTitle);
HideTaskClass::m_HideTaskCnt++;
}
}
}
return TRUE;
}
c. 隱藏找到匹配關鍵字的視窗
for(i=0;i<HideTaskClass::m_HideTaskTitle.GetSize();i++)
{
cTitle = HideTaskClass::m_HideTaskTitle[i];
CWnd* pWnd = CWnd::FindWindow(NULL, cTitle);
if( pWnd )
{
pWnd->ShowWindow(SW_HIDE);
HideTaskClass::m_Hide = TRUE;
}
}
d. 隱藏視窗
for(i=0;i<HideTaskClass::m_HideTaskTitle.GetSize();i++)
{
cTitle = HideTaskClass::m_HideTaskTitle[i];
CWnd* pWnd = CWnd::FindWindow(NULL, cTitle);
if( pWnd )
{
pWnd->ShowWindow(SW_HIDE);
HideTaskClass::m_Hide = TRUE;
}
}
3. 最小化到托盤
原理就是視窗隱藏,然後在托盤建立一個圖示
a. 最小化點選後呼叫函式
void CADA_HideTaskDlg::OnSysCommand(UINT nID, LPARAM lParam)下面加入:
if(nID==SC_MINIMIZE)
SendToTray(); //最小化到托盤的函式自定義
b. 加一個成員函式
void CADA_HideTaskDlg::SendToTray()
{
NOTIFYICONDATA nid;//定義托盤圖示資訊
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDI_HT;// 圖示名
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//圖示點選之後的自定義訊息名稱
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_HT));
strcpy(nid.szTip,"HideTask");//圖示資訊提示條
Shell_NotifyIcon(NIM_ADD,&nid);//在托盤區新增圖示
ShowWindow(SW_HIDE);//隱藏程式視窗
}
c. 設定message
#define WM_SHOWTASK (WM_USER +1)
-------以下是雙擊圖示重新顯示程式---------
d. 定義訊息處理成員函式
afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);
e.新增message map
ON_MESSAGE(WM_SHOWTASK,OnShowTask)
f.訊息響應
LRESULT CADA_HideTaskDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
{
if(wParam!=IDI_HT)
return 1;
switch(lParam)
{
case WM_RBUTTONUP: //右鍵起來時彈出快捷選單
{
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint); //得到滑鼠位置
CMenu menu;
menu.CreatePopupMenu(); //宣告一個彈出式選單
//增加選單項“關閉”,點選則傳送訊息WM_CLOSE給主視窗(已隱藏),將程式結束。
menu.AppendMenu(MF_STRING,ID_APP_EXIT,"關閉程式");
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);//確定彈出式選單的位置
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
delete lpoint;
}
break;
case WM_LBUTTONDBLCLK: //雙擊左鍵的處理
{
this->ShowWindow(SW_SHOW);
DeleteTray();
}
break;
default:
break;
}
return 0;
}
void CADA_HideTaskDlg::DeleteTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDI_HT;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK; //自定義的訊息名稱
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_HT));
strcpy(nid.szTip,"HideTask");
Shell_NotifyIcon(NIM_DELETE,&nid); //在托盤區刪除圖示
}
以上是實現隱藏視窗和工作列圖示的幾個重要功能塊。將會將可執行的exe檔案放到CSDN的下載頻道中。歡迎討論
相關推薦
隱藏視窗和工作列圖示的實現
網上也有這類小程式,用過2個都覺得不夠方便,所以就想著自己來實現一個。 功能:響應快捷鍵或者按鈕隱藏(顯示)包含關鍵字的視窗和工作列圖示,可設定隱藏關鍵字、設定快捷鍵、程式最小化到托盤。 主要包含以下幾個模組: 1. 設定和響應快捷鍵 2.設
隱藏視窗的工作列圖示
利用WS_EX_TOOLWINDOW這個屬性,將視窗設定為工具視窗 隱藏工作列圖示 //不在工作列顯示 LONG styleValue = ::GetWindowLong(m_hWnd, G
利用ITaskbarList介面隱藏視窗在工作列上的顯示.
這種方法實際上是利用COM提供的ITaskbarList介面來實現的,在這裡寫個函式來完成這項工作. 注意:在用該函式之前必需初始化COM庫. BOOL ShowInTaskbar(HWND hWnd, BOOL bShow){ HRESULT hr; ITas
VC 重新整理桌面圖示和工作列圖示
重新整理工作列圖示: SHChangeNotify(SHCNE_ASSOCCHANGED ,SHCNF_IDLIST ,NULL, NULL); 重新整理桌面圖示: int
windows/mfc實現視窗隱藏同時 在工作列上無圖示顯示功能
當實現窗體隱藏時,同時讓工作列隱藏大多直接改變樣式就行 只需要執行 ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW); 但是 在實際效果中,該方法
QML 視窗失去焦點、工作列圖示隱藏
1.視窗失去焦點隱藏 對於ApplicationWindow使其失去焦點隱藏,通過以下即可: ApplicationWindow { id: root onActiveFocusItemChanged: { if (!activeFocusItem) {
隱藏視窗工作列圖示的三種方法
本文介紹三種方法,可以實現隱藏視窗在工作列中的圖示。其中前兩種比較坑爹,不建議使用。 轉載: 方法1: ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW); 為視窗設定WS_EX_TOOLWINDOW屬性。會有以下效
qt關於一些托盤,工作列圖示隱藏,無邊框等的一些視窗的效果
現在用到的挺多的軟體基本都需要實現到這些個的功能。 1.對於無邊框透明的視窗,其實兩個設定兩句話就搞定了 setAttribute(Qt::WA_TranslucentBackground); setWindowFlags(Qt::FramelessWindowHint);
怎樣在pb裡實現無標題欄 如何使PB視窗總在最上層 顯示或隱藏Windows的工作列
1. pb裡實現無標題欄 api解決: SetWindowLong(Handle, // 當前窗體控制代碼 GWL_STYLE, // 表示當前是要設定新的窗體(普通)樣式
基於對話方塊的MFC程式中,實現非模態子視窗在工作列顯示圖示以及視窗左上角加圖示
在基於對話方塊的MFC程式中為了使子視窗同父視窗一樣在工作列顯示圖示,並且在子視窗最小化時可以在工作列顯示圖示,可以在子視窗的OnInitDialog函式中呼叫函式ModifyStyleEx進行修改視窗的樣式實現具體程式碼為: ModifyStyleEx(WS_EX_TOO
如何隱藏QT視窗在工作列(taskbar)的任務圖示
#include <QtGui/QApplication> #include <QDockWidget> #include <QWidget> int main(int argc, char *argv[]) { QAppli
TABLE CONTROL隱藏列和固定列的實現
、設定固定列 需求:為了方便對主要關心資訊地檢視,使用者希望TABLE CONTROL左邊的一列或者幾列在螢幕上固定。針對使用者這樣子的需求, 我們首先會想到類似與螢幕編輯/可見等欄位屬性設定,但是此方法行不通。解決方法:通過設定Table Control自帶的屬性,定義最左邊的某些列不可滾
關於MFC程式中隱藏工作列圖示的問題
前幾天有個MFC對話方塊程式,有個隱藏工作列圖示的功能需求,就在網上搜了搜,發現基本上都是這一句: ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);也就是修改視窗的擴充套件風格,去掉APPWINDOW屬性,新增TO
MFC對話方塊程式啟動的時候直接隱藏、在工作列不顯示圖示
2011-06-19 以前做一個專案,要求程式啟動的時候主對話方塊是隱藏的。當時不知道怎麼做,修改視窗風格、視窗類、OnInitDialog裡ShowWindow、Create函式、WM_CREATE訊息、PreCreateWindow等等都嘗試了,沒什麼用,相當鬱悶。後來有
duilib隱藏(顯示)工作列圖示方式
//隱藏工作列方式 //其中m_hWnd為當前視窗控制代碼 void hide_task_bar() {DWORD dwExStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);dwExStyle ^= WS_EX_TOOLWINDOW;Se
VC 隱藏工作列,實現對話方塊的全屏顯示
這裡我選用實現對話方塊的全屏的方案是: 1 隱藏工作列 2 將對話方塊最大化顯示並且去掉標題欄 一 單獨隱藏工作列,很容易實現 缺陷:隱藏後任務欄所佔據的空間還是沒有騰出來 程式碼如下:HWND hWnd;hWnd = FindWindow("Shell_TrayWnd"
MFC對話方塊初始化執行時如何隱藏,托盤圖示,工作列圖示的相關問題
花了兩三天在搞這些啊,順便看了看MFC對話方塊的機制。 一、托盤圖示 1. 新增托盤訊息定義;在dlg類中新增變數,托盤訊息響應函式的宣告;在dlg類的cpp中手動新增托盤訊息對映 #define WM_NOTIFYICON WM_USER+5 NOTIFYICON
C#實現無標題欄窗體點選工作列圖示正常最小化或還原的解決方法
對於無標題欄窗體,也就是FormBorderStyle等於System.Windows.Forms.FormBorderStyle.None的窗體,點選工作列圖示的時候,是不能象標準窗體那樣最小化或還原的。把下面的程式碼加到你的Form實現類中,即可實現點選工作列圖示正常最小
swing 自定義最小化按鈕後,實現點選工作列圖示,使窗體重新顯示
jf.setUndecorated(true); // 去掉視窗的裝飾 jf.getRootPane().setWindowDecorationStyle(JRootPane.NONE)
wpf C#編寫最小化時隱藏為工作列圖示的Window appllication.
設定窗體屬性showinTaskbar=false WindowState ws; WindowState wsl; NotifyIcon notifyIcon; #region Constructionspublic M