1. 程式人生 > >隱藏視窗和工作列圖示的實現

隱藏視窗和工作列圖示的實現

     網上也有這類小程式,用過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