Текущее время: 29 мар 2024, 02:27 • Часовой пояс: UTC + 3 часа
Сообщения без ответов | Активные темы

Управление тюнером в с#

Начать новую темуОтветить на тему Страница 1 из 1 [ Сообщений: 5 ]
Версия для печати Пред. тема | След. тема
АвторСообщение
Сообщение Добавлено: 16 мар 2011, 14:35. Заголовок сообщения:  Управление тюнером в с#
Зарегистрирован:
    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 должен закрыться, но этого не происходит.
Пробовал давать другие команды - никакой реакции.
Кто уже создавал дополнительные приложения, подскажите пожалуйста в чем здесь ошибка ?
Профиль 
Сообщение Добавлено: 16 мар 2011, 15:05. Заголовок сообщения: 
Эксперт
Аватара пользователя
Зарегистрирован:
    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 влагодаря аппаратному кодировщику.
Профиль 
Сообщение Добавлено: 16 мар 2011, 16:03. Заголовок сообщения: 
Зарегистрирован:
    16 мар 2011, 14:18
Сообщения: 4
Большое спасибо, все получилось :)
Профиль 
Сообщение Добавлено: 29 ноя 2013, 07:08. Заголовок сообщения:  Re: Управление тюнером в с#
Зарегистрирован:
    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, либо через Проект >> Добавить ссылку надо что-то добавить. А откуда и что?
Профиль 
Сообщение Добавлено: 03 дек 2013, 11:26. Заголовок сообщения:  Re: Управление тюнером в с#
Эксперт
Аватара пользователя
Зарегистрирован:
    23 мар 2007, 14:32
Сообщения: 4034
Откуда: РФ, ДНР, Донецк
писал(а):
Студия сразу ругается на:
Код:
[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 влагодаря аппаратному кодировщику.
Профиль 
Показать сообщения за:  Поле сортировки:    
Начать новую темуОтветить на тему  Страница 1 из 1  [ Сообщений: 5 ]  
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
Найти:  
Перейти: