-
>Финальный вариант [3] ? ;)
-
> 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.
-
> MBo > [3] ? > ;)
Почти, но не совсем... мне в тот момент смекалки не хватило развить идею, голова забита была ;)
> Он может и ничего, но как-то стремно после PostMessage > освобождать память.
К слову, когда я писал код в [11], в случае если PostMessage успешно отработает, GlobalFree завершается неудачей с GetLastError = ERROR_INVALID_HANDLE, поэтому if (not PostMessage...). Хотя, мб в старых виндах оно по-другому себя вело.
-
> К слову, когда я писал код в [11], в случае если PostMessage > успешно отработает, GlobalFree завершается неудачей с GetLastError > = ERROR_INVALID_HANDLE, поэтому if (not PostMessage...)
Шаманские пляски. А что значит "если PostMessage успешно отработает"?
-
> DVM © (21.11.11 23:51) [19]
> Ну про то, что надо возвращать 0 написано у доброй половины > оконных сообщений Windows и лишь некоторым это действительно > нужно. Этому точно не требуется.
Оно потребуется для определения успешности доставки.
Т.к. WM_DROPFILES < WM_USER, то пересылыемые данные должны маршаллиться. Значит все GlobalAlloc/GlobalFree излишни и можно пользовать дельфийский менеджер памяти. Т.е., правильно заполняем _DROPFILES и делаем SendMessage.
Принимающая сторона парсит путем DragQueryFile, делает DragFinish и возвращает Msg.Result := 0.
Как-то так.
Возможно, что так и получится совместить обработку посылаемого проводником и своим приложением.
Не тестировалось. Думаю, что те кто используют подобную магию должны внимательно во всем этом разобраться ;)
-- Regards, LVT.
-
> Германн © (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.
|