前段時間,微軟發(fā)布了Win11系統(tǒng),目前大部分用戶還無法使用,其實Win10也挺好用的,今天大家?guī)鞼indows 10系統(tǒng)隱藏的6個實用功能,你一定要知道。
一、夜間模式
首先按下「Win+I」打開Windows設置,點擊「系統(tǒng)」-「顯示」,開啟夜間模式,會讓屏幕顏色變暖,可以持調節(jié)強度、定時開啟關閉。
返回到Windows設置,點擊「個性化」-「顏色」,設置為“深色”,這樣Windows自帶的應用就會變成黑色背景,特別適合夜間使用。
二、花式截圖
如果你的電腦上沒有微信、扣扣,你會如何截圖?其實用Win10自帶截屏工具,同時按住「Win+Print」,屏幕一閃而過,整個屏幕將被截取。
你也可以按下「Win+Shift+S」,會自動彈出截圖窗口,有矩形截圖、任意形狀截圖、窗口截圖、全屏幕截圖,截出來的畫質非常高!
三、虛擬桌面
我們在辦公時,打開了很多窗口,來回切換都要找好久,特別影響工作效率,我們可以按下「Win+Tab」,打開任務視圖模式,所有窗口一目了然。
另外我們可以點擊「新建桌面」,創(chuàng)建多個虛擬桌面,相當于在另一臺電腦上辦公,這樣就能夠避開凌亂的桌面,提高你的工作效率。
四、游戲錄制
打開Windows設置面板,點擊「游戲」-「游戲欄」,開啟后面的錄制功能。以后需要錄屏,直接按下快捷鍵「Win+G」,就能快速打開Win10自帶的錄屏工具。
但是只能全屏錄制,如果想錄制指定區(qū)域,還得用專業(yè)的錄屏工具,比如我電腦上一直用的「迅捷屏幕錄像工具」,可以選擇多種錄制模式。
五、視頻剪輯
很多新手還在學Pr剪輯,其實Win10就自帶視頻剪輯功能,操作更加簡單。在桌面左下角的搜索框中,找到「視頻編輯器」并打開。
將視頻添加進去,拖動到下方就能編輯,比如添加背景音樂、動態(tài)字幕、轉場特效等,可以滿足基礎的剪輯工作了。
六、自動清理
有些朋友可能不喜歡第三方清理軟件,但每次手動刪除又太麻煩了,你只需要打開Windows設置,找到「系統(tǒng)」-「儲存」,開啟儲存感知,它就會自動清理垃圾。
還可以進行設置,比如每周自動清理一次,回收站和下載的文件,30天或60天刪除一次,順便在這里給電腦清理一下。
結束語:
謝謝你看到了這里!如果你覺得還不錯,可以通過點贊告訴我哦。更多實用的干貨技巧,盡在「職場科技范」。
以上就是Windows 10系統(tǒng)隱藏的6個實用功能,你一定要知道哦!
在使用某搶票軟件的時候,由于要設置搶票成功后的通知,就用了QQ通知。結果發(fā)現當QQ在鎖定時,也可以獲取到QQ的控制面板進行操作,竟然繞過了QQ的鎖定,于是就去嘗試如何實現QQ鎖定的繞過。
情景還原
首先演示一下如何使用搶票軟件進行QQ鎖定的繞過。這里以最新版本9.0.7 ( 24121 ) 為例。下載后正常安裝。
安裝后查看版本。
將QQ鎖定,然后打開軟件,選擇QQ通知,點擊“獲取聊天窗口”,此時會進行QQ窗體的加載,然后在“要發(fā)送的窗口”下拉框會顯示一個隨機字符串,點擊“測試發(fā)送”按鈕,會發(fā)現QQ控制面板彈出。
而且是可以進行未鎖定前的所有功能。如發(fā)送和接收消息,如圖所示。
實現過程
剛開始的想法是首先獲取QQ窗口的句柄,然后再利用句柄進行顯示與隱藏。
嘗試一
這里采用的是精易編程助手來獲取句柄,當qq處于非鎖定狀態(tài),獲取QQ窗體句柄后,可以利用句柄對QQ進行隱藏或顯示,即使把QQ鎖定,也可以進行隱藏或者顯示。
但是當QQ隱藏后,此時再獲取句柄后,無法繞過QQ的鎖定。這時候獲取的句柄為QQ鎖定狀態(tài)的句柄。
該方法只能對未鎖定的QQ進行操作,鎖定后就無法獲取控制面板句柄了,因此該方法行不通。
嘗試二
放棄了精易編程助手,采用更專業(yè)的工具spy++。找到句柄后發(fā)現標題為一串隨機的字符串,與搶票工具獲取聊天窗口中標題一樣。
猜測需要最終需要獲取的句柄就是這個,句柄對應的十六進制為504BE,然后調用windowsapi進行窗口的顯示和隱藏。
顯示窗口ShowWindow (句柄, 1),隱藏窗口ShowWindow (句柄, 0)。
效果如圖所示。
這樣雖然能夠滿足,但是卻不夠智能,無法自動獲取句柄,需要借助其他工具去尋找句柄,因此放棄。
嘗試三
本次測試中走了兩條“彎路”,在這里簡要說明一下,就不再附詳細的過程了。某次發(fā)現使用
臨時_句柄=FindWindowA (“TXGuiFoundation”, “TXMenuWindow”)
句柄=窗口_取父句柄 (窗口_取父句柄 (臨時_句柄))
或者
臨時_句柄=FindWindowA (“TXGuiFoundation”, “”)
句柄=窗口_取父句柄 (臨時_句柄)
可以獲取到QQ鎖定時控制面板的句柄。如圖所示
但這些只是概率事件,多數情況下還是不行的。即使可以使用這兩種方法,但是這兩種方法獲取的都是一個句柄,當有兩個QQ時,就無法同時獲取兩個句柄了,所以該方法不可取。
由于QQ處于鎖定時,窗口標題為隨機的字符串,所以無法使用FindWindowA這種方法了。
嘗試四之最終實現
此時想到另外一個思路,遍歷屏幕上所有的頂層窗口,然后根據條件進行篩選。
這里用的Java來實現,操作Windows API采用了JNA 。
JNA的全稱是Java Native Access,你只要在一個java接口中描述本地庫中的函數與結構, JNA將在運行期動態(tài)訪問本地庫,自動實現Java接口到本地庫函數的映射。
使用maven加入所需的依賴。
<dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.1.0</version> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>5.1.0</version> </dependency>
枚舉屏幕上所有的頂層窗口采用的是EnumWindows 。
booleanEnumWindows(WinUser.WNDENUMPROC lpEnumFunc,Pointer data)
該函數枚舉屏幕上所有的頂層窗口,并將窗口句柄傳送給應用程序定義的回調函數。回調函數返回FALSE將停止枚舉,否則EnumWindows函數繼續(xù)到所有頂層窗口枚舉完為止。
參數:lpEnumFunc - 指向應用程序定義的回調函數的長指針。
參數:data - 指定要傳遞給回調函數的應用程序定義的值。
代碼實現如下:
User32.INSTANCE.EnumWindows(new WinUser.WNDENUMPROC() { publicbooleancallback(WinDef.HWNDhwnd, Pointerpointer) { System.out.println(hwnd); returntrue; } },null);
此時獲取的時所有頂層窗口的句柄,剩下的就是去如何進行過濾,留下所需的句柄。
通過對比發(fā)現,可以用窗口樣式進行區(qū)分。當QQ鎖定時(或QQ未鎖定且最小化時),對應的窗口樣式為860C0000(十進制為2248933376)。
下面為QQ鎖定時的樣式。
通過查詢API,可以用User32.INSTANCE.GetWindowLongPtr(hwnd,User32.GWL_STYLE)來獲取窗口樣式。然后通過這種方法進行過濾,當該值為2248933376,則認為對應的hwnd為QQ控制面板的句柄。
主要代碼如下:
User32.INSTANCE.EnumWindows(new WinUser.WNDENUMPROC() { public boolean callback(WinDef.HWND hwnd, Pointer pointer) { if(User32.INSTANCE.GetWindowLongPtr(hwnd,User32.GWL_STYLE).longValue()==2248933376L){ System.out.println(hwnd); } return true; } },null);
可以看到成功獲取了QQ鎖定時控制面板的句柄。有了句柄,就可以進行之前的操作了,如顯示與隱藏。
當QQ未鎖定時,QQ彈出時對應的窗口樣式為960c0000(十進制為2517368832)。
此時就可以先通過EnumWindows枚舉所有的窗口,然后再使用GetWindowLongPtr(hwnd,User32.GWL_STYLE)獲取窗口樣式進行匹配,匹配到所需的窗口。
這里將QQ鎖定和未鎖定的情況都考慮進去,然后獲取QQ控制面板的句柄。之后通過GetWindowText獲取窗口的標題,再使用ShowWindow進行隱藏與顯示操作。主要代碼如下:
public static void main(String[] args) throws Exception{ List<WinDef.HWND> lt = getQQHwnds(); for (WinDef.HWND hwnd:lt) { char[] titleBuffer = new char[512]; User32.INSTANCE.GetWindowText(hwnd,titleBuffer,512); System.out.println(new String(titleBuffer)); User32.INSTANCE.ShowWindow(hwnd,1);//顯示 Thread.sleep(2000); User32.INSTANCE.ShowWindow(hwnd,0);//隱藏 Thread.sleep(2000); User32.INSTANCE.ShowWindow(hwnd,1);//顯示 Thread.sleep(2000); } } public static List<WinDef.HWND> getQQHwnds(){ final List<WinDef.HWND> lt = new ArrayList<WinDef.HWND>(); User32.INSTANCE.EnumWindows(new WinUser.WNDENUMPROC() { public boolean callback(WinDef.HWND hwnd, Pointer pointer) { if(User32.INSTANCE.GetWindowLongPtr(hwnd,User32.GWL_STYLE).longValue()==2517368832L||User32.INSTANCE.GetWindowLongPtr(hwnd,User32.GWL_STYLE).longValue()==2248933376L){ lt.add(hwnd); } return true; } },null); return lt; }
首先獲取到QQ控制面板的句柄,然后依次獲取其標題,并進行顯示-隱藏-顯示等過程。效果如圖所示。
這種成功實現了QQ鎖定時自動獲取控制面板句柄,實現了QQ鎖定的繞過。而且有多個QQ時,都可以獲取其句柄。
總結
在一次偶然的情況下可以繞過QQ鎖定,于是就進行了嘗試,走了一些彎路,最終實現了這種效果。主要過程就是獲取所有頂層窗口句柄-根據窗口樣式匹配到QQ控制面板的句柄-使用ShowWindow進行顯示。也許這不是最佳的解決方法。如果大家有更好的方法或者建議,歡迎分享。
參考
[1]https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-getwindowlonga
[2]https://java-native-access.github.io/jna/4.2.0/com/sun/jna/platform/win32/User32.html#EnumWindows-com.sun.jna.platform.win32.WinUser.WNDENUMPROC-com.sun.jna.Pointer-
*本文作者:浮萍&獵戶攻防實驗室