日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

模拟ctrl+alt+delete三键

發布時間:2025/3/15 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟ctrl+alt+delete三键 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我們編寫遠程控制軟件的時候,我們會發現要想解鎖server端我們就得發送這三個鍵的虛擬。

下面我說一下解決過程

1.一開始,決定通過keybd_event()來模擬鍵盤

?keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);????? keybd_event(VK_MENU,MapVirtualKey(VK_MENU,0),0,0);????? keybd_event(VK_DELETE,MapVirtualKey(VK_DELETE,0),0,0);??????? keybd_event(VK_DELETE,MapVirtualKey(VK_DELETE,0),KEYEVENTF_KEYUP,0);???? keybd_event(VK_MENU,MapVirtualKey(VK_MENU,0),KEYEVENTF_KEYUP,0);????? keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0); 發現只能模擬ctrl+alt兩個鍵的效果,然而其他的兩個鍵的都可以模擬比如win+d。不知道是不是keybd_event()只能模擬兩鍵還是因為ctrl+alt+delete的特殊性,望高手告之,在此謝過。

2.運用PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, MAKELONG(MOD_ALT | MOD_CONTROL, VK_DELETE));來發送虛擬鍵盤,但是在winNT以后的系統里我們還有很多事情要做,比如:OpenDesktop()、OpenInputDesktop()、GetThreadDesktop()、SetThreadDesktop()、CloseDesktop()、GetUserObjectInformation()

代碼如下:

#include "windows.h"BOOL simulateAltControlDel();void main(){??? simulateAltControlDel();}BOOL simulateAltControlDel(){??? HDESK?? hdeskCurrent;??? HDESK?? hdesk;??? HWINSTA hwinstaCurrent;??? HWINSTA hwinsta;??? //???? // Save the current Window station??? //???? hwinstaCurrent = GetProcessWindowStation();??? if (hwinstaCurrent == NULL)??????? return FALSE;??? //???? // Save the current desktop??? //???? hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());??? if (hdeskCurrent == NULL)??????? return FALSE;??? //???? // Obtain a handle to WinSta0 - service must be running??? // in the LocalSystem account??? //???? hwinsta = OpenWindowStation("winsta0", FALSE,????????????????????????????? WINSTA_ACCESSCLIPBOARD?? |????????????????????????????? WINSTA_ACCESSGLOBALATOMS |????????????????????????????? WINSTA_CREATEDESKTOP???? |????????????????????????????? WINSTA_ENUMDESKTOPS????? |????????????????????????????? WINSTA_ENUMERATE???????? |????????????????????????????? WINSTA_EXITWINDOWS?????? |????????????????????????????? WINSTA_READATTRIBUTES??? |????????????????????????????? WINSTA_READSCREEN??????? |????????????????????????????? WINSTA_WRITEATTRIBUTES);??? if (hwinsta == NULL)??????? return FALSE;??? //???? // Set the windowstation to be winsta0??? //???? if (!SetProcessWindowStation(hwinsta))???? return FALSE;

??? //???? // Get the default desktop on winsta0??? //???? hdesk = OpenDesktop("Winlogon", 0, FALSE,??????????????????????? DESKTOP_CREATEMENU |????????????? DESKTOP_CREATEWINDOW |??????????????????????? DESKTOP_ENUMERATE??? |??????????????????????? DESKTOP_HOOKCONTROL? |??????????????????????? DESKTOP_JOURNALPLAYBACK |??????????????????????? DESKTOP_JOURNALRECORD |??????????????????????? DESKTOP_READOBJECTS |??????????????????????? DESKTOP_SWITCHDESKTOP |??????????????????????? DESKTOP_WRITEOBJECTS);??? if (hdesk == NULL)?????? return FALSE;

??? //???? // Set the desktop to be "default"??? //???? if (!SetThreadDesktop(hdesk))?????? return FALSE;??? PostMessage(HWND_BROADCAST,WM_HOTKEY,0,MAKELPARAM(MOD_ALT|MOD_CONTROL,VK_DELETE));

??? //???? // Reset the Window station and desktop??? //???? if (!SetProcessWindowStation(hwinstaCurrent))?????? return FALSE;

??? if (!SetThreadDesktop(hdeskCurrent))??? return FALSE;

??? //???? // Close the windowstation and desktop handles??? //???? if (!CloseWindowStation(hwinsta))??????? return FALSE;??? if (!CloseDesktop(hdesk))??????? return FALSE;??? return TRUE;}

偶一開始試驗了發現不成功,后來冰河大哥告訴我說OpenDesktop("Winlogon", ......)本身需要LocalSystem權限,果然如此,把它注冊成服務,然后效果實現。相信如何注冊成服務不用我說了吧。ok,我們想要的功能實現了。

3.還有一種方法Dos下鍵盤的完全控制 ------- 一系列的BIOS級別的鍵盤控制函數!我沒有試驗,不知道可否,哪位大哥試驗后告訴我一聲

在此再次感謝黃鑫大哥!!

總結

以上是生活随笔為你收集整理的模拟ctrl+alt+delete三键的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。