Итак, я пытаюсь сделать программу в Powershell и пытаюсь увидеть, удерживается ли левая кнопка мыши. Прямо сейчас я использую метод запуска кода C# в Powershell, чтобы попытаться сделать это, но я часами искал способ увидеть, когда левая кнопка мыши удерживается нажатой в любом месте экрана в любом окне. Я не могу показать, что я уже пробовал, потому что я удалил их все, извините ;(. Если бы кто-нибудь мог помочь, это было бы потрясающе.
Редактировать: Это было последнее, что я пробовал.
$code = @"
using System;
namespace Auto
{
public class Program
{
public static void Main(){
while (true) {
byte[] result = BitConverter.GetBytes(GetAsyncKeyState(1));
if (result[1] == 0x80) {
Console.WriteLine("Left Mouse Button Down");
}
}
}
}
}
"@
Add-Type -TypeDefinition $code -Language CSharp
iex "[Auto.Program]::Main()"
В качестве отступления: просто позвоните [Auto.Program]::Main()
напрямую - не нужно Invoke-Expression
(iex
), чего вообще следует избегать.
И это должно быть совершенно очевидно по ошибке при попытке заполнить переменную $code The name 'GetAsyncKeyState' does not exist in the current context
Итак, оказалось, что мне нужно было добавить...
[DllImport("user32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);
для работы GetAsyncKeyState, и это говорило о том, что DllImport не найден. Мне также нужно было добавить using System.Runtime.InteropServices;
вверху, чтобы DllImport тоже работал. Теперь все работает отлично, спасибо.
В вашем коде C# отсутствует объявление P/Invoke для функции GetAsyncKeyState WinAPI