Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2011, 14:46   #11
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
SendMessage(Hand,WM_SETTEXT, 0,LParam(PChar(Paramstr(1)))); Приходит нормально только почему то записывается в заголовок программы
вы пошлаете в чужую программу? можно код где получаете Hand
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 02.03.2011, 15:18   #12
BuT@JL
Форумчанин
 
Регистрация: 27.11.2008
Сообщений: 137
По умолчанию

нет, я посылаю в свою программу, точнее в первую запущенную копию. (Программа запускается несколько раз)

Hand := FindWindow(nil, 'MyProgamm');
if (Hand <> 0 ) then begin
SendMessage(Hand, MY_MESSAGE, 0, DWORD(PChar(Paramstr(1))));
Halt;
end
else
form1.Caption:='MyProgamm';
end;
BuT@JL вне форума Ответить с цитированием
Старый 02.03.2011, 15:42   #13
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

поетому и меняет заголовок что вы форме ето пошлаете, надо теперь на форме наити хандел компонента в которыи должен добавляца текст

Функция FindWindowEx
(ПоискОкнаУлучшенная) [Не поддерживается в Windows NT]
Функция FindWindowEx отыскивает данные о дескрипторе окна, имя класса и имя окна которого соответствуют определенным строкам. Функция поиска дочерних окон начинается с первого до последнего заданного дочернего окна.
Синтаксис
Код:
HWND FindWindowEx
(
HWND hwndParent, // дескриптор родительского окна
HWND hwndChildAfter, // дескриптор дочернего окна
LPCTSTR lpszClass, // указатель имени класса
LPCTSTR lpszWindow // указатель имени окна
);
Параметры
hwndParent
Идентифицирует родительское окно, чьи дочерние окна должны быть найдены. Если hwndParent - ПУСТО (NULL), функция использует окно рабочего стола как родительское окно. Функция ищет среди окон, которые являются дочерними окнами рабочего стола.
hwndChildAfter
Идентифицирует дочернее окно. Поиск начинается со следующего дочернего окна в Z - последовательности. hwndChildAfter должен быть прямое дочернее окно hwndParent, а не простое порожденное окно. Если hwndChildAfter - ПУСТО (NULL), поиск начинается с первого дочернего окна определенного параметром hwndParent. Обратите внимание, что, если и hwndParent и hwndChildAfter - ПУСТО (NULL), функция ищет все окна верхнего уровня.
lpszClass
Указывает на строку с нулевым символом в конце, которая определяет имя класса или - атом, который идентифицирует строку имени класса. Если этот параметр - атом, он должен быть общий атом, созданный предыдущим вызовом к функции GlobalAddAtom. Атом, 16-разрядное значение, в котором должно быть размещено в младшей части слова - lpszClass; старшее слово должно быть нулевое.
lpszWindow
Указывает на строку с нулевым символом в конце, которая определяет имя окна (заголовок окна). Если этот параметр ПУСТО (NULL), имена всех окон соответствующие.
Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - дескриптор окна, которое имеет определенный класс и имена окон. Если функция потерпит неудачу, возвращаемое значение - ПУСТО (NULL). Чтобы получить дополнительные данные об ошибках, вызовите GetLastError.
Смотри также
EnumWindows, FindWindow, GetClassName, GlobalAddAtom
Размещение и совместимость FindWindowEx
Windows NT Да
Win95 Да
Win32s Нет
Импортируемая библиотека user32.lib
Заголовочный файл winuser.h
Unicode Нет
Замечания по платформе Не имеется
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 02.03.2011, 21:01   #14
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

BuT@JL, тебя когда спрашивают - в твоих же интересах не игнорировать вопросы.

Посмотри пример как такие вещи делаются правильно.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 02.03.2011, 23:58   #15
BuT@JL
Форумчанин
 
Регистрация: 27.11.2008
Сообщений: 137
По умолчанию

GunSmoker я не игнорирую, просто не заметил сообщения. Седня уже сил нет разбираться, завтра обязательно посмотрю твою ссылку. Кстати отвечу на твой вопрос, вместо нужного текста иногда вылетают "яяяяяя" или вообще пустые приходят. Иногда вылетает ошибка Access violation at address 00404493 in module 'project1.exe'. Read of address 01849E7C.

ArtGrek спасибо за совет, попробую покопаться в интернете в этом направлении. Самое интересное, когда я использую свой код, и пишу так
Hand := FindWindow(nil, 'MyProgamm');
if (Hand <> 0 ) then begin
SendMessage(Hand, MY_MESSAGE, 0, DWORD(PChar('Привет мир')));
Halt;
end
else
form1.Caption:='MyProgamm';
end;

То текст приходит нормальный
BuT@JL вне форума Ответить с цитированием
Старый 03.03.2011, 01:37   #16
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

кстати напиши во что именно ты текст посылаеш?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 03.03.2011, 12:10   #17
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Что-то не то вы делаете :\

Отправка строки:

Код:
var data: TCopyDataStruct;

data.dwData := 0;
data.cbData := length(paramstr(1))+1;
data.lpData := PChar(paramstr(1));
SendMessage(wnd, WM_COPYDATA, 0, dword(@data));
Получение:

Код:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
  private
    procedure onWM_COPYDATA(var msg: TWMCopyData); message WM_COPYDATA;
  end;
.........
procedure TForm1.onWM_COPYDATA(var msg: TWMCopyData);
begin
  Memo1.Lines.Add(PChar(Msg.CopyDataStruct.lpData));
  msg.Result := 1;
end;
DWORD(PChar(Paramstr(1))) - это адрес указателя на строку, и именно адрес придёт в другое приложение вместе с MY_MESSAGE, не сама строка. В другом приложении по этому адресу может быть мусор или вообще невыделенная память, отсюда иероглифы и Access Violation. Для передачи данных между разными процессами используется сообщение WM_COPYDATA.

Цитата:
а SendMessage(Hand,WM_SETTEXT, 0,LParam(PChar(Paramstr(1)))); Приходит нормально только почему то записывается в заголовок программы
Разберитесь с теорией, WM_XXXX это же не от балды придуманные константы, на каждое из сообщений окно реагирует специфическим образом, WM_SETTEXT устанавливает заголовок окна, WM_MOVE двигает и т.п.
пыщь
JTG вне форума Ответить с цитированием
Старый 03.03.2011, 13:24   #18
BuT@JL
Форумчанин
 
Регистрация: 27.11.2008
Сообщений: 137
По умолчанию

JTG Всё заработало . Я понял в чем моя ошибка. Спасибо большое всем кто помогал!!!
BuT@JL вне форума Ответить с цитированием
Старый 15.04.2011, 18:58   #19
DinoAsm
Пользователь
 
Аватар для DinoAsm
 
Регистрация: 29.10.2010
Сообщений: 31
По умолчанию

А ты случайно не в BorlandPascal исходники набираешь? Если в нём (или в другом консольном компиляторе), то советую открыть исходник в Блокноте и заменить крякозябры на месте кириллицы кириллицой. Потом перекомпилируй.
В гостях - хорошо. Дома – лучше. В пути туда и обратно - терпимо. Стоять в проходе и по пол часа прощаться – ужасно.
DinoAsm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
мемо. вместо текста цифры maloun C++ Builder 5 02.02.2011 17:51
Вместо русского текста на сайте отображаются непонятные значки khorolpavel HTML и CSS 4 20.11.2010 15:10
В делфи 2010 в консольном приложении вместо русского текста абра-кадабра Rusl92 Помощь студентам 4 26.04.2010 18:42
компонент возвращяет йероглифы вместо текста( delphi ) dyonysos Общие вопросы Delphi 0 05.02.2010 21:06
ссылка вместо текста!!! Abbatik Помощь студентам 7 09.02.2008 13:29