SendMessage + COPYDATASTRUCT

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
maxx11
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 13.05.2010 (Чт) 20:41

SendMessage + COPYDATASTRUCT

Сообщение maxx11 » 13.05.2010 (Чт) 21:16

Помогите пожалуйста с таким вроде бы простым вопросом.
Есть код на Delphi:

Код: Выделить всё
function SendString(SWnd: THandle; dwData: integer; const s: string; wn: String): integer;
var
  CD: TCopyDataStruct;
  hw: Cardinal;
  ss: String;
begin

  ss := 'Заголовок окна;
  hw := findWindow(nil, PChar(ss));
  if hw <> 0 then begin
    CD.dwData := dwData; //dwData - имеет значение от 0 до 5, в зависимости от значения данные посылаются в соответствующие окна
    CD.cbData := Length(s);
    if CD.cbData = 0  then CD.lpData := NIL else CD.lpData := @s[1];
    Result := SendMessage(hw, WM_COPYDATA, SWnd, integer(@CD));
  end;
end;


компилированный код работает как положено, но есть необходимость перенести код на VB с небольшими изменениями.
В результате изменений получилось вот что (объявление типов и функций выполнены):

Код: Выделить всё
Private Sub Command1_Click()
Dim res As Long
Dim cd As COPYDATASTRUCT
Dim hw As Long
Dim str As String
str = Text1 'например имеет значение "456789"
  hw = FindWindow(vbNullString, "Заголовок окна")
    If hw <> 0 Then
        cd.dwData = Combo1.ListIndex 'от 0 до 5
        cd.lpData = StrPtr(str)
        cd.cbData = LenB(str)
        res = SendMessage(hw, WM_COPYDATA, 0, cd)
    End If
End Sub


но в итоге отсылается только первый символ строки, т.е. в данном случае символ "4".
Просмотр различных форумов результатов не дал, везде приводится похожий код.
В чем может быть проблема в моём случае?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: SendMessage + COPYDATASTRUCT

Сообщение Antonariy » 13.05.2010 (Чт) 21:45

StrConv + Len (а не LenB)
Тц
Лучший способ понять что-то самому — объяснить это другому.

maxx11
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 13.05.2010 (Чт) 20:41

Re: SendMessage + COPYDATASTRUCT

Сообщение maxx11 » 14.05.2010 (Пт) 5:53

Antonariy, спасибо, всё получилось!


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

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

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

    TopList  
cron