Конференция "WinAPI" » Альтернатива SendMessage [D7, WinXP]
 
  • Игорь404 (07.04.09 09:40) [0]
    Уважаемые, существует ли альтернатива использованию конструкции SendMessage() для передачи сообщения объекту тестируемого приложения.

    Дело в том, что данная конструкция не работает на практике, применительно к объектам следующих классов: TreeView и DateTimePicker (В тестируемом приложении используются модификации этих классов. SysTreeView32, SysDateTimePick32). Всевозможные варианты использования SendMessage() уже перебрал и не добился результатов. Неделя потраченного времени и нервов. Возможно существует другой способ отправки сообщений?
    Существует ли возможность изменения значения (к примеру даты в DateTimePicker) через адреса памяти текущего процесса?
    Заранее благодарен.
  • Медвежонок Пятачок © (07.04.09 10:04) [1]
    СендМессджу глубоко фиолетово, что там было модифицировано. Он как посылал сообщение окну, так и посылает.
  • Игорь Шевченко © (07.04.09 10:54) [2]

    > Дело в том, что данная конструкция не работает на практике


    работает. применительно к объектам любых классов, лишь бы HWND был
  • Игорь404 (07.04.09 11:40) [3]
    Игорь, я пробовал следующие конструкции:
    SendMessage(Win_Handle ,DTM_SETSYSTEMTIME, GDT_VALID, Longint(@stF) );

    где
    stF: SYSTEMTIME;

     stF.wYear:= 2009;
     stF.wMonth:= 1;
     stF.wDay:= 11;
     stF.wHour:= 12;
     stF.wMinute:= 30;
     stF.wSecond:= 12;
     stF.wMilliseconds:= 0;

    Применительно к приложению, они не работают.

    Но вот, что интересно: конструкция
    SendMessage(a,DTM_SETFORMAT,0, Longint(PChar(Edit1.Text)));

    отрабатывает и возвращает (1), но формат устанавливается "неправильный".
  • Игорь Шевченко © (07.04.09 11:47) [4]
    Э...тебе в другое приложение надо указатель передать через SendMessage ?

    Так точно не получится, надо в другое приложение DLL внедрять
  • Игорь404 (07.04.09 11:56) [5]
    Да, именно, к внешнему процессу.
    И sendMessage() работает в большенстве случаев. (Применительно к объектам ComboBox и EditText например).
    И если это единственное решение, не мог бы поподробне рассказать (в контексте решаймой задачи)? А теорию я уже сам нарою.
  • Игорь Шевченко © (07.04.09 12:46) [6]
    Игорь404   (07.04.09 11:56) [5]


    > Да, именно, к внешнему процессу.
    > И sendMessage() работает в большенстве случаев. (Применительно
    > к объектам ComboBox и EditText например).


    Строки Windows умеет передавать между приложениями, а вот структуры - не умеет.


    > И если это единственное решение, не мог бы поподробне рассказать
    > (в контексте решаймой задачи)?


    Подробнее в книге Рихтера "Windows для профессионалов", четвертое издание, глава 22.
  • Игорь404 (07.04.09 12:50) [7]
    Игорь, спасибо за столь точную ссылку. :) Иду читать...
  • DVM © (07.04.09 16:03) [8]

    > Игорь Шевченко ©   (07.04.09 12:46) [6]


    > Строки Windows умеет передавать между приложениями, а вот
    > структуры - не умеет.

    WM_COPYDATA умеет
  • Игорь Шевченко © (07.04.09 16:08) [9]
    DVM ©   (07.04.09 16:03) [8]

    К сожалению оконные классы, указанные в первом посте ветки на WM_COPYDATA не реагируют так, как хотелось бы автору.
  • аноним (07.04.09 21:26) [10]
    Вот люди а, передают в чужой процесс указатель и ждут, что там появится его структура.
  • аноним (07.04.09 21:28) [11]
    Что delphi делает с человеком ?!!!
  • guav © (08.04.09 00:02) [12]

    > Вот люди а, передают в чужой процесс указатель и ждут, что
    > там появится его структура.

    И вам читать Рихтера :-)
  • guav © (08.04.09 00:07) [13]
    Кстати, к сожалению из издания "Windows via C/C++" 2008 года убрана глава про сообщения.
  • Игорь Шевченко © (08.04.09 00:26) [14]
    guav ©   (08.04.09 00:07) [13]

    У меня есть третье издание Windows для профессионалов (95-го года), так в четвертое тоже не все вошло и тоже выброшена часть по User (правда, сейчас не вспомню, какая), и выброшен хороший пример по синхронизации (Supermarket). Это к тому, что в очередном издании появится что-нибудь про особенности 128-разрядной Windows как там борятся с DLL Hell, но будет убрана например глава про Memory-mapped files...
  • guav © (08.04.09 00:58) [15]
    Кстати, ещё момент. В Висте ж появилось Address space layout randomization. В издании 2008 года оно упоминается. Но пример внедрения с CreateRemoteThread тоже имеется, и описание rebase тоже. Тема влияния ASLR на CreateRemoteThread не раскрыта.
  • аноним (08.04.09 08:23) [16]
    >guav ©   (08.04.09 00:02) [12]
    >И вам читать Рихтера :-)
    Что именно ?
  • Человек (08.04.09 08:56) [17]

    > guav ©   (08.04.09 00:58) [15]
    > Кстати, ещё момент. В Висте ж появилось Address space layout
    > randomization. В издании 2008 года оно упоминается. Но пример
    > внедрения
    > с CreateRemoteThread тоже имеется, и описание rebase тоже.
    >
    > Тема влияния ASLR на CreateRemoteThread не раскрыта.
    >

    А должно быть влияние ?
  • аноним (08.04.09 12:09) [18]

    > И вам читать Рихтера :-)

    Мало читать плохо, и много читать тоже вредно, начинает мерещиться всякое, всякое страшное и не возможное
  • guav © (08.04.09 15:53) [19]
    аноним   (08.04.09 08:23) [16]

    > Что именно ?


    Про маршаллинг сообщений.
    Некоторые структуры таки оказываются "чудом" в чужом процессе. Все структуры сообщений, что меньше WM_USER.

    Человек   (08.04.09 08:56) [17]

    > А должно быть влияние ?

    Нет, но это ж неочевидно ;-)
 
Конференция "WinAPI" » Альтернатива SendMessage [D7, WinXP]
Есть новые Нет новых   [134433   +25][b:0][p:0.001]