Форум Beholder http://beholder.ru/bb/ | |
Управление тюнером в с# http://beholder.ru/bb/viewtopic.php?f=10&t=12082 |
Страница 1 из 1 |
Автор: | Dsob [ 16 мар 2011, 14:35 ] |
Заголовок сообщения: | Управление тюнером в с# |
Пишу программу для управления тюнером на 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 ] |
Заголовок сообщения: | |
Ты командное окно неправильно ищешь. Разработчики ж давали пример: 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 и никогда никаких проблем не знал. |
Автор: | Dsob [ 16 мар 2011, 16:03 ] |
Заголовок сообщения: | |
Большое спасибо, все получилось ![]() |
Автор: | Pavell [ 29 ноя 2013, 07:08 ] |
Заголовок сообщения: | Re: Управление тюнером в с# |
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 [ 03 дек 2013, 11:26 ] |
Заголовок сообщения: | Re: Управление тюнером в с# |
писал(а): Студия сразу ругается на: Код: [DllImport("User32.dll")] DllImport - Не удалось найти имя типа или пространства имён [DllImport] (пропущена директива using или ссылка на сборку). using System.Runtime.InteropServices; |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |