Автор вопроса: -АлександР- | Web-сайт:sham.clan.su
Привет всем!
Я написал прогу, откомпилировал...
Нужно: через другую свою прогу записать в текстбокс предыдущей строчку текста.
Это вообще можно? И какие АПИ для этого использовать?
Заранее спасибо!
hWnd=FindWindow("","название(caption) диалога на котором находится ТекстБох"
hTxtBox=GetDlgItem(hWnd,IDC_TextBox)
SetWindowText(hTxtBox, " New text" или SendMessage(hTxtBox,WM_SETTEXT,0, PointerToNullTerminatedString)
Фишка если текстбоков много А записать нужно именно в определенный Но я тогда перечесляю дочерние окна, смотря если класс окна текст бокс, определяю его координаты, по координатам орентируюсь тот ли текстбокс, ну а далее хендел его и вперед Это так, кстати... Если надо, могу пример выложить...
Я написал прогу, откомпилировал...
Нужно: через другую свою прогу
Если Вы писали первую прогу сами и откомпилировали ее,
значит Вы назначали ID-контрол номер для текстбоха,
следовательно IDC_TextBox=тому что Вы назначали.
Если же програма не ваша, то можно воспользоваться
WinSpy-ем чтобы найти номер контрола для нужного
текстбокса.
PointerToNullTerminatedString = указатель на строку,
т.е. на строку текста которую Вы хотите вставить в "чужой" текстбокс. В конце строки дожен быть +CHR$(0)
У каждого текстбокса свой номер, если програма действительно была написана одним и тем же автором,
то это(номер контрола) должно быть известно.
Но я тогда перечесляю дочерние окна
Достаточно найти хэндл диалога на котором расположены
текстбоксы(контролы). Название диалога (caption) видно
не только автору. Это самое название подставляется в АПИ
FindWindow("","Текст который находитьсяна самом верху диалогового окна"
FindWindow вернет хэндл диалога
GetDlgItem вернет непосредственно хэндл искомого текстбокса hTxtBox=GetDlgItem(hWnd,IDC_TextBox)
SetWindowText установит новый текст
или все это пишется в одну строчку
SetWindowText(GetDlgItem(FindWindow("","SuperProga",IDC_TextBox)
, "New text"
Всё равно не понял. Первое, что приходит на ум HDC(но у текстбока его нет), Name (врядли для АПИ???), hwnd(но его нельзя назначить, он есть сам по себе).
У каждого текстбокса свой номер, если програма действительно была написана одним и тем же автором,
то это(номер контрола) должно быть известно.
Возможно я туплю.
1) Открыл новый проект
2) Положил на форму, например, кнопку
3) Никакого номера я ей не назначал. Если то, что вы говорите правда, то наверное он был создан автоматически. Но как его узнать?
здесь 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
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