maxboot » 30.03.2008 (Вс) 14:55
Спасибо за ответы господа!
Алекс спасибо за подсказку по поводу счетчика, пробовал ставить, только после его постановки изменяются все символы на экране на непонятные значки.
Удалось решить проблему путем жесткого присваивания координат в функции MyTextOut
FUNCTION MyTextOut (BYVAL hdc AS LONG, BYVAL x AS LONG, BYVAL y AS LONG, BYVAL lpString AS DWORD, BYVAL nCount AS LONG) AS LONG
LOCAL MyString AS STRING
LOCAL i AS LONG
STATIC GetStr AS STRING
STATIC GetStr1 AS STRING
STATIC GetStr2 AS STRING
STATIC GetStr3 AS STRING
STATIC GetStr4 AS STRING
STATIC GetStr5 AS STRING
STATIC GetStr6 AS STRING
STATIC GW_HWNDNEXT AS STRING
IF lpString THEN MyString = PEEK$(lpString, nCount)
SetHookProc 2
MyString=SPACE$(nCount*2)
MyString= PEEK$(lpString, nCount*2)
MyString=ACODE$(MyString)
IF (x=679 AND y=363) OR (x=686 AND y=363) OR (x=679 AND y=380) OR (x=686 AND y=380) OR (x=679 AND y=397) OR (x=686 AND y=397) OR (x=679 AND y=414) OR (x=686 AND y=414) OR (x=679 AND y=431) OR (x=686 AND y=431) OR (x=679 AND y=448) OR (x=686 AND y=448) THEN
Получается тормоза были не за счет
MyString=SPACE$(nCount*2)
MyString= PEEK$(lpString, nCount*2)
MyString=ACODE$(MyString)
А за счет постоянного поиска хэндлов при перерисовке.
Вот здесь
LOCAL hProcess AS LONG
hProcess = FindWindow("TPanelWindow class", BYCOPY "#3 All")
P.S. а перебор текстовых полей вроде тормоза совсем не вызывает, а если не делать перебор, то я не смогу найти в моей проге все текстовые поля, так как хэндл у них всех один и тот же - ThunderRT6TextBox, хотя по большому счету действительно можно передать все значения одному полю, с каким-то разделителем, а потом с помощью Split разделить на значения и передать всем другим текстовым полям.
Перебор идет так:
hProcess = FindWindow("ThunderRT6FormDC", "MY HOOK")
hProcess = FindWindowEx(hProcess,0,"ThunderRT6Frame", "Рассчетная температура °С")
hProcess = FindWindowEx(hProcess,0,"ThunderRT6TextBox", "")
hProcess = GetNextWindow(hProcess, 2)
IF Getstr1<>"" THEN
SendMessage hProcess, %WM_SETTEXT, 0, STRPTR(GetStr1)
END IF
hProcess = GetNextWindow(hProcess, 2)
IF Getstr2<>"" THEN
SendMessage hProcess, %WM_SETTEXT, 0, STRPTR(GetStr2)
END IF
hProcess = GetNextWindow(hProcess, 2)
IF Getstr3<>"" THEN
SendMessage hProcess, %WM_SETTEXT, 0, STRPTR(GetStr3)
END IF
hProcess = GetNextWindow(hProcess, 2)
IF Getstr4<>"" THEN
SendMessage hProcess, %WM_SETTEXT, 0, STRPTR(GetStr4)
END IF
hProcess = GetNextWindow(hProcess, 2)
IF Getstr5<>"" THEN
SendMessage hProcess, %WM_SETTEXT, 0, STRPTR(GetStr5)
END IF
hProcess = GetNextWindow(hProcess, 2)
IF Getstr6<>"" THEN
SendMessage hProcess, %WM_SETTEXT, 0, STRPTR(GetStr6)
END IF