Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Копировать из калькулятора Добавлено: 29.03.07 02:43  

Автор вопроса:  ZagZag | ICQ: 295002202 
Как получить результат вычислений их программы "Калькулятор".
Киньте, плз, реально рабочий пример, а то я уже часа 2 этого добиться
не могу (( Устал, спать хочу

Ответить

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

Номер ответа: 1
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #1
Добавлено: 29.03.07 09:10
Private Sub Label1_Click()
Clipboard.Clear
Clipboard.SetText Label1.Caption 'копировать в буфер
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #2
Добавлено: 29.03.07 09:36
MSDN тебе тут в помощь... ладно у меня 31 IE открыт (!!!!!!!!!!!!!!!) ... и FlashGet... щас из нета выхожу

Ответить

Номер ответа: 3
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #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
Автор ответа:
 Viper



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #4 Добавлено: 29.03.07 10:08
Интересно, Боцман вопрос читал?

Автор, пошли калькулятору Ctrl+c через SendKeys, а затем получи содержимое буфера

Clipboard.GetText

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 29.03.07 15:09
Можно FindWindowEx(FindWindow "Калькулятор",класс текстбокса) и послать ему WM_COPY.

Ответить

Номер ответа: 6
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #6
Добавлено: 29.03.07 15:50
Можно FindWindowEx(FindWindow "Калькулятор",класс текстбокса) и послать ему WM_COPY.
][акер, это делается в C++, ну в С но не в VB...
Есть много других методов...

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 29.03.07 16:28
Почему это нельзя в VB?

Ответить

Номер ответа: 8
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #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
Автор ответа:
 ZagZag



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-сайт: houselab.narod.ru
 Профиль | | #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-сайт: houselab.narod.ru
 Профиль | | #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-сайт: houselab.narod.ru
 Профиль | | #12
Добавлено: 29.03.07 22:42
"Êàëüêóëÿòîð"

- это вообще то было "Калькулятор"
Глюки какие - то :)))

Ответить

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



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #13 Добавлено: 29.03.07 23:22
Серёга, спасибо, твой пример реально помог!
Дело было наверное в ByVal при SendMessage и функции StrConv

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #14 Добавлено: 29.03.07 23:47
][акер, это делается в C++, ну в С но не в VB...
Сразу видно твои знания и в том, и в другом, и в третем :) А делается это на всём кто умеет работать с API.

Ответить

Страница: 1 |

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



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