Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

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

 

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

Автор вопроса:  vall

Ответить

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

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #16
Добавлено: 15.10.05 06:03

И сотворил Бог все программы по образу и подобию Автокада

Именно так и есть

 Да, Штырлиц бы наверное уже застрелился.
 Так, иду на Рабочий стол и ищу там значок Автокада. Так, нахожу "AutoCAD LT 2002" - не ахти, но нам без разницы. Отодвигаю его в сторону. Открываю "Мой компьютер" -> "Мои Документы", беру первый попавшийся файл "оус1.dwg" и перетаскиваю его аж на Рабочий стол на ярлык атвокада. Операция называется Drag&;Drop(перенести и оставить). Отпускаю левую кнопку мыши. Запускается автокад и, о чудо, в нём открывается файл "оус1.dwg". Это означает что программа автокад в качестве параметра получила файл оус1.dwg.

Ответить

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



Вопросов: 6
Ответов: 31
 Профиль | | #17 Добавлено: 15.10.05 09:20
Да, Штырлиц бы наверное уже застрелился

"Штирлиц знал, но он не знал-знает ли это Борман?"Точно так же(Drag&;Drop) у Металикса, я думаю, запустятся файлы .DFT, Но у него еще есть файлы .PPD и .PPO запустятся ли они так же,
не знаю, после выходных проверю, сообщу!

Ответить

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



Вопросов: 6
Ответов: 31
 Профиль | | #18 Добавлено: 16.10.05 15:05
Ну вот проверил, графические файлы.дфт запускаются,
а "текстовые" *.РРО и *.РРд не запускаются!
Их только из самой программы запустить можно!
Проверил с Winspector Металикс, не отражаются меню,
кнопки! Есть только главное окно и тулбары, что делать
не знаю! (Кстати Solid Edge так же построен).
Что делать, стреляться или подскажите!?:)

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #19
Добавлено: 17.10.05 05:03
Мануал пробовал читать? Может его можно как сервер вызывать через CreateObject?
Вызвать диалог открытия можно например эмуляцией нажатия горячих клавишь. Например CTRL+0. См. keybd_event. Если не устраивает, шли сообщение WM_COMMAND с идентификаторами кнопок тулбара. Идентификаторы находишь каким нибудь оконным инструментом или пишешь сам программу.

Ответить

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



Вопросов: 6
Ответов: 31
 Профиль | | #20 Добавлено: 18.10.05 10:08
Еще неделю назад я бы ничего не понял из того, что ты написал, но "век живи-век учись!" Сколько я перечитал
всякого...и не зря! Есть продвижение, где сам, где с помощью участников форума, но задача почти решена! Осталось пару нерешенных вопросов! Так как, в принципе,
я разобрался как управлять чужими окнами, сейчас я,
наверное, смогу "членораздельно" задать эти вопросы!(?)
-----------------------------------------------------
Первое-в мануале только о работе в Металиксе!
-----------------------------------------------
Чтобы запустить параметрические программы, мне надо в Металиксе открыть два окна(из одного попадаеешь в другое).
Первое окно должно открываться из самой среды Металикса.
В среде Металикса есть "ToolBar1",(это создается пользователем, есть такая опция во многих программах) на нем находится кнопка "Run Order file"(она то мне и нужна), но она никак не отображается в Wininspector!
 Кстати класс тулбаров вот такого примерно вида:
 "Afx 01000000:8:01000100:00011010:00000000"Кликал по кнопке и просматривал Message, и подозреваю, что с кнопкой как то связан Message "WM_PAINT"
Другого ничего не нахожу!
Вот это момент клика:
---------------------------------------------
WM_STCURSOR Hit test code:HTCLIENT Mouse message ID:513
WM_LBUTTONDOWN Mouse coordinates: 43,15
WM_PAINT wParam:0x00000000 lParam:0x00000000
message return-value="1"
WM_PAINT Return:0x00000000
WM_MOUSEMOVE POINT:43,15 MK_LBUTTON
WM_TIMER ID:57345 Callback:0x00000000
WM_LBUTTONUP wParam:0x00000000 lParam:0x000f002b

------------------------------------------------------
Как отсюда что нибудь нарыть???
===================================================

Первое окно- это стандартное диалоговое окно типа "Open","Save"-здесь проблема в том, когда я вставляю
текст файла "55.РРО", то пишется какая то билиберда,
как то надо перевести в Unicod или что,или как?

dim s As String
s = "55.РРО"
SendMessage hEdit, WM_SETTEXT, 0, s

Вот такие вопросы!

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #21
Добавлено: 19.10.05 05:17
Кликал по кнопке и просматривал Message, и подозреваю, что с кнопкой как то связан Message "WM_PAINT"

 Ещё как сваязан, этот сообщений приходит в окно при перерисовке. Как ты им собираешся открыть файл, для меня остаётся загадкой. Тулбар посылает не сообщения, а т.н. "уведомления" родительскому окну. Смотреть сообщения нужно не у самого тулбара, а у его формы.
Вот примерно как осуществлять субклассинг програмно (на PowerBasic).
'Меняем оконную процедуру (например при загрузке)
gOldSubClassProc = SetWindowLong(hTextBox1, %GWL_WNDPROC, CodePtr(SubClassProc))

Function SubClassProc(ByVal hWnd&, ByVal wMsg&, ByVal wParam&, ByVal lParam&;) As Long
 'Вот здесь кидаешь все параметры в лог
 '...
 'Вызов родной процедуры сообщений
 Function = CallWindowProc(gOldSubClassProc, hWnd&, wMsg&, wParam&, lParam&;)
End Function

'Ну и в конце отключаешь субклассирование
SetWindowLong hTextBox1, %GWL_WNDPROC, gOldSubClassProc

Ответить

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



Вопросов: 6
Ответов: 31
 Профиль | | #22 Добавлено: 19.10.05 13:29
Вот окончательный вариант с двумя вопросами:
Private Sub Command1_Click()
Dim hWndMet As Long
Dim hWndTbl As Long
Dim hWndTb As Long
Dim hWndOr As Long
Dim hwndBtnRun As Long
Dim hwndBtnExt As Long
Dim hEd As Long
Dim s As String
Dim hdc As String
Dim hWndPpo As Long
Dim hwndTblr As Long
Dim RetVal, PrevProc
Dim iReturn As Long
 
 [B]s = "C:\Metalix\P\PPO\1.ppo"[/B] - [I]как показать в Unicode???[/I]
'========================================================
  RetVal = Shell("C:\Metalix\cncKad2004.75\gkadw.exe", 1)
  SendKeys "{ENTER}", True
 '-------------------------------------------
hwnd = FindWindow(vbNullString, "No Part  'F'  FINNPOWER / F625      20FI-C  INSERT.FET - cncKad2004 V7.5";)
SetActiveWindow (hwnd)
PostMessage hwnd, WM_COMMAND, 33268, 0
'--------------------------------------------------------
hWndOr = FindWindow(vbNullString, "Open Parametric part order";)
hEd = FindWindowEx(hWndOr, 0, "ComboBoxEx32", vbNullString)
hwndBtnOpen = FindWindowEx(hWndOr, 0, "Button", "&Open";)
SendMessage hEd, WM_SETTEXT, 0, s
SendMessage hWndOr, WM_ACTIVATE, 1&, 0
SendMessage hwndBtnOpen, BM_CLICK, 0, 0

'--------------------------------------------------------
hWndPpo = FindWindow(vbNullString, "C:\Metalix\P\PPO\1.PPO";)
hwndTblr = FindWindowEx(hWndPpo, 0, "ToolbarWindow32", vbNullString)
SendMessage hwndTblr, WM_ACTIVATE, 1&, 0
PostMessage hwndTblr, WM_COMMAND, 33277, 0
SendMessage hWndPpo, WM_ACTIVATE, 1&, 0
[B]iReturn = PostMessage(hWndPpo, WM_QUIT, 0&, 0&;)[/B]-
[I] - зарывает весь Металикс, а надо только это окно(у него есть стандартная кнопка справа сверху "Close";)   [/I]

End Sub


Вот такие вопросы!

Ответить

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



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


 Профиль | | #23 Добавлено: 19.10.05 14:49
как показать в Unicode???

Сначала покажи, как объявлена SendMessage.

зарывает весь Металикс, а надо только это окно

Интерфейс MDI?

Ответить

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



Вопросов: 6
Ответов: 31
 Профиль | | #24 Добавлено: 19.10.05 15:22
Сначала покажи, как объявлена SendMessage.


[CODE]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/CODE]

Интерфейс MDI?


 Вот с таким классом #32770 типа диологового!

Ответить

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



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


 Профиль | | #25 Добавлено: 19.10.05 17:52
Угу. Так и думал.
SendMessage hEd, WM_SETTEXT, 0, ByVal s


Вот с таким классом #32770 типа диологового!

32770 - это довольно много всяких вещей.
Ты закрывать собираешься что?

Ответить

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



Вопросов: 6
Ответов: 31
 Профиль | | #26 Добавлено: 19.10.05 18:52
32770 - это довольно много всяких вещей.
Ты закрывать собираешься что?

А вот это же самое диалоговое окно, но почему то
закрывается весь Металикс
PostMessage(hWndPpo, WM_QUIT, 0&, 0&;)

вроде обращаюсь к "hWndPpo" правильно,
а хэндл среды Металикса другой-"hwnd"!

Ответить

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



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


 Профиль | | #27 Добавлено: 19.10.05 23:01
А что, диалоговое окно надо крестом закрывать? Не по OK кликать?

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #28
Добавлено: 20.10.05 05:15
А если так?
EndDialog
The EndDialog function destroys a modal dialog box, causing the system to end any processing for the dialog box.

BOOL EndDialog(
  HWND hDlg,    // handle to dialog box
  int nResult   // value to return
);

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #29
Добавлено: 20.10.05 05:42
Если не поможет, пошли ему %WM_SYSCOMMAND, %SC_CLOSE

Ответить

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



Вопросов: 6
Ответов: 31
 Профиль | | #30 Добавлено: 20.10.05 16:55
Наконец то я пришел к финалу!...НО почему то программа отлично работает, когда я ее тестирую через Debag , а если запускаю кнопкой с Exelя(она и сделана в нем), то она останавливается на этой строке, не выполняя ее:
PostMessage hwndTblr, WM_COMMAND, 33277, 0


Игрался полдня, но.........??????????????

'=================================
Private Sub Command1_Click()
Dim hWndLis As Long
Dim hwndBtnOk As Long
Dim hwnd As Long
Dim hWndOrd As Long
Dim hwndBtnOpen As Long
Dim hEd As Long
Dim hWndPpo As Long
Dim hwndTblr As Long
Dim RetVal
Dim Order As String
Dim iReturn As Long
'========================
Order = Sheet1.Cells(1, 1)
''=======================================================
RetVal = Shell("C:\Metalix\cncKad2004.75\gkadw.exe", 1)
Do While hwnd = 0
SendKeys "{ENTER}", True
'-------------------------------------------
hwnd = FindWindow(vbNullString, "No Part 'F' FINNPOWER / F625 20FI-C - cncKad2004 V7.5";)
Loop
SetActiveWindow (hwnd)
PostMessage hwnd, WM_COMMAND, 33268, 0
''-------------------------------------------------------
Do While hWndOrd = 0
hWndOrd = FindWindow(vbNullString, "Open Parametric part order";)
Loop
SendMessage hWndOrd, WM_ACTIVATE, 1&, 0
hEd = FindWindowEx(hWndOrd, 0, "ComboBoxEx32", vbNullString)
SendMessageByString hEd, WM_SETTEXT, 0&, Order
hwndBtnOpen = FindWindowEx(hWndOrd, 0, "кнопка", "&Open";)
SendMessage hwndBtnOpen, BM_CLICK, 0, 0

''-------------------------------------------------------
Do While hWndPpo = 0
hWndPpo = FindWindow(vbNullString, "C:\Metalix\P\PPO\" & Order & ".PPO";)
Loop
SendMessage hWndPpo, WM_ACTIVATE, 1&, 0
hwndTblr = FindWindowEx(hWndPpo, 0, "ToolbarWindow32", vbNullString)
PostMessage hwndTblr, WM_COMMAND, 33277, 0 '----?????????
iReturn = PostMessage(hWndPpo, WM_CLOSE, 0&, 0&;)

End Sub

Ответить

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

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



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