Страница: 1 |
Вопрос: Копировать из калькулятора | Добавлено: 29.03.07 02:43 |
Автор вопроса: ![]() |
Как получить результат вычислений их программы "Калькулятор".
Киньте, плз, реально рабочий пример, а то я уже часа 2 этого добиться не могу (( Устал, спать хочу |
Ответы | Всего ответов: 14 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 295725312 Вопросов: 53 Ответов: 830 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 29.03.07 09:10 |
Private Sub Label1_Click()
Clipboard.Clear Clipboard.SetText Label1.Caption 'копировать в буфер End Sub |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 38 Ответов: 190 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 29.03.07 09:36 |
MSDN тебе тут в помощь... ладно у меня 31 IE открыт (!!!!!!!!!!!!!!!) ... и FlashGet... щас из нета выхожу |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 295725312 Вопросов: 53 Ответов: 830 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 29.03.07 10:08 |
Может я не так понял тебе, что из стандартного?
Private Sub Command1_Click()
Dim ReturnValue, I ReturnValue = Shell("CALC.EXE", 1) AppActivate ReturnValue Clipboard.Clear SendKeys "^{C}", True End Sub Может так? |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 249094859 Вопросов: 0 Ответов: 310 |
Профиль | Цитата | #4 | Добавлено: 29.03.07 10:08 |
Интересно, Боцман вопрос читал?
Автор, пошли калькулятору Ctrl+c через SendKeys, а затем получи содержимое буфера Clipboard.GetText |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #5 | Добавлено: 29.03.07 15:09 |
Можно FindWindowEx(FindWindow "Калькулятор",класс текстбокса) и послать ему WM_COPY. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() Вопросов: 38 Ответов: 190 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 29.03.07 15:50 |
Можно FindWindowEx(FindWindow "Калькулятор",класс текстбокса) и послать ему WM_COPY.
][акер, это делается в C++, ну в С но не в VB... Есть много других методов... |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 29.03.07 16:28 |
Почему это нельзя в VB? |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 295725312 Вопросов: 53 Ответов: 830 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 29.03.07 17:06 |
Интерестно, а как каклькулятор по казахски или по грузински? Я для себя сделал так, нормально работает.
Option Explicit
'*********************************для вызова калькулятора********************** Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) '****************************************************************************** Dim ReturnValue, I '**********************изменяем раскладку на англ.********************** Private Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal FLAGS As Long) As Long Private Const KLF_ACTIVATE = 1 Public Sub SetLanguage(ByVal s As String) Select Case UCase(Left(s, 1)) Case "R" LoadKeyboardLayout "00000419", KLF_ACTIVATE 'Имя раскладки клавиатуры - строка из 8 символов. Например, имя русской раскладки - "00000419" Case "U" LoadKeyboardLayout "00000422", KLF_ACTIVATE Case "E" LoadKeyboardLayout "00000409", KLF_ACTIVATE End Select End Sub Private Sub Command1_Click() ReturnValue = Shell("CALC.EXE", 1) AppActivate ReturnValue End Sub Private Sub Command2_Click() SetLanguage ("E" ![]() AppActivate ReturnValue Clipboard.Clear SendKeys "^{C}", True End Sub если надо потом раскладку сам вернет назад. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ICQ: 295002202 Вопросов: 87 Ответов: 1684 |
Профиль | Цитата | #9 | Добавлено: 29.03.07 19:39 |
Желательно реализовать без изменения буфера обмена
hForegroundWindow - hWnd окна калькулятора hEdit = FindWindowEx(hForegroundWindow, ByVal 0, "Edit", vbNullString)
lngTextLength = SendMessage(hEdit, WM_GETTEXTLENGTH, 0&, 0& ![]() strCalcResult = String$(lngTextLength, 0) SendMessage hEdit, WM_COPY, 0, 0 strCalcResult = Clipboard.GetText 'SendMessage hEdit, WM_GETTEXT, lngTextLength, VarPtr(strCalcResult) MsgBox strCalcResult hEdit - hWnd поля ввода в калькуляторе (проверено, работает) lngTextLength - Длина текста в поле ввода + vbNullChar WM_COPY - Не работает (может не так использую?) WM_GETTEXT - Не работает (Правильно ли lParam указываю?) |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 262809473 Вопросов: 17 Ответов: 561 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 29.03.07 22:37 |
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 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 Const WM_GETTEXT = &HD Private Const WM_GETTEXTLENGTH = &HE Private Sub Form_Load() Dim l As Long, ret As Long, hwnd As Long hwnd = FindWindow(ByVal vbNullString, "Калькулятор" ![]() hwnd = FindWindowEx(hwnd, ByVal 0, "Edit", vbNullString) l = SendMessage(ByVal hwnd, WM_GETTEXTLENGTH, ByVal 0&, ByVal 0& ![]() t = Space(128) ret = SendMessage(ByVal hwnd, WM_GETTEXT, ByVal 128, ByVal StrPtr(t)) t = StrConv(t, vbUnicode) MsgBox t End Sub |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 262809473 Вопросов: 17 Ответов: 561 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 29.03.07 22:40 |
Нет, даже вот так:
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 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 Const WM_GETTEXT = &HD Private Sub Form_Load() Dim ret As Long, hwnd As Long hwnd = FindWindow(ByVal vbNullString, "Êàëüêóëÿòîð" ![]() hwnd = FindWindowEx(hwnd, ByVal 0, "Edit", vbNullString) t = Space(128) ret = SendMessage(ByVal hwnd, WM_GETTEXT, ByVal 128, ByVal StrPtr(t)) t = StrConv(t, vbUnicode) MsgBox t End Sub |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 262809473 Вопросов: 17 Ответов: 561 |
Web-сайт: Профиль | Цитата | #12 | Добавлено: 29.03.07 22:42 |
"Êàëüêóëÿòîð"
- это вообще то было "Калькулятор" Глюки какие - то ![]() |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ICQ: 295002202 Вопросов: 87 Ответов: 1684 |
Профиль | Цитата | #13 | Добавлено: 29.03.07 23:22 |
Серёга, спасибо, твой пример реально помог!
Дело было наверное в ByVal при SendMessage и функции StrConv |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #14 | Добавлено: 29.03.07 23:47 |
][акер, это делается в C++, ну в С но не в VB... Сразу видно твои знания и в том, и в другом, и в третем ![]() |
Страница: 1 |
|