Передать текст чужому приложению.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

Передать текст чужому приложению.

Сообщение dima-pol » 25.01.2011 (Вт) 23:16

Как средствами VB6 (API, sendmessage, и пр.) вставить некий текст в окно редактирования или контрол текущего приложения (word, notepad, IE,..), находящийся в фокусе ввода?

Спасибо.

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Re: Передать текст чужому приложению.

Сообщение Ruslan2000 » 26.01.2011 (Ср) 6:33

Код: Выделить всё

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetForegroundWindow& Lib "user32" ()
Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Public Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Const WM_CHAR = &H102
Public Const WM_INPUTLANGCHANGEREQUEST = &H50
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 Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Sub kb1(ByRef l1 As String, ByRef lang1 As String)

    If Len(l1) = 0 Then Exit Sub

    Dim l101, hwin, lCodeKeybord As Long
    Dim forto_kb As Long
    Dim vk_kb As Long
   
    hwin = FindWindow(класс окна, "Заголовок окна")
или  hwin =GetForegroundWindow&()
         
       If lang1 = "ru" Then
                lCodeKeybord = GetKeyboardLayout(GetWindowThreadProcessId&(GetForegroundWindow&, 0&))
                If lCodeKeybord <> 68748313 Then
                PostMessage hwin, WM_INPUTLANGCHANGEREQUEST, 0, 68748313 
                ActivateKeyboardLayout 68748313, 0
                Sleep 100
                end if
        End If

       If lang1 = "en" Then
                lCodeKeybord = GetKeyboardLayout(GetWindowThreadProcessId&(GetForegroundWindow&, 0&))
                If lCodeKeybord <> 67699721 Then
                PostMessage hwin, WM_INPUTLANGCHANGEREQUEST, 0, 67699721
                ActivateKeyboardLayout 67699721, 0
                Sleep 100
                end if
        End If
   
       l101 = Len(l1)
        For forto_kb = 1 To l101
            vk_kb = Asc(Mid(l1, forto_kb, 1))
            PostMessage hwin, WM_CHAR, vk_kb, &H100001
            Sleep 50
       
        Next
End Sub



Т.к. выдрал не сильно корректируя из своей проги, возможны мелкие ошибки или что-то не объявлено.
Как вариант - можно пригласить попа, освятить комп, вдруг это демоны?

dima-pol
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 03.11.2008 (Пн) 17:47

Re: Передать текст чужому приложению.

Сообщение dima-pol » 26.01.2011 (Ср) 23:02

Спасибо за код. Но что то не получается. Посмотрите пожалуйста мой пробный проект на основе Вашего примера.
Вложения
setText.zip
(6.23 Кб) Скачиваний: 69

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Re: Передать текст чужому приложению.

Сообщение Ruslan2000 » 27.01.2011 (Чт) 3:14

Это уже обсуждалось здесь, юзай поиск. В твоей программе посылка сообщений идет в главное окно, а в блокноте для ввода текста используется дочернее. Если не знаеш, как его определять используй лучше keybd_event. В инете куча примеров. Или используй spyxx для изучения структуры окон нужного приложения.

В твоем варианте программа будет работать только с теми приложениями, где ввод обрабатывается из главного окна, например "Командная строка" или 3dfx игры.
Как вариант - можно пригласить попа, освятить комп, вдруг это демоны?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 111

    TopList