2009-12-26 99 views
2

當我嘗試在Windows Vista/7登錄屏幕上使用SetCursorPos時,返回true,這首先讓我覺得它工作正常。但是,當我撥打GetCursorPos它給我:SetCursorPos和GetCursorPos在登錄屏幕不工作?

-858993460,-858993460 

任何想法爲什麼?這是「安全功能」還是我使用不正確?該代碼在非登錄(即普通)桌面上工作正常。

+1

'-858993460'爲十六進制中的0xFFFFFFFF,它表示錯誤條件或未設置變量。 – ChrisF 2009-12-26 19:37:16

+3

@ChrisF - 沒辦法,-858993460是0xCCCCCCCC。這實際上表示MSVC調試版本中的未設置變量。 – atzz 2009-12-26 20:28:41

+0

@atzz - oops - 我使用Windows計算器,得到了'0xFFFFFFFFCCCCCCCC',並選擇了錯誤的一半! – ChrisF 2009-12-27 15:14:51

回答

1

替代解決方案:這是可能的(但非常棘手)使用mouse_event(其中確實在登錄屏幕工作),而不是SetCursorPos。我沒有時間現在發佈代碼,但是如果詢問我可能會更新此答案...

+0

你可以請發佈更多信息?我需要將鼠標/鍵盤輸入發送到鎖定和登錄屏幕,並且無法弄清楚。謝謝! – tunafish24 2015-06-24 05:24:57

4

the MSDN

,當你調用GetCursorPos輸入桌面必須是當前桌面。調用OpenInputDesktop以確定當前桌面是否是輸入桌面。如果不是,用OpenInputDesktop返回的HDESK調用SetThreadDesktop切換到該桌面。

This page(這裏也有我從上面的報價),該問的問題「GetCursorPos如果桌面被鎖定無法正常工作」,有下列信息:

你不能同時此信息桌面被鎖定。當 桌面被鎖定時,安全子系統接管,並且您的桌面 禁用。

在這一點上,你就必須掛鉤到O/S(人通過更換GINA.DLL做了 ,但你不能在託管代碼中做到這一點,並就 頂部,你就可以在Vista中不會這樣做,因爲它有不同的模型)。

桌面被鎖定時,如果您使用的是託管代碼,則必須在沒有光標 信息的情況下執行操作。

+0

您是否明白我需要在登錄屏幕上獲取/設置當前光標位置,而不是我的非登錄桌面? – 2009-12-26 19:42:30

+0

@尼克博爾頓 - 是的,但我試圖找到你爲什麼無法獲得信息。如果不相關,那我表示歉意,我會刪除答案。 – ChrisF 2009-12-26 19:44:30

+0

抱歉無需刪除。我試圖確定的是我是否可以在登錄屏幕上獲取/設置光標位置;如果你說不,並且情況如此,那麼你的答案是有效的。 – 2009-12-26 19:47:39

4

在登錄屏幕和安全窗口上,您不能發送鼠標或鍵盤事件。這是Windows的安全措施,以防止來自不同程序的未授權訪問。