Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: SetWindowsHookEx Добавлено: 02.01.04 00:23  

Автор вопроса:  Doomsday

Помогите: Вот контрол на C#:

namespace HotKey{

public class HotKey{

[System.Runtime.InteropServices.DllImport("user32.dll")]static extern System.IntPtr SetWindowsHookEx(int code, HookProc func,System.IntPtr hInstance,int threadID);

[System.Runtime.InteropServices.DllImport("user32.dll")]static extern int UnhookWindowsHookEx(System.IntPtr hhook);

[System.Runtime.InteropServices.DllImport("user32.dll")]static extern int CallNextHookEx(System.IntPtr hhook, int code,System.IntPtr wParam,System.IntPtr lParam);

[System.Runtime.InteropServices.DllImport("user32.dll")]static extern int GetAsyncKeyState(int vKey);

protected delegate int HookProc(int code,System.IntPtr wParam, System.IntPtr lParam);

static System.IntPtr HookH=System.IntPtr.Zero;

static System.Windows.Forms.NotifyIcon TrayIcon=new System.Windows.Forms.NotifyIcon();

static System.Windows.Forms.ContextMenu TrayMenu=new System.Windows.Forms.ContextMenu();

static void Main() {

TrayMenu.MenuItems.Add("Выход",new System.EventHandler(Exit_Click));

TrayIcon.Icon=new System.Drawing.Icon("App.ico");

TrayIcon.ContextMenu=TrayMenu;

TrayIcon.Text="Горячие клавиши";

TrayIcon.Visible=true;

HookH=SetWindowsHookEx(2,new HookProc(Hook),System.IntPtr.Zero,System.AppDomain.GetCurrentThreadId());

System.Windows.Forms.Application.Run();

UnhookWindowsHookEx(HookH);}

static void Exit_Click(System.Object sender,System.EventArgs e){

TrayIcon.Visible=false;

System.Windows.Forms.Application.Exit();}

static int Hook(int code,System.IntPtr wParam, System.IntPtr lParam){

System.Windows.Forms.MessageBox.Show("key");

return CallNextHookEx(HookH, code, wParam, lParam);}}}

Все вроде равильно, а хук не работает (проверте). Как заставить его работать (без форм). Я прорбовал седлать вызов SetWindowHookEx на выбор пункта меню в трее (вместо вызова Aplication.exit() ) работает...

Или может кто знает как сделать функцию, которая вызывалась бы после Application.Run() и один раз... Типа Form.Load но без формы...

Файл HotKey.cs в архиве: http://www.nptus.ru/~doomsday/HotKey.zip (724 байта)

И пример по SetWindowsHookEx из MSDN: http://www.nptus.ru/~doomsday/CuttingEdge.zip

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 02.01.04 11:41

Вы не сможете поставить глобальный хук в .NET. На это есть объективные причины.

Посмотрите здесь обсуждение на эту тем: http://www.gotdotnet.ru/Forums/CommonForum/6612.aspx

 

Ответить

Номер ответа: 2
Автор ответа:
 Doomsday



Вопросов: 30
Ответов: 54
 Профиль | | #2 Добавлено: 03.01.04 00:35

Быть такого не может...

Я ставил и все работало (но только у меня была форма, а я хочу без оной).

В VB.NET - у меня не получилось.

Но в C# все работало (кстати пример: http://www.nptus.ru/~doomsday/CuttingEdge.zip взят с MSDN - он и есть демонстрация гловбально хука...)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам