Мне нужно захватывать изображение с веб-камеры каждые X секунд. Первоначально я создал скрипт на Python, который использовал OpenCV, но он работал ужасно, поэтому, поскольку встроенное в камеру приложение для Windows 10 могло создавать нормальные изображения, я подумал, что просто сделаю программу, которая будет отправлять нажатия клавиш, оставаясь в фоновом режиме, чтобы я все еще мог использовать компьютер Сначала я создал что-то, что отправляло ключи очень хорошо, но отправляло их в приложение переднего плана, что недопустимо
Я перебрал несколько вопросов по Stackoverflow, но, похоже, ничего не работает так, как я хочу
Le код:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
namespace This_project
{
class Program
{
[DllImport("User32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
static void Main(string[] args)
{
Process p = Process.Start("microsoft.windows.camera:");
const uint WM_KEYDOWN = 0x100;
const uint WM_KEYUP = 0x0101;
IntPtr edit = p.MainWindowHandle;
Thread.Sleep(2500);
PostMessage(edit, WM_KEYDOWN, (IntPtr)(Keys.Space), IntPtr.Zero);
PostMessage(edit, WM_KEYUP, (IntPtr)(Keys.Space), IntPtr.Zero);
}
}
}
Я ожидаю, что программа откроет приложение камеры и нажмет пробел, чтобы сделать снимок, даже если все не на переднем плане. Кроме того, код, который я собрал, выдает исключение во время выполнения: Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at Snap_webcam.Program.Main(String[] args) in C:\Users\username\source\repos\This project\This project\Program.cs:line 21
, это строка, где код говорит: IntPtr edit = p.MainWindowHandle;
с какой целью назначить, в какое окно отправлять нажатия клавиш, но оно, вероятно, работает только с настольными приложениями