Как удалить файлы во внешнем приложении 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;
}