Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нажать кнопку в другом приложении 
V
    Опции темы
devmstr
Дата 14.1.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Есть два приложения. Мне нужно нажать программно нажать кнопку в другом.
Я ищу окно нужного мне приложения, ищу нужную кнопки и делаю SendMessage. Что я не так делаю?
Нажиматель:
Код

#include <windows.h>

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, PTSTR lpCmdLine, INT nCmdShow)
{
    HWND hWnd = FindWindow("ButtonApp", NULL);
    if (hWnd)
    {
        MessageBox(NULL, "I Found it", "Message", 0);
        if (hButton)
        {
            MessageBox(NULL, "I ''l press you", "Message", 0);
            SendMessage(hButton, WM_COMMAND, MAKEWPARAM(1,1000), 0);
        }
    }
    return 0;
}


Нажимаемое smile :
Код

#include <windows.h>
#define APPNAME "ButtonApp"

LONG WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar);

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdShow)
{
    WNDCLASS wnd;
    memset(&wnd, 0, sizeof(wnd));
    wnd.hbrBackground    =    (HBRUSH)COLOR_WINDOW;
    wnd.hCursor            =    LoadCursor(NULL, IDC_ARROW);
    wnd.hIcon            =   LoadIcon(NULL, IDI_APPLICATION);
    wnd.hInstance        = hInst;
    wnd.lpfnWndProc        = WndProc;
    wnd.lpszClassName    = APPNAME;
    wnd.style            = CS_VREDRAW|CS_HREDRAW;

    RegisterClass(&wnd);

    HWND hWnd = CreateWindow(APPNAME, APPNAME, WS_OVERLAPPEDWINDOW, 10, 10, 500, 500, NULL, NULL, hInst, NULL);
    HWND hBut = CreateWindow("BUTTON", "Next", WS_VISIBLE|WS_CHILD, 20, 20, 100, 25, hWnd, (HMENU)1000, NULL, NULL);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    MSG msg;

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.lParam;
}

LONG WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wPar, LPARAM lPar)
{
    switch(msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_COMMAND:
        MessageBox(hWnd, "Hello World", "Message", MB_OK|MB_ICONINFORMATION);
        break;
    default:
        return DefWindowProc(hWnd, msg, wPar, lPar);
    }
    return 0;
}




--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Fixin
Дата 14.1.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Во-первых, лучше послать сообщение самой кнопке.
Во-вторых, тот процесс - это не этот. (я тут не специалист) Но, по-моему, надо аттач процесса делать или что-то вроде.
PM MAIL ICQ   Вверх
rsm
Дата 14.1.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 4
Всего: 62



Цитата(devmstr @ 14.1.2006, 23:57 Найти цитируемый пост)
Что я не так делаю?

Ты посылаешь сообщение самой кнопке, а не окну.

PM MAIL   Вверх
devmstr
Дата 15.1.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Уже понял где трабла(точнее показали):
Код

SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(1000, BN_CLICKED), (LPARAM)hButton);



--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.