您当前的位置:首页 > 精选问答 > 内容

socket网络编程(通过Socket实现网络编程的主要过程是什么)

用C++调用一个菜单命令、发送一个WM_COMMAND消息到记事本,一个程序里只能有一个主程序,在记事本窗口中打开一个已存在的文档或创建一个空文档,可以使用以下的C++代码:STDMETHODIMP CNotepadApplication::Load(BSTR bstrFile){ m_hwnd = FindWindow(_T(“notepad“), NULL); if (!IsWindow(m_hwnd)) _StartApp(OLE2T(bstrFile));Load方法尝试找到一个运行中的记事本实例,它的客户区域被一个编辑控件占据——一个类名为“edit”的窗口,在程序的用户接口中隐蔽地加载一个文本文件是通过命令行来实现的,在COM对象中创建一个属性,procedure是什么意思 (在编程中的意思)procedure Pascal的过程,子程序的意思。

通过Socket实现网络编程的主要过程是什么

TCP/IP网络通讯开发,一般采用Socket开发。它分服务器和客户端。服务器端流程:1、创建服务器套接字---分配内存、初始化2、服务器套接字--侦听3、建立与客户端配套的客户端套接字4、与客户端通讯(可以多客户端)5、关闭、销毁服务器端相应套接字----------------客户端:1、创建客户端套接字---分配内存、初始化2、连接服务器3、与服务器通讯4、关闭、销毁客户端套接字----------------

如何用vc编写程序

第一篇为Non-COM程序添加对象模型(2)初始化对象模型创建一个新的组件实例,调用Load方法来获得一对结果。首先,连接到记事本运行中的拷贝。其次,在记事本窗口中打开一个已存在的文档或创建一个空文档。与记事本相结合,需要夺取主窗体的句柄和覆盖了整个客户端区域的编辑控件的句柄。可以用C++ FindWindow API函数检索第一个打开的并且和记事本的Windows类名“notepad”相匹配的窗口(此后台信息已经可以由Spy++提供,它是一个Visual Studio工具,可以透视Windows的隐私),可以使用以下的C++代码:STDMETHODIMP CNotepadApplication::Load(BSTR bstrFile){ m_hwnd = FindWindow(_T(“notepad“), NULL); if (!IsWindow(m_hwnd)) _StartApp(OLE2T(bstrFile));Load方法尝试找到一个运行中的记事本实例。如果成功,它忽略输入的文件名。否则,它产生nodepad.exe,并用命令行传递bstrFile参数。这是仅有的可能的方法来做到这些了。可以更改Load方法的行为遵守其他的规则。然而,需要注意的是,在程序的用户接口中隐蔽地加载一个文本文件是通过命令行来实现的。否则,必须求助File菜单中的Open命令,但这就不是自动和隐蔽的了。一旦找到了记事本主窗体的句柄,就可以利用它并使用C++代码检索子编辑控件。m_hwndEdit = FindWindowEx(m_hwnd, NULL, _T(“edit“), NULL);记事本的结构提供了一个类名为“notepad”的窗口,它的客户区域被一个编辑控件占据——一个类名为“edit”的窗口。FindWindowsEx API函数检索第一个类名为“edit”的窗口,它是m_hwnd的子女。下一步,在COM对象中创建一个属性,它描述子编辑控件的内容。调用名为Text的可读写属性。给它一个文本内容,它将会立即影响到记事本的缓冲区。Set npad = CreateObject(“NotepadOM.Application“)npad.Load ““npad.Text = “Sample text“在前面的代码中,我们建立了一个新的未明名的文本文档,它的内容已经被赋予了某个字符串。当然,可以使用Text属性连接文本到其他变量中。npad.Text = “Sample text“npad.Text = npad.Text & vbCrLf & “for the article“即使记事本是个SDI程序,也可能需要像清晰的对象调用过程那样公开文本内容,例如文档操作。这符合更清楚、更雅致的模型设计,但是它仍需要为架构设计带来多余的复杂性。为什么创建一个新的ATL对象仅仅是为了优化一些文本相关的功能呢?在实现Text属性时,利用了Windows32编辑控件的一个鲜为人知的特性。所有Windows32控件不能跨进程访问。例如,不能请求另一个应用程序的rich edit box以字符串类型返回它的内容。产生这个问题的原因是,任何内存地址只在进程管理范围内才有效。这个规则有少部分例外。所有的Windows标准控件buttons、listboxes、和edit controls或者其他控件都不违背这项规则。它们的内容以在进程间被任意地读或写。这功能在Windows 95时为了保持向后兼容现存的Windows3x程序就出现了,它用进程间子类化。此同样存在于Windows XP和Windows 2000中。可以使用一些消息,如WM_GETTEXT和WM_SETTEXT来获得或写入文本框的内容而不顾实际进程的相关情况。同样,当运行VBS脚本时,实际上已涉及到两个不同的进程,记事本和wscript.exe,它们控制着VBS脚本。用C++实现此Text属性,代码如下:STDMETHODIMP CNotepadApplication::get_Text(BSTR *pVal){ USES_CONVERSION; int nLen = 1 + SendMessage(m_hwndEdit, WM_GETTEXTLENGTH, 0, 0); LPTSTR pszBuf = new TCHAR[nLen]; SendMessage(m_hwndEdit, WM_GETTEXT, nLen, (LPARAM) pszBuf); *pVal = SysAllocString(T2OLE(pszBuf)); delete pszBuf; return S_OK;}STDMETHODIMP CNotepadApplication::put_Text(BSTR newVal){ USES_CONVERSION; SendMessage(m_hwndEdit, WM_SETTEXT, 0, (LPARAM) OLE2T(newVal)); return S_OK;}添加编辑函数访问编辑控件的句柄可以弄清编辑所需的一串函数——特别是关于文本选择的部分。可以很容易地添加方法选择所有的缓冲区中的文本或限制为某个区域选择。SelectAll和SelectText用C++实现,方法如下:STDMETHODIMP CNotepadApplication::SelectText(int nFrom, int nTo) { SendMessage(m_hwndEdit, EM_SETSEL, nFrom-1, nTo-1); return S_OK;}通过EM_SETSET消息可以很容易地在编辑控件中实现文本选择。在Windows32中,第一个可选的字符是在0位置,但是相关方法使它从1开始。而指定-1~0的范围可以选择整个文本。编辑框中正文的字体名称由某个注册值lfFaceName决定,在以下位置可以找到此键值:HKEY_CURRENT_USER \Software \Microsoft \Notepad将它设为想要用的键值。记事本在启动之前读取这个设置。为了使它生效,请记住在调用Load之前设置好它。set npad = CreateObject(“NotepadOM.Application“)npad.Font = “Lucida Console“npad.Load “readme.txt“当一个交互式的用户单击菜单时,例如“File | Open”,主窗体发送WM_COMMAND消息,其中WPARAM参数被赋予串联的两个字。低位字是命令的ID,高位字包含消息码或表示触发的值——键盘加速键或菜单。用C++调用一个菜单命令、发送一个WM_COMMAND消息到记事本,代码如下:SendMessage(m_hwnd, WM_COMMAND, MAKELONG(nCommand,0), 0);必须用特殊的工具为nCommand参数指出正确的值,就像Spy++。既然这样,我稍微修改文章中所描述的DLL版本。“Hook,Line and Sinker”〔Visual C++ Developers Journal February 2001〕。此例程产生并钩住,然后创建记事本的子类。它过滤窗口接收到的所有消息,并在命令代码是WM_COMMAND时弹出对话框显示command ID。if (uiMsg == WM_COMMAND) { // Get the value of LOWORD(wParam) }需要添加的仅仅是存储或显示命令代码的程序。检验主记事本的菜单命令ID。只要给出了这个,调用菜单命令就很简单了,代码如下:const NOTEPAD_FILE_OPEN = 10Set npad = CreateObject(“NotepadOM.Application“)npad.InvokeMenu NOTEPAD_FILE_OPEN如果要编程关闭运行中的实例,需要想到在记事本窗口上调用DestroyWindows。然而,DestroyWindows只能在属于同一进程的窗口的进程中调用。要卸载记事本,用C++简单的发送一条退出代码的WM_COMMAND消息:SendMessage(m_hwnd, WM_COMMAND, MAKELONG(28,0), 0);有些功能是无法从非自动化的程序中获得的。例如,打开文件和另存为是不可能实现的,因为程序并不通过消息或API暴露这些代码,需要编写代码来存储它。举个例子来说,在记事本中,存储运行时结果需要响应Save或Save As命令,但是它们都是交互式的命令,需要用户单击OK按钮或输入一个新的文件名。这是原解决方案固有的限制。最近,在一个客户中碰到一个相似的问题,我应要求在不同环境处理一些传统的Windows程序(其中一个是记事本)。本质上来说,Win32 made-to-measure应用程序获得TCP/IP通道指令并转换它们以执行本地的Windows应用程序。通过Windows32消息请求服务的方式和在此所做的很相似。下一目标是用COM对象模型封装此通信模式。关于作者Dino Esposito是Wintellect的ADO.NET专家和培训师并且在罗马当咨询师。Dino是《Building Web Solutions With ASP.NET and ADO.NET》(微软出版)一书的作者,是VB-2-The-Max (

什么是汇编语言程序

使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。

procedure是什么意思 (在编程中的意思)

procedure Pascal的过程,子程序的意思,可以供别的程序调用的程序单位。program Pascal的主程序,主程序是唯一的,一个程序里只能有一个主程序。function Pascal的函数,另一种可以供别的程序单位调用的程序单位,可以写在表达式中,这是过程和函数的最大区别。函数调用会有一个结果,就是函数的值,也称为函数返回值Pascal :1)procedure p; 2) function f( x:integer):integer;C,C++ :1)void p(void); 2) int f(int x);Basic :1)sub p 2) function f( x as integer) as integerFortran:1)subrounte p() 2) funtcion f(x) integer f,x program Fortran的主程序,也是这样的。C,C++的主程序 int main(){return 0;}早期的 Basic,Pascal ,Fortran 是没有主程序的。直接编写代码就是主程序了。Basic 后来用 sub main () ---至少VB 有这个用法,作为主程序,不过VB可以把Form 作为程序入口。sub main就很少使用了。


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 建站方式有几种?seo怎么建站

下一篇: 全自动小洗衣机(什么牌子的全自动洗衣机质量好)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号