关于VB模拟拖放一个资料到别的程序

关于VB模拟拖放一个文件到别的程序
注意,是模拟拖放给其它程序,不是它自己,谢谢!

这是论坛08年最后一天有人发的一个帖子:
http://topic.csdn.net/u/20081231/21/9a6f660f-5b5c-4f67-86a2-3542b68796b0.html
和他同样的问题,事隔三年,希望有高手能实现一下:

网上找不到VB的源码,只有C++的,代码如下:
C/C++ code

#include "stdafx.h"
#include "windows.h"
#include "shlobj.h"
int main(int argc, char* argv[])
{
    char szFile[] = "W:\\zzzzzzzz\\aa\\a.ini"; 
    HWND hWnd = ::FindWindow("Notepad", NULL); 
    if(hWnd == NULL) return; 
    
    DWORD dwBufSize = sizeof(DROPFILES) + sizeof(szFile) + 1; 

    BYTE *pBuf = NULL; 
    LPSTR pszRemote = NULL; 
    HANDLE hProcess = NULL; 
 
     __try { 
     pBuf = new BYTE[dwBufSize]; 
     if(pBuf == NULL) __leave; 
 
     memset(pBuf, 0, dwBufSize); 
     DROPFILES *pDrop = (DROPFILES *)pBuf; 
     pDrop->pFiles = sizeof(DROPFILES); 
     strcpy((char *)(pBuf + sizeof(DROPFILES)), szFile); 
 
     DWORD dwProcessId; 
     GetWindowThreadProcessId(hWnd, &dwProcessId); 
     hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwProcessId); 
     if(hProcess == NULL) __leave; 
 
     pszRemote = (LPSTR)VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE); 
     if(pszRemote == NULL) __leave; 
 
     if(WriteProcessMemory(hProcess, pszRemote, pBuf, dwBufSize, 0)) 
     ::SendMessage(hWnd, WM_DROPFILES, (WPARAM)pszRemote, NULL); 
     } 
     __finally { 
     if(pBuf != NULL) delete []pBuf; 
     if(pszRemote != NULL) VirtualFreeEx(hProcess, pszRemote, dwBufSize, MEM_FREE); 
     if(hProcess != NULL) CloseHandle(hProcess); 
     } 
}


谁能帮转成VB,能运行的,谢谢啊,不用百度也不用谷歌,因为就只有http://topic.csdn.net/u/20081231/21/9a6f660f-5b5c-4f67-86a2-3542b68796b0.html
这一篇,其它地方找的也是从这复制过去的,再次感谢!希望高手不吝赐教!!
------最佳解决方案--------------------
改了半天,测试可用了 呵呵
 Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long