Задача такая: есть у меня программа. Она открывает диалог другой программы. На этом диалоге находятся несколько Edit'ов (в Spy++ посмотрел), и у всех одинаковые Caption'ы (тоже в Spy++ посмотрел). Мне надо с помощью моей программы вставить текст в один из Edit'ов. Я так думаю, вставлять надо с помощью EM_REPLACESEL, но для этого мне нужен дескриптор этого Edit'a. Поэтому вопрос: как мне вставить текст в Edit или хотя бы как определить его хэндл?
P.S. Нужный мне Edit стоит самым первым в диалоге, хотя это, наверно, значения не имеет.
FindWindow не даст тебе эдита.
Вместо FindWindow можно юзать EnumWindows и тд
Z>Задача такая: есть у меня программа. Она открывает диалог другой программы. На этом диалоге находятся несколько Edit'ов (в Spy++ посмотрел), и у всех одинаковые Caption'ы (тоже в Spy++ посмотрел). Мне надо с помощью моей программы вставить текст в один из Edit'ов. Я так думаю, вставлять надо с помощью EM_REPLACESEL, но для этого мне нужен дескриптор этого Edit'a. Поэтому вопрос: как мне вставить текст в Edit или хотя бы как определить его хэндл?
Z>P.S. Нужный мне Edit стоит самым первым в диалоге, хотя это, наверно, значения не имеет.
Ну почему же — очень даже имеет.
Посмотри GetTopWindow/GetNextWindow.
Это даст тебе хандл едита, а остальное ты думаешь правильно, хотя, если менять весь текст, то проще при помощи WM_SETTEXT.
Z>P.S. Нужный мне Edit стоит самым первым в диалоге, хотя это, наверно, значения не имеет.
Здравствуйте old Dutchman, Вы писали:
OD>Здравствуйте Zipper555, Вы писали:
OD>Значитца так — находишь стандартными путями форму, на которой лежит эдит — по простому можно FindWindow. OD>Шпаем посмотри Control ID. OD>Потом —
OD>
OD>FindWindow не даст тебе эдита. OD>Вместо FindWindow можно юзать EnumWindows и тд
OD>
OD> Z>>Задача такая: есть у меня программа. Она открывает диалог другой программы. На этом диалоге находятся несколько Edit'ов (в Spy++ посмотрел), и у всех одинаковые Caption'ы (тоже в Spy++ посмотрел). Мне надо с помощью моей программы вставить текст в один из Edit'ов. Я так думаю, вставлять надо с помощью EM_REPLACESEL, но для этого мне нужен дескриптор этого Edit'a. Поэтому вопрос: как мне вставить текст в Edit или хотя бы как определить его хэндл?
Z>>P.S. Нужный мне Edit стоит самым первым в диалоге, хотя это, наверно, значения не имеет.
Здравствуйте Andrew S, Вы писали:
AS>Ну почему же — очень даже имеет. AS>Посмотри GetTopWindow/GetNextWindow. AS>Это даст тебе хандл едита, а остальное ты думаешь правильно, хотя, если менять весь текст, то проще при помощи WM_SETTEXT.
Z>>P.S. Нужный мне Edit стоит самым первым в диалоге, хотя это, наверно, значения не имеет.
Не понял чем вам FindWindowEx не нравится?
Re[4]: Как вставить текст в Edit в другой программе?
Мне она всем нравится, вот только не каждый контрол находит. Например, едиты.
AS>>Ну почему же — очень даже имеет. AS>>Посмотри GetTopWindow/GetNextWindow. AS>>Это даст тебе хандл едита, а остальное ты думаешь правильно, хотя, если менять весь текст, то проще при помощи WM_SETTEXT.
Z>>>P.S. Нужный мне Edit стоит самым первым в диалоге, хотя это, наверно, значения не имеет. BM>Не понял чем вам FindWindowEx не нравится?
Здравствуйте Andrew S, Вы писали:
AS>Мне она всем нравится, вот только не каждый контрол находит. Например, едиты.
О
А как же она у меня находила?
Т.е. помню не находила если Parent невидимый был, а так всё находит нормально.....
AS>>>Ну почему же — очень даже имеет. AS>>>Посмотри GetTopWindow/GetNextWindow. AS>>>Это даст тебе хандл едита, а остальное ты думаешь правильно, хотя, если менять весь текст, то проще при помощи WM_SETTEXT.
Z>>>>P.S. Нужный мне Edit стоит самым первым в диалоге, хотя это, наверно, значения не имеет. BM>>Не понял чем вам FindWindowEx не нравится?
Re[5]: Как вставить текст в Edit в другой программе?
Здравствуйте BugMan, Вы писали:
BM>Здравствуйте Zipper555, Вы писали:
Z>>Здравствуйте BugMan,
Z>>И как тогда в моем случае мне едит найти? BM>Как и любой другой — по Caption/Text ...
С помощью какой функции?
Re[8]: Как вставить текст в Edit в другой программе?
Здравствуйте Zipper555, Вы писали:
Z>Здравствуйте BugMan, Вы писали:
BM>>Здравствуйте Zipper555, Вы писали:
Z>>>Здравствуйте BugMan,
Z>>>И как тогда в моем случае мне едит найти? BM>>Как и любой другой — по Caption/Text ...
Z>С помощью какой функции? FindWindowEx()
Re[9]: Как вставить текст в Edit в другой программе?
BM>Не понял чем у тебя тут нажатия кнопок занимаются, ну да неважно....
BM>
BM>HWND hWnd = FindWindow (NULL, "Default - FlashGet"); // parent
BM>HWND hWndEdit = FindWindowEx(hWnd, NULL, "whatever class name", "text in da textbox"); // find window located on hWnd
BM>
BM>Вобщем по такому принципу построишь.....
Так не покатит, у меня Edit в диалоге на вкладке....
//опрделение дескриптора parent'a
HWND hwnd = FindWindow (NULL, "Default - FlashGet");
//посылаем ему сообщение, чтоб по F4 открыл один из своих диалогов, у которого Caption = "Добавить новую закачку"
PostMessage (hwnd, WM_KEYDOWN, VK_F4, NULL);
hwnd = FindWindow (NULL, "Добавить новую закачку");
//а дальше на вкладке "Общие" в этом диалоге надо вставить текст в Edit (причем Edit'ов много, а мне нужен только один)
//вот здесь я и не знаю, что делать
hwnd = GetDlgItem (hwnd, 00003020);
HWND hWndEdit = GetDlgItem(hwnd, 000003E9);
SendMessage (hWndEdit, EM_REPLACESEL, TRUE, (LPARAM)"asdf");
//здесь посылается сообщение, чтобы диалог закрылся по Enter'у
PostMessage (hwnd, WM_KEYDOWN, VK_RETURN, NULL);
Re[12]: Как вставить текст в Edit в другой программе?
ХЪ
Z>Так не покатит, у меня Edit в диалоге на вкладке....
А разница? Твоя задача найти окно находящееся на другом окне, так?
Z>
Z>//опрделение дескриптора parent'a
Z>HWND hwnd = FindWindow (NULL, "Default - FlashGet");
Z>//посылаем ему сообщение, чтоб по F4 открыл один из своих диалогов, у которого Caption = "Добавить новую закачку"
Z>PostMessage (hwnd, WM_KEYDOWN, VK_F4, NULL);
Z>hwnd = FindWindow (NULL, "Добавить новую закачку");
Z>//а дальше на вкладке "Общие" в этом диалоге надо вставить текст в Edit (причем Edit'ов много, а мне нужен только один)
Z>//вот здесь я и не знаю, что делать
Z>hwnd = GetDlgItem (hwnd, 00003020);
Z>HWND hWndEdit = GetDlgItem(hwnd, 000003E9);
Z>SendMessage (hWndEdit, EM_REPLACESEL, TRUE, (LPARAM)"asdf");
Z>//здесь посылается сообщение, чтобы диалог закрылся по Enter'у
Z>PostMessage (hwnd, WM_KEYDOWN, VK_RETURN, NULL);
Z>
OK ну нашел ты окно "Добавить новую закачку", дальше находишь хендл табконтрола (закладки=фальшивка — это всё одно окно) Т.е. выглядит так:
Окно "Добавить новую закачку"
|
L TabControl
|
L Edit "Добавить новую закачку"
Будешь ты находить Edit по GetDlgItem или FindWindowEx паралельно , т.к. дефаулт текст для Edit ты знаешь.
Скажи хоть где именно не работет. Это
hwnd = GetDlgItem (hwnd, 00003020);
или это ?
HWND hWndEdit = GetDlgItem(hwnd, 000003E9);
Re[5]: Как вставить текст в Edit в другой программе?
Не могла она у вас едит находить. Иногда лучше почитать MSDN:
1. If the lpWindowName parameter is not NULL, FindWindowEx calls the GetWindowText function to retrieve the window name for comparison. For a description of a potential problem that can arise, see the Remarks for GetWindowText.
2. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string.
А у нас и есть поиск из другого процесса и окно (едит) заголовка не имеет. Можете попробовать — работать не будет, это обычные грабли.
AS>>Мне она всем нравится, вот только не каждый контрол находит. Например, едиты. BM>О BM>А как же она у меня находила? BM>Т.е. помню не находила если Parent невидимый был, а так всё находит нормально.....
AS>>>>Ну почему же — очень даже имеет. AS>>>>Посмотри GetTopWindow/GetNextWindow. AS>>>>Это даст тебе хандл едита, а остальное ты думаешь правильно, хотя, если менять весь текст, то проще при помощи WM_SETTEXT.
Z>>>>>P.S. Нужный мне Edit стоит самым первым в диалоге, хотя это, наверно, значения не имеет. BM>>>Не понял чем вам FindWindowEx не нравится?