Вот собственно получение всех процессов оконных приложений.
foreach (Process p in Process.GetProcesses(System.Environment.MachineName))
{
if (p.MainWindowHandle != IntPtr.Zero)
{
if (p.MainWindowTitle.Length > 0)
{
listView1.Items.Add(p.MainWindowTitle);
}
}
}
Как можно отправить процессу сообщение нажатия на пробел(или любую другую клавишу)?
21.07.08 12:34: Перенесено модератором из '.NET' — AndrewVK
Здравствуйте, monkmonah, Вы писали:
M>Вот собственно получение всех процессов оконных приложений.
M>foreach (Process p in Process.GetProcesses(System.Environment.MachineName))
M>{
M> if (p.MainWindowHandle != IntPtr.Zero)
M> {
M> if (p.MainWindowTitle.Length > 0)
M> {
M> listView1.Items.Add(p.MainWindowTitle);
M> }
M> }
M>}
M>Как можно отправить процессу сообщение нажатия на пробел(или любую другую клавишу)?
SendMessage(hWnd, WM_KEYDOWN, ..., ...);
Здравствуйте, danclax, Вы писали:
M>>Как можно отправить процессу сообщение нажатия на пробел(или любую другую клавишу)?
D>SendMessage(hWnd, WM_KEYDOWN, ..., ...);
Я бы рекомендовал использовать
PostMessage.
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, danclax, Вы писали:
M>>>Как можно отправить процессу сообщение нажатия на пробел(или любую другую клавишу)?
D>>SendMessage(hWnd, WM_KEYDOWN, ..., ...);
_FR>Я бы рекомендовал использовать PostMessage.
Да точно, PostMessage лучше — без блокировки. Но я тут обратил внимание на раздел — .NET. А PostMessage/SendMessage — WinAPI. Навскидку способа в .NET не удалось найти.
Здравствуйте, danclax, Вы писали:
D>Да точно, PostMessage лучше — без блокировки. Но я тут обратил внимание на раздел — .NET. А PostMessage/SendMessage — WinAPI. Навскидку способа в .NET не удалось найти.
Вручную (подсмотрено в System.Windows.Forms):
[SuppressUnmanagedCodeSecurity]
internal static class UnsafeNativeMethods
{
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr PostMessage(HandleRef hwnd, int msg, int wparam, int lparam);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr PostMessage(HandleRef hwnd, int msg, int wparam, IntPtr lparam);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern bool PostMessage(HandleRef hwnd, int msg, IntPtr wparam, IntPtr lparam);
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern void PostQuitMessage(int nExitCode);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int PostThreadMessage(int id, int msg, IntPtr wparam, IntPtr lparam);
}