Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: TextBox чужого приложения Добавлено: 21.11.06 15:58  

Автор вопроса:  -АлександР- | Web-сайт: sham.clan.su
Привет всем!
Я написал прогу, откомпилировал...
Нужно: через другую свою прогу записать в текстбокс предыдущей строчку текста.
Это вообще можно? И какие АПИ для этого использовать?
Заранее спасибо!

Ответить

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

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



Вопросов: 6
Ответов: 171
 Профиль | | #1 Добавлено: 21.11.06 17:37

hWnd=FindWindow("","название(caption) диалога на котором находится ТекстБох";)
hTxtBox=GetDlgItem(hWnd,IDC_TextBox)
SetWindowText(hTxtBox, " New text";) или SendMessage(hTxtBox,WM_SETTEXT,0, PointerToNullTerminatedString)

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 21.11.06 22:57
Фишка если текстбоков много :) А записать нужно именно в определенный :) Но я тогда перечесляю дочерние окна, смотря если класс окна текст бокс, определяю его координаты, по координатам орентируюсь тот ли текстбокс, ну а далее хендел его и вперед :) Это так, кстати... :) Если надо, могу пример выложить...

Ответить

Номер ответа: 3
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #3
Добавлено: 21.11.06 23:20
IDC_TextBox и PointerToNullTerminatedString - не нашел.

Если надо, могу пример выложить...

Никогда не лишне :)))))
Буду признателен

Ответить

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



Вопросов: 6
Ответов: 171
 Профиль | | #4 Добавлено: 22.11.06 02:55
Я написал прогу, откомпилировал...
Нужно: через другую свою прогу


Если Вы писали первую прогу сами и откомпилировали ее,
значит Вы назначали ID-контрол номер для текстбоха,
следовательно IDC_TextBox=тому что Вы назначали.
Если же програма не ваша, то можно воспользоваться
WinSpy-ем чтобы найти номер контрола для нужного
текстбокса.

PointerToNullTerminatedString = указатель на строку,
т.е. на строку текста которую Вы хотите вставить в "чужой" текстбокс. В конце строки дожен быть +CHR$(0)

Ответить

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



Вопросов: 6
Ответов: 171
 Профиль | | #5 Добавлено: 22.11.06 03:06
Фишка если текстбоков много :)


У каждого текстбокса свой номер, если програма действительно была написана одним и тем же автором,
то это(номер контрола) должно быть известно.

Но я тогда перечесляю дочерние окна


Достаточно найти хэндл диалога на котором расположены
текстбоксы(контролы). Название диалога (caption) видно
не только автору. Это самое название подставляется в АПИ
FindWindow("","Текст который находитьсяна самом верху диалогового окна";)

FindWindow вернет хэндл диалога


GetDlgItem вернет непосредственно хэндл искомого текстбокса hTxtBox=GetDlgItem(hWnd,IDC_TextBox)

SetWindowText установит новый текст

или все это пишется в одну строчку

SetWindowText(GetDlgItem(FindWindow("","SuperProga";),IDC_TextBox)
, "New text";)

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 22.11.06 14:23
JMP, не путай людя

If the target window is owned by the current process, SetWindowText causes a WM_SETTEXT message to be sent to the specified window or control.

To set the text of a control in another process, send the WM_SETTEXT message directly instead of calling SetWindowText.

Ответить

Номер ответа: 7
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #7
Добавлено: 22.11.06 14:57
ID-контрол номер
Всё равно не понял. Первое, что приходит на ум HDC(но у текстбока его нет), Name (врядли для АПИ???), hwnd(но его нельзя назначить, он есть сам по себе).

У каждого текстбокса свой номер, если програма действительно была написана одним и тем же автором,
то это(номер контрола) должно быть известно.
Возможно я туплю.
1) Открыл новый проект
2) Положил на форму, например, кнопку
3) Никакого номера я ей не назначал. Если то, что вы говорите правда, то наверное он был создан автоматически. Но как его узнать?

Ответить

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



Вопросов: 6
Ответов: 171
 Профиль | | #8 Добавлено: 22.11.06 18:50
здесь http://www.vbnet.ru/forum/show.aspx?id=123374 примеры

ID-контрол номер
Всё равно не понял.


У каждого контрола в Винде есть свой номер,
посмотрите, в примерах откуда они беруться.
там я ввел ручками, а при создание в разных рисовалках
диалогов (ПбФормс, ФайрФлай,Феникс) они (номера) назначаються автоматически.


1) Открыл новый проект
2) Положил на форму, например, кнопку


VB это делает автоматом, но кажется где то в пропертях
можно найти и поменять.
Для остального народа С-шникох, дельфинов, ПБшников
это must to know. Вообще-то это не прихоть какого-то языка, а как система (OS) управляеться со своими окошками


Если то, что вы говорите правда, то наверное он был создан автоматически. Но как его узнать?


Честное слово - правда :)

Как узнать ? Я же уже написал, WinSpy-ем
ну например вот этим http://catch22.net/software/zips/WinSpy17.zip

Ответить

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



Вопросов: 6
Ответов: 171
 Профиль | | #9 Добавлено: 22.11.06 18:56
JMP, не путай людя


Так я и не путаю (см.мой первый ответ)
Я просто понять не могу своя ли это програма или чужая,
поэтому и привел еще в первом посте оба варианта

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 22.11.06 23:46
Option Explicit
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long

Public Counter As Integer
Public TextBoxTxt() As String
Dim hWin As Long, hParent As Long

Function EnumWinProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim c As Byte, t As Integer
Dim sText As String
Dim sClass As String

        sClass = Space$(128)
        c = GetClassName(hwnd, sClass, 128)
         
        If c > 0 Then
            sClass = Left$(sClass, c)
            If sClass Like "*TextBox*" Or sClass Like "*Edit*" Then
                sText = Space$(128)
                t = GetWindowText(hwnd, sText, 128)
                ReDim Preserve TextBoxTxt(Counter)
                TextBoxTxt(Counter) = Left$(sText, t)
                Counter = Counter + 1
            End If
        End If

    EnumWinProc = 1
End Function

Public Function FindTextBoxes(hWndParent As Long) As Long
    hParent = hWndParent
     
    EnumChildWindows hParent, AddressOf EnumWinProc, 0&
    
    FindTextBoxes = 1
End Function


FindTextBoxes Me.hwnd

For i% = 0 To UBound(TextBoxTxt)
s$ = s$ & TextBoxTxt(i%) & vbCrLf
Next i%
MsgBox s$

Ответить

Номер ответа: 11
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #11
Добавлено: 25.11.06 10:40
Спасибо, HAcker? ,буду изучать!

ТОлько почму он i%, s$ считает необъявленными?
Что значат % и $?

Ответить

Номер ответа: 12
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #12
Добавлено: 25.11.06 10:42
Объявление :)

Ответить

Номер ответа: 13
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #13
Добавлено: 25.11.06 14:06
Объявление :)
Так оно же не защитывается.
У меня только так работает:
dim s%
s = 4
Так ошибка:
s% = 4
Так можно объявить
dim s%
s% = 4
и
dim s%
s = 4
В чем разница?

Ответить

Номер ответа: 14
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #14 Добавлено: 25.11.06 21:30
% - это один из постфиксов, позволяющих сокращать объявление. Так, % - означает As Integer, $ - As String.

Ответить

Номер ответа: 15
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #15 Добавлено: 25.11.06 21:30
тьфу, или это суффикс, а не постфикс, не помню

Ответить

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

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



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