Ctrl + V

Тема в разделе "WASM.BEGINNERS", создана пользователем held1r, 28 ноя 2005.

  1. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    Нужно вставить содержимое буфера обмена в активное окно активного процесса (окно ессно может принимать такие вещи, блокнот например). Как это сделать более цивилизованным способом, чем посылать комбинацию Ctrl + V ?
     
  2. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    Стданно как-то...

    не работает...



    Заменил в коде отправку нажания кнопок на вышенаписанное - программа перестала вставлять из буффера.



    ???
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    2IceStudent

    Может сообщение послать не активному окну, а контролу edit в нем?
     
  4. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    2rmn:



    как послать собщение прямо едиту? нужно знать его hwnd, а если оно дите от главного окна через туеву хучу родичей?



    2IceStudent:



    я и использовал GetForegroundWindow



    если послать WM_SETTEXT - он же полностью затирает старый текст, это не подходит



    GetFocus работает только для своего треда, тоже не то



    как же это, блин, винда делает?
     
  5. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    дык не работает WM_PASTE ...



    хотя при раных всех прочих условиях при отправке Ctrl + V работает...
     
  6. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    если вставляешь через мышь винда скорее всего берет хендл через WindowFromPoint, а если через клаву, то GetFocus.
     
  7. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    огромное спасибо всем, кто ответил!



    2yureckor:

    похоже на то.





    я сделал такой эксперимент: взял winspy, нашел хендл edita в блокноте, в своей программе получателем WM_PASTE указал эту константу - все сработало. если же получатель - главное окно блокнота - не срабатывает. отсюда вопрос: возможно ли как-то указать, что конкретное сообщение должно быть передано всем дочерним окнам? либо: возможно ли найти (в чужом процессе) хендл окна, в котором производится непосредсвенный ввод с клавиатуры.



    еще вопрос по ходу, чтоб не создавать лишнюю тему: как в SoftIce переключиться на нужный просесс? что я нашел, так это ставить бряки на месседжи окнам, не очень удобно.
     
  8. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    Вот я тупизень!



    GetFocus - действительно лучше всего. Я неправильно истолковал хелп - работает он для своего процесса, а не для треда. А в чужом процессе у меня есть длл с глобальнгым хуком, так что получить хендл edit-окна оказалось очень просто. Так же просто послать в него месседж. Все зашибись, но...



    Но не все edit-ы понимают WM_PASTE или EM_PASTESPECIAL :dntknw:

    напимер онко TQuestSynEdit в SQL Naigator-е



    Хотя проблема, в принципе, решена. Проблема была с этим самым навигатором - все приложения, кроме него, пересылали Ctrl + V дочерним окнам. Я думал, что главному окну нужно послать какое-нибудь специальное сообщение. А если я могу добраться непосредственно к edit-окну, то Ctrl + V меня в принципе устраивает, поскольку теперь все работает.
     
  9. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    2IceStudent:



    большущее спасибо!



    а насчет SoftIce подскажете?
     
  10. held1r

    held1r New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2005
    Сообщения:
    29
    Адрес:
    Zaporozhye
    как я уже говорил, проблема была в том, что главное окно не пересылает это сообщение дочерним.



    но после того, как я добрался напрямую до edit-окна, эта проблема была решена.