VC直接发送WM_DROPFILES消息,模拟拖拽动作代码
//模拟拖拽消息 BOOL CprjVPackV4BatchToolsDlg::FSendDropFile(CString strFilePath) { int nResult = FALSE; HWND hMain = NULL; char szFile[MAX_PATH] = {0}; DWORD dwBufSize = 0; //sizeof(DROPFILES) + sizeof(szFile) + 1; BYTE *pBuf = NULL; DWORD dwProcessId = 0; HANDLE hProcess = 0; LPSTR pszRemote = NULL; wcstombs(szFile,strFilePath.GetBuffer(0),_MAX_PATH); dwBufSize = sizeof(DROPFILES) + strlen(szFile) + 1; hMain = ::FindWindow(NULL,_T("免杀压缩壳 ")); if ( hMain == NULL) { MessageBox(_T("不能找到加壳主程序!")); goto Exit0; } pBuf = new BYTE[dwBufSize]; if (pBuf == NULL) goto Exit0; memset(pBuf,0,dwBufSize); DROPFILES *pDrop = (DROPFILES *)pBuf; pDrop->pFiles = sizeof(DROPFILES); strcpy((char *)(pBuf + sizeof(DROPFILES)), szFile); GetWindowThreadProcessId(hMain,&dwProcessId); if (0 == dwProcessId) { goto Exit0; } hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwProcessId); if (hProcess == 0) { goto Exit0; } pszRemote = (LPSTR)VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE); if (NULL == pszRemote) { goto Exit0; } if(WriteProcessMemory(hProcess, pszRemote, pBuf, dwBufSize, 0)) { ::SendMessage(hMain, WM_DROPFILES, (WPARAM)pszRemote, NULL); } else { goto Exit0; } nResult = TRUE; Exit0: if (pszRemote) { VirtualFreeEx(hProcess, pszRemote, dwBufSize, MEM_DECOMMIT); } if (pBuf) { delete [] pBuf; pBuf = NULL; } if (hProcess) { CloseHandle(hProcess); } return nResult; }