Показать сообщение отдельно

  #20  
Старый 20.05.2010, 11:17
FlyBird
Познающий
Регистрация: 14.10.2007
Сообщений: 47
С нами: 9775862

Репутация: 18
По умолчанию

Цитата:
Сообщение от alexey-m  
FlyBird, если не охота ждать то посылай сообщения через PostMessage, так сообщения ставятся в очередь и ты сразу получишь управления после вызова функции, при использовании SendMessage сообщения отправляются на прямую, и тебе придется ждать...
Раз ты проверял все на блокноте то небольшой пример, правда на Delphi
Код:
 procedure TFormMain.Button1Click(Sender: TObject);
var
  hWnd,hChild: THandle;
begin
// Ещем окно с классом 'Notepad'
  hWnd:= FindWindowA('Notepad',nil);
  if hWnd<>0 then begin
    hChild:= FindWindowExA(hWnd,0,'Edit',nil);       // Ищем текстовое поле
    if hChild<>0 then begin
      SendMessage(hChild, WM_CHAR, Word('-'), 0);    // Посылаем символ "-"
      PostMessage(hChild, WM_KEYDOWN, VK_RETURN, 0); // Переводим строку
    end;
    PostMessage(hWnd, WM_KEYDOWN, VK_F5, 0); // Посылаем главному окну о нажатии клавиши F5
  end else
    ShowMessage('Notepad not found');
end;
Спасибо большое за ответ.
За пару дней до вашего я все же достиг того, что нужно. Помогли на одном форуме. Я что-то совсем про ПОСТ забыл.
Даже был вариант самому себе посылать подтверждение, но потом напомнили про ПОСТ. WipAPI только в инсте проходил и ни шагу дальше.
Пример кода.


Код:
if (hWnd == IntPtr.Zero)
            {
                MessageBox.Show("Процесс не найден", "FlyBird(Ошибка)");
                return;
            }
            IntPtr hEdit = FindWindowEx(hWnd, IntPtr.Zero, "Edit", "");
            if (hEdit == IntPtr.Zero)
            {
                MessageBox.Show("Not found child", "Error");
                return;
            }

            IntPtr t1 = (IntPtr)ComBoxSelectItem_1;
            IntPtr nul = IntPtr.Zero;

            //PostMessage(hWnd, WM_KEYUP, t1, nul);
            PostMessage(hWnd, WM_KEYDOWN, t1, nul);
Теперь проблема в том, как достучаться до меню сторонний программы и отправить команду на выполнения поункта меню и дальше вбить в TextBox нужные символы и нажать Button.
 
Ответить с цитированием