用過一些日曆軟體的小夥伴應該都知道它們都實現了在時鐘視窗上的hook,也就是遮蔽了系統原有的功能,實現自己的功能
某日曆軟體hook時鐘視窗後的效果
// 儲存模組控制代碼,釋放dll時需要用到
static hmodule glibmodule = 0;
// 用於儲存時鐘視窗原始處理過程,dll解除安裝時應該還原
static long_ptr goldwndproc = 0;
// 查詢時鐘視窗控制代碼
static hwnd findclockwindow()
}return 0;
}static dword winapi freeself(lpvoid param)
static void restorewndproc()
// 新的視窗處理過程,核心工作都在這裡
lresult callback clockwndproc(hwnd hwnd, uint umsg, wparam wparam, lparam lparam)
// 處理滑鼠右擊事件,這裡我們解除安裝dll(自身)
if (umsg == wm_rbuttonup)
return wndproc(goldwndproc)(hwnd, umsg, wparam, lparam);
}bool apientry dllmain(hmodule hmodule, dword ul_reason_for_call, lpvoid lpreserved)
}break;
}case dll_process_detach:
}return true;
}經過一番研究,發現原理其實很簡單,就是注入dll到時鐘視窗程序(explorer.exe),然後接管視窗處理過程實現自己的功能
第一步是判斷當前作業系統架構,是x86還是x64,你別指望乙個x64的explorer.exe會載入你x86的dll
第二步就是查詢時鐘視窗的程序(explorer.exe)
然後根據系統架構的不同注入不同架構的dll,至於怎麼注入我這裡就不講了,這個網上搜尋一下有太多文章
下面直接給出dll完整**,vs2013 + win7 x64 編譯測試通過
以上**實現了處理滑鼠左擊和右擊的邏輯,為了展示實現原理所以沒有實現複雜的功能,如果你願意,可以在上面繪圖、建立右鍵選單甚至視窗等。工作列多視窗重疊
windowsxp並不像win7工作列視窗有那麼好的靈活性。太多視窗,冗餘於工作列,看著會很煩。如何解決?右鍵點選xp工作列 屬性 分組相似工作列按鈕,這個選項框勾上。這樣的話的確是會重疊視窗,但是系統預設引數是視窗達到8個以上才會重疊相似視窗,8個視窗已經充滿工作列,看著也會很多 很煩,只需要設定...
隱藏工作列
我有乙個隱藏工作列的程式,你看看你是否用得著。mobile sdk6410下的控制台程式 由於工作列擋住了我要用的除錯工具,所以要關掉,等我不要,在開啟。如果你想一直開啟,下面的 稍微改一下就能實現了。include include int tmain int argc,tchar argv whi...
工作列托盤
要實現系統托盤,就要認識notifyicondata結構體,如下 typedef struct notifyicondata tchar szinfotitle 64 指向乙個以 0結束的字串的指標。字串的內容為氣球提示的標題 dword dwinfoflags 設定此成員用來給氣球提示框增加乙個圖...