На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Как получить имя файла в диалоговом окне(открыть файл) чужого приложения. , Работа с SetWindowHookEx на C#
    Собственно вот.
    Вот как я придумал. Я могу перехватить клик по кнопке, что вызывает этот диалог. Могу в этом диалоге получить из поля Edit то, что там есть... Но это всё не то. Или то?
    И главная проблема - это подключение самого Hook...
    ExpandedWrap disabled
      public delegate int GetMsgProc(int nCode, int wParam, ref Message msg);
      private  IntPtr HookHandle;
      private GetMsgProc ProcessMessagesCallback;
       
       
       IntPtr hInstance;
       IntPtr form;
       IntPtr ThreadID;
       
       private void SetHook()
              {
                  int PiD = 0;
                  form = FindWindow("ThunderRT6FormDC", "название формы");
                  
                  IntPtr hInstance = (IntPtr)Win32.User32.GetWindowLong(form, Win32.User32.GWL_HINSTANCE);
                  ThreadID = (IntPtr)Win32.User32.GetWindowThreadProcessId(msvb_tool, ref PiD);
                  
                  WinInputHook hook = new WinInputHook(form , ThreadID, hInstance);
              }
       
       class WinInputHook : IDisposable
       {
              public delegate int GetMsgProc(int nCode, int wParam, ref Message msg);
              /// <summary>Handle for the created hook.</summary>
              private readonly IntPtr HookHandle;
              private readonly GetMsgProc ProcessMessagesCallback;
       
              public WinInputHook(IntPtr whnd, IntPtr theadID, IntPtr inst)
              {
                  int it = theadID.ToInt32();
                  // Create the delegate callback:
                  this.ProcessMessagesCallback = new GetMsgProc(ProcessMessages);
                  // Create the keyboard hook:
                  this.HookHandle = SetWindowsHookEx(HookId.WH_CALLWNDPROC, this.ProcessMessagesCallback, inst, it); //Чего я только тут не делал и какие только параметры не вставлял. HookHandle = 0 и все тут.
              }
              
              private int ProcessMessages(int nCode, int wParam, ref Message msg)
              {
                  MessageBox.Show("URA!!!"); // никак не случиться это сообщение
              }
      }

    Что я делаю не так? Почему никак не встанет хук? Я там хочу отловить WM_INITDIALOG, правда пока не придумал зачем=) Наверное, лучше всего отследить нажатие по кнопке Открыть в диалоге... В общем, это уже другой момент. Главное,чтоб hook установился.
    Сообщение отредактировано: Bubaylo -
      В общем, продвижки есть=) Я сам в шоке, но хук условно стал ставиться. Я написал ActiveX Dll и она у меня отвечает за хук, я туда скидываю только hWnd формы.
      В общем, хук ставится, LastError ничего не возвращает, а прога, на которую ставлю сам хук - виснет. Отрабатывает SetHook, без ошибок, и вдруг прога падает. Как понять, из-за чего?
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0163 ]   [ 16 queries used ]   [ Generated: 18.04.24, 07:42 GMT ]