|
|
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
А можно ли из программы VBA (написав код) нажать кнопку меню в другой программе (программа Металикс написаная на С++)??? На этой программе происходит перевод чертежей деталей с инструментами (пробивочных) в коды НС. Стандартные детали я параметрирую. В самой программе есть редактор, который создает файл.РРО В этом редакторе можно записать все данные параметрической программы построчно на сколько угодно деталей, нажать кнопку пуск и получаешь все все графические файлы с чертежами деталей . У меня есть программа на VBA которая создает файл.РРО с нужными мне данными . Но теперь я должен открыть Металикс , нажать кнопку и открыть редактор .РРО, наити свой созданный моей прогой файл.РРО-открыть его и запустить , нажав кнопку пуска!!!! Как же мне эти действия выполнить через VBA, вообще возможно ли это??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2005, 10:11 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Возможно, если у этой программы все нужные действия можно выполнить только нажатием клавиш на клавиатуре. Пример с калькулятором: Открывается приложение калькулятор и вызываетя меню "О программе" Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. то вместо всех инструкций SendKeys можно прописать всего одну. Остальное найдешь в справке VBA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2005, 17:48 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Спасибо, но может у кого еще есть какие то решения???? Советы??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 08:43 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
vallotСпасибо, но может у кого еще есть какие то решения???? Советы??? А чем предыдущее решение не устраивает? Можно посылать еще WM_COMMAND , например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 09:54 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 09:58 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
----Решения и советы могут быть если эта прога : - API в виде DLL ----- Это присутствует! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2005, 11:09 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
А стрелки, увы, стоят на месте!!!! Да и если они приползут на кнопку, то как ее запустить? Кнопка реагирует на нажатие мыши, а на ENTER -нет! Эхе..хэ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2005, 10:55 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
vallotА стрелки, увы, стоят на месте!!!! Да и если они приползут на кнопку, то как ее запустить? Кнопка реагирует на нажатие мыши, а на ENTER -нет! Эхе..хэ..... 1. Это ты про калькулятор или про свою прогу Металикс? Если про свою, то скажи спасибо программисту. 2. Может у этой кнопки горячая клавиша есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2005, 14:23 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Нет горячих клавиш, увы мне, увы..! Но есть идея попросить их создать горячие клавиши! Они постоянно апгрейты присылают, может выкручусь! А вообще то жалко, что хакеров на форуме нет..., щас бы вмиг бы решили проблему мою!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2005, 20:24 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Ура, нашел!!! Помогите, у кого есть опыт. Например имеется файл Vova.dll, а в нем есть строчка: OriginalFirstThunk: GetEnvironmentVariableW(337) FirstThunk: GetEnvironmentVariableW(337) Как мне при написать код, чтобы выполнилась длл-команда из моей проги??? Подскажите, кто знает!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 10:56 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
..........и тишина!? Э...хе...хе!!!. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 14:59 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
vallot..........и тишина!? Э...хе...хе!!!. Так почитайте о GetEnvironmentVariable - и чем это может помочь? Я уже предложил вариант. Подробнее - берется spy++ или winspector и изучается приложение - нужно узнать класс окна и код сообщения. По шагам: 1. Запустить приложение 2. Запустить Spy++ 3. Выбрать Find Window (выглядит вроде как бинокль) 4. Оттащить на окно приложения 5. щелкнуть по Messages и OK. 6. в Spy++ появится пустое окно. Выберите тот пункт меню в вашем приложении, который вам нужен и нужные сообщения должны появиться в окне Spy++. В winspector - аналогично. Потом пишете код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 11:07 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Вот спасибо, за подсказку , а то я самоучка и тяжело методом тыка, а сейчас хоть есть зацепка!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 11:18 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Да, рано обрадовался! Все нашел , все установил, разобрался(?) что к чему, но тут заковыка такая - winspector находит все компоненты в Металиксе, но если это, например, виндюковские окна диалогов . А в тулбарах Металикса находит только тулбары !!! А в одном окне тулбара находится 3-6 кнопок , а их то он и не определяет и что только не делал! Оставлял одну кнопку на тулбаре, все равно показывает как тулбар, что делать не знаю! Как заставить, чтобы кнопки в тулбарах показывало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 22:24 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
vallotКак заставить, чтобы кнопки в тулбарах показывало? А зачем? Если я правильно помню, сообщения WM_COMMAND обычно посылаются главному окну приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 09:52 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Ну как же, ведь у меня в тулбаре 1 находится кнопки - 1-Run AutoNesting 2-Run Parametric 3- Run Order File Как же прога будет знать, что именно Run Order File надо запустить, или я чего то не догоняю??? Увы мне.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 10:19 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
vallot Как же прога будет знать, что именно Run Order File надо запустить, или я чего то не догоняю??? Увы мне.. Если я правильно помню (много лет уже WinApi не использовал :) ) - тулбар получает сообщение о щелчке мышой с указанием координат. (Похоже, кнопки не являются окнами сами по себе). После этого тулбар проверяет, что за кнопка есть по этим координатам. Если это Run Order File - тулбар посылает главному окну сообщение WM_COMMAND с параметром - каковой параметр и есть id команды Run Order File. То же сообщение может послать и меню, например, и ваша программа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 10:32 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Я прошу прощения, я наверное ввел в зблуждение Вас своим "ламерским" языком , под словом "кнопка" я имел ввиду Command Button ! И как я уже говорил, в некоторых диологовых окнах определяет как "Button"! И еще вопрос- CommandId = 'идентификатор нужного пункта меню, который узнали Как я это могу определить, если Command Button !(Run Order File) не отражается, или это что-то другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 11:56 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
vallot Как я это могу определить, если Command Button !(Run Order File) не отражается, или это что-то другое? Следите за главным окном - какие ему приходят сообщения, когда вы нажимаете кнопку на тулбаре или выбираете пункт в меню? Будет много - целая куча mousemove, mouseup, mousedown. Одно из них может быть WM_COMMAND - это и нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 12:39 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Вот для примера создал на VB6 проект "Vova", в проекте есть форма, на ней CommandButton для выполнения кое каких действий в TextBoxe . Через Winspector Spy нашел все для CommandButton : 000601В6: ThunderCommandButton "cmdVova" А на VBА (чтобы нажать CommandButton из другой программы) сделал по совету так: '=========================================================== Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Const WM_COMMAND = &H111 Private Sub Command1_Click() Dim hwnd As Long Dim CommandId As Long CommandId = 2 hwnd = FindWindow("ThunderCommandButton", vbNullString) PostMessage hwnd, WM_COMMAND, CommandId, 0 End Sub ======================================================== Но это не работает, почему? По моему нету ссылки на проект VB6 , кто может помочь??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 23:04 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Второй раз поднимаю эту тему, но теперь надеюсь что вопрос будет понятен до конца!!! Прочел много помощи, вроде(?) делаю все правильно, но не получаю результата, ПОЧЕМУ??? Подскажите пожалуйста, сам уже неделю бьюсь!!! -------------------------------------------------------------------------------- Эксперементирую с "Notepad" , выполняю следующие действия: 1)Открыть "Notepad" 2)Открыть "File" в Menu 3)Открыть "Open" в SubMenu 4)Выбрать File "Вася" 5)Нажать кнопку "Open" '============================================================= Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Sub Command1_Click() Dim hwnd As Long Dim hMenu As Long Dim hMenuItm As Long Dim hMenuSub As Long Dim hwndOpen As Long Dim hwndBtnOpen As Long Dim RetVal Private Const WM_ACTIVATE = &H6 Const WM_COMMAND = &H111 '--------------------------------------------------- RetVal = Shell("notepad.exe") AppActivate RetVal '----------------------------------------------------- hwnd = FindWindow(vbNullString, "Untitled-Notepad") 'находим хэндл окна "Notepad" hMenu = GetMenu(hwnd) 'находим хэндл окна меню hMenuItm = GetMenuItemID(hMenu, 0) 'находим хэндл "File" PostMessage hMenuItm, WM_COMMAND, 0, 0 'Открыть "File" в Menu hMenuSub = GetSubMenu(hMenuItm, 1) 'находим хэндл "Open" в SubMenu PostMessage hMenuSub, WM_COMMAND, 0,0 'Открыть "Open" в SubMenu' ----------------------------------------------------- hwndOpen = FindWindow(vbNullString, "Open") 'находим хэндл окна "Open" hwndBtnOpen = FindWindowEx(hwndOpen, "Button", "Open")'находим хэндл кнопки "Open" SendMessage hwndOpen, WM_ACTIVATE, 1&, 0 'делаем окно "Open" активным выбрать нужный файл-????????- не знаю как это сделать SendMessage hwndBtnOpen, BM_CLICK, 0, 0 'нажать кнопку "Open" End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 20:44 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Так же найти хендл поля "Имя файла", и прописать туда текст с именем файла. Через SendMessage, например. А потом "Open". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 10:49 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
текст с именем файла с полным путём , да. В этом диалоге (Открытие файла) не обязательно же по папкам путешествовать, можно просто вписать нужное имя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 10:51 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Дело в том , что я специально задал вопрос по Notepad, потому что он у всех под рукой и можно коды мои проверить! А мои файлы .РРО можно открыть только, если, именно в моем приложении Металикс "путешествовать"!!! А в данном случае- Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long hwnd = FindWindow(vbNullString, "Untitled-Notepad") -почему то возращает "0", значит не находит "Untitled-Notepad"!!!! ПОЧЕМУ???? и т. д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 11:30 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Может. заголовок не совпадает. У меня находит, но у меня строка выглядит так: MsgBox FindWindow(vbNullString, "Текстовый документ.txt - Блокнот") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 12:14 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Значит заголовок окна неправильно записываешь. У меня все прекрасно находит. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Можно также найти блокнот по классу окна, Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вызываешь так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 13:06 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Может, лучше искать по классу? Вроде у Блокнота класс окна "Notepad" Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 13:23 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Пользователь2Можно также найти блокнот по классу окна, Опоздал я :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 13:24 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Я пошел другим путем, но и тут вопросы!!! '--------------------------------------------------- Private Sub Command1_Click() Dim RetVal '--------------------------------------------------- RetVal = Shell("Notepad.exe", vbNormalFocus) ' AppActivate RetVal '----------------------------------------------------- SetCursorPos 30, 40 Нажать левую кнопку на мышке-как это записать? End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 15:12 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
vallot Нажать левую кнопку на мышке-как это записать? Краткое описание - получить hwnd top-most окна по этим координатам, послать ему (окну) сообщение WM_LBUTTONDOWN, потом WM_LBUTTONUP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 15:42 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Public Declare Function GetMenu Lib "user32" (ByVal Hwnd As Long) As Long Public Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long '========================================================================== Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long '--------------------------------- Private Sub Command1_Click() Dim Hwnd As Long Dim RetVal Const MK_LBUTTON = &H1 Const MK_LBUTTONUP = нету числа Const WM_LBUTTONDOWN = &H201 '--------------------------------------------------- RetVal = Shell("Notepad", vbNormalFocus) SetCursorPos 30, 40 - установить курсор Hwnd = FindWindow(vbNullString, "Untitled - Notepad") - найти хэндл SendMessage Hwnd, WM_LBUTTONDOWN(MK_LBUTTON, 30, 40) SendMessage Hwnd, WM_LBUTTONDOWN(MK_LBUTTONUP, 30, 40)--тоже непонятно как записать правильно, вроде все эти параметры нужны??? End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 19:30 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Ну вот как мне самоучке не запутаться, судите сами. Мне нужно кликнуть левой кнопкой мышки (курсор установлен), мне предлагают использовать команду WM_LBUTTONDOWN. Отлично, иду на сайт MSDN, нахожу синтаксис: авторWM_LBUTTONDOWN fwKeys = wParam; xPos = LOWORD(lParam); yPos = HIWORD(lParam); fwKeys=MK_LBUTTON Вроде все понятно, но идем дальше: Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" _ (ByVal Hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long PostMessage Hwnd, WM_LBUTTONDOWN, MK_LBUTTON, lParam А параметр lParam состоит еще из двух параметров- x,y ! Получается лишнее количество параметров по сравнению с обьявлеными параметрами!!!А примеров нет, вот методом тыка и бьюсь, результата нет!!! Поэтому я и прошу с примерами!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2005, 09:37 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Все, что хотел сделать в Металиксе, я сделал в Notepad и все сработало, но в самом Металиксе не идет! ------------------------------------------------------ Потому что в Notepad можно найти хэндлы меню,кнопок,вообщем все, что находится на главном окне Notepad, а в Металиксе нет! --------------------------------------------------- Проверил с помощью Winspector окно Металикса - не отражается хэндл меню и кнопок! Есть только хэндл главного окна и тулбаров, что делать не знаю! (Кстати Solid Edge так же построен). Что делать, не знаю!? Как кнопки или меню нажимать,какими командами? Как их определить? Можно с SetcursorPos установить курсор прямо на кнопку, но как потом нажать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2005, 00:16 |
|
||
|
Нажать кнопку меню в другой программе?
|
|||
|---|---|---|---|
|
#18+
Наконец то я сделал то, что хотел! Сейчас то я уже понял, что Andres 1 прямо "на тарелочке" все выложил, но у меня сразу не получилось и я начал метаться, прочел по этой теме все что мог, но зато теперь мне все понятно (так я думаю :) )! Всем кто помогал большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2005, 09:42 |
|
||
|
|

start [/forum/topic.php?all=1&fid=61&tid=2177018]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
426ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 791ms |

| 0 / 0 |
