視窗置頂 仿TopWind

2022-07-25 05:18:06 字數 2460 閱讀 4303

前置學習:低階滑鼠hook,獲得滑鼠狀態。

這個在原來獲得滑鼠狀態的基礎上,加上乙個事件處理即可。

topwind就是乙個可以置頂視窗的檔案,避免複製貼上的時候的來回切換(大視窗與小視窗),算是乙個實用的工具(至少我蠻喜歡的),所以自己就仿造了寫了乙個,利用之前的那個滑鼠hook。

介面如圖所示,可以看到是置頂和恢復。

兩個函式:

//置頂

isok =::setwindowpos(

hwnd, hwnd_topmost,

0, 0, 0, 0, swp_nomove | swp_nosize);

//恢復

isok =::setwindowpos(

hwnd, hwnd_notopmost,

0, 0, 0, 0, swp_nomove | swp_nosize);

函式:setwindowpos

函式原型:winuserapi bool winapi setwindowpos(hwnd hwnd,hwnd hwndinsertafter,int x,int y,int cx,_in_ int cy, uintuflags);

引數:hwnd

在z序中的位於被置位的視窗前的視窗控制代碼。該引數必須為乙個視窗控制代碼

hwndlnsertafter

用於標識在z-順序的此 cwnd 物件之前的 cwnd 物件。如果uflags引數中設定了swp_nozorder標記則本引數將被忽略。可為下列值之一:

檢視該引數的使用方法,請看說明部分。

x以客戶座標指定視窗新位置的左邊界。

y以客戶座標指定視窗新位置的頂邊界。

cx以畫素指定視窗的新的寬度。

cy以畫素指定視窗的新的高度。

uflags

視窗尺寸和定位的標誌。該引數可以是下列值的組合:

swp_asyncwindowpos:如果呼叫程序不擁有視窗,系統會向擁有視窗的執行緒發出需求。這就防止呼叫執行緒在其他執行緒處理需求的時候發生死鎖。

swp_defererase:防止產生wm_syncpaint訊息。

swp_drawframe:在視窗周圍畫乙個邊框(定義在視窗類描述中)。

swp_framechanged:給視窗傳送wm_nccalcsize訊息,即使視窗尺寸沒有改變也會傳送該訊息。如果未指定這個標誌,只有在改變了視窗尺寸時才傳送wm_nccalcsize。

swp_hidewindow;隱藏視窗。

swp_noactivate:不啟用視窗。如果未設定標誌,則視窗被啟用,並被設定到其他最高端視窗或非最高端組的頂部(根據引數hwndlnsertafter設定)。

swp_nocopybits:清除客戶區的所有內容。如果未設定該標誌,客戶區的有效內容被儲存並且在視窗尺寸更新和重定位後拷貝回客戶區。

swp_nomove:維持當前位置(忽略x和y引數)。

swp_noownerzorder:不改變z序中的所有者視窗的位置。

swp_noredraw:不重畫改變的內容。如果設定了這個標誌,則不發生任何重畫動作。適用於客戶區和非客戶區(包括標題欄和滾動條)和任何由於窗回移動而露出的父視窗的所有部分。如果設定了這個標誌,應用程式必須明確地使視窗無效並區重畫視窗的任何部分和父視窗需要重畫的部分。

swp_noreposition:與swp_noownerzorder標誌相同。

swp_nosendchanging:防止視窗接收wm_windowposchanging訊息。

swp_nosize:維持當前尺寸(忽略cx和cy引數)。

swp_nozorder:維持當前z序(忽略hwndlnsertafter引數)。

swp_showwindow:顯示視窗。

增加功能的**:

1

if (wparam ==wm_lbuttondown)212

1314

15tchar title[max_path];

16::getwindowtext(hwnd, title, max_path);

1718

1920

if (__isdo ==true)

2136

else

374142}

43else

444849}

50else

5162

else

636768}

69else

707475}

76stophook();

77 }

就是獲得滑鼠點選的hwnd,然後因為不一定是點選的父視窗,所以就尋找他的父視窗,必須尋找到父視窗之後方可以置頂。

所以其中注意要寫上:

1

//獲得父視窗

2while

(::getparent(hwnd))

3

來獲取父視窗,其他的基本和之前寫的mousehook一致,附上源**。

github鏈結

視窗置頂 取消置頂工具

include pragma comment linker,subsystem windows int winapi winmain hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,int icmdshow setwindowp...

解析Delphi 視窗置頂,及非主視窗置頂

方法一 方法二 視窗置頂 setwindowpos self.handle,hwnd topmiost,0,0,0,0,swp nomove or swp nosize 視窗置頂 setwindowpos self.handle,hwnd notopmiost,0,0,0,0,swp nomove ...

視窗置頂器 TopWindow

n年前寫的陳年老物。但是卻很有用 最近改進下,不用全域性鉤子了,用全域性熱鍵。對管理員許可權建立的程式視窗,本程式也需要管理員許可權才能對其操作 ctrl f2 置頂當前啟用視窗 ctrl f3 取消置頂當前啟用視窗 結束程式請用任務管理器強制結束 天翼雲貌似分享功能炸了,按了沒反應 果然還是 gi...