MVV

|
Posted: Tue Apr 20, 2010 15:03 Post subject: |
|
|
Avada wrote: | Мне кажется, тему лучше перенести в подфорум "Написание плагинов", поскольку обсуждаемые вопросы — достаточно специфические. Нет возражений? |
У меня у самого такая мысль была - полотна исходников явно не для общего подфорума.
HankHank wrote: | В личке посмотри. |
На вопросы по теме отвечу тут, может, кому-то пригодится. Надеюсь, не будешь сильно возражать.
HankHank wrote: | Покуролесил с вчерашним кодом в свете твоего сообщения о динамической памяти:
Code: |
DWORD __stdcall BackgroundSendData(void* Data)
{
int ii=SendMessage(hMainWnd, WM_COPYDATA, 0, (LPARAM) Data);
return 0;
}
static COPYDATASTRUCT cds;
static char buffer[]="cd \\\\\\net";
bool ChangeCurrentDir()
{
cds.dwData='DC';
cds.lpData=&buffer;
cds.cbData=sizeof(buffer);
HANDLE thread=CreateThread(0, 0, &BackgroundSendData, &cds, 0, 0);
if (!thread) return 0;
CloseHandle(thread);
return 1;
}
|
Передаваемая процессу память никуда теперь не исчезает. Но код проще. (Пробовал static char buffer[]="cd \\\\\\net" и static char buffer[]="\\\\\\net".)
Но что-то ничего не выходит… |
Конечно, код проще. Тебе ж не нужно каждый раз менять содержимое буфера, поэтому и статический буфер подойдет.
А почему не работает, ща объясню. Видимо, ты плохо разобрался с форматом буфера для WM_COPYDATA, который ожидает ТК. Вот он:
Code: | <first_path>\r<second_path>\0<flags> |
Флаги: 'T' - в новой вкладке, 'S' - менять пути активной и неактивной панелей вместо левой и правой.
Таким образом, правильный буфер:
Code: | static char cdnet[]="\\\\\\net\r\0S"; |
(то есть, изменить путь на \\\net в активной панели)
Но размер такого буфера уже функцией strlen не определишь - внутри есть нулевой символ. Поэтому либо TSIZE(cdnet), либо ручками циферку. И циферка обязательно должна включать нулевой байт в конце буфера - иначе ТК может хрен знает куда зайти в его поисках и набрать себе левых флагов из блока памяти за пределами буфера (я с таким уже сталкивался, обсуждение тут). _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|