0
[System.Runtime.InteropServices.DllImportAttribute("User32.dll", EntryPoint = "BlockInput")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool BlockInput([System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] bool fBlockIt);

メインスレッドでブロック入力を実行すると、問題なく実行されます。スレッドに入れて実行すると、true が返されますが、入力はブロックされません。さらに興味深いのは、(最初からではなく) スレッドの内部からコードをデバッグする場合も機能することです。

理由はありますか?すべてのスレッドがメインスレッドの特権を持つべきではありません。ちなみに、管理者権限で実行しています。

4

2 に答える 2

0

プロジェクトにマニフェスト ファイルを追加し、アプリを管理者権限で実行してみてください。この行をマニフェスト ファイル内にコピーします。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

その後、もう一度実行してみてください。BlockInput が正しく実行される必要があります。

于 2016-09-21T04:22:53.963 に答える