当前位置: 首页 > 编程语言 > C#

外部应用程序中文本框的SetText

时间:2023-04-11 10:45:58 C#

外部应用程序中的文本框的Win32API共享SetText。Win32API使用Winspector我发现我要更改的子文本框的ID是114。为什么这段代码不能更改文本框的文本?[DllImport("user32.dll")]staticexternIntPtrGetDlgItem(IntPtrhDlg,intnIDDlgItem);[DllImport("user32.dll")]publicstaticexternintSendMessage(IntPtrhWnd,intmsg,intParam,strings);constintWM_SETTEXT=0x000c;privatevoidSetTextt(IntPtrhWnd,stringtext){IntPtrboxHwnd=GetDlgItem(hWnd,114);SendMessage(boxHwnd,WM_SETTEXT,0,文本);这是我为此目的成功使用的内容,删除/禁用了我的GetLastError错误检查:[DllImport("user32.dll",CharSet=CharSet.Auto,SetLastError=false)]publicstaticexternIntPtrSendMessage(HandleRefhWnd,uintMsg,IntPtrwParam,stringlParam);公共结构WM_SETTEXT=0x000C;privatevoidInteropSetText(IntPtriptrHWndHWndPWndDialog,intiControlText=IntiControlTextID,string)GetDlgItem(iptrHWndDialog,iControlID);手柄eRefhrefHWndTarget=newHandleRef(null,iptrHWndControl);SendMessage(hrefHWndTarget,WM_SETTEXT,IntPtr.Zero,strTextToSet);我已经测试了这段代码,但如果它失败了,你需要确保你使用了正确的窗口句柄(对话框本身)和正确的控件ID。你也可以尝试使用记事本中的“查找”对话框进行简单的编辑。我不能在关于使用(char*)的帖子中发表评论,但这不是必需的。请参阅p/InvokeSendMessage中的第二个C#重载。您可以将String或StringBuilder直接传递给SendMessage。我还注意到您说您的控件ID是114。您确定WinSpector给您的是以10为基数的值吗?因为您将它作为基数10提供给GetDlgItem。我为此使用Spy++,它返回基数16的控件ID。在这种情况下,您将使用:IntPtrboxHwnd=GetDlgItem(hWnd,0x0114);请将您的控件ID(从spy++获得)从十六进制数转换为十进制数,并将此值传递给GetDlgItem函数。使用此函数,您将获得文本框的句柄。这对我有用。[DllImport("user32.dll")]staticexternIntPtrGetDlgItem(IntPtrhDlg,intnIDDlgItem);[DllImport("user32.dll")]publicstaticexternintSendMessage(IntPtrhWnd,intmsg,intParam,strings);constintWM_SETTEXT=0x000c;privatevoidSetTextt(IntPtrhWnd,stringtext){IntPtrboxHwnd=GetDlgItem(hWnd,114);SendMessage(boxHwnd,WM_SETTEXT,0,文本);你确定你正在传递文本吗?SendMessage最后一个参数应该是指向包含要设置的文本的char*的指针。看一下如何从Delphi5中的TDBGrid中获取所选单元格中的文本集的“粗略技巧”这是在Delphi5中完成的,其中PChar是char*的别名,我只是将它转换为int(Integer在德尔福)。您必须确保在外部应用程序的内存空间中分配了“文本”。您将无法在调用者应用程序中分配文本并将其传递给另一个应用程序,因为每个应用程序都有自己的专用内存空间。以上就是C#学习教程:外部应用中文本框的SetText。如果Win32API分享的所有内容对您有用,需要进一步了解C#学习教程,希望您多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢