簡體   English   中英

在沒有管理員權限的情況下從桌面應用訪問OSK(屏幕鍵盤)句柄

[英]Access OSK(on screen keyboard) handle from desktop app without administrator rights

我有一個在Windows 7和8上沒有管理員權限運行的桌面delphi應用程序。該應用程序需要將(SendInput)鼠標事件(單擊並移動)發送到另一個正在運行的應用程序。 此應用程序的工作方式類似於遠程wifi筆的驅動程序,可控制鼠標移至桌面。 當焦點位於OSK(在屏幕鍵盤上)上時,鼠標按下左鍵移動不起作用,osk窗口不移動,所有其他應用程序在收到這些mouve事件時都移動。 我可以處理OSK。 當我以管理員權限(UAC)運行我的應用程序時,一切正常,當應用程序發送Mouve Envets時,OSK移動。 我認為該問題與UAC有關。 我找到了一種繞過UAC的方法,例如http://www.thewindowsclub.com/create-elevated-shortcut-run-programs-bypass-uac ,但在某些環境中並不是一個好主意。 有沒有一種方法可以繞過UAC而無需地下方法? 或者如何強制OSK對發送給他的所有鼠標事件做出響應。


這是嵌入在Osk.exe中的清單的一個片段:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level="asInvoker" uiAccess="true"/>
    </requestedPrivileges>
  </security>
</trustInfo>

需要注意的level ,它要求,asInvoker 要求UAC提升,只有requireAdministrator一樣。 換句話說,它以啟動程序具有的任何特權運行。 您可以說,啟動Osk.exe時沒有得到同意提示

此處重要的是uiAccess 將其設置為true時 ,程序將繞過UIPI。 UAC鮮為人知的雙胞胎用戶界面特權隔離通過不允許另一個進程將鍵盤敲擊和鼠標單擊戳入高架應用程序所擁有的窗口中來防止遭受破壞攻擊。 這樣的過程仍在高完整性模式下運行,這就是為什么您不能自己戳入Osk,但沒有啟用使UAC提升的應用程序變得危險的特權。

這並不罕見,大多數使用UI自動化或提供可訪問性功能的程序都必須能夠做到這一點。 與Osk.exe一樣,它需要能夠將擊鍵擊入任何應用程序。 顯然,您也想做什么。

獲取uiAccess不需要用戶像UAC提升一樣同意提示。 操作系統必須“信任”您。 MSDN這篇文章的 “用於UI自動化應用程序的UIAccess”一節中對此進行了很好的介紹。 我在這里總結一下:

  • 在應用清單中設置uiAccess =“ true”
  • 您的可執行文件必須具有有效的數字證書,即您從Verisign等供應商處購買的證書。
  • 您的可執行文件必須存儲在c:\\ program文件或c:\\ windows子目錄下的拒絕寫訪問的目錄中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM