利用vc6.0编写的控制台发送短信的程序
[转]vc自定义消息传送
[转]vc自定义消息传送发送自定义消息申明:以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)发送自定义消息为例,申明这两种不合办法的自定义消息的总结:消息传递的办法一:应用ON_MESSAGE应用ON_MESSAGE响应消息,必须共同定义消息#define WM_MY_MESSAGE (WM_USER+100)对于发送消息者-MyMessageDlg,在其MyMessageDlg.h中,定义#define WM_MY_MESSAGE (WM_USER+100)在其MyMessageDlg.cpp中要先添加:#include "MainFrm.h"因为应用了CMainFrame*定义对象。
并且要有测试消息的函数:void MyMessageDlg::OnButtonMsg(){// TODO: Add your control notification handler code hereCMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先经由过程获取当前框架指针CView * active = pMF->GetActiveView();//才干获取当前视类指针if(active != NULL) //获取了当前视类指针才干发送消息active->PostMessage(WM_MY_MESSAGE,0,0); //应用PostMessage发送消息}对于消息的接管者-MessageTestView,在其MessageTestView.h中,也要定义#define WM_MY_MESSAGE (WM_USER+100)并定义消息映射函数-OnMyMessage()protected://{{AFX_MSG(CMessageTestView)afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);//}}AFX_MSGDECLARE_MESSAGE_MAP()在其MessageTestView.cpp中,先要声明响应消息:BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)//{{AFX_MSG_MAP(CMessageT estView)ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)//}}AFX_MSG_MAP再添加消息响应的函数实现:LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam){MessageBox("OnMyMessage!");return 0;}消息传递的办法二:应用ON_REGISTERED_MESSAGE应用ON_REGISTERED_MESSAGE注册消息,必须共同static UINT WM_MY_MESSAGE=RegisterWindowMessage ("Message");对于消息的发送者-MyMessageDlg,在其MyMessageDlg.h中,只要定义static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");就可以了。
c语言sendmessage函数用法
c语言sendmessage函数用法摘要:1.C语言SendMessage函数简介2.SendMessage函数的参数3.SendMessage函数的用法示例4.注意事项正文:C语言SendMessage函数是一种在Windows操作系统中发送消息的函数,它主要用于窗口程序设计。
SendMessage函数的原型为:```INT WINAPI SendMessage(HWND hWnd, // 窗口句柄UINT uMsg, // 消息码WPARAM wParam, // 消息参数LPARAM lParam // 消息附加参数);```SendMessage函数共有四个参数,分别是:1.hWnd:窗口句柄,表示要发送消息的窗口。
2.uMsg:消息码,表示要发送的消息类型。
例如:WM_NULL、WM_KEYDOWN、WM_LBUTTONDOWN等。
3.wParam:消息参数,根据不同消息类型,传递相应的信息。
例如,在WM_KEYDOWN消息中,wParam表示按下的键码。
4.lParam:消息附加参数,用于提供消息的相关信息。
例如,在WM_MOUSEMOVE消息中,lParam表示鼠标移动的坐标。
下面举一个SendMessage函数的用法示例:```c#include <windows.h>LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){switch (message){case WM_DESTROY:PostQuitMessage(0);return 0;case WM_KEYDOWN:switch (wParam){case VK_SPACE:MessageBox(NULL, TEXT("你按下了空格键"), TEXT("提示"), MB_OK);break;}return 0;default:return DefWindowProc(hWnd, message, wParam, lParam);}}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){WNDCLASS wc = {0};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);wc.hCursor = LoadCursor(NULL, IDC_ARROW);wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.lpszClassName = TEXT("SendMessageExample");if (!RegisterClass(&wc)){MessageBox(NULL, TEXT("注册窗口类失败"), TEXT("错误"), MB_OK);return 1;}HWND hWnd = CreateWindowEx(0,TEXT("SendMessageExample"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,NULL,NULL,hInstance,NULL);if (!hWnd){MessageBox(NULL, TEXT("创建窗口失败"), TEXT("错误"), MB_OK);return 1;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);MSG msg;while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}```以上示例创建了一个简单的窗口程序,当用户按下空格键时,会弹出一个提示框显示“你按下了空格键”。
vc 6.0 SOCKET 通信 最最简单实例
vc 6.0 SOCKET 通信最最简单实例vc++ 6.0分别建立Win32 Console Application类型的应用程序Server_Console和Client_console。
选择Project>Setting,在Link选项卡的Objecct/library modules框中加上库wsock32.lib。
在mian函数的前面,#include"stdafx.h"的后面,加上#include <winsock.h>。
服务器端程序代码:// TcpServer.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdio.h>#include <winsock.h>int main(int argc, char* argv[]){WORD wVersion;WSADATA wsaData;int err;wVersion = MAKEWORD(1,1);//初始化Windows Socketserr = WSAStartup(wVersion,&wsaData);if(err != 0){return 0;}//建立流式套接字SOCKET listenSocket = socket(AF_INET,SOCK_STREAM,0);sockaddr_in addr;int nSockErr;addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addr.sin_family = AF_INET;//设定监听端口5001addr.sin_port=htons(5001);//绑定套接字if(bind(listenSocket,(struct sockaddr*)&addr,sizeof(addr)) == SOCKET_ERROR)nSockErr = WSAGetLastError();//将套接字设置成监听状态if(listen(listenSocket,5) == SOCKET_ERROR)nSockErr = WSAGetLastError();printf("服务器正在监听...\n");//等待客户的链接请求SOCKET connectSocket = accept(listenSocket,NULL,NULL);if(connectSocket == INVALID_SOCKET){printf("接受错误...\n");nSockErr = WSAGetLastError();}else{//有客户链接请求被成功接收char buf[1024];memset(buf,0,sizeof(char)*1024);//接收客户端传输过来的数据int n = recv(connectSocket,buf,1024,MSG_PEEK);if(n>0)printf("服务器已经接受%d个字符:%s\n",n,buf);}//关闭套接字::closesocket(listenSocket);::closesocket(connectSocket);::WSACleanup();return 1;}客户端程序代码:// TcpClient.cpp : Defines the entry point for the console application. //#include "stdafx.h"#include <stdio.h>#include <winsock.h>int main(int argc, char* argv[]){WORD wVersion;WSADATA wsaData;int err;wVersion = MAKEWORD(1,1);//初始化Windows Socketserr = WSAStartup(wVersion,&wsaData);if(err != 0){return 0;}//创建流式套接字SOCKET connectSocket = ::socket(AF_INET,SOCK_STREAM,0);sockaddr_in servAddr;servAddr.sin_family = AF_INET;//设置服务器端主机的地址和端口号,这里的服务器是本地的servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); servAddr.sin_port=htons(5001);if(connect(connectSocket,(struct sockaddr*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)printf("连接错误\n");else{//连接成功,向服务器端发送数据::send(connectSocket,"xu chu liang -- twt thi plm",20,MSG_DONTROUTE); }//关闭套接字closesocket(connectSocket);WSACleanup();return 1;}。
VC++6.0网络编程入门例程(sockets)
VC++6.0⽹络编程⼊门例程(sockets)服务器端: 1.初始化阶段调⽤WSAStartup() 此函数在应⽤程序中初始化Windows Sockets DLL ,只有此函数调⽤成功后,应⽤程序才可以再调⽤其他Windows Sockets DLL中的API函数。
在程式中调⽤该函数的形式如下:WSAStartup((WORD)((1<<8|1), (LPWSADATA)&WSAData)参数:(1<<8|1):表⽰我们⽤的是WinSocket1.1版本;WSAata:⽤来存储系统传回的关于WinSocket的资料。
2、建⽴Socket 初始化WinSock的动态连接库后,需要在服务器端建⽴⼀个监听的Socket,为此可以调⽤Socket()函数⽤来建⽴这个监听的Socket,并定义此Socket所使⽤的通信协议。
此函数调⽤成功返回Socket对象,失败则返回INVALID_SOCKET(调⽤WSAGetLastError()可得知原因,所有WinSocket 的API函数都可以使⽤这个函数来获取失败的原因)。
SOCKET PASCAL FAR socket( int af, int type, int protocol ) 参数: af: ⽬前只提供 PF_INET(AF_INET); type: Socket 的类型 (SOCK_STREAM、SOCK_DGRAM); protocol:通讯协定(如果使⽤者不指定则设为0); 如果要建⽴的是遵从TCP/IP协议的socket,第⼆个参数type应为SOCK_STREAM,如为UDP(数据报)的socket,应为SOCK_DGRAM。
3、绑定端⼝ 接下来要为服务器端定义的这个监听的Socket指定⼀个地址及端⼝(Port),这样客户端才知道待会要连接哪⼀个地址的哪个端⼝,为此我们要调⽤bind()函数,该函数调⽤成功返回0,否则返回SOCKET_ERROR。
用VB6.0编写手机短信发送
用VB6.0编写手机短信发送,因为手机短消息的发送是以PDU串的形式发送出去的,中文字符以Unicode码来表示,所以在发送中文短消息之前必须首先将中文字符转换为Unicode码,下面的函数将实< br/>因为手机短消息的发送是以PDU串的形式发送出去的,中文字符以Unicode码来表示,所以在发送中文短消息之前必须首先将中文字符转换为Unicode码,下面的函数将实现这个功能。
这个函数主要应用到VB自带的一个格式转换函数:ChrW()将中文转换为Unicode 码。
PublicFunctionchg(rmsgAsString)AsStringDimtepAsStringDimtempAsStringDimiAsIntegerDimbAsIntegertep=rmsgi=Len(tep)b=i/4Ifi=b*4Thenb=b-1tep=Left(tep,b*4)Elsetep=Left(tep,b*4)EndIfchg=""Fori=1Tobtemp="&H"&Mid(tep,(i-1)*4 1,4)chg=chg&ChrW(CInt(Val(temp)))NextiEndFunction同上,为了发送以PDU模式发送短消息,必须将手机号码和对方手机号码也转换为PDU 格式,下面的函数就是为了实现这种转换:PublicFunctiontelc(numAsString)AsStringDimtlAsIntegerDimltem,rtem,ttemAsStringDimtiAsIntegerttem=""tl=Len(num)Iftl<>11Andtl<>13ThenMsgBox"wrongnumber."&tlExitFunctionEndIfIftl=11Thentl=tl 2num="86"&numEndIfForti=1TotlStep2ltem=Mid(num,ti,1)rtem=Mid(num,ti 1,1)Ifti=tlThenrtem="F"ttem=ttem&rtem<emNexttitelc=ttemEndFunction手机号码有两种表示方法:11位和13位(带国家码86),一般手机发送时都是以13位形式表示的,所以以上的函数还有一个功能是自动将11位格式手机号码转换为13位形式,然后再转换为PDU串。
vc6.0写xml案例
vc6.0写xml案例在VC6.0中编写XML的案例,可以通过使用MSXML库来实现。
下面我将从多个角度来介绍如何在VC6.0中编写一个简单的XML案例。
1. 包含头文件和初始化。
首先,在VC6.0中创建一个新的Win32控制台应用程序项目。
然后在代码中包含MSXML库的头文件,可以使用以下代码:c.#include <msxml2.h>。
接着,需要初始化COM组件,可以使用以下代码:c.CoInitialize(NULL);2. 创建XML文档。
接下来,我们可以创建一个XML文档对象并添加元素和属性。
以下是一个简单的示例代码:c.IXMLDOMDocument pXMLDom = NULL;HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument,(void)&pXMLDom);if (SUCCEEDED(hr))。
{。
IXMLDOMElement pRoot = NULL;pXMLDom->createElement(L"Root", &pRoot);pXMLDom->appendChild(pRoot, NULL);IXMLDOMElement pChild = NULL;pXMLDom->createElement(L"Child", &pChild);pRoot->appendChild(pChild, NULL);pChild->setAttribute(L"Attribute",_variant_t(L"Value"));}。
3. 保存和释放资源。
在完成XML文档的创建后,我们需要保存XML文档并释放资源。
在VC6.0中编写和运行示例程序的方法
在VC6.0中编写和运行示例程序的方法1. 启动VC 6.0,选择菜单File|New …,在打开的对话框中,选择“Win32 Console Application ”, 如下图所示。
输入项目名称之后按下“OK ”。
2. 在随后打开的对话框中选择“An empty project ”, 然后按下“Finish ”。
3. 在随后打开的“New project information”对话框中,按下“OK”。
4. 现在已建立了一个空白的控制台程序。
将示例程序的某个*.CPP文件和common.h复制到你的project所在的文件夹下。
5. 选择VC窗口的“File view”,右击“Source files”,在弹出的菜单中选择“Add Files to Folder”。
如下图所示。
6. 接下来指定示例程序的*.CPP文件,使之出现在“Source Files”下面。
7. 类似地,将示例程序中的Common.h文件加入到“Header Files”下面。
8. 现在可以编译、运行了。
9. 如果你在build时出现如下错误:Linking...LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16Debug/DuList.exe : fatal error LNK1120: 1 unresolved externals则说明编译连接时找不到程序入口(main函数),这是微软的问题,不是我们的错误。
解决的办法是:选择菜单Project | settings…,在打开的对话框中选择标签“Link”,在其中的“Project Options”编辑框中,找到“subsystem: windows”,将其改为“subsystem: console”,如下图所示,然后按下“OK”。
10. 重新编译、运行。
你可以在示例程序的基础上按习题要求编写程序,然后运行、调试直至成功。
关于vc6.0_message的各种函数
idThread
其消息将被寄送的线程的线程标识符。如果线程没有消息队列,此函数将失败。当线程第一次调用一个Win 32
USER或GDI函数时,系统创建线程的消息队列。要得到更多的信息,参见备注。
(3) PeekMessage
PM_QS_SENDMESSAGE Windows NT 5.0和Windows 98:处理所有发送消息。
3 返回值
如果消息可得到,返回非零值;如果没有消息可得到,返回值是零。
和函数GetMessage不一样的是,GetMessage:从系统获取消息,将消息从系统中移除,属于阻塞函数。
wMsgFilterMin 指定被检查的消息范围里的第一个消息。
wMsgFilterMax 指定被检查的消息范围里的最后一个消息。
wRemoveMsg 确定消息如何被处理。此参数可取下列值之一[1]:
PM_NOREMOVE PeekMessage处理后,消息不从队列里除掉。
方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。
在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(=True时)还是收起列表(=False时),
lParam无用(设为0)。
//例子:
Message and Message Queue Functions
The following functions are used with messages and message queues.
BroadcastSystemMessage
(4) GetMessage
函数GetMessage 是 从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与
VC++6.0消息含义
VC++6.0消息含义消息的意思1. 窗口过程每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wParam, lParam), 当窗口收到消息时系统就会调用此窗口过程来处理消息。
(所以叫回调函数)2 消息类型1) 系统定义消息(System-Defined Messages)在SDK中事先定义好的消息,非用户定义的,其范围在[0x0000, 0x03ff]之间,可以分为以下三类:1>窗口消息(Windows Message) 与窗口的内部运作有关,如创建窗口,绘制窗口,销毁窗口等。
可以是一般的窗口,也可以是Dialog,控件等。
如:WM_CREATE, WM_PAINT, WM_MOUSEMOVE, WM_CTLCOLOR, WM_HSCROLL...2>命令消息(Command Message)与处理用户请求有关,如单击菜单项或工具栏或控件时,就会产生命令消息。
WM_COMMAND, LOWORD(wParam)表示菜单项,工具栏按钮或控件的ID。
如果是控件, HIWORD(wParam)表示控件消息类型3>控件通知(Notify Message)控件通知消息,这是最灵活的消息格式,其Message, wParam, lParam分别为:WM_NOTIFY, 控件ID,指向NMHDR的指针。
NMHDR包含控件通知的内容,可以任意扩展。
2) 程序定义消息(Application-Defined Messages)用户自定义的消息,对于其范围有如下规定:WM_USER: 0x0400-0x7FFF (ex. WM_USER+10)WM_APP(winver> 4.0): 0x8000-0xBFFF (ex.WM_APP+4)RegisterWindowMessage: 0xC000-0xFFFF3 消息队列(Message Queues)Windows中有两种类型的消息队列1) 系统消息队列(System Message Queue)这是一个系统唯一的Queue,设备驱动(mouse, keyboard)会把操作输入转化成消息存在系统队列中,然后系统会把此消息放到目标窗口所在的线程的消息队列(thread-specific message queue)中等待处理2) 线程消息队列(Thread-specific Message Queue)每一个GUI线程都会维护这样一个线程消息队列。
vc课程设计短信收发
vc课程设计短信收发一、教学目标本章节的教学目标包括以下三个方面:1.知识目标:通过学习,学生能了解短信收发的原理,掌握基本的短信编程技术,理解短信在实际应用中的优势和限制。
2.技能目标:学生能够运用所学知识,独立完成一个简单的短信收发程序,培养动手实践能力和问题解决能力。
3.情感态度价值观目标:培养学生对信息技术的兴趣,提高学生对新技术的敏感度和接受能力,引导学生正确使用信息技术,增强信息安全意识。
二、教学内容本章节的教学内容主要包括以下几个部分:1.短信收发原理:介绍短信的传输过程,让学生理解短信是如何在网络中传递的。
2.短信编程技术:教授如何使用编程语言实现短信的发送和接收,包括短信API的使用、短信协议的解析等。
3.短信应用案例:分析实际中的短信应用案例,让学生了解短信在生活中的应用,以及可能遇到的问题和解决方法。
4.短信的优势和限制:讨论短信的特点,让学生明白短信使用的场景和注意事项。
三、教学方法为了达到本章节的教学目标,将采用以下几种教学方法:1.讲授法:用于讲解短信收发原理和短信编程技术,让学生掌握基本概念和理论知识。
2.案例分析法:通过分析实际中的短信应用案例,让学生了解短信的实际应用,培养学生的实际操作能力。
3.实验法:安排实验课,让学生动手实践,独立完成一个简单的短信收发程序,提高学生的实际操作能力。
四、教学资源为了保证本章节的顺利进行,将准备以下教学资源:1.教材:选用与本章节内容相关的教材,为学生提供理论知识的学习材料。
2.多媒体资料:制作PPT等多媒体资料,帮助学生更好地理解短信收发的原理和编程技术。
3.实验设备:准备实验所需的电脑、网络设备等,确保学生能够顺利进行实验操作。
五、教学评估本章节的教学评估将采用以下几种方式:1.平时表现:评估学生在课堂上的参与度、提问回答等情况,占总评的20%。
2.作业:布置相关的编程练习,评估学生的动手实践能力,占总评的30%。
3.实验报告:评估学生在实验课上的操作能力和问题解决能力,占总评的20%。
VC++6.0使用方法
一、Visual C++ 6.0概述Visual C++6.0是微软公司推出的目前使用极为广泛的基于Windows平台的可视化集成开发环境,它和Visual Basic、Visual Foxpro、Visual J++等其它软件构成了Visual Studio(又名Developer Studio)程序设计软件包。
Developer Studio是一个通用的应用程序集成开发环境,包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具,以及一套联机文档。
使用Visual Studio,可以完成创建、调试、修改应用程序等的各种操作。
VC++6.0提供面向对象技术的支持,它能够帮助使用MFC库的用户自动生成一个具有图形界面的应用程序框架。
用户只需在该框架的适当部分添加、扩充代码就可以得到一个满意的应用程序。
VC++6.0除了包含文本编辑器,C/C++混合编译器,连接器和调试器外,还提供了功能强大的资源编辑器和图形编辑器,利用“所见即所得”的方式完成程序界面的设计,大大减轻程序设计的劳动强度,提高程序设计的效率。
VC++的功能强大,用途广泛,不仅可以编写普通的应用程序,还能很好地进行系统软件设计及通信软件的开发。
二、使用Visual C++ 6.0建立C语言应用程序利用VC++6.0提供的一种控制台操作方式,可以建立C语言应用程序,Win32控制台程序(Win32 Console Application)是一类Windows程序,它不使用复杂的图形用户界面,程序与用户交互是通过一个标准的正文窗口,下面我们将对使用Visual C++ 6.0编写简单的C语言应用程序作一个初步的介绍。
1.安装和启动运行Visual Studio软件中的setup.exe程序,选择安装Visual C++ 6.0,然后按照安装程序的指导完成安装过程。
安装完成后,在开始菜单的程序选单中有Microsoft Visual Studio 6.0图标,选择其中的Microsoft Visual C++ 6.0即可运行(也可在Window桌面上建立一个快捷方式,以后双击即可运行)。
c#编程给手机发短信
通过编程方式实现短信息的发送对很多人来说是一件比较烦杂的事情,目前一般的解决方法是通过计算机和手机的连线,通过可对手机编程的语言编写相关的手机短信息程序来实现,而这种方法对于一般人来说是很难达到的,因为此种方法不仅要有很多必备的硬件设备,也还需懂得手机编程的相关知识。
本文就来探讨一下另外一种通过Visual C#发送短信息的简单实现方法,这种方法在实现过程中比我们想象的要简单许多,只需拥有Visual C#一般编程基础,并确定您的计算机接入互联网即可。
下面就来详细介绍一下Visual C#发送短信息的具体实现过程。
一. Visual C#发送短信息的原理:我想当很多读者一看到本文的题目一定会想本文内容一定非常深奥,并且作者一定知道了电信的发送短信的网关地址,其实并非如此。
本文其实是利用一个现成的资源,一个可发送短信的Web Serviec。
这个Web Service就是新浪网就提供的一个,可供用户直接调用的发送短消息的Web Service。
这个Service的地址是/ws/smswebservice0101.wsdl。
在这个Service中提供了一个发送短消息的方法"sendXml"。
此方法的语法格式如下:string sendXml (carrier , userid , password , mobilenumber , content , msgtype )sendXml方法中的六个参数均为string类型,并且sendXml方法的返回值也是string 类型。
以下是sendXml方法中的六个参数的具体说明:·carrier:运营商名称,具体使用时此参数并没有什么具体要求,即这里面可以随便输,输入的字符串也不会在对方手机中有任何显示。
·userid:在新浪网上注册的手机号,注册手机所用的地址是:,具体注册方法下面会具体介绍。
·password:您在新浪网成功注册手机后,新浪网所反馈来的密码。
VC中消息队列SendMessage
最近在用VC2008做开发,后来由于要用到消息的发送,而且需要自定义消息,在网上查找了很多例子,根据他们所说的,虽然大致都差不多,但是基本上没有一个能完全做出来的。
要知道VC编程有一个小地方出错,都可能是个让你头晕脑胀的事情。
经过我后来不但探索,经过改进之后,一点错误都没有,现在贴出来供大家参考。
1. 先来个基本知识介绍SendMessage的基本结构如下:SendMessage(HWND hWnd, //消息传递的目标窗口或线程的句柄。
UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,//在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。
LPARAM lParam); //参数2其中一些参数的由来如下://typedef unsigned int UINT;//typedef UINT WPARAM;//typedef LONG LPARAM;//typedef LONG LRESULT;2. SendMessage用法实例例如可以用以下语句:void CTScrollWinView::OnLButtonDblClk(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CHILDFRAMEDBCLK ,0,0);CScrollView::OnLButtonDblClk(nFlags, point);}这是我用VC2008下建立的一个多文档选项卡式工程里面的一段代码,是为了实现在子窗口双击后发送一个不带参数的消息(其ID为WM_USER+1)给主窗口, 如上为部分代码, 其中WM_CHILDFRAMEDBCLK是自定义的消息ID, AfxGetMainWnd()->m_hWnd是获得主窗口(这里不能使用GetParent()->m_hWnd或者GetParentFrame()->m_hWnd, 因为这是获得父窗口,但父窗口不一定是主窗口,一定要注意,不然消息就会发错导致接收不到,我这里卡了半天,后来在QQ群里一位大侠告诉我的,在此再感谢一下那位大侠);3. 在接收消息的窗体以及线程所在的头文件里定义:#define WM_CHILDFRAMEDBCLK WM_USER+1 // do something4. 然后接下来定义一个消息需要映射的函数,如下:afx_msg LRESULT OnChlidFrameDBClick(WPARAM wParam, LPARAM lParam);注意格式必须是:两个参数必不可少,返回类型一定为LRESULT,网上很多文章都忽略了这两点,这也是网上文章普遍错误的地方。
基于VC++6.0 Socket编程操作实例
VC++6.0网络编程Socket编程作为一个初学者,深感Socket编程入门的困难,但当把一些问题弄懂之后,回过头来看以前遇到的一些问题,才发现Socket编程其实并没有那么复杂。
接下来我就把我遇到的一些困难讲述下,并补上解决的办法。
首先我们要想实现一个简单的点对点网络通信,就应该有一个客户和一个服务器我们先来做客户端。
先按照如下图所示建立好客户对话框模块:首先创建一个基于MFC AppWizard[EXE] 工程,工程名为Socket__002 (这里是以我的工程名为准,你们也可以自己命名工程。
)点击确定只收选择基本对话框,如图:点击下一步,在Windows Sockets[W]处钩上之后就点击【完成】。
建立如图所示的客户端对话框:控件属性:说明:IDC_EDIT1 端口号编辑框,IDC_EDIT3 发送文本框,IDC_IPADDRESS1 IPd 地址框,IDC_LIST1 列表框。
现在模块已经建好了,接下来就是写代码了,不过写代码之前我们要先理清思路。
客户端与服务器是怎样来实现通信的呢,其实就是由数据的发送者客户端将要发送的信息写入一个套接字,在通过中间环节传输到接收端服务器的套接字中,就可以由接收端的应用程序将套接字从中取出。
因此,两个应用程序间的数据传输要通过套接字来完成,至于两个套接字间是怎么传输的我们就不要管了,我们只要把信息装入套接字中就可以了。
作为一个客户端,应该具备以下功能:1,、向指定地址的服务器发送连接请求;2、向已经连接成功的服务器发送信息;3、主动断开与服务器的连接;当我们已经知道客户端的功能时就应该想到,我们该怎样用代码实现这些功能呢;当然对于初学者来说编写这些代码还有点困难,我们可以先参考网络上的资料把原理弄懂,这才是我写这篇文章的本意。
VC6.0界面中的工作区点击ClassView 选项卡,右击【Socket_002 classes】-----【NewClass】添加新类“Client_Socket”基类为generic CWnd。
VC6.0 IDE的使用和程序调试技巧
项目工作区窗口
ClassView页
FileView页 ResourceView页
FileView页
ClassView页
File->New->Proj32 Application
基于WINDOWS平台的32位开发环境开发应用程序,SDK程序。 入口函数为WinMain
文件类型 Active Server Page Bitmap File C/C++ Header File HTML Page Resource Script Resource Template
Visual C++6.0 可以创建的文件类型 说明 文件类型 网页制作 Binary File 创建位图文件 C++ Source File 创建 C/C++头文件 Cursor File 创建 HTML 文件 Icon File 创建资源脚本文件 Text File 创建资源模板文件 SQL Script File
6:使用单步执行到程序结束
设置断点以后,调试运行程序时,程序 开始执行,并且运行到断点处暂停下来, 此时我们有机会观察程序的运行情况, 并且诊断程序目前的状态是否如我们所 预期的那样。 不过我们先不着急观察程序的状态,而 是来看看如何控制程序的运行,以便在 我们需要的时候让程序暂停下来,并且 以我们需要的方式走走停停!
方法是使用单步执行手段stepover让程序向前走一步停止调试停止调试并重新启动调试单步执行当前位置对比调试运行时出现的调试菜单debug和调试工具栏根据图标查找对应项设置断点调试运行程序此时程序暂停在断点处等待选择debug菜单找到最后一项quickwatch并点击输入想要观察的变量变量名变量的值点击addwatch点击addwatch看到如下画点击单步执行按钮或者菜单程序则向前单独运行一个步骤每向前执行一步就会暂停下来这样我们就有充足的时间观察所关心的变量名称按下f5键可以让程序从当前位置向前执行直到遇见下一个断点或者程序结束下面是赠送的ppt模板不需要朋友可以下载后编辑删除
vc6.0使用教程详解
你首先要打开VC6.0界面,一般用得较多的是Win32控制台应用程序(源程序,扩展名.cpp),步骤是:(先工程—后文件—编译—连接---运行)1,建立一个工程,“文件”——“新建”,出现下面界面:选择“Win32 Console Application”(控制台应用程序,左边倒数第三个),命名工程名称,选择保存位置,点击“确定”,进入下一步,看到如下提示界面:建立一个空工程,对应其他需要的你一可以建立别的工程;点击“完成”,之后:显示你创建的工程的信息。
2,再在有一个的工程的条件下,我们再建立一个源文件;“文件”——“新建”(快捷键Ctri+N),出现:建立源文件,选择“C++ Source ”,一般都是建立这种文件的(适用在当文件中适用)如果要建立头文件的话,选择“C/C++ Header File”,(适用在多文件工程中使用)命名,文件名称,点击“确定”,之后:进入编辑区,在主界面编写代码:如下编写完之后呢:可以按编译按钮调试程序,看看有没有错误,有的话改正,没有的话就可以再按连接按钮检查连接(多文件工程时常用,检查文件间是否正常连接),最后,点运行按钮,就可以运行了。
如果是您有代码如:cpp文件,或 .h 文件,想添加都VC6.0里来测试的话,可以这样做:首先,要理解一下文件扩展名为:cpp和.h文件扩张名是.h,代表的是头文件,一般是书写一些函数原型,以及一些在整个程序中常用到的结构体,频繁使用的函数说明,定义等等;文件扩张名为,cpp的,是C++中的源文件,也是最常用到的文件,每建立一个工程都要至少一个源文件(至少要有一个函数入口——主函数main() ),包含了核心代码;建立与运行说明:(以VC 6.0编译器为例,其他编译器类似)首先,打开VC 6.0编译环境;在菜单栏——文件(的下拉菜单中选择“新建”),在弹出的选择窗口中,选择Win32 Console Application(控制台应用程序),在填写工程名称,选择一个程序保存路径,点击“完成”,查看工程信息。
Linux下用C语言实现手机短信发送
Linux下用C语言实现手机短信发送编智慧密集Linux下用C语考察豫机矩秸笈馑李清陈超华摘要本文简要介绍了发送SMS的PDU命令,并在文章中重点介绍了在Linux环境下,用C语言实现十六进制编码PDU的过程.关键词PDU模式,半8_bit表示法(semioctetrepresentation),GSMT_bit缺省字母表(GSM7_bitdefaultalphabet)一,引言短信息服务SMS已经在不少国家发展成为一种流行的通信方式,可提供多种类型的服务.通常,对SMS的控制有三种实现途径:①Block摸式;②基于AT命令的Text模式;③基于AT命令的PDU摸式.第一种模式是早期为控制SMS而开发的协议,已经逐渐不用了现在主要运用后两种模式来控制SMS.本文主要讨论在Linux下用C语言来实现PDU模式的SMS发送.二,PDU模式下SMS发送的原理所谓PDU摸式就是将消息正文经过十六进制编码后进行传送的一种手机短信的收发方式.基本的PDU命令是ATCMGR.AT+CMGL和AT+CMGSPDU模式发送SMS的命令格式为:AT+CMGF:0AT+CMGS=<length><CR><pdu><Ctfl/Z> 其中<pan>包括SMSC(短信服务中心)地址信息与TPDU (传输协议数据单元)信息,这两部分信息均按照十六进制进行编码;<length>是TPDU信息中8_bits字节的长度.三,PDU模式下发送sMs的具体实现1.主程序流程2程序实现的技术关键整个程序的实现重点就是对信息进行十六进制的编码该编码过程可分为三个步骤来实现:28毫腑辅羟境舀每替妒;:啦(1)特地址信息按GSMRecommendationPhase2的规定进行转换协议中规定,SMSC地址值(SMSCAd&e~Value)及TPDU目标地址值(TP_DAV alue)以半8—bit表示法(Sell~#clet representation)表示,而在程序中输^的地址值是以字符串的形式表示的,因此需要将输人的地址值转换成半8-bn的形式,具体定义如下:intSetPhoneNumber(byte十bytes,intbytesJen.char phonenum)/by~s:保存转换后的字节而:bytesJen:待转换的字符串长度.phonenum:待转换的字符串/byte._o,b_hi;intl:forii=0:i<bytes_len:l++){._o={phonenum++)一0./计算数字字符表示的数字,字节的0~3位/bhi=f}Phonenum==\0}70x0f{phonenum++)一0./}宝节的4~7位/cbytes++)={b_hi<<4}l._0/}棒bJo及bh组合成一字节(2)将SMSC及TPDU信息转换成8上il字节流的形式1)将以7_bit字节表示的信息转换成8_bit字节的形式TPDU中的用户信息是按照GSM7-bit缺省字母表(GSM7上ildefaaltalphabet)编码的.实现时应采用文字数字表示法(Al#anumefierepresentation)将它封装成8上il字节数组的形式.具体实现如下:#defineDEFAULTLPHASET—BITLEN7制eliReBYTE_BITLEN8实用第一一集,——编intGSM-Defau!LIphaSetEneode(bytebytes.sizetby[es IencharstrsizetstrJenj{/bytes:保存转换后白℃Bbit字节荒bytesJenbytes串中剩亲空间白勺长度,str:7bit编码的字符串.sttJer,:字符串的长襄/ intbytes]ndex:0./字节数组当前的位置/JntbJtsjndex:O:/{当前处理的8bit宇节中已处理过的bl1的最高位置/lf{strJen}DEFAULTLPHASET-BITLEN>bytes/en BYTEBITLEN}returnbytes:0whlIe{errI=\0ietbbits]ndex;/当前的7bit字符中已处理过bn的最高位置/bytebb=[byte1str;b_bitsjndex=0/棒一个7_bit字符保存于8__bit字节数组由whi~e{bbitsj~ex<DEFAULTLPHASET_吕~TLEN){intleftbits;/当前的8_bit字节中还未处理过自勺blt煎数{/ln!bJeftbits;/当前的7bit字符中还未处理过的bit位数.intcopy-bits;/}将要处理的blt位数长//8J)it字节中来处理的位数/leftbits=BYTEBITLEN——bitsjndex;/7bit字符中未处理的位数/DIeftbits=DEFAULT-ALPHASET_BGLEN—b_bitsjndex;/精要处理的位数/cop!,_bits=Min{bJeft-bits.1eftbitsJSetBits(bytes+bytes_inde~bitsindex.b.bbitsjnaex.copybits】:十Ibytes4-bytesjndex}I=I(b)>b_bitsindex)&(IOx01<< copybits)一1)】<<bits_indexbitsjndex+:copybits;b_bits]ndex+:copy_bits;fbitsindex>=B'tq'El__BITLENbytesI++bytes_index】=0bitsJndex=0.str++}returnfbytesjndex),f2)组合离散信息经过前面的处理以后.所有的信息均转化成8bit字节的形式,现需要将这些离散的8.bit字节信息组合为一个字节流,即将单字节或多字节加入到字节流具体实现如下: setpdubyte将荤字节加人到字节流中.etsetpdubyte{byte…ssizetslen.bytetI{/s字节流:slen:字节丽中的剩糸空间:t:待托A的字节/ 【sten(sizeof{byte)I{returnf0)}}s=t(e}十+(elen)一一,return【1),函数setpdubytes将多字节加入到字节流中.,ntsetpdubytes{bytessizetsJenbytetsizettJen){/s:字节流,slen:字节滴中的剖余空间.tlen:特加,^,的字节串:den:待加,的字节串长度/'lfIslen<genl{return{0l:}merncpyce.t,tlen).(e)+=tien.{elen)一=tien:returnf1)l(3)将8且字节流转换或十六进制编码的形式,具体实现如下:intBytes2ASCllIcharpaecii.intasciiJen.bytepbytes Intbytesfen)/pascii:得存十六进制犏码ascii~en:刘糸空问长pbytes8bit字节流,bytes一!en字节流长度}/intI:if{asciifen<bytesJen2】freturn{一1)}forfi=Oi<byteslen;i++sprintf【pascii%02X.pbytesIIpascii+1)==\O)returnI一1pascii+=2,pbytes4-+return{bytesJen{2经过上面三个步骤的处理,已将SMSC地址信息和TPDU (下转第jj面)e唧u《m皿&】lljin忙晌如踟.329实用第一智慧密集后指定输出结果到一个文本文件Istep4):(具体创建Job的步骤请参考sQLSere,or的资料)定义好Job后,下面的样例程序就来调用这个Job. SubRunAJob(ServerNameAsString.JobNameAsStng} DimoServerAsSQLDmoSQLSeryer DimoJobAsSQLDmoJob0nEfrorGoToHaqdlerIfServerName=..OrJobName=一TnenMsgBox.vbFnformatontvbOKOnlv.EfroExltSubEndIf差接数据厍SetoServer=NewSQLDmoSQLSenJeroServerCoqi~ectServerNamess,SetoJob=oServerJobServerJobs(JobNameI IfoJobCurrentRunStatus=SQLDMOJobExecutio~jdleT-en MsgBoxJobwasastrunat&oJobLas:RunDa:e&&oJobLastRunTlme& oServerJobServetJobs(JobName)InvokeEIseMsgBoxJobcanqotbeexecutedEnd_{SetoJob=NothingCleanup:0nErrorResumeNextoServerDisConnectSe:oServer=NothingExitSubHandlerMegBoxErrNumber&一&ErrDesedptionvbCriti—caI+vb0KOnlvErrorGoToCieanuPEndSub这是一个函数,以数据库服务器的名字和Job的名字作为传人的参数,函数调用方法:RunAJob"ghj",''joh~ghjl"一执行这个函数后会在本地机器上发现c:~titlestxt文件,打开此文件,正是jobghjl执行后的输出结果.有些相对固定的工作可以以Job的形式定义在数据库中,数蟮这样既安全,执行的效率也比较高.例六:Enable/Disable数据库触发器(DatabaseTrigger)DimoServerDimoTableD'oTr'agetdimDBNamechangethlsOv0urdatabasenaeDBNamePUBSSetoServer=createobiectfSQLDMOSQLServer} oServerLoginSecure=TrueoServerConnect ForEachoTableInoServerDatabaaesfDBNameITables ForEachoTriggerInoTableTriggersoTriggerenablea=trueoTdggerenabled=falseNextNe×toServerDisConnectSetoSer~er=Nothing数据库触发器是为了保证数据库的完整性和一致性而设计的.但有时程序调试时,如果总是触发,影响调试.上面的这个代码可让你批量控制一个数据库中所有的触发器Enable 或Disable.通过以上的样例程序可以看出,如果充分利用SQL—DMO 提供的功能,你的应用程序将会与数据库集成得更加紧密,并且为撮终用户操作数据库提供丁更加灵活和方便的手段.SQL—DMO含盖的范围很广,仔细阅读它的帮助文件,你一定可以实现更丰富的应用.最后说明一下样例程序的运行环境:●MicrosoftSQLServer7OEnterprise●Windows20O0Professi0nal●InternetInformationSet~'er5.0●ASP3.0●IntemetExplore5.0●VisualBasic6OProfessionalEdition&SerdcePack2O(收稿j期:2001年l2月21日)(上接第29页)信息转化为十六进制编码的形式.下面就可以采崩writer)函数将AT+CMGS=<length><CR>pdu><Ctrl/Z>"命令发送给GSM_modem设备,以实现短信息的发送.(后面的过程就不再详述丁)四,设备要求经过测试,该程序撮好选用FALCO~,IGSM产品或是具有W AP功能的NOKIA手机和SIMENS手机.将选用设备通过线缆连接到PC机的COM端口,即可向具有SMS功能的手矶发送短信.五,结束语以上是我们在L~nux环境下用c语言实现手机短信发送过程中总结出的方法,其他有关GSM_modem的初始化及TPDU信息的具体设置可参照协议规定予以实现.本程序可用于GSM/SMS机房监控和远程维护管理,GSM/SMS移动性数据查询等多种领域,应用很广阔.(牧稿日期:2001年l2月24E)Computer~mrm.gSki也&M由nme2002.353。
深入浅出VC 串口编程之短信应用开发
深入浅出VC++串口编程之短信应用开发前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理、DOS平台控制以及基于WIN32 API、控件和第三方类的串口编程。
作为本系列文章的最后一次连载,本章将给出一个典型的应用实例:西门子短信服务模块TC35的串口控制。
1.短信控制终端作为短信(Short Message Service,SMS)一族,想必你有这样的体会:用手机编辑短信息十分不便、容易出错,而且修改费时,若能用计算机来收发短信则方便许多。
注意,本文所说的用计算机收发短信并不是说通过"网易短信王"等方式在Internet上收发短信,而是直接用计算机控制运行了GSM通信系统的短信终端进行收发,因而其收发短信的原理与手机是本质相同的。
实际上,一大堆的垃圾短信也是采用这种短信终端发出来的!我们来介绍一款GSM模块,它就是西门子公司的TC35,它由GSM基带处理器、电源专用集成电路、射频电路和闪速存储器等部分组成,负责处理GSM蜂窝设备中的音频、数据和信号,内嵌的软件部分执行应用接口和所有GSM协议栈的功能。
TC35支持中文短信息,工作在EGSM900和GSM1800双频段,电源范围为3.3~5.5V,可传输语音和数据信号,消耗功率在EGSM900(4类)和GSM1800(1类)分别为2W和1W,通过接口连接器和天线连接器分别连接SIM卡读卡器和天线。
TC35的数据接口(CMOS电平)通过A T 命令可双向传输指令和数据,可选波特率为300bit/s~115kbit/s,自动波特率为1.2k~115kbit/s。
它支持文本和PDU格式的,可通过A T命令或关断信号实现重启和故障恢复。
我们需要利用以TC35模块为主的硬件组成一个TC35终端设备,并与电脑通过RS-232C串口相连,并自行编制在PC上运行的短信息收发软件,就可以组成一个短信收发系统。
TC35终端电路如下图所示:TC35的控制主要包含如下几类指令:(1)初始化指令设置短消息发送格式A T+CMGF=1<CR>,设置1代表PDU模式,<CR>是回车符号,也就是0x0d,指令正确则模块返回<CRLF>OK<CRLF>,<CRLF>是回车换行符号。