Во-первых, чтобы уточнить, я не не, спрашивая, как перетащить файл на значок exe. Я хочу знать, как обращаться с перетаскиванием на уже запущенное приложение win32. Я также не спрашивает, как обращаться с перетаскиванием внутри приложений на основе WinMain через насос сообщений Windows. Я хочу сделать это внутри программы с точкой входа int main(), у которой нет WndProc (пока) или что-то еще.Обращение с файлами перетаскивания в запущенном консольном приложении Windows
Сказали, что мне интересно, возможна ли моя цель (и надеется, что это так).
У меня есть серверное приложение, которое работает в окне консоли. Из-за большой кодовой базы и множества странных связей она является консолью «только для вывода» для всех интенсивных целей. Внутри этого, хотя я все еще могу обрабатывать такие вещи, как нажатия клавиш, поскольку у меня есть цикл обновления. Я хотел бы иметь возможность перетаскивать файлы, заполненные командами (которые используют специальный синтаксис), в мое запущенное приложение и обрабатывать их.
Это можно сделать? Я думал, что потенциально я мог бы получить указатель на HWND консоли (что, надеюсь, это вещь?), А затем, возможно, подкласс этого окна использовать пользовательский WndProc для прослушивания сообщения WM_DROPFILES.
Я никогда не пытался настроить обработку окон сообщений в Int основной() программы вместо программы WinMain, но я надеюсь, что это как-то возможно.
Любая помощь была бы принята с благодарностью! Странные решения в порядке.
Очень интересно, спасибо! Я оставлю его открытым дольше, чтобы понять, существуют ли какие-то реальные странные решения, но это надежный ответ. Я не знал о различиях между WM_DROPFILES и IDropTarget.Сервер уже где-то использует MFC, поэтому это может быть жизнеспособным. –
Хм, нет, консольное окно фактически не принадлежит консольной программе. Таким образом, подклассы - это полный тупик. Покрывается [этот вопрос] (http://stackoverflow.com/questions/14788134/trying-subclassing-on-console). –
Если программа является первым процессом, запущенным в консоли, то он имеет собственное консольное окно ('GetWindowThreadProcessId()' возвращает те же идентификаторы, что и 'GetCurrentProcessId()' и 'GetCurrentThreadId()'), но нечетное подклассирование не работает ('SetWindowLong/Ptr() 'возвращает ошибку 5). Если программа не является первым процессом в консоли, она не будет владеть консольным окном, хотя она будет выполнять ввод-вывод с использованием существующего окна консоли. –