Текущее время: 16 май 2024, 21:49 • Часовой пояс: UTC + 3 часа |
Управление тюнером в с#
![Начать новую тему Начать новую тему](./styles/beholder/imageset/ru/button_topic_new.gif) | ![Ответить на тему Ответить на тему](./styles/beholder/imageset/ru/button_topic_reply.gif) |
Страница 1 из 1 |
[ Сообщений: 5 ] |
|
Автор | Сообщение |
Dsob
|
|
Зарегистрирован: 16 мар 2011, 14:18 Сообщения: 4
|
Пишу программу для управления тюнером на C#
Есть такой код:
Код: class PMes { [DllImport("User32.dll")] public extern static int PostMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam); }
protected void Button1_Click(object sender, EventArgs e) { int WM_USER=1024; Process[] process = Process.GetProcessesByName("BeholdTV"); IntPtr pWindow = process[0].MainWindowHandle; PMes.PostMessage(pWindow, WM_USER + 200, WM_USER + 291, 0); }
По идее при нажатии на кнопку процесс BeholdTV должен закрыться, но этого не происходит.
Пробовал давать другие команды - никакой реакции.
Кто уже создавал дополнительные приложения, подскажите пожалуйста в чем здесь ошибка ?
|
|
|
hd44780
|
Добавлено: 16 мар 2011, 15:05. Заголовок сообщения: |
|
|
Эксперт | ![Аватара пользователя](./download/file.php?avatar=8220.gif) |
Зарегистрирован: 23 мар 2007, 14:32 Сообщения: 4034 Откуда: РФ, ДНР, Донецк
|
Ты командное окно неправильно ищешь.
Разработчики ж давали пример:
HWND hBhWnd = FindWindow ("TMain", "BeholdTV");
Get version of Behold TV {Получить новер версии ПО} -
DWORD dwVer = (DWORD) SendMessage(hBhWnd, WM_BHCMD, WMBH_GETVERSION, NULL);
if (HIWORD(dwVer) == 4 && LOWORD(dwVer) == 58)
{ // this is version 4.58
}
Вот и пиши прямо и буквально:
..................................
[DllImport ( "user32.dll", CharSet = CharSet.Auto )]
public static extern IntPtr FindWindow ( [MarshalAs ( UnmanagedType.LPTStr )] string lpClassName,
[MarshalAs ( UnmanagedType.LPTStr )] string lpWindowName );
[DllImport ( "user32.dll", CharSet = CharSet.Auto )]
public static extern int SendMessageA ( IntPtr hWnd, int wMsg, int wParam, uint lParam );
..................................
Потом просто:
const string WIN_CLASS = "TMain";
const string APP_NAME = "BeholdTV";
IntPtr hWnd = FindWindow(WIN_CLASS, APP_NAME);
if (hWnd.Equals(IntPtr.Zero))
return false;
// получаем версию ПО:
const int WM_USER = 0x0400; // Standard, from Windows.h
const int WM_BHCMD = WM_USER + 200;
const int WMBH_GETVERSION = WM_USER + 285; // Get version of Behold TV {Получить новер версии ПО}
int version = SendMessageA ( hWnd, WM_BHCMD, WMBH_GETVERSION, NULL );
Зачем велосипед изобретать? Процессы искать ...
Процесс-то ты найдешь, а окон у него до фига - посмотри Spy++.
И почему ты решил, что слать надо главному окну? А если они завтра новую версию выпустят и главное окно поменяют?
Или еще что-нибудь сделают?
Работаю с такими конструкциями уже года 2 и никогда никаких проблем не знал.
Behold TV 609FM, Behold TV X7 Intel Core i7-4770K, ASUS Z87-K, RAM 32 GB, NVidia GT630 2GB. Win7, на 10 худо-бедно пахал только X7 влагодаря аппаратному кодировщику.
|
|
|
Dsob
|
Добавлено: 16 мар 2011, 16:03. Заголовок сообщения: |
|
|
Зарегистрирован: 16 мар 2011, 14:18 Сообщения: 4
|
Большое спасибо, все получилось ![Smile :)](./images/smilies/icon_smile.gif)
|
|
|
Pavell
|
|
Зарегистрирован: 08 сен 2013, 14:53 Сообщения: 21
|
hd44780 или Dsob, подскажите, пожалуйста! Пробую повторить то, что здесь описано на C#. Но в С# я не силён. Студия сразу ругается на: Код: [DllImport("User32.dll")] DllImport - Не удалось найти имя типа или пространства имён [DllImport] (пропущена директива using или ссылка на сборку). Для наглядности привожу мой код с самого начала, чтобы было видно что у меня пропущено: Код: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace DetectFn { public partial class Form1 : Form { [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr FindWindow([MarshalAs(UnmanagedType.LPTStr)] string lpClassName, ... ... Либо через using не объявил DllImport, либо через Проект >> Добавить ссылку надо что-то добавить. А откуда и что?
|
|
|
hd44780
|
|
Эксперт | ![Аватара пользователя](./download/file.php?avatar=8220.gif) |
Зарегистрирован: 23 мар 2007, 14:32 Сообщения: 4034 Откуда: РФ, ДНР, Донецк
|
Pavell писал(а): Студия сразу ругается на: Код: [DllImport("User32.dll")] DllImport - Не удалось найти имя типа или пространства имён [DllImport] (пропущена директива using или ссылка на сборку). using System.Runtime.InteropServices;
Behold TV 609FM, Behold TV X7 Intel Core i7-4770K, ASUS Z87-K, RAM 32 GB, NVidia GT630 2GB. Win7, на 10 худо-бедно пахал только X7 влагодаря аппаратному кодировщику.
|
|
|
![Начать новую тему Начать новую тему](./styles/beholder/imageset/ru/button_topic_new.gif) | ![Ответить на тему Ответить на тему](./styles/beholder/imageset/ru/button_topic_reply.gif) |
Страница 1 из 1 |
[ Сообщений: 5 ] |
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|