| Текущее время: 04 ноя 2025, 14:18 • Часовой пояс: UTC + 3 часа  | 
   
 
  
Управление тюнером в с#
  
      |   | 
      Страница 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. Заголовок сообщения:  | 
	       | 
	      
	     
	   
	 | 
       
      
	
	  
	    | Эксперт |    |  
	   
	  Зарегистрирован:     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 
	 | 
	
	  
	  Большое спасибо, все получилось     
	  
	 | 
       
      
	 | 
	
	  
	  
	     
	      
	     
	  
	 | 
       
    
   
  
    
      
	| 
	  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
	 | 
	
	  
	 | 
       
      
	
	  
	    | Эксперт |    |  
	   
	  Зарегистрирован:     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 влагодаря аппаратному кодировщику. 
	  
	 | 
       
      
	 | 
	
	  
	  
	     
	      
	     
	  
	 | 
       
    
   
  
  
      |   | 
       Страница 1 из 1 | 
       [ Сообщений: 5 ] | 
        | 
    
   
 
  
    | Кто сейчас на конференции |  
    | Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0 |  
   
  
    
    
      Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения 
     | 
   
 
 |