C语言设计Win32程序(附C语言设计QQ登陆界面实例)

合集下载

visualC++模拟QQ登陆的编程

visualC++模拟QQ登陆的编程
if(hWnd1 != NULL)
{
qqID_hWnd = FindWindowEx(hWnd1, qqID_hWnd, "Edit", NULL);
//获得QQ号码输入框窗口位置
GetWindowRect(qqID_hWnd, &g_qqIDRt);
//获得当前默认QQ号码
SendMessage(qqID_hWnd,WM_GETTEXT, 255,(LPARAM)qqid);
}
//等待QQ窗口完全出现后抓取整个屏幕
Sleep(100);
g_DlgRt.left = 0;
g_DlgRt.top = 0;
g_DlgRt.right = m_xScreen;
网吧里一般用户点击QQ快捷方式后就输入号码和密码,然后再登陆,这样我们就可以进行欺骗了。我们的程序运行在后台不停的检测当前激活的窗口是不是 QQ登录的窗口,如果是的话就先取得QQ登录窗口中的号码、密码文本框和登陆按钮的窗口位置。这样是为了在我们伪造的窗口上创建这些窗口时不被察觉,获得 这些信息后,我们先截取整个屏幕,然后把真正的QQ登录窗口隐藏起来,最后创建我们自己的窗口,设置为最前占满整个桌面,然后再背景上贴上刚才抓取的图 片。最后在图片QQ登陆的地方创建好QQ号码和密码输入窗口,在检测到用户单击在QQ登陆按钮时获取用户输入的字符,把这些字符发送到真正的QQ窗口里, 最后模拟单击QQ登陆按钮完成QQ的正常登陆。
然而家庭用户一般是选了自动登陆的方式,所以没有QQ登录的窗口,那我们就要动一些手脚了。了解QQ的地球人都知道,QQ文件夹下有这两个文件: AutoLogin.dat和LoginUinList.dat,它们的功能:这两个文件是QQ的号码登录数据文件,AutoLogin.dat 保存的是自动登录号码的数据文件,LoginUinList.dat则保存的是QQ登录窗口中的“QQ号码”下拉框中显示的所有号码记录。所以我们要删除 QQ登录数据,直接删除AutoLogin.dat和LoginUinList.dat两个文件就行了。主要代码分析如下:

C语言调用WIN32API学习之1创建窗口

C语言调用WIN32API学习之1创建窗口

C语⾔调⽤WIN32API学习之1创建窗⼝本学习笔记基于VC++6.0开发环境,通过c语⾔编程语⾔,调⽤win32 API进⾏windows系统应⽤程序开发。

1,打开VC++6.0,点击⽂件->新建->⼯程->Win32 Application ⼯程名填写example1,点击确定,选择⼀个空⼯程,点击完成。

2,点击"新建⽂件" 按钮,新建⼀个空⽩⽂件,点击⽂件->另存为输⼊⽂件名example1.c 选择⼯作空间对应的⽂件夹,保存。

3,点击FileView,右击Source File,点击添加⽂件到⽬录,选择example1.c,点击确定。

4,添加代码#include <windows.h>#include <Shlwapi.h>LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); //声明消息回调函数int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,PTSTR szCmdLine,int iCmdShow) //Win32 Api 主程序函数⼊⼝{WNDCLASS wndcls; //定义窗体类HWND hwnd; //定义句柄⽤来保存成功创建窗⼝后返回的句柄MSG msg; //定义消息结构体变量wndcls.cbClsExtra=0; //结构体后附加的字节数,⼀般总为0wndcls.cbWndExtra=0; //窗体实例附加的字节数,⼀般总为0wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); //背景颜⾊wndcls.hCursor=LoadCursor(NULL,IDC_ARROW); //光标句柄wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION); //图标句柄任务栏显⽰的图标wndcls.hInstance=hInstance; //模块句柄wndcls.lpfnWndProc=WinSunProc; //函数指针,指向处理窗⼝消息的函数⼊⼝wndcls.lpszClassName="windows"; //⾃定义类名,不要与其他类名重复wndcls.lpszMenuName=NULL; //菜单名的字符串wndcls.style=CS_HREDRAW | CS_VREDRAW; //指定窗⼝风格详见参数注释1if (!RegisterClass (&wndcls))return 0; //注册窗体类,如果失败直接返回0结束程序hwnd=CreateWindow("windows","创建⼀个新窗⼝",WS_OVERLAPPEDWINDOW,0,0,300,150,NULL,NULL,hInstance,NULL);//创建窗体//APIWS_OVERLAPPEDWINDOW为 Window Styles //详见参数注释2ShowWindow(hwnd,SW_SHOWNORMAL);//显⽰窗体的API 传⼊需要显⽰的窗体句柄和显⽰⽅式UpdateWindow(hwnd);//刷新窗体的APIwhile(GetMessage(&msg,NULL,0,0))//进⼊消息循环{TranslateMessage(&msg);//将虚拟键消息转换为字符消息。

c语言编写win32程序

c语言编写win32程序

c语言编写win32程序C语言是一种通用的高级程序设计语言,广泛应用于嵌入式系统和操作系统开发。

而Win32是Windows操作系统的一种编程接口,它提供了一系列函数和数据结构,用于开发基于Windows平台的应用程序。

本文将介绍如何使用C语言编写Win32程序。

我们需要了解一些基本概念。

Win32是Windows API的一部分,它包含了许多函数和数据结构,用于创建窗口、处理消息、绘制图形等操作。

在编写Win32程序之前,我们需要安装相应的开发工具,例如Visual Studio等集成开发环境。

在开始编写程序之前,我们需要了解一些Win32编程的基本原理。

Win32程序的入口函数是WinMain,它类似于C语言中的main 函数。

在WinMain函数中,我们可以进行一些初始化操作,例如创建窗口、注册窗口类等。

接下来,我们可以开始创建窗口。

在Win32编程中,窗口是程序的主要界面。

我们可以使用CreateWindow函数来创建窗口,该函数接受一些参数,例如窗口类名、窗口标题、窗口风格等。

创建窗口后,我们还需要使用ShowWindow函数来显示窗口。

在窗口创建完成后,我们需要处理窗口的消息。

在Win32编程中,消息是程序之间进行通信的一种机制。

我们可以使用GetMessage 函数来获取消息,并使用TranslateMessage和DispatchMessage函数来处理消息。

通过处理消息,我们可以实现窗口的响应和交互功能。

除了处理消息外,我们还可以在窗口中进行图形绘制。

在Win32编程中,我们可以使用GDI(图形设备接口)来进行图形绘制。

例如,我们可以使用CreateSolidBrush函数来创建一个实心画刷,然后使用SelectObject函数来选中该画刷,最后使用Rectangle函数来绘制矩形。

除了基本的窗口和图形操作外,Win32还提供了许多其他功能。

例如,我们可以使用文件操作函数来进行文件读写操作,使用网络函数来进行网络通信,使用多线程函数来实现并发操作等。

win32程序设计

win32程序设计

win32程序设计Win32程序设计是一种针对Windows操作系统进行开发的编程方式,可以帮助开发者创建高效且易于使用的桌面应用程序。

以下是Win32程序设计的分步骤阐述。

第一步:选择编程语言和IDEWin32程序设计支持多种编程语言,包括C++、C#、Visual Basic等,开发者可以选择自己熟悉的语言进行开发。

同时,需要选择合适的集成开发环境(IDE)进行开发,例如Visual Studio等。

第二步:创建项目在IDE中创建新项目,选择Win32应用程序类型,并设置项目名称和存储位置。

在创建项目时需要选择应用程序类型,例如控制台应用程序、标准Windows应用程序等,以及所使用的编程语言。

第三步:编写代码在IDE中打开主代码文件,开始编写代码。

需要注意,在Win32程序设计中,需要使用Windows API(应用程序接口)来访问Windows 操作系统的功能。

编写代码时需要引用对应的API头文件,并定义窗口、消息处理函数等。

第四步:编译和构建完成代码编写之后,需要进行编译和构建操作。

在IDE中选择“构建解决方案”按钮,系统将自动执行编译、链接等操作,生成可执行文件和相关资源文件。

第五步:测试和调试在Win32程序设计中,测试和调试是非常重要的步骤。

在IDE中选择“调试”按钮,可以启动调试器,并进行单步调试、变量监视等操作,以发现代码中可能存在的错误和问题。

第六步:打包和发布完成测试和调试之后,需要将应用程序打包并发布。

在IDE中选择“发布”按钮,可以生成安装程序或独立执行文件,方便用户进行安装和使用。

总之,Win32程序设计是一种十分重要的桌面应用程序开发方式,可以帮助开发者创建高效且易于使用的Windows应用程序。

对于初学者来说,需要进行大量的练习和实践,才能掌握其编程技术和方法。

c windows程序设计教程

c windows程序设计教程

c windows程序设计教程C语言是一种通用的编程语言,广泛应用于Windows操作系统的程序开发。

在C语言中,可以通过Windows API来使用Windows操作系统提供的功能和服务。

本文将介绍C语言在Windows程序设计中的基本知识和常用技巧。

首先,我们需要了解Windows API的使用方法。

Windows API是一组函数和数据结构的集合,可以通过函数调用的方式来调用Windows操作系统提供的功能。

在C语言中,可以通过在代码中包含Windows头文件(例如windows.h)来使用Windows API。

通过调用不同的API函数,我们可以实现窗口创建、消息处理、用户界面设计等功能。

接下来,让我们来了解Windows窗口的创建和消息处理。

在Windows程序中,窗口是用户界面的基本元素。

我们可以使用CreateWindow函数来创建窗口,并指定窗口的属性,例如窗口类名、窗口标题、窗口大小等。

创建窗口后,我们需要使用消息循环来处理窗口的消息。

消息循环是一个无限循环,用于接收和处理窗口的各种消息,例如鼠标点击、键盘输入等。

在消息处理过程中,我们可以根据接收到的消息类型执行相应的操作,例如更新窗口内容、响应用户的操作等。

此外,Windows程序中常常需要使用各种控件来实现用户界面。

Windows API提供了一些常用的控件,例如按钮、文本框、列表框等。

我们可以使用CreateWindowEx函数来创建这些控件,并设置其属性,例如位置、大小、样式等。

创建完控件后,我们可以使用消息处理函数中的相应处理方式来处理控件的消息。

例如,点击按钮后,可以在消息处理函数中执行相应的操作,例如弹出消息框、更新窗口内容等。

另外,对于一些需要在窗口中绘制图形的应用程序,我们可以使用GDI(图形设备接口)来实现。

GDI提供了一组函数和数据结构,用于实现在窗口中绘制图形、文本等。

通过调用GDI函数,我们可以在窗口的设备上下文中进行绘制操作,例如绘制线条、填充矩形等。

用C语言设计Win32程序(附C语言设计QQ登陆界面实例)

用C语言设计Win32程序(附C语言设计QQ登陆界面实例)

用C语言设计Win32程序(附C语言设计QQ登陆界面实例)C语言的基本语法我是不打算再提了,很多C语言编程的书,就是将一些基本的数据类型、数据结构、语法,然后就是一些数值计算的实例,大多数都是雷同的,难免有抄袭之嫌,而且也没有多少实用价值。

本书以实用实例作为编程指导,指引大家编写真正实用的程序。

了解到大家对黑客程序、病毒、窗口类程序比较感兴趣,因此我就拿这些实例进行讲解。

基于大家基本都用Windows XP SP3,我也就在这个系统上把程序调试成功后再给大家讲解。

编程环境,我还是喜欢Visual C++ 6.0本书计划从四个大的方面来讲,这四个方面是:窗口类、文件操作类、网络类、数据库类。

都是时下流行的编程必备技术,也是软件开发者,必须掌握的技术。

中间以实例讲解,逐步学习,相信大家看完后会有很大的提高的。

第一章窗口类程序的编写这一章就先来讲解下窗口类程序的编写。

因为现在程序没有界面,就像人没有脸面一样,而且好的界面更能吸引人。

从基本的界面开始,相信能给大家指明出一条路的,使大家很容易地掌握窗口序的编写。

其实界面设计利用VC 6.0 的MFC,很容易地制作出来。

这里从底层开始写代码来写界面程序,使大家知道一些底层的东西,为以后学习打下好的基础,相信您学了这些,再用VC 的MFC会得心应手的。

1.1用 C 写的第一个一个窗口程序作为编程的开始,我们还是以一个Hello World来开始我们的学习之旅。

代码如下:#include <stdio.h>void main(){printf("Hello World!");}这是一个再简单不过的C程序了,只要有点C语言的知识就能够懂的,不过这里估计还有些人,到现在还不知道#include<stdio.h>中的头文件stdio.h到底是什么东西,我就来说下了,stdio.h是一个文本文件,存在于磁盘上的,已VC为例它的位置如下图:也许你听说过printf()函数是在stdio.h中预定义的,但是你见过其定义的形式没有,没有且看下图其定义形式,就如图中所示,也许你并不懂前面那些东西是什么,不用担心,以后我会慢慢解释给大家的。

用VC 制作QQ自动登录

用VC  制作QQ自动登录

近日由于在华为培训,期间因为导师们忙得要紧,没那么多时间去教导我们,只是给我们看文档和代码,看完了,没事就想出这个来玩玩了。

这里要先用SPY++来找到QQ登陆框的各个窗口标题或ID号。

原理:其实不难,只要找到QQ登陆框的号码输入和密码输入框,然后向其填数据就是了。

这里填数据就是向其发送消息,模拟键盘罢了。

一、先是查看QQ登陆框是否开启,否则开启它。

二、开启和打开后就是取得QQ的号码框和密码框的句柄了这里要注意的是,因为QQ密码框是登陆框的子窗口,先要找到登陆框后再一步步找到QQ的密码框。

找到后就是向它们发送消息了。

QQ的密码框先复制到剪切板后发送WM_PASTE就可以了,但是密码框因为使用了QQ键盘加密保护技术,所以不能发送WM_PASTE,而要模拟键盘发送WM_CHAR消息,让其一个一个接收密码就可以了。

三、当填充好号码和密码后就可以发送单击鼠标消息,让QQ登陆了。

四、要让QQ自动登陆,只要加个WM_TIMER就可以了,至于这个大家都会的了,这里不再讲述。

五、结束语:这里使用到的技术就是向别的进程发送(数据)消息,主要就是要找到对方进程接收消息的句柄(这里用了SPY++),找到后就可以向其它发送(数据)消息了。

比如我前几天帮别人装了个PP,但是PP有个浏览器,只要你开PP这个东东就会出来,我觉得非常碍眼,就可以给它发送一个WM_HIDE消息。

其它的大家可以随意发挥了!When you are old and grey and full of sleep,And nodding by the fire, take down this book, And slowly read, and dream of the soft look Your eyes had once, and of their shadows deep; How many loved your moments of glad grace, And loved your beauty with love false or true, But one man loved the pilgrim soul in you,And loved the sorrows of your changing face; And bending down beside the glowing bars, Murmur, a little sadly, how love fledAnd paced upon the mountains overheadAnd hid his face amid a crowd of stars.The furthest distance in the worldIs not between life and deathBut when I stand in front of youYet you don't know thatI love you.The furthest distance in the worldIs not when I stand in front of youYet you can't see my loveBut when undoubtedly knowing the love from bothYet cannot be together.The furthest distance in the worldIs not being apart while being in loveBut when I plainly cannot resist the yearningYet pretending you have never been in my heart.The furthest distance in the worldIs not struggling against the tidesBut using one's indifferent heartTo dig an uncrossable riverFor the one who loves you.倚窗远眺,目光目光尽处必有一座山,那影影绰绰的黛绿色的影,是春天的颜色。

win32界面编程实例

win32界面编程实例

win32界面编程实例Win32 界面编程是使用 Microsoft Windows 的 Win32 API 进行应用程序开发的过程。

以下是一个简单的 Win32 应用程序示例,它创建一个窗口并在其中显示文本。

```c++include <>// 窗口过程函数的声明LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 注册窗口类WNDCLASS wc = {0};= WindowProcedure;= hInstance;= "SampleWindowClass";RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindow("SampleWindowClass", // 窗口类名"Hello, Win32!", // 窗口标题WS_OVERLAPPEDWINDOW, // 窗口风格CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, // 窗口位置和大小NULL, NULL, hInstance, NULL);if (hwnd == NULL) {return 0;}// 显示窗口ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg = {0};while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_DESTROY:PostQuitMessage(0); // 退出消息循环break;default:return DefWindowProc(hwnd, msg, wParam, lParam); // 默认处理其他消息}return 0;}```这个程序首先注册一个窗口类,然后创建一个窗口,并显示它。

【初学VC讲稿】第0篇:基本的Win32应用程序

【初学VC讲稿】第0篇:基本的Win32应用程序
//参数1,将消息引导到的消息的句柄
//参数2,消息ID(如WW_CREATE)
//参数3,32位的消息参数
//参数4,32位的消息参数表
//两个32位的参数的值取决于消息的类型。如当用户选择了一贯菜单项时,应用程序得到一个WW_COMMAND消息,菜单项
//的ID存在于wParam参数的低字中。
//不懂得Windows程序的传统运行机制,学习MFC会更加困难。下面看一下基本的Win32应用程序:
//-----------------------------------------------------------------------------------
//基本的Win32应用程序
switch(message)
{
case WM_PAINT:
hDC = ::BeginPaint(hWnd,&paintStruct);
::TextOut(hDC,10,10,"基本的Win32应用程序",19);
::EndPaint(hWnd,&paintStruct);
wndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = "BasicApp";
::ShowWindow(hWnd,nShowCmd); //显示新窗口
::UpdateWindow(hWnd); //更新窗口显示

win32界面编程 实例

win32界面编程 实例

win32界面编程实例
Win32界面编程是指使用Win32 API来创建Windows应用程序
的用户界面。

下面我将从不同角度给出一些Win32界面编程的实例。

1. 创建窗口,使用Win32 API可以创建一个基本的窗口应用程序。

首先需要注册窗口类,然后创建窗口并处理窗口消息。

通过设
置窗口类的属性和消息处理函数,可以实现窗口的基本功能,比如
响应用户输入、绘制图形等。

2. 控件和布局,Win32 API提供了一系列控件,比如按钮、文
本框、列表框等,可以通过创建这些控件来构建丰富的用户界面。

同时,可以使用布局管理技术来控制控件的位置和大小,以实现界
面的美观和合理布局。

3. 图形绘制,Win32 API允许开发者直接操作图形设备接口(GDI),从而实现自定义的图形绘制功能。

通过GDI可以绘制各种
图形、文本和图像,实现丰富多彩的界面效果。

4. 用户交互,Win32界面编程可以实现丰富的用户交互功能,
比如鼠标点击、键盘输入、菜单操作等。

通过响应用户的交互行为,
可以让应用程序更加灵活和易用。

5. 窗口管理,Win32 API提供了丰富的窗口管理功能,比如最大化、最小化、关闭窗口等。

开发者可以通过这些功能来管理应用程序的窗口,提升用户体验。

总之,Win32界面编程可以实现丰富多彩的Windows应用程序界面。

开发者可以通过灵活运用Win32 API提供的功能,创建出符合自己需求的界面效果。

希望以上实例可以帮助你更好地理解
Win32界面编程。

c#qq登录演示代码

c#qq登录演示代码

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using ;using System.IO;using System.Security.Cryptography;using System.Text.RegularExpressions;using System.Collections;namespace webqq{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}public String host = ""; public String shost ="";private Random rd = new Random();private String get = "get";private CookieContainer cookies = new CookieContainer();private String refer = "/proxy.html?v=20110331002&callback=2";private String userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)";private String accept = "*/*";private String contentType = "application/x-www-form-urlencoded; charset=UTF-8";private String verifyCode = "";private String hex16 = "";private String ptwebqq = "";private String psessionid = "";private String vfwebqq = "";private String skey = "";private String clientid =new Random().Next(100000000)+"";//默认需要输入验证码private Boolean isVerify = false;private void txt_pass_Click(object sender, EventArgs e){}private String getHtml(String url,String method,String data){Uri uri = new Uri(url);HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); erAgent = erAgent;request.Accept = this.accept;request.ContentType = this.contentType;request.Method = method;request.Referer = this.refer;request.CookieContainer = this.cookies;if (method.Equals("post")){byte[] byteRequest = Encoding.Default.GetBytes(data);Stream rs = request.GetRequestStream();rs.Write(byteRequest, 0, byteRequest.Length);rs.Close();}HttpWebResponse response = (HttpWebResponse)request.GetResponse(); cookies.Add(response.Cookies);Stream resultStream = response.GetResponseStream();StreamReader sr = new StreamReader(resultStream, Encoding.UTF8);string html = sr.ReadToEnd();sr.Close();resultStream.Close();request.Abort();response.Close();return html;}private Stream getStream(String url, String method){Uri uri = new Uri(url);HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); erAgent = erAgent;request.Accept = this.accept;request.ContentType = this.contentType;request.Method = method;request.Referer = this.refer;request.CookieContainer = this.cookies;HttpWebResponse response = (HttpWebResponse)request.GetResponse();foreach (Cookie cookie in response.Cookies){cookies.Add(cookie);}Stream s = response.GetResponseStream();return s;}private void btn_login_Click(object sender, EventArgs e){}///<summary>///你懂的///</summary>///<param name="buffer">你懂的</param>///<returns></returns>public static string binl2hex(byte[] buffer){StringBuilder builder = new StringBuilder();for (int i = 0; i < buffer.Length; i++){builder.Append(buffer[i].ToString("x2"));}return builder.ToString();}///<summary>///你懂的///</summary>///<param name="input">你懂的</param>///<returns></returns>public static string md5(string input){byte[] buffer =MD5.Create().ComputeHash(Encoding.GetEncoding("ISO-8859-1").GetBytes(input));return binl2hex(buffer);}///<summary>///你懂的///</summary>///<param name="passWord">QQ密码</param>///<returns></returns>public static string hexchar2bin(string passWord){StringBuilder builder = new StringBuilder();for (int i = 0; i < passWord.Length; i = i + 2){try{builder.Append(Convert.ToChar(Convert.ToInt32(passWord.Substring(i, 2), 16)));}catch (Exception e){MessageBox.Show(e.ToString());}}return builder.ToString();}///<summary>///获取最新空间加密的方法///</summary>///<param name="qq">/check?uin={0}&appid=15000101&r={1} 返回的第三个参数</param>///<param name="password">QQ密码</param>///<param name="verifycode">验证码</param>///<returns></returns>public static string GetPassword(string qq, string password, string verifycode){String P = hexchar2bin(md5(password));//String U = md5(P + hexchar2bin(qq.Replace("\\x", ""))).ToUpper();String U = md5(P + hexchar2bin(qq)).ToUpper();String V = md5(U + verifycode.ToUpper()).ToUpper();return V;}private void txt_pass_TextChanged(object sender, EventArgs e){}private void txt_pass_Click_1(object sender, EventArgs e){//String qq = this.txt_qq.Text.Trim();//String url = "/check?appid=1003903&uin=" + qq + "&r=" + rd.NextDouble();string url ="/check?uin="+qq+"&appid=1003903&r=0.5058025715431";String result = getHtml(url, get, null);if (result.IndexOf("!") < 0){//需要验证图片String verifyUrl = "/getimage?aid=1003903&uin=" + qq + "&r=" + rd.NextDouble();Stream img = getStream(verifyUrl, get);Image codeImage = Image.FromStream(img);this.picbox_code.Image = codeImage;isVerify = true;}else{this.verifyCode = result.Substring(result.IndexOf("!"), 4);this.hex16 = result.Substring(result.IndexOf("\\"), 32);this.hex16 = this.hex16.Replace("\\x","");}}private void button1_Click(object sender, EventArgs e){//登陆String qq = this.txt_qq.Text.Trim();if (qq.Equals("")){MessageBox.Show("请输入QQ号码!");return;}String pass = this.txt_pass.Text.Trim();if (pass.Equals("")){MessageBox.Show("请输入QQ密码!");return;}if (isVerify){verifyCode = this.txt_code.Text.Trim();if (verifyCode.Equals("")){MessageBox.Show("请输入验证码!");}}String md5pass = GetPassword(hex16, pass, verifyCode);String loginUrl = "/login?u=" + qq + "&p=" + md5pass +"&verifycode=" + verifyCode +"&webqq_type=Callme&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%%2Floginprox y.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp =loginerroralert&action=1-24-89939&mibao_css=m_webqq&g=1";//登陆String loginResult = getHtml(loginUrl, "get", null);MessageBox.Show(loginResult);int isLogin = loginResult.IndexOf("登录成功");if (isLogin > 0){// MessageBox.Show("登录成功");/*String cks = cookies.GetCookieHeader(new Uri(loginUrl));this.ptwebqq = PassUtil.getPtWebqq(cks, "ptwebqq=");this.skey = PassUtil.getMidStr(cks, "skey=");String channelLoginUrl = this.host + "/channel/login2";String postData =String.Format("r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22{0}%22%2C%22passwd_sig%22%3 A%22%22%2C%22clientid%22%3A%22{1}%22%2C%22psessionid%22%3Anull%7D&clientid={2}&psessionid=null", this.ptwebqq, this.clientid, this.clientid);String login3 = getHtml(channelLoginUrl, "post", postData);//得到vfwebqq和psessionidthis.vfwebqq = PassUtil.getVfWebqqOrPsessionid(login3, "vfwebqq", "psessionid"); this.psessionid = PassUtil.getVfWebqqOrPsessionid(login3, "psessionid","user_state");**//打开主窗体*/}else{MessageBox.Show("登陆失败");}}private void label1_Click(object sender, EventArgs e) {}}}。

QQ登录界面设计C#

QQ登录界面设计C#

第2章设计QQ用户登录界面通过对本章的学习,在学会设计QQ登录界面的同时,还能了解设计用户界面的一些相关知识,如V isual C# 2008工具箱、属性窗口的使用,以及使用【格式】菜单的菜单命令来美化用户界面等。

2.1 用户界面设计用户界面设计是Visual C# 2008程序设计中非常重要的工作,本节首先介绍了用户界面的概述和类型,然后再介绍设计用户界面的一些基本原则,读者在设计用户界面时,应当遵循这些基本原则。

2.1.1 用户界面概述用户界面是应用程序的重要组成部分,设计用户界面时,有许多问题需要考虑:例如一共需要使用多少个窗体、要不要使用菜单、要不要创建工具栏、采用什么样的方式来与用户交换信息、应当给用户提供哪些帮助等。

由此可见,在设计用户界面之前,应当了解该应用程序的用途及用户的计算机水平层次,据此设计出合理、美观的用户界面,用户界面决定了应用程序的易用性,从而决定了应用程序的整体质量。

2.1.2 用户界面的类型基于Windows应用程序的用户界面主要有两种类型:第一种是单文档界面(SDI),第二种是多文档界面(MDI)。

Microsoft Windows操作系统中自带的写字板程序就是一个单文档界面应用程序的例子,它只能处理一个文档,如需要处理另一个文档,则必须关闭前一个文档,写字板程序如图2-1所示。

图2-1 写字板——单文档界面应用程序多文档界面应用程序有很多,如Microsoft Excel,它允许同时处理多个文档,如图2-2所示,可以通过窗口菜单来切换当前窗口中的活动文档。

图2-2 Microsoft Excel——多文档界面应用程序除了SDI界面和MDI界面,比较常见的还有对话框型界面和类似于“Windows资源管理器”的界面。

对话框型界面如Windows中的计算器;类似于“Windows资源管理器”的界面由两部分组成,左边是层次视图区,右边是内容显示区,这种界面便于浏览大量的文档、图片和目录等。

C语言实现注册登录系统

C语言实现注册登录系统

C语⾔实现注册登录系统本⽂实例为⼤家分享了C语⾔实现注册登录系统的具体代码,供⼤家参考,具体内容如下/* Note:Your choice is C IDE */#include "stdio.h"#include "string.h"#include "windows.h"//定义变量char reg_name[30]="",reg_pwd[10]="";char on_name[30],on_pwd[10];//⽤户注册系统void regist(){//清屏system("pause");system("cls");printf("\n\n\t\t\t欢迎使⽤腾讯QQ注册系统\n\n");while(1){//输⼊⽤户名printf("\t\t请输⼊⽤户名[不能⼤于10个字符]:");scanf("%s",reg_name);//判断⽤户名if(strlen(reg_name)<=10){while(1){//输⼊密码printf("\n\t\t请输⼊密码[密码长度为⼋位]:");scanf("%s",reg_pwd);//判断密码if(strlen(reg_pwd)==8){printf("\n\n\t\t注册成功,您的⽤户名是%s,密码是%s\n\n",reg_name,reg_pwd);break;}else{printf("\n\t\t密码的长度为%d,请重新输⼊\n",strlen(reg_pwd));}}break;}else{printf("\n\t\t⽤户名的长度为%d,请重新输⼊\n\n",strlen(reg_name));}}}//判断是否注册int judge(){if(strcmp(reg_name,"")==0&&strcmp(reg_pwd,"")==0){printf("\n\n\t\t您尚未注册,请先注册!\n\n");return 0;}else{return 1;}}//⽤户登录void dl(){int i;system("pause");system("cls");printf("\n\n\t\t\t欢迎使⽤腾讯QQ登录系统\n\n");//三次登录验证for(i=1;i<=3;i++){printf("\t\t请输⼊⽤户名:");scanf("%s",on_name);printf("\n\t\t请输⼊密码:");scanf("%s",on_pwd);if(strcmp(reg_name,on_name)==0&&strcmp(reg_pwd,on_pwd)==0) {printf("\n\n\t\t登录成功,欢迎使⽤腾讯QQ系统\n\n");break;}else{printf("\n\n\t\t登录失败,请重新登录,您还有%d次机会\n\n",3-i); }}}void main()//腾讯QQ注册登陆系统{//定义变量int id;while(1){system("pause");system("cls");//输出界⾯printf("\n\n\t\t\t腾讯QQ管理系统\n\n");printf("\t\t\t1:注册\n");printf("\t\t\t2:登录\n");printf("\t\t\t0:退出\n\n");//输⼊功能编号printf("\t\t请选择功能编号:");scanf("%d",&id);//判断switch(id){case 1:regist();break;case 2:if(judge()==1){dl();}break;case 0:exit(1);break;default:printf("\n\t\t您输⼊的功能编号有误,请重新输⼊!\n");}}}效果图:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

c语言编写win32程序

c语言编写win32程序

c语言编写win32程序C语言是一种广泛应用于编程领域的高级程序设计语言,而Win32则是指在Windows操作系统中使用C语言编写的程序。

本文将详细介绍如何使用C语言编写Win32程序,并探讨其相关知识和技巧。

我们需要了解Win32编程的基础知识。

Win32是Windows操作系统的一套API(应用程序编程接口),它提供了一组函数和数据结构,用于实现图形界面、文件操作、网络通信等功能。

在Win32编程中,我们需要熟悉这些API并学会如何调用它们来实现所需的功能。

在开始编写Win32程序之前,我们需要安装一个编译器,例如微软的Visual Studio。

安装完成后,我们就可以创建一个新的Win32项目,并开始编写代码了。

在编写Win32程序时,我们首先需要定义一个窗口类。

窗口类是窗口的模板,用于定义窗口的属性和行为。

我们可以使用Win32 API 中的RegisterClass函数来注册窗口类,并指定窗口的样式、消息处理函数等。

注册完成后,我们就可以使用CreateWindow函数来创建窗口实例,并显示在屏幕上。

创建窗口后,我们还需要处理窗口的消息。

在Win32编程中,窗口和其他组件之间通过消息进行通信。

当窗口接收到消息时,会调用相应的消息处理函数来处理该消息。

我们可以在消息处理函数中编写逻辑代码,对不同的消息进行不同的处理。

例如,当用户点击窗口的关闭按钮时,窗口会接收到WM_CLOSE消息,我们可以在消息处理函数中编写代码来响应该消息,并执行相应的操作。

除了处理消息外,我们还可以在Win32程序中添加其他功能。

例如,我们可以使用GDI(图形设备接口)来绘制图形和文字,使用文件操作函数来读写文件,使用网络通信函数来实现网络功能等。

通过调用这些函数,我们可以实现各种各样的功能,使我们的Win32程序变得更加强大和实用。

在编写Win32程序时,我们需要注意一些常见的问题。

首先,我们需要遵循Win32编程的规范和约定,例如使用正确的数据类型、遵循消息处理函数的约定等。

C语言《仿QQ登录》项目设计教案

C语言《仿QQ登录》项目设计教案

班级:组别:姓名:组内评价:教师评价:实训项目使用分支程序仿QQ登录(2课时)【实训目标】1.了解分支程序结构2.掌握分支程序设计【实训重难点】重点:使用分支程序进行设计难点:1.分支程序流程图设计2.字符串的输入及字符串的比较【实训准备】1.掌握分支程序结构的执行过程2.了解编程的基本步骤【实训过程】实训项目: 使用分支程序仿QQ登录模块一(引入)观察:实际QQ登录过程,画出其流程图流程图:模块二(项目分解)任务一:使用分支程序仿QQ登录要求:1.只要求输入密码,并进行密码验证2.密码必须全是数字(假设密码为111111)3.密码不正确输出”密码验证错误!”,密码正确不提示。

4.拓展:如果密码正确输出”登录成功!”,程序该如何修改。

拓展:流程图:程序代码:运行情况:实训中出现的问题及解决方法:任务二: 使用分支程序仿QQ登录(使用双分支结构)要求:1.输入账号和密码,并进行验证2.账号必须为数字,密码包含是数字和字母(假设账号为33633749,密码为logo111)3.密码正确输出”登录成功!”,密码不正确输出”密码验证错误!”4.拓展:这道程序能不能用多分支结构来设计,该如何修改。

拓展:流程图:程序代码:运行情况:实训中出现的问题及解决方法:任务三:使用分支程序仿QQ登录要求:在任务二的基础上,要求密码输入3次不正确以后,不充许再输入实训中出现的问题及解决方法:模块三(总体设计)使用分支程序仿QQ登录要求:输入的密码用*来代替。

实训中出现的问题及解决方法:【项目小结】【考核评价】。

自己编写win32应用程序

自己编写win32应用程序

使用VC2005创建一个Win32应用程序,同时通过App作为程序的入口,先建一个窗口,并在窗口中画一个按钮。

1.新建Win32 Progect输入程序名:2.选择windows application并创建一个空的工程:3.先进一个jiangzy.h文件,内容如下:#include<afxwin.h> //要使用CWinApp,就必须定义次头文件class CjiangzyApp:public CWinApp{public:CjiangzyApp();//声明构造函数public:virtual BOOL InitInstance(); //默认的初始化函数};extern CjiangzyApp theApp; //系统使用的一个全局变量4.有了jiangzy.h文件就还要一个jiangzy.cpp文件,内容如下:#include"stdafx.h" //关联文件#include"jiangzy.h"#include"jiangzyfram.h" //窗口文件CjiangzyApp::CjiangzyApp() //构造函数实体{}CjiangzyApp theApp; //全局变量BOOL CjiangzyApp::InitInstance() //定义初始化函数{ InitCommonControls(); //初始化控件CWinApp::InitInstance(); //调用父类初始化函数m_pMainWnd = new CjiangzyFram(); //申请一个窗口作为主窗口,m_pMainWnd是系统自带变量m_pMainWnd->ShowWindow(m_nCmdShow); //显示窗口m_pMainWnd->UpdateWindow();return TRUE;}把一个MFC程序中的stdafx.h和stdafx.cpp两个文件加入工程中。

2.win32应用程序设计

2.win32应用程序设计
• TEXT宏:当定义了UNICODE时返回 UNICODE字符,否则返回ASCII字符
Hello3.cpp
Window CE的消息机制
Windows CE编程仍然是Windows编程,有 相同的消息循环、相同的窗口,大部分相 同的资源和控件等SS)
OS层
驱动层
驱动层、HAL、BSP
Hardware
WinMain()的几个参数
• hInstance:当前实例 • hPrevInstance:历史遗留,始终是0,可以忽略 • lpCmdLine:指向一个UNICODE字符串,包含了 命令行文本 • nCmdShow:指明了程序主窗口的初始状态, WinCE只支持三个状态:
#include "windows.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{ MessageBox(NULL,TEXT("Hello World!"),TEXT("Hello2"),MB_OKCANCEL); return 0; }
– SW_SHOW(显示窗口) – SW_HIDE(隐藏窗口) – SW_SHOWNOACTIVATE(显示不激活)
功能行
• printf("Hello World\n");
• 向控制台输出Hello World 字样,由于很多 WINCE系统没有控制台驱动,因此Hello0 不会显示任何东西
Hello2
• Style:
– CS_GLOBALCLASS:类是全局的 – CS_HREDRAW:窗口改变水平大小时,重绘 窗口 – CS_VREDRAW:窗口改变垂直大小时重绘 – CS_NOCLOSE:如果“关闭”按钮出现在标 题栏上,则使其失效 – CS_DBLCLKS:允许双击事件传递给父窗口

c#qq登录界面

c#qq登录界面

登录界面using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace qq{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button2_Click(object sender, EventArgs e){zhuce zhu = new zhuce();zhu.Show();this.Visible = false;}private void button1_Click(object sender, EventArgs e){string id = textBox1.Text;SqlConnection con = new SqlConnection(@"Data Source=LENOVO-PC\SQLEXPRESS;Initial Catalog=qq;Integrated Security=True");con.Open();SqlCommand b = new SqlCommand("select * from qq where id="+id, con);SqlDataReader c = b.ExecuteReader();while (c.Read()){if (this.textBox1.Text.Equals(c["id"].ToString())){if (this.textBox1.Text.Equals(c["id"].ToString()) && this.textBox2.Text.Equals(c["password"].ToString())){MessageBox.Show("正确");break;}//else//{// Response.Write("abc");//}if (this.textBox1.Text.Equals(c["id"].ToString()) && !this.textBox2.Text.Equals(c["password"].ToString())){MessageBox.Show("密码错误!");break;}}else{ MessageBox.Show("用户不存在!请重新输入");break;}}}}}注册界面using System;using System.Collections.Generic; using ponentModel; using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; using System.Data.Sql;using System.Data.SqlClient;using System.Data.SqlTypes;namespace qq{public partial class zhuce : Form{public zhuce(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string id = textBox1.Text;string password = textBox2.Text;if (textBox2.Text != textBox3.Text){ MessageBox.Show("密码不一致,请重新输入!"); }SqlConnection con = new SqlConnection(@"Data Source=LENOVO-PC\SQLEXPRESS;Initial Catalog=qq;Integrated Security=True");try{con.Open();string strsql = "insert into qq values ('" + id +"','" + password + "')";SqlCommand cmd = new SqlCommand(strsql, con);cmd.ExecuteNonQuery();label4.Text = "注册成功!";}catch{label5.Text = "注册失败!";}finally{con.Close();}}private void label5_Click(object sender, EventArgs e){Form1 cai = new Form1();cai.Show();this.Visible = false;}} }。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用C语言设计Win32程序(附C语言设计QQ登陆界面实例)C语言的基本语法我是不打算再提了,很多C语言编程的书,就是将一些基本的数据类型、数据结构、语法,然后就是一些数值计算的实例,大多数都是雷同的,难免有抄袭之嫌,而且也没有多少实用价值。

本书以实用实例作为编程指导,指引大家编写真正实用的程序。

了解到大家对黑客程序、病毒、窗口类程序比较感兴趣,因此我就拿这些实例进行讲解。

基于大家基本都用Windows XP SP3,我也就在这个系统上把程序调试成功后再给大家讲解。

编程环境,我还是喜欢Visual C++ 6.0本书计划从四个大的方面来讲,这四个方面是:窗口类、文件操作类、网络类、数据库类。

都是时下流行的编程必备技术,也是软件开发者,必须掌握的技术。

中间以实例讲解,逐步学习,相信大家看完后会有很大的提高的。

第一章窗口类程序的编写这一章就先来讲解下窗口类程序的编写。

因为现在程序没有界面,就像人没有脸面一样,而且好的界面更能吸引人。

从基本的界面开始,相信能给大家指明出一条路的,使大家很容易地掌握窗口序的编写。

其实界面设计利用VC 6.0 的MFC,很容易地制作出来。

这里从底层开始写代码来写界面程序,使大家知道一些底层的东西,为以后学习打下好的基础,相信您学了这些,再用VC 的MFC会得心应手的。

1.1用C 写的第一个一个窗口程序作为编程的开始,我们还是以一个Hello World来开始我们的学习之旅。

代码如下:#include <stdio.h>void main(){printf("Hello World!");}这是一个再简单不过的C程序了,只要有点C语言的知识就能够懂的,不过这里估计还有些人,到现在还不知道#include <stdio.h>中的头文件stdio.h到底是什么东西,我就来说下了,stdio.h是一个文本文件,存在于磁盘上的,已VC为例它的位置如下图:也许你听说过printf()函数是在stdio.h中预定义的,但是你见过其定义的形式没有,没有且看下图其定义形式,就如图中所示,也许你并不懂前面那些东西是什么,不用担心,以后我会慢慢解释给大家的。

函数是先定义才能使用的,所以stdio.h中定义printf函数,我我们在引用了stdio.h头文件后就可以在程序中调用printf函数了。

上面是在命令行中显示一个“Hello World!”,没什么意思,下面我写一个窗口程序,显示个Hello World!#include <windows.h>void main(){MessageBox(NULL," Hello World!","我的第一个窗口程序",MB_OK);}编译运行后如下图:弹出的是一个对话框,上面有Hello World,还有一个标题和一个“确定”按钮。

当然你会说这对话框也算个窗口吗?这里肯定的告诉你:是的,对话框是窗口程序的一个子集。

你可能还会这样问,这样一个简单的窗口有啥用呢,其实这样的窗口非常有用,我们在操作计算机的时候,会出现一些警告或提示的对话框,都是基本是这种方法写出来的。

就算是这个很简单,学习本来不就是由易向难,由浅显深奥去的过程吗。

整个效果几乎就是靠一个函数MessageBox的功劳。

这里也先不介绍这个函数了,说些其他的。

其实用C编写一些程序,就是把编程环境中所提供的一些函数熟悉了基本就可以了。

用VC来写成序,其中的头文件有很多,定义了很多Windows API 函数、数据结构、宏,可以让我们大家运用,通过它们,我们可以快速开发出使用的程序。

这些Windows API在微软的MSDN上查,上面有很多说明,部分还有代码示例。

不会是可以输入函数名,查找相关信息,建议大家用英文版的Library,因为其内容比中文版的全面,英语不好的同学呢,就先看中文了中文MSDN: /library/zh-cn/英文MSDN: /library/en-us/到这里,我们就完成第一个有界面程序的编写,你感觉写有界面的程序难吗?显然不难。

下面看一个向锋和波波感兴趣的程序:九九乘法采用命令行形式#include “stdio.h”int i=0,j=0;for(i=1;i<10;i++)for(j=1;j<i+1;j++)printf(“%d*%d=%d \t”,j,i,j*i);printf(“\n”);和那个javascript效果都是一样的,所以语言只要学好一样,其他的就很容易旁通的,学习就捡一种学好,不要贪多。

好的,这一节就这样吧,大家先各自了解下微软的MSDN,对以后的学习会有很大的帮助的。

1.2第一个真正的窗口程序上一节中,我们用MessageBox函数轻松地实现了一个对话框窗口,可能你会说,那仅仅是个没有用的对话框而已,是的,只是对话框而已。

我之所以以一个对话框为例呢,是因为我只是想让你知道写一个有界面的程序并不是件难办的事。

明白了这一点后,我们继续。

今天来编写一个真正的窗口程序。

下面就该罗嗦一段了,由于大家以前并没有写过什么窗口程序,写的都是命令行下的,我们知道在命令行下的程序都有一个主函数main,这个函数也就是程序的入口函数。

我们现在用VC 6.0来写,而且要写窗口类程序,VC 6.0给我们提供了一个专门用作窗口类程序的入口函数WinMain()这个函数原型是这样的int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTRlpCmdLine,int nCmdShow);大家是不是感觉这个函数挺复杂的,有这么几个参数,而像main好像就没有参数。

其实main是有参数,这个向锋和小四是知道了的。

但是main函数的参数是可以省略的,而WinMain是不可以省的。

这里也要对VC 6.0的编译模式改下看下图依次是“工程”→“设置”→“连接”,在“工程选项”里把console改为windows就可以了。

如果认真学了汇编,或是手写命令编译连接过C程序,就会知道这是干什么的。

Console是控制台的意思,以前我们用mian函数写的程序都是以控制台模式连接的,所以很少会有界面的。

现在我们要写有界面的程序,所以要选Windows(窗口)模式了。

我们写入以下代码,并按照上面说的方法去做,看看结果#include "windows.h"int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd){MessageBox(NULL,"WinMain创建的窗口程序","WinMain",MB_OK);return 0;}结果如下图:与第一节中的这段代码代码比较下#include “windows.h”void main(){MessageBox(NULL," Hello World!","我的第一个窗口程序",MB_OK);}两者比较下,后者多了个cmd窗口。

可见用main写的并没有完全脱离命令行呀。

所以以后我们写窗口程序就用winmain 了。

好了,转过来,我们来看看WinMain()函数,其中有4个参数先看下解释(看不明白得先看完):hInstance:应用程序当前事例的句柄。

hPrelnstance:应用程序的先事例的句柄。

对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。

对于一个32的位程序,该参数总为NULL。

lpCmdLine:指向应用程序命令行的空字符串的指针,不包括函数名。

获得整个命令行,参看GetCommandLine。

nCmdShow:指明窗口如何显示(是隐藏还是显示,有没有最大化按钮之类的)。

取值可以参考MSDN这里我相信有一个词大家好应该比较陌生,句柄(HANDLE)是吧。

下面我就来简单的说下句柄其实就是Windows系统中一个东西的唯一标识。

就是系统中有很多运行的程序或者资源之类的,为了更好的管理使用,Windows系统给它们每人一个ID一样。

懂得网页制作的人应该知道网页中各个元素的ID吧,网页的ID如果重复话可能出现错误。

那么系统的句柄会不会有相同的,那是肯定不会有的了,就和我们的学号一样,系统自动分配每一个模块的句柄,是不会相同的了。

对于句柄大家可以先这样理解着,不用一下子搞懂得。

以后学着学着就明白了。

估计大家对那几个参数的类型改犯迷糊了吧。

其实那几个类型,并不是什么新类型,都是Windows开发人员为了自己和他人编程方便,同过基本的C语言语法定义一种新的结构体,或者是共同体,再者就是枚举类型。

我知道结构体、共同体和枚举类型,很多老师是没有讲到的,因为在书的后边,很多教C的,又是很垃圾的老师,所以不会讲那么快的。

其实结构体这些数据类型,就是通过我们常用的字符、整型、浮点等数据类型构造一个比较复杂的类型而已,举个例子,就是我们知道C没有一个数据类型可以描述一个人吧,那么我构造一个是不是很方便我们编程呢。

我们可以这样构造一个struct People{int age;//年龄char sex[2];//性别int height;//身高……}我们这样定义以后就可以在我们以后的程序中利用这个数据类型了,People zhangsan;把zhangsan的身高172放到zhangsan.height中。

这样可以方便完成很多工作。

所以结构体是很简单的,还有其他的复杂数据类型也是很简单的,都是有常用的简单的类型来结合到一起构造一个复杂的而已。

这和JAVA定义类是很相似的,java定义个人类,不是可以这样的public class People{public int age;public string sex;public height;……}看起来都差不多,而且用法也很相像。

唯一的差别其实就是类可以有方法,而结构体是没有的(经过特殊处理也是可以的,这里不用考虑)。

上面是为了让大家了解下复杂数据类型的定义,罗嗦了一大堆。

下面来看下WinMain中第一个参数的类型HINSTANCE这个只是个结构体而已,实际上和HANDLE这个类型差不多,但是有一点差别,而HANDLE是这样typedef PVOID HANDLE;定义的,PVOID是什么呢,我们来看下typedef void *PVOID;说明PVOID是一个指针,初始指向空(void)。

因此可以知道句柄也是个指针而已。

看着这么复杂原来也只是指针。

这些都可以在微软的msdn上查得到的,而且很详细的那个第二个LPSTR 根据字面上的意思就知道是字符串类型了。

相关文档
最新文档