Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 | 3 |

 

  Вопрос: Послать команды из VBA в другое приложение! Добавлено: 10.10.05 23:39  

Автор вопроса:  vall
Я не программист, простой самоучка.
----------------------------------------
Работаю на проге (программа Металикс написаная на С+),
вообщем делаю простые чертежи ставлю на них пробивочные инструменты и все это прога переводит в коды НС, а станки все это
пробивают.
---------------------------------------------------------------------------------
Стандартные детали я параметрирую(сам модуль параметрирования встроен в Металикс) . С помощью VBA я создаю файл.РРО, куда записываю параметры(ну там длина, ширина ит.д.) И теперь, что бы получить чертежи по этим параметрам я выполняю следущии действия:

===============================================
1)Открыть Металикс(Открывается интерфейс)
-------------------------------------------------------------
2) нажать кнопку "Run Parametric"(Открывается окно поиска файлов.РРО)
------------------------------------------------------------------------
3)Выбрать нужный файл.РРО(SELECT)
---------------------------------------------------------
4)нажать кнопку "OPEN"(Открывается файл.РРО с параметрами - это типа редактора, в нем есть кнопка "Run")
---------------------------------------------------------
5)нажать кнопку "Run"(создаются чертежи.DFT, что и требуется!)
---------------------------------------------------------
6)закрыть все
==============================================
---------------------------------------------------
Я написал программу(как смог) на VBA, где детали одного вида , но разных размеров должны пройти путь от заказа до программы NC, но вот эти пункты , кроме первого, я выполняю вручную!
Помогите программно выполнить их на VBA!
У меня не получается управлять через VBA
приложением Мetalix! Если надо какие доолнительные данные, я могу дать,
есть у меня Winspector!

Ответить

  Ответы Всего ответов: 36  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 11.10.05 00:57
А что, параметров командной строки нет случайно у металикса?..

Ответить

Номер ответа: 2
Автор ответа:
 vall



Вопросов: 6
Ответов: 31
 Профиль | | #2 Добавлено: 11.10.05 08:57

Вы имеете ввиду WM_COMMAND?

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 11.10.05 22:14
Мы имеем в виду metalix.exe c:\1.ppo или что-то подобное...

Ответить

Номер ответа: 4
Автор ответа:
 vall



Вопросов: 6
Ответов: 31
 Профиль | | #4 Добавлено: 12.10.05 23:19
Второй раз поднимаю эту тему, но теперь надеюсь что вопрос будет понятен до конца!!!
Прочел много помощи, вроде(?) делаю все правильно, но не получаю результата, ПОЧЕМУ???
Подскажите пожалуйста, сам уже неделю бьюсь!!!
--------------------------------------------------------------------------------
Эксперементирую с "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, "кнопка", "Open";)''''находим хэндл кнопки "Open"
SendMessage hwndOpen, WM_ACTIVATE, 1&, 0 ''''делаем окно "Open" активным
выбрать нужный файл-????????- не знаю как это сделать

SendMessage hwndBtnOpen, BM_CLICK, 0, 0 ''''нажать кнопку "Open"
End Sub
-------------------------------------
Проверял с помощью Debug, построчно.

Ответить

Номер ответа: 5
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #5 Добавлено: 13.10.05 00:47
Ох...

Не надо слать менюшкам сообщения, они им нужны как эскимосам тропический ливешь...


Повторю свой вопрос. У данной программы есть документированные средства взаимодействия как то, к примеру, ключи командной строки?

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 13.10.05 05:08
выбрать нужный файл-????????- не знаю как это сделать

 Ну, дальше находишь окно ListView со списком файлов и шлёшь ему его сообщения. По поводу командной строки,попробуй РРО-файл перетащить мышкой на прогу Металикс.

Ответить

Номер ответа: 7
Автор ответа:
 vall



Вопросов: 6
Ответов: 31
 Профиль | | #7 Добавлено: 13.10.05 09:23
К вопросу о коммандной строке, если имеется ввиду такая, как в автокаде(можно писать комманды), то нет! Есть просто строка информации,где показывает какую кнопку нажал!
А что в таком случае "эскимосам" нужно???

Ответить

Номер ответа: 8
Автор ответа:
 vall



Вопросов: 6
Ответов: 31
 Профиль | | #8 Добавлено: 13.10.05 11:31
А в данном случае-

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"!!!!
ПОЧЕМУ???? и т. д.

Ответить

Номер ответа: 9
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #9 Добавлено: 13.10.05 12:47
К вопросу о коммандной строке, если имеется ввиду такая, как в автокаде(можно писать комманды), то нет! Есть просто строка информации,где показывает какую кнопку нажал!

То ли прикалывается человек, то ли действительно никогда компьютера не видел, понять не могу...

ПОЧЕМУ????

Видимо потому, что нет в системе окна с заголовком "Untitled-Notepad"?

Ответить

Номер ответа: 10
Автор ответа:
 vall



Вопросов: 6
Ответов: 31
 Профиль | | #10 Добавлено: 13.10.05 14:22
Страно, если на окне надпись"Untitled-Notepad";(Caption)?!
-----------------------------------------------------
Да не прикалываюсь я ,парадокс, знаю порядка десяти
программ самых разных , работаю на трех сразу, вот и в голове все переплелось, что и где и из какой программы!

Ответить

Номер ответа: 11
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #11 Добавлено: 13.10.05 16:57
надпись"Untitled-Notepad";(Caption)

А пробелов там случаем нет по обе стороны дефиса?

Ответить

Номер ответа: 12
Автор ответа:
 vall



Вопросов: 6
Ответов: 31
 Профиль | | #12 Добавлено: 13.10.05 19:29

Да, причина в отсутствии пробелов по обе стороны дефиса!

Ответить

Номер ответа: 13
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #13
Добавлено: 14.10.05 07:04
К вопросу о коммандной строке, если имеется ввиду такая, как в автокаде(можно писать комманды), то нет!

 И сотворил Бог все программы по образу и подобию Автокада. :) Ладно, тебя просто запутали. На самом деле "командная строка" - это параметр, передаваемый программе.
 Мог бы и сам догадаться.
 Штырлиц выстрелил Мюллеру в голову. Пуля срикошетила и ударилась о стену. Броневой, подумал Штырлиц.

Ответить

Номер ответа: 14
Автор ответа:
 vall



Вопросов: 6
Ответов: 31
 Профиль | | #14 Добавлено: 14.10.05 09:22
И сотворил Бог все программы по образу и подобию Автокада

Именно так и есть , у Autocad,Solid Edge,Solid Works, Metalix(CNC), Jetcam(CNC)- у всех есть рисовалка!

Ну вот как мне самоучке не запутаться, суди сам.
Мне нужно кликнуть левой кнопкой мышки (курсор установлен), мне предлагают использовать команду
 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,[B]lParam[/B]

А параметр lParam состоит еще из двух параметров-x,y!
А примеров нет, вот методом тыка и бьюсь,
результата нет!!! Поэтому я и прошу с примерами!!!

Ответить

Номер ответа: 15
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #15 Добавлено: 14.10.05 12:15
А я тебе говорю пытаться не мышкой кликнуть, а-таки посмотреть в документации, какие средства общения поддерживает данная программа.
Ибо чем они круче, программы эти рисовательные, тем больше в них возможностей автоматизации, даже в фотошопе есть...

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам