F.moghaddampoor Ответов: 1

Как удалить файлы во внешнем приложении windows?


Ну, у меня есть внешнее приложение, которое я могу идентифицировать его дескрипторы windows, шпионя или ища их имена классов. Одно из таких окон-это окна древовидного типа, показывающие папки и файлы внутри окна. Мне интересно, как я могу отправить сообщение drop в указанное окно, чтобы имитировать перетаскивание нескольких файлов.

Поэтому я поискал в интернете и нашел некоторую информацию, у меня есть интерес сделать это в c#:

Я нашел эту информацию:

Сообщение WM_DROPFILES: отправляется, когда пользователь сбрасывает файл в окно приложения, которое зарегистрировалось в качестве получателя сброшенных файлов.

PostMessage(

    (HWND) hWndControl,   // handle to destination control

    (UINT) WM_DROPFILES,  // message ID

    (WPARAM) wParam,      // = (WPARAM) (HDROP) hDrop;

    (LPARAM) lParam       // = 0; not used, must be zero 

);


Итак, что я знаю: hDrop: дескриптор внутренней структуры, описывающей отброшенные файлы.

1) и возврат функции должен быть равен нулю при успешном выполнении. 2) HDROP-это дескриптор внутренней структуры, описывающей отброшенные файлы, которая объявлена в Shellapi.h. 3) номер WM_DROPFILES равен 0x233 4) lParam: должен быть равен нулю.

Поэтому код должен быть примерно таким:
private const UInt32 WM_DROPFILES = 0x0233;

PostMessage( SomeHWND, WM_DROPFILES, wParam, intPtr.Zero );


Кто-нибудь знает, как заполнить wparam в этом случае?

Что я уже пробовал:

// DragAndDrop.cpp : определяет точку входа для консольного приложения.
//

код #include "файл stdafx.ч"
#включить <windows.h>
#включить <shlobj.h>
#включить <tchar.h>


int main(int argc, char* argv[]) {

for (int i = 0; i <= WM_DROPFILES; i++)
{
ChangeWindowMessageFilter (i, MSGFLT_ADD);
}

if (HWND hwnd = FindWindow ("OpusApp", NULL)) {

//HGLOBAL hGlobal = GlobalAlloc (GMEM_FIXED,
//sizeof ("d:\\DragMe.txt") + 2);
//char *strFile = (char*) GlobalLock
//(hGlobal);
//strcpy (strFile, "d:\\DragMe.txt");
//strFile [strlen ("d:\\DragMe.txt") +
//1] = NULL;
char filename[] = "d:\\DragMe.txt";

Точка точка;
точка x = 480;
точка y = 480;

HGLOBAL hMem = GlobalAlloc(GHND, sizeof(DROPFILES) + strlen(filename)+2);

DROPFILES *dfiles = (DROPFILES*) GlobalLock(hMem);
если (!dfiles)
{
GlobalFree(hMem);
возвращать null;
}

dfiles->pFiles = sizeof(DROPFILES);
dfiles->pt = точка;
dfiles->fNC = TRUE;
dfiles->fWide = FALSE;
memcpy(&dfiles[1], filename, strlen(filename));
GlobalUnlock(hMem);

printf ("отправка сообщения...\n");

если (!Метод postMessage(hwnd элемента, WM_DROPFILES, (параметр wparam)хмэм, 0)) {
printf("сообщение об ошибке проводки!");
GlobalFree(hMem);
}
}

int temp = 0;
scanf("&d", temp);
возвращает 0;
}

1 Ответов

Рейтинг:
2

Richard MacCutchan

Все это описано здесь: Сообщение WM_DROPFILES - приложения для Windows | Microsoft Docs[^Обратите внимание, что это может быть пустой тратой времени, если принимающее приложение не обрабатывает WM_DROPFILES сообщение.