-
-
[求助]VB模拟拖放文件操作到一个别的程序,遇到一点问题
-
发表于: 2009-1-11 17:08 4217
-
d28K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8G2M7r3W2U0i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4g2Q4x3V1j5J5x3o6l9^5x3e0t1K6x3g2)9J5c8U0t1I4i4K6u0r3z5h3p5$3k6U0j5$3x3r3k6Q4x3X3b7#2j5U0g2U0i4K6u0V1y4r3j5$3y4#2)9J5k6o6R3$3j5e0u0Q4x3X3b7K6y4e0b7J5j5U0j5^5y4K6V1$3j5U0m8Q4x3X3g2Z5N6r3#2D9
如上链接,之前在CSDN问过,贴子已经结了,但问题还没有解决,不好意思再问。自己捣鼓不出来,来这里问问各位牛人。
现在主要是
这段代码,特别是VirtualAllocEx和WriteProcessMemory函数,由于运用不熟练,不知道在VB中如何写才是正确的
目前在vb.net中我这样写
并不成功,收到的消息内容是“InvalidOpera”而不是文件路径,pszRemote我有试过()byte、string等类型,还是失败,实在是不知道要怎么写才对。
以上是第一个问题,后来我把那段VC代码弄成一个DLL,可以用了,但是一样遇到一个问题
其中sizeof(szFile)这里,由VB传string进来,字符串是有传进来,但是sizeof(szFile)得不到正确的长度,一直为零。char szFile[]这里我试过改成指针形式,也试过VB里构造一个()byte结尾添上字符串结束符传进来,仍然得不到正确的结果。
后来只好手动把字符串长度传参进来
这样写虽然能用了,但仍然想知道,sizeof(szFile)这里到底要怎么做才能得到正确的结果,为啥会这样?
先谢谢大家了。
如上链接,之前在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)这里到底要怎么做才能得到正确的结果,为啥会这样?
先谢谢大家了。
赞赏
他的文章
- 这个……主页有个错别字 3274
- [原创]VB6打印控件SuperPrint的注册分析 6466
- [求助]VB模拟拖放文件操作到一个别的程序,遇到一点问题 4218
- [原创]解决进退魔兽争霸3中文名乱码问题 30606
赞赏
雪币:
留言: