Конференция "WinAPI" » WM_COPYDATA. Не получается отправить данные
 
  • MBo © (22.11.11 05:29) [20]
    >Финальный вариант
    [3] ?
    ;)
  • Leonid Troyanovsky © (22.11.11 06:13) [21]

    > neversleep   (21.11.11 20:26) [18]

    > Спасибо, только cbData = (lstrlenW(GetCommandLineW) + 1)
    > * SizeOf(WideChar).

    Я упустил, sorry.

    > DVM ©   (21.11.11 23:51) [19]

    > Код паршивый, конечно, но оно работает, я проверил

    Он может и ничего, но как-то стремно после PostMessage
    освобождать память.
    Если для SendMessage у виндов встречается магия при передаче данных
    (как, например у того же WM_COPYDATA или WM_GETTEXT), то для PM
    подобного точно нет.

    --
    Regards, LVT.
  • neversleep (22.11.11 06:33) [22]

    > MBo
    > [3] ?
    > ;)

    Почти, но не совсем... мне в тот момент смекалки не хватило развить идею, голова забита была ;)


    > Он может и ничего, но как-то стремно после PostMessage
    > освобождать память.

    К слову, когда я писал код в [11], в случае если PostMessage успешно отработает, GlobalFree завершается неудачей с GetLastError = ERROR_INVALID_HANDLE, поэтому if (not PostMessage...). Хотя, мб в старых виндах оно по-другому себя вело.
  • Германн © (22.11.11 08:12) [23]

    > К слову, когда я писал код в [11], в случае если PostMessage
    > успешно отработает, GlobalFree завершается неудачей с GetLastError
    > = ERROR_INVALID_HANDLE, поэтому if (not PostMessage...)

    Шаманские пляски.
    А что значит "если PostMessage успешно отработает"?
  • Leonid Troyanovsky © (22.11.11 10:42) [24]

    > DVM ©   (21.11.11 23:51) [19]

    > Ну про то, что надо возвращать 0 написано у доброй половины
    > оконных сообщений Windows и лишь некоторым это действительно
    > нужно. Этому точно не требуется.

    Оно потребуется для определения успешности доставки.

    Т.к. WM_DROPFILES < WM_USER, то пересылыемые данные
    должны маршаллиться. Значит все GlobalAlloc/GlobalFree
    излишни и можно пользовать дельфийский менеджер памяти.
    Т.е., правильно заполняем _DROPFILES и делаем SendMessage.

    Принимающая сторона парсит путем DragQueryFile,
    делает DragFinish и возвращает Msg.Result := 0.

    Как-то так.

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

    Не тестировалось.
    Думаю, что те кто используют  подобную магию должны внимательно
    во всем этом разобраться ;)

    --
    Regards, LVT.
  • Leonid Troyanovsky © (22.11.11 10:45) [25]

    > Германн ©   (22.11.11 08:12) [23]

    > А что значит "если PostMessage успешно отработает"?

    msdn:
    Return value

    Type: BOOL

    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is zero. To get extended error information, call GetLastError. GetLastError returns ERROR_NOT_ENOUGH_QUOTA when the limit is hit.

    Remarks

    When a message is blocked by UIPI the last error, retrieved with GetLastError, is set to 5 (access denied).

    --
    Regards, LVT.
 
Конференция "WinAPI" » WM_COPYDATA. Не получается отправить данные
Есть новые Нет новых   [134430   +4][b:0][p:0]