首页
论坛
课程
招聘
[求助]VB模拟拖放文件操作到一个别的程序,遇到一点问题
2009-1-11 17:08 3238

[求助]VB模拟拖放文件操作到一个别的程序,遇到一点问题

2009-1-11 17:08
3238
http://topic.csdn.net/u/20081231/21/9a6f660f-5b5c-4f67-86a2-3542b68796b0.html
如上链接,之前在CSDN问过,贴子已经结了,但问题还没有解决,不好意思再问。自己捣鼓不出来,来这里问问各位牛人。

现在主要是
LPSTR pszRemote = NULL; 

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); 


这段代码,特别是VirtualAllocEx和WriteProcessMemory函数,由于运用不熟练,不知道在VB中如何写才是正确的
目前在vb.net中我这样写
        Dim pszRemote As Int32

        pszRemote = VirtualAllocEx(hProcess.ToInt32, 0, dwBufSize, MEM_COMMIT, PAGE_READWRITE)
        If pszRemote = 0 Then MsgBox("虚拟函数失败") : Exit Sub
        If (WriteProcessMemory(hProcess, pszRemote, pBuf, dwBufSize, 0)) <> 0 Then
            SendMessage(hWnd, WM_DROPFILES, pszRemote, 0)
        Else
            MsgBox("write内存失败")
        End If

并不成功,收到的消息内容是“InvalidOpera”而不是文件路径,pszRemote我有试过()byte、string等类型,还是失败,实在是不知道要怎么写才对。

以上是第一个问题,后来我把那段VC代码弄成一个DLL,可以用了,但是一样遇到一个问题

BOOL WINAPI DropFile(char szFile[], char szClassName[])
{
  HWND hWnd = ::FindWindow(szClassName, NULL); 
  if(hWnd == NULL) return FALSE; 
  
  DWORD dwBufSize = sizeof(DROPFILES) + sizeof(szFile) + 1; 


其中sizeof(szFile)这里,由VB传string进来,字符串是有传进来,但是sizeof(szFile)得不到正确的长度,一直为零。char szFile[]这里我试过改成指针形式,也试过VB里构造一个()byte结尾添上字符串结束符传进来,仍然得不到正确的结果。

后来只好手动把字符串长度传参进来
BOOL WINAPI DropFile(char szFile[], char szClassName[],DWORD szSize)
{
  HWND hWnd = ::FindWindow(szClassName, NULL); 
  if(hWnd == NULL) return FALSE; 
  
  DWORD dwBufSize = sizeof(DROPFILES) + szSize + 1; 

这样写虽然能用了,但仍然想知道,sizeof(szFile)这里到底要怎么做才能得到正确的结果,为啥会这样?
先谢谢大家了。

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回