windowwindow7sp1是什么意思物品

.win_百度百科
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
.win,Internet网络域名。它由Famous Four Media运营管理。.win域名是国际顶级域名,win有赢、胜利、成功、赢家的意思,以逐渐成为企业类的主流域名。
.win发展历程
.win域名2015Famous Four Media正式注册并运营。[1]
目前已逐渐成为企业站的主流域名。
.win域名注册
1、在查询框中可填入的字符仅包括英文字母,汉字,阿拉伯数字和减号。
2、&-&(减号)不能出现在字符串的最前或最后。  3、在查询框中填入的字符串最长不能超过63个字符。  4、也可以域名,填写注册单位名称一栏时使用个人的姓名即可。
.win域名特点
win在中文中有“赢、胜利、成功、赢家”的意思,故而有很多企业和公司对其青睐有加。
.易名中国.[引用日期]windows.h_百度百科
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
windows.h是计算机中的头文件。
windows.h概述
的开头都可看到:
#include &windows.h&
WINDOWS.H是一个最重要的,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是:
WINDEF.H 基本数据定义。
WINNT.H 支持Unicode的类型定义。
WINBASE.H Kernel()函数。
WINUSER.H 用户界面函数。
WINGDI.H 图形设备接口。
这些定义了Windows的所有资料型态、、和常数识别字,它们是文件中的一个重要部分。
64位系统:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include。[Windows 7 SDK]  C:\Program Files (x86)\Windows Kits\8.0\Include\um [Windows 8 SDK]  C:\Program Files (x86)\Windows Kits\8.1\Include\um [Windows 8.1 SDK]  不同版本的SDK位置不一样,x86的在C:\Program Files\ 的SDK下。
windows.h文件内容
#include&&winapifamily.h&
/*++&BUILD&Version:&0001&&&&Increment&this&if&a&change&has&global&effects
Copyright&(c)&Microsoft&Corporation.&All&rights&reserved.
Module&Name:
&&&&windows.h
&&&&Master&include&file&for&Windows&applications.
#ifndef&_WINDOWS_
#define&_WINDOWS_
#include&&sdkddkver.h&
#ifndef&_INC_WINDOWS
#define&_INC_WINDOWS
#if&defined&(_MSC_VER)&&&&(_MSC_VER&&=&1020)
#pragma&once
#pragma&region&Application&Family
#if&WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
/*&&If&defined,&the&following&flags&inhibit&definition
&*&&&&&of&the&indicated&items.
&*&&NOGDICAPMASKS&&&&&-&CC_*,&LC_*,&PC_*,&CP_*,&TC_*,&RC_
&*&&NOVIRTUALKEYCODES&-&VK_*
&*&&NOWINMESSAGES&&&&&-&WM_*,&EM_*,&LB_*,&CB_*
&*&&NOWINSTYLES&&&&&&&-&WS_*,&CS_*,&ES_*,&LBS_*,&SBS_*,&CBS_*
&*&&NOSYSMETRICS&&&&&&-&SM_*
&*&&NOMENUS&&&&&&&&&&&-&MF_*
&*&&NOICONS&&&&&&&&&&&-&IDI_*
&*&&NOKEYSTATES&&&&&&&-&MK_*
&*&&NOSYSCOMMANDS&&&&&-&SC_*
&*&&NORASTEROPS&&&&&&&-&Binary&and&Tertiary&raster&ops
&*&&NOSHOWWINDOW&&&&&&-&SW_*
&*&&OEMRESOURCE&&&&&&&-&OEM&Resource&values
&*&&NOATOM&&&&&&&&&&&&-&Atom&Manager&routines
&*&&NOCLIPBOARD&&&&&&&-&Clipboard&routines
&*&&NOCOLOR&&&&&&&&&&&-&Screen&colors
&*&&NOCTLMGR&&&&&&&&&&-&Control&and&Dialog&routines
&*&&NODRAWTEXT&&&&&&&&-&DrawText()&and&DT_*
&*&&NOGDI&&&&&&&&&&&&&-&All&GDI&defines&and&routines
&*&&NOKERNEL&&&&&&&&&&-&All&KERNEL&defines&and&routines
&*&&NOUSER&&&&&&&&&&&&-&All&USER&defines&and&routines
&*&&NONLS&&&&&&&&&&&&&-&All&NLS&defines&and&routines
&*&&NOMB&&&&&&&&&&&&&&-&MB_*&and&MessageBox()
&*&&NOMEMMGR&&&&&&&&&&-&GMEM_*,&LMEM_*,&GHND,&LHND,&associated&routines
&*&&NOMETAFILE&&&&&&&&-&typedef&METAFILEPICT
&*&&NOMINMAX&&&&&&&&&&-&Macros&min(a,b)&and&max(a,b)
&*&&NOMSG&&&&&&&&&&&&&-&typedef&MSG&and&associated&routines
&*&&NOOPENFILE&&&&&&&&-&OpenFile(),&OemToAnsi,&AnsiToOem,&and&OF_*
&*&&NOSCROLL&&&&&&&&&&-&SB_*&and&scrolling&routines
&*&&NOSERVICE&&&&&&&&&-&All&Service&Controller&routines,&SERVICE_&equates,&etc.
&*&&NOSOUND&&&&&&&&&&&-&Sound&driver&routines
&*&&NOTEXTMETRIC&&&&&&-&typedef&TEXTMETRIC&and&associated&routines
&*&&NOWH&&&&&&&&&&&&&&-&SetWindowsHook&and&WH_*
&*&&NOWINOFFSETS&&&&&&-&GWL_*,&GCL_*,&associated&routines
&*&&NOCOMM&&&&&&&&&&&&-&COMM&driver&routines
&*&&NOKANJI&&&&&&&&&&&-&Kanji&support&stuff.
&*&&NOHELP&&&&&&&&&&&&-&Help&engine&interface.
&*&&NOPROFILER&&&&&&&&-&Profiler&interface.
&*&&NODEFERWINDOWPOS&&-&DeferWindowPos&routines
&*&&NOMCX&&&&&&&&&&&&&-&Modem&Configuration&Extensions
#if&defined(RC_INVOKED)&&&&!defined(NOWINRES)
#include&&winresrc.h&
#if&defined(RC_INVOKED)
/*&Turn&off&a&bunch&of&stuff&to&ensure&that&RC&files&compile&OK.&*/
#define&NOATOM
#define&NOGDI
#define&NOGDICAPMASKS
#define&NOMETAFILE
#define&NOMINMAX
#define&NOMSG
#define&NOOPENFILE
#define&NORASTEROPS
#define&NOSCROLL
#define&NOSOUND
#define&NOSYSMETRICS
#define&NOTEXTMETRIC
#define&NOWH
#define&NOCOMM
#define&NOKANJI
#define&NOCRYPT
#define&NOMCX
#if&!defined(_68K_)&&&&!defined(_MPPC_)&&&&!defined(_X86_)&&&&!defined(_IA64_)&&&&!defined(_AMD64_)&&&&!defined(_ARM_)&&&&defined(_M_IX86)
#define&_X86_
#if&!defined(_68K_)&&&&!defined(_MPPC_)&&&&!defined(_X86_)&&&&!defined(_IA64_)&&&&!defined(_AMD64_)&&&&!defined(_ARM_)&&&&defined(_M_AMD64)
#define&_AMD64_
#if&!defined(_68K_)&&&&!defined(_MPPC_)&&&&!defined(_X86_)&&&&!defined(_IA64_)&&&&!defined(_AMD64_)&&&&!defined(_ARM_)&&&&defined(_M_ARM)
#define&_ARM_
#if&!defined(_68K_)&&&&!defined(_MPPC_)&&&&!defined(_X86_)&&&&!defined(_IA64_)&&&&!defined(_AMD64_)&&&&!defined(_ARM_)&&&&defined(_M_M68K)
#define&_68K_
#if&!defined(_68K_)&&&&!defined(_MPPC_)&&&&!defined(_X86_)&&&&!defined(_IA64_)&&&&!defined(_AMD64_)&&&&!defined(_ARM_)&&&&defined(_M_MPPC)
#define&_MPPC_
#if&!defined(_68K_)&&&&!defined(_MPPC_)&&&&!defined(_X86_)&&&&!defined(_M_IX86)&&&&!defined(_AMD64_)&&&&!defined(_ARM_)&&&&defined(_M_IA64)
#if&!defined(_IA64_)
#define&_IA64_
#endif&/*&!_IA64_&*/
#ifndef&_MAC
#if&defined(_68K_)&||&defined(_MPPC_)
#define&_MAC
#if&defined&(_MSC_VER)
#if&(&_MSC_VER&&=&800&)
#ifndef&__cplusplus
#pragma&warning(disable:4116)&&&&&&&/*&TYPE_ALIGNMENT&generates&this&-&move&it&*/
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/*&outside&the&warning&push/pop&scope.&*/
#ifndef&RC_INVOKED
#if&&&&&(&_MSC_VER&&=&800&)
#pragma&warning(disable:4514)
#ifndef&__WINDOWS_DONT_DISABLE_PRAGMA_PACK_WARNING__
#pragma&warning(disable:4103)
#if&_MSC_VER&&=&1200
#pragma&warning(push)
#pragma&warning(disable:4001)
#pragma&warning(disable:4201)
#pragma&warning(disable:4214)
#include&&excpt.h&
#include&&stdarg.h&
#endif&/*&RC_INVOKED&*/
#include&&windef.h&
#include&&winbase.h&
#include&&wingdi.h&
#include&&winuser.h&
#if&!defined(_MAC)&||&defined(_WIN32NLS)
#include&&winnls.h&
#ifndef&_MAC
#include&&wincon.h&
#include&&winver.h&
#if&!defined(_MAC)&||&defined(_WIN32REG)
#include&&winreg.h&
#ifndef&_MAC
#include&&winnetwk.h&
#ifndef&WIN32_LEAN_AND_MEAN
#include&&cderr.h&
#include&&dde.h&
#include&&ddeml.h&
#include&&dlgs.h&
#ifndef&_MAC
#include&&lzexpand.h&
#include&&mmsystem.h&
#include&&nb30.h&
#include&&rpc.h&
#include&&shellapi.h&
#ifndef&_MAC
#include&&winperf.h&
#include&&winsock.h&
#ifndef&NOCRYPT
#include&&wincrypt.h&
#include&&winefs.h&#include&&winscard.h&#endif#ifndef&NOGDI#ifndef&_MAC#include&&winspool.h&#ifdef&INC_OLE1#include&&ole.h&#else#include&&ole2.h&#endif&/*&!INC_OLE1&*/#endif&/*&!MAC&*/#include&&commdlg.h&#endif&/*&!NOGDI&*/#endif&/*&WIN32_LEAN_AND_MEAN&*/#include&&stralign.h&#ifdef&_MAC#include&&winwlm.h&#endif#ifdef&INC_OLE2#include&&ole2.h&#endif&/*&INC_OLE2&*/#ifndef&_MAC#ifndef&NOSERVICE#include&&winsvc.h&#endif#if(WINVER&&=&0x0400)#ifndef&NOMCX#include&&mcx.h&#endif&/*&NOMCX&*/#ifndef&NOIME#include&&imm.h&#endif#endif&/*&WINVER&&=&0x0400&*/#endif#ifndef&RC_INVOKED#if&&&&&(&_MSC_VER&&=&800&)#if&_MSC_VER&&=&1200#pragma&warning(pop)#else#pragma&warning(default:4001)#pragma&warning(default:4201)#pragma&warning(default:4214)/*&Leave&4514&disabled.&&It's&an&unneeded&warning&anyway.&*/#endif#endif#endif&/*&RC_INVOKED&*/#endif&/*&RC_INVOKED&*/#endif&/*&WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)&*/#pragma&endregion#endif&/*&_INC_WINDOWS&*/#endif&/*&_WINDOWS_&*/
windows.h作用
封装了以及一些类,将一些复杂的工作由库函数处理,而用户不必把精力放在这些地方。比如说cout&&,为标准输出流,其实说到底还是,不过这个函数有些特殊,用的是,确切地说是重载了“&&”运算符,作用是将键盘输入的在屏幕上打印出来,这个功能要是由我们去写,估计也得学个两三年才有可能。所以就简化了操作。
而这一系列的函数都在头文件中包含(是一个函数库)。在调用时包含后便可直接用。
windows.h用法
C/C++ 程序在源文件前面写 #include &windows.h&即可win32_百度百科
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
Win32是指 操作系统的32位环境,与Win64 都为Windows常见环境。如今的Win32操作系统可以一边听音乐,一边编程,一边打印文档。Win32操作系统是一个典型的多线程操作系统
从到是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓的&多任务&,而如今的Win32操作系统却可以一边听音乐,一边编程,一边打印文档。
理解多线程及其同步、互斥等通信方式是理解的关键一环,当我们精通了程序设计后,理解和学习其它操作系统的多任务控制也非常容易。许多程序员从来没有学习过领域著名的操作系统VxWorks,但是立马就能在上面做开发,大概要归功于平时在Win32多线程上下的功夫。
因此,学习Win32多线程不仅对理解Win32本身有重要意义,而且对学习和领会其它操作系统也有触类旁通的作用。[1]
win32进程线程
先阐述一下进程和的概念和区别,这是一个许多大学老师也讲不清楚的问题。
进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。而进程则不同,它是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据集上运行的全部动态过程。
(Thread)是进程的一个实体,是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
win32二者关系
和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如、一组和栈)。
win32操作系统分类
根据进程与的设置,操作系统大致分为如下类型:
(1)单进程、,就是这种操作系统;
(2)、多线程,Win32(Windows NT/2000/XP等)、Solaris 2.x和OS/2都是这种操作系统;
(3)单进程、多线程,VxWorks是这种操作系统。
win32引入线程的好处
在操作系统中引入带来的主要好处有:
(1)通过进程来创建、终止线程比单独地通过应用程序来创建、终止线程要快;
(2)同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。另外,线程的出现还有以下几个原因:
①的并发执行,在多处理环境下更为有效。一个并发程序可以建立一个进程,而这个并发程序中的若干并发程序段就可以分别建立若干线程,使这些线程在不同的处理机上执行。
②每个进程具有独立的,而该进程内的所有线程共享该地址空间。这样可以解决父子进程模型中,子进程必须复制地址空间的问题。
③对解决非常有效。
win32进程作用
win32进程间通信(IPC)
Win32的方式主要有:
(1)剪贴板(Clip Board);
(2)(Dynamic Data Exchange);
(3)部件对象模型(Component Object Model);
(4)文件映射(File Mapping);
(5)邮件槽(Mail Slots);
(6)管道(Pipes);
(7)Win32(Socket);
(8)(Remote Procedure Call);
(9)WM_COPYDATA消息(WM_COPYDATA Message)。
win32获取进程信息
在WIN32中,可使用在PSAPI .DLL中提供的Process status Helper函数帮助我们获取进程信息。
(1)()函数可以获取进程的ID,其原型为:
BOOL EnumProcesses(DWORD * lpidProcess, DWORD cb, DWORD*cbNeeded);
参数lpidProcess:一个足够大的DWORD类型的,用于存放进程的ID值;
参数cb:存放进程ID值的数组的最大长度,是一个DWORD类型的数据;
参数cbNeeded:指向一个DWORD类型数据的,用于返回进程的数目;
函数返回值:如果调用成功,返回TRUE,同时将所有进程的ID值存放在lpidProcess参数所指向的中,进程个数存放在cbNeeded参数所指向的变量中;如果调用失败,返回FALSE。
(2)GetModuleFileNameExA()函数可以实现通过进程句柄获取进程文件名,其原型为:
DWORD GetModuleFileNameExA(HANDLE hProcess, HMODULE hModule,LPTSTR lpstrFileName, DWORD nsize);
参数hProcess:接受进程句柄的参数,是HANDLE类型的变量;
参数hModule:型参数,在本文的程序中取值为NULL;
参数lpstrFileName:LPTSTR类型的指针,用于接受主调函数传递来的用于存放进程名的字符;
参数nsize:lpstrFileName所指的长度;
函数返回值:如果调用成功,返回一个大于0的DWORD类型的数据,同时将hProcess所对应的进程名存放在lpstrFileName参数所指向的数组中;如果调用失败,则返回0。
通过下列代码就可以遍历系统中的进程,获得进程列表:
//获取当前进程总数
EnumProcesses(process_ids, sizeof(process_ids), &num_processes);
//遍历进程
for (int i = 0; i & num_ i++)
//根据进程ID获取句柄
process[i] = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0,
process_ids[i]);
//通过句柄获取进程文件名
if (GetModuleFileNameExA(process[i], NULL, File_name, sizeof(fileName)))
cout && fileName &&
win32环境简介
win32Dos汇编的特点
在Dos下编,我们可以管理系统的所有资源,我们可以改动系统中所有的内存,如自己改动内存控制块来分配内存,自己来截获中断等,对其他操作也是如此,如我们对键盘端口直接操作就可以把键盘屏蔽掉,可以这样来描述Dos系统:系统只有一个特权级别,在编程上讲,任何程序和操作系统都是同级的,所以在Dos下,一个编得不好的程序会影响其他所有的程序,如一个程序把键盘口中断关掉了,所有程序就都不能从键盘获得键入的数据,直到任何一个程序重新打开键盘为止,一个程序陷入死循环,也没有其他程序可以把它终止掉。Dos下的编程思路是“单任务”的,你只要认为你的程序会按照你的流程一步步的执行下去,不必考虑先后问题(当然程序可能会被中断打断,但你可以认为它们会把环境恢复,如果中断程序没有把环境恢复,那是他们的错)。
win32内存管理方式上的不同
在方式上,Dos汇编和Win32汇编也有很多的不同:Dos工作在实模式下,我们可以1M的内存,寻址时通过来制定段的初始地址,每个段的大小为64K,超过1M的部分,就只能把他作为XMS使用,也就是说,只能用作数据存放使用而无法在其中执行程序。
而Windows在保护模式下执行,这里所有的资源对应用程序来说都是被“保护”的:程序在执行中有级别之分,只有操作系统工作在最高级--0级中,所有应用程序都工作在3级中(Ring3), 在Ring3中,你无法直接访问IO端口,无法访问其他程序运行的内存,连向程序自己的写入数据都是非法的,会在Windows的屏幕上冒出一个熟悉的蓝屏幕来。只有对Ring0的程序来说,系统才是全开放的。
win32内存的不同
在内存方面,Windows使用了处理器的机制,使得对应用程序来说,所有的内存都是“平坦”的,你不必用一个去指定段的地址,因为在保护模式下,段寄存器的含义是不同的(可以参见80386手册方面的书籍),你可以直接指定一个32位的地址来4GB的内存。
win32程序结构方面的不同
在程序结构方面,Windows程序也有很大的不同,它是“基于消息”的,你可以想象这样一个常见的Windows窗口,上面有几个按钮,如果你用Dos编程的思路去考虑,你会实现它很困难:鼠标移动到窗口边缘时拖动会改变窗口大小,鼠标点击按钮时再做要做的事,你会发现,你的程序自开始执行后就在等待,你不知道鼠标先会点什么地方,实际上你是在等待所有可能的事情的发生。而在下,你可以只顾自己先执行,需要用户输入时,再停下来,你不输入我就不再执行,而且,我让你输入数据A你就不能输入数据B。
好了,言归正传,因为以上是Win32编程的基础,无论对Win32汇编还是VC++,它们都是一样的,下面我们来看看有关Win32汇编的内容。
win32编译器
Win32ASM的最常用的有两种:Borland公司的5.0和Microsoft的6.11以上版本,两种编译器各有自己的优缺点,Tasm带了一个不大不小的Import库,而Masm没有带,但Masm在代码的优化上面好象比Tasm做得好,但它却不带Import库。看来使用哪一种编译器还是比较难选择的,但Steve Hutchesson给了我们一个答案,他为Masm建立了一个很全的Import库,基本上包括了Windows绝大部分的Api函数,这些库、include文件和其他工具还有Masm6.14版本一起做成了一个 Masm32编译器 -- Masm32V5。这样一来,我们用汇编编程就象用C一样方便。
因为有了Masm32V5,所以就我个人而言,我推荐使用Masm作为Win32ASM的编译工具,但Masm和Tasm的宏语法有很多的不同,我的这个教程是以Masm格式写的。
win32环境设置
在Win32编程中,由于Windows有很多的数据结构和定义,这些都放在include文件中,还有连接时要用到Import库(通俗的讲就是Windows提供的DLL文件中的函数列表,也就是告诉程序到哪里去调用API函数),这些都放在include 和lib目录中。我们在编译时要指定以下的系统环境:
set include=\Masm32v5\Include
set lib=\Masmv5\lib
set path=\Masmv5\Bin
这样就会到正确的路径中去找 include 文件和 lib 文件。你可以自己在 autoexec.bat 文件中加上以上语句,为了产生Windows的PE格式的执行文件,在编译和连接中要指定相应的参数:
编译: Ml /c /coff 文件名.asm
连接: Link /SUBSYSTEM:WINDOWS OBJ文件名.obj 资源文件名.res
为了不在每次编译时都要打这么多的参数,我们可以用 nmake 文件来代为执行,nmake 是代码维护程序,他会检查 .asm .obj .exe .res 等文件的时间,如果你更新了,他会自动执行或产生相应的文件。你可以在文件名为 makefile 的文件中指定使用的和连接程序以及相应的参数,下面是一个 makefile 文件的例子:
NAME = Clock
OBJS = $(NAME).obj
RES = $(NAME).res
$(NAME).exe: $(OBJS) $(RES)
Link /DEBUG /SUBSYSTEM:WINDOWS $(OBJS) $(RES)
$(RES): $(NAME).rc
Rc $(NAME).rc
Ml /c /coff $(NAME).asm
文件告诉 nmake程序,程序名为 clock,产生 clock.exe 文件需要 clock.obj和 clock.res 文件,而产生 clock.res 文件需要 clock.rc 文件,产生 clock.obj 文件要用到 clock.asm 文件,至于是否需要执行 ml, link 和 rc,程序会根据文件的时间自动判断。
win32基本知识
窗口是屏幕上的矩形区域。一个窗口可以从键盘或者鼠标接受用户的输入,并在其内部显示。一个应用程序窗口通常包含程序的标题条、菜单、边框,滚动条。其中,对话框也是一种窗口。不同的是,对话框表面通常包含几个其它窗口,称之为“子窗口”。这些子窗口的形式有压入按钮、、、文本输入区域、列表框和滚动条等。 用户将这些窗口看成屏幕上的对象,可以通过按下一个按钮或者滚动一个滚动条与这些对象直接交互。
win32通讯方式
窗口以“消息”的形式接收窗口的输入,窗口也用消息与其它窗口通讯。比如在程序窗口的大小改变时,字处理器会重新格式化其中的文本。窗口大小改变的细节是由操作系统处理的,但程序能够响应这个系统功能。当用户改变窗口的大小时,Windows给程序发送一条消息指出新窗口的大小。然后,程序就可以调整窗口中的内容,以响应大小的变化。程序创建的每一个窗口都有相关的窗口过程。也就是给这个窗口指定一个子程序(窗口过程),Windows通过调用它来给窗口发送消息。窗口过程再根据此消息进行处理,然后将控制返回给Windows。
win32创建基础
窗口在“”的基础上创建的。Windows定义了缺省的窗口过程,如果你对所有的消息都让Windows自己处理,那么你就能得到一个标准的窗口,同样,你也可以选择处理自己感兴趣的消息,这样,相当于产生了不同的子类,也就形成了不同的应用程序。同样,子窗口也是基于同一个窗口类,并且使用同一个窗口过程。例如,所有Windows 程序中的所有按钮都基于同一窗口类。这个窗口类有一个处理所有按钮消息的窗口过程,但是,如果你按自己的设想设计一个按钮,如想把按钮的表面换成,你就可以自己处理按钮窗口的 WM_PAINT 消息,当 Windows 需要画按钮表面的时候,你就可以随自己的意思去画。
Windows程序开始执行后,Windows为该程序创建一个“”。这个消息队列用来存放该程序可能创建的各种不同窗口的消息。程序中有一段代码,叫做“”, 它用来从队列中取出消息,并且将它们发送给相应的窗口过程。在没有消息发生的时候,你的程序实际上就在消息循环中转圈子。
win32结构语法
让我们先来看看一个最简单的Win32程序:
.model flat, stdcall
option casemap : case sensitive
include windows.inc  include kernel32.inc  include user32.inc
includelib kernel32.lib  includelib user32.lib
szCaption db 'Win32汇编例子',0
szText db 'Win32汇编,Simple and powerful!',0
invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK
invoke ExitProcess,NULL
这就是一个能执行的最简单的Win32汇编程序,下面我简单地介绍一下各部分的作用:
这条语句和Dos下汇编是一样的,是告诉我们要用到80386的指令集,因为32位要用到32位的如eax,ebx等,所以这一句是必须的,,你也可以用.486,.586等,当用到时,还可以用 .386p,.486p等等。
win32model flat stdcall
.model告诉程序的模式,编过Dos汇编的人可能知道在Dos程序的模式有tiny,small,...huge 等,它指定了程序内存寻址模式,在huge等模式下,和子程序调用将用Far的格式,但在Win32汇编中,你只能使用一个模式即 flat 模式,因为对Win32程序来说,内存是连续的一个4GB的段,无所谓小或大的模式。而stdcall 告诉编译器参数的传递方式,在调用子程序时,参数是通过传递的,参数的传递方式有三种,stdcall,c 和 pascal,stdcall 指定了参数是从右到左压入堆栈的,比如说对一个Windows API 如 MessageBox,在手册中是如此定义的:
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
那么在汇编中我们就可以这样调用它:
push uType
push lpCaption
push lpText
call MessageBox
大家要注意最右面的参数是最后一个进的,当然,我们不必这样麻烦的调用一个 API,因为Masm中的一个宏语句不但帮助我们完成了所有的压栈操作,还帮我们检查参数的个数是否正确,那就是 invoke 语句,我们可以把上面的语句换成 invoke MessageBox,hWnd,lpText,lpCaption,uType 就行了。如本程序中代入就成了 invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK。
win32include 语句
include 语句包含了一些系统的定义和API函说明,其中所有的Windows 数据结构定义和定义包含在 windows.inc 中,而其他 API函数的说明包含在 xxx.inc 中, 如查 Microsoft Win32 Programmer's Reference 知道 ExitProcess包含在 中,那么我们就要在程序中包括 include kernel32.inc 和 includelib kernel32.lib语句,否则在编译时会出现 API 函数未定义的错误。而 MessageBox 在
中,那么我们就要在程序中包括 include user32.inc 和 includelib user32.lib语句
win32data 或data
指明了接下来是,.data 定义了预定义的变量,.data?定义了未初始化的变量,两者的不同之处是 .data? 定义的变量并不占用 .exe 文件的大小,而是在程序执行时动态分配,所以开始是不指定初始值的数据可以放在 .data? 段中,如一个1K大小的,放在 .data?中,程序将不会增加一个字节。
指明了接下来是,我们的所有代码都放在这里。最后的一句 start 语句指定了程序开始执行的语句。程序中的 ExitProcess 是一个标准的 Win32 API,对应 Dos汇编中的 int 20h 或 mov ah,4ch/int 21h,也就是程序退出。而 MessageBox 也是一个标准的 API,功能是在屏幕上显示一个,具体的参数上面已经解释过了还有要注意的是 invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK 语句中, MB_OK 和 NULL 已经预定义在 Windows.inc 中。
win32Windows 的资源文件
不管在Dos下编程还是在Windows下编程,我们总是要用到除了外的很多其他数据,如声音数据,图形数据,文本等等,在Dos下编程,我们可以自己定义这些文件的格式,但这样一来就造成了很多资源共享的问题,大家可能还记的Dos下的很多游戏,它们的图形都是按自己的格式存放的,你无法用标准的来看。也无法把它另存为其他格式。虽然在Win32编程中,我们仍然可以这样做,但Win32编程给了我们一个方案 ---- 就是格式统一的资源文件,把字符串、图形、对话框包括上面的按钮,文本等定义到一个资源文件中,就可以方便的在不同的文件中使用它,最重要的是,如果我们用自己的文件格式,使用时就要涉及到这些文件的读写操作,比较复杂,但使用资源文件时,Windows提供了一系列的API来装入资源。非常方便。.rc,当它用资源编译以后产生 .res 文件就可以在 link的时候连入.exe 文件中:
#include &Resource.h&
#define DLG_MAIN 1
DLG_MAIN DIALOGEX 0, 0, 236, 185
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION &对话框模板&
FONT 9, &宋体&
DEFPUSHBUTTON &退出&,IDOK,177,163,50,14
CONTROL &&,-1,&Static&,SS_ETCHEDHORZ,7,155,222,1
.rc文件的语法:
#include &resource.h& -- resource.h文件包括资源文件的一些常量定义,如下面的 WS_POPUP,WS_VISIBLE 等窗口的风格等等
#define DLG_MAIN 1 -- 类似于 .asm 文件的 equ 语句,和汇编源程序一样,这些定义是为了程序的可读性。
DLG_MAIN DIALOGEX 0,0,236,185
Windows的.rc文件可以定义 BITMAP(),CURSOR(),ICON(图标),ACCELERATORS(),DIALOG(对话框),MENU(菜单),STRINGTABLE(),RCDATA()等8种资源,详细的描述可以参考有关MFC的书籍,在Win32ASM中的资源的语法中,一般格式是这些资源的定义方法是:
位图定义: nameID BITMAP [load-mem] filename
光标定义: nameID CURSOR [load-mem] filename
图标定义: nameID ICON [load-mem] filename
acctablename ACCELERATORS [optional-statements]
BEGIN event, idvalue, [type] [options]
等等,具体的定义和参数可以参考 Masm32v5 中的 Rc.hlp 帮助文件。(可以在编程工具中下载),我们可以用资源来所见即所得地编辑资源,也可以在中用上面这些语句自己定义资源。
win32在程序中使用资源
在程序中,要使用资源之前必须先装如内存,Windows定义了一系列的API来装入资源,如 LoadMenu,LoadString,LoadBitmap 等等,如 LoadBitmap 的定义:
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle of application instance
LPCTSTR lpBitmapName // address of bitmap resource name
这些Load函数的返回值是一个句柄,调用参数中一般至少为两项: hInstance 和 ResouceName,这个 ResouceName(如BitmapName,MenuName)就是在资源文件中的 #define 指定的值,如果你用 #define MY_ICON 10/ MY_ICON ICON &Main.ico& 定义了一个图标,那么在程序中要使用 Main.ico 图标就可以用 LoadIcon(hInstance,10) 来装入已经定义为10号的。另一个参数 hInstance 是执行文件的句柄,它对应资源所在的文件名,你可以在程序开始执行时用 invoke GetModuleHandle,NULL 获得 hInstance。另外一些资源并不是显式地装入的,如对话框资源,它是在建立对话框的函数中由Windows自己装入的,如下面例子中的 invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0 ,是在屏幕上显示一个资源文件中已经定义好了的对话框,就并不存在 LoadDialogBox 之类的API来先装入对话框。
win32对话框
win32源程序
源程序如下:
.model flat, stdcall
option casemap : case sensitive
include windows.inc
include user32.inc
include kernel32.inc
include comctl32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
DLG_MAIN equ 1
hInstance dd ?
szBuffer db 256 dup (?)
_ProcDlgMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
_ProcDlgMain proc uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax ==
.elseif eax ==
mov eax,wParam
.if eax == IDOK
invoke EndDialog,hWnd,NULL
.elseif eax == IDCANCEL
invoke EndDialog,hWnd,NULL
mov eax,FALSE
mov eax,TRUE
_ProcDlgMain endp
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0
invoke ExitProcess,NULL
_ProcDlgMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
PROTO 语句类似于C语言中的函数定义,在Win32汇编中,如果的定义在引用以后,你就必须先定义,当然,这个定义是针对 invoke 语句和其他带参数的调用的,如果你的子程序没有参数,你就可以用 call 指令去调用它而不是用宏指令 invoke,这时候你就不必声明这个函数。
_ProcDlgMain proc uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
这个定义 proc 的语句应该是不陌生的,要重复讲解一下的是 uses 和 下面的参数,uses 下的寄存器表示要自动插入保存及恢复这些寄存器的指令,\ 是在 Masm32 中接下一行的符号,表示下一行是本行的继续内容,以避免一行中的内容过长。下面的 hWnd:DWORD 等语句定义了调用这个的参数,如果有以下定义 MyProc proc dwPara1:DWORD,dwPara2:DWORD,dwPara3:DWORD,然后你用 invoke MyProc 1,2,3 来调用它,那么,1,2,3 将分别被赋值给 dwPara1,dwPara2,dwPara3,你可以在子程序中使用这些传递过来的参数。如果参数的类型是双字,那么:DWORD 可以省略。
.if/.else/.elseif/.endif
这些语句是,实际上不说你也知道它们的意思,有了这些宏指令,我们就可以把汇编编得象C一样结构清晰,而不必老是看到 jmp 指令了,当然,这只不过帮你做了这些事情而已,如果你去反汇编一下,你开始会看到一大堆 jmp 指令,.if 的格式如下
.if eax == 1 如果eax等于1
.if eax != 1 如果eax不等于1
.if eax != 1 && ebx != 2 如果eax不等于1且ebx不等于2
.if eax == 1 || ebx == 2 如果eax等于1或者ebx等于2
其他的宏指令还有 .while/.endw .break 等等,可以参考 Masm32V5 的帮助文件 Masm32.hlp
最后要讲到的就是 DialogBoxParam 这个API了,在Windows中,所有的窗口都要指定一个,当Windows检测到鼠标、等和这个窗口有关的动作时,它回调用这个子程序,这就是Windows基于消息的体系的最基本的概念,换句话说,在Dos下,我们通过INT指令调用系统,而在Windows 下,有很多时候是你指定子程序地址让Windows来调用你。 invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0中的 offset _ProcDlgMain 就指定了如果有消息发生,Windows就来执行这个,参数中的 DLG_MAIN 就是在资源文件中定义的对话框模板编号。 hInstance 是对话框所在的资源文件的句柄。
另外,在_ProcDlgMain 子程序中,Windows传给我们4个参数hWnd,wMsg,wParam,lParam,其中,hWnd是对话框的,wMsg表示发生的消息事件,如这个对话框初始化时Windows会以WM_INITDIALOG为消息调用,关闭时为WM_CLOSE,按下对话框上的按钮时为WM_COMMAND等,wParam和lParam是附加的参数,对应不同的消息对应不同定义,具体可以参考Win32 Programmer's reference。
win32创建窗口
创建一个窗口的过程如下:
取得程序的实例句柄(hInstance)
注册,实际上就是为你的窗口指定处理消息的过程,定义光标,窗口风格,颜色等参数
然后进入,也就是不停地检测有无消息,并把它发送给窗口进程去处理。
win32编程要点
创建一个窗口的代码在不同的程序中实际上是几乎一模一样的,所以你编一个新的程序时可以把这一段拷来拷去,稍微一下就行,程序的大部分代码实际上是用在窗口过程中,因为这才是不同程序的不同之处。窗口过程的编程要点如下:
从Windows传给窗口过程的参数 uMsg 得到消息类型,并转到不同的分枝去处理。
对自己已经处理的消息,返回 Windows 时必须在eax 中返回0。
自己不处理的消息,必须调用 DefWindowProc 处理,并把返回值传回Windows,否则,Windows会无法显示。
uMsg 参数中指定的消息有280多种,实际上我们需要处理的只有重要的几种,如Windows在创建的时候会发送
消息,我们就可以在这时候初始化,分配内存等等,而退出时会发送 WM_CLOSE,我们就可以进行释放内存等清除工作,当Windows上的菜单或按钮被按下时发送 WM_COMMAND 消息等等,具体可以参考 Win32 Programmer's Reference。下面,我们来看一个创建窗口的简单程序。
.model flat, stdcall
option casemap : case sensitive
include windows.inc
include user32.inc
include kernel32.inc
include comctl32.inc
include comdlg32.inc
include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
includelib gdi32.lib
IDI_MAIN equ 1000 ;icon
IDM_MAIN equ 4000 ;menu
IDM_EXIT equ 4001
hInstance dd ?
hWinMain dd ?
hMenu dd ?
szBuffer db 256 dup (?)
szClassName db &Windows Template&,0
szCaptionMain db '窗口模板',0
call _WinMain
invoke ExitProcess,NULL
_WinMain proc
local @stWcMain:WNDCLASSEX
local @stMsg:MSG
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke LoadIcon,hInstance,IDI_MAIN
mov hIcon,eax
invoke LoadMenu,hInstance,IDM_MAIN
mov hMenu,eax
;*************** 注册 *****************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWcMain.hCursor,eax
mov @stWcMain.cbSize,sizeof WNDCLASSEX
mov @stWcMain.hIconSm,0
mov @stWcMain.style,CS_HREDRAW or CS_VREDRAW
mov @stWcMain.lpfnWndProc,offset WndMainProc
mov @stWcMain.cbClsExtra,0
mov @stWcMain.cbWndExtra,0
mov eax,hInstance
mov @stWcMain.hInstance,eax
mov @stWcMain.hIcon,0
mov @stWcMain.hbrBackground,COLOR_WINDOW + 1
mov @stWcMain.lpszClassName,offset szClassName
mov @stWcMain.lpszMenuName,0
invoke RegisterClassEx,addr @stWcMain
;*************** 建立输出窗口 ***************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,\
offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW OR WS_VSCROLL OR WS_HSCROLL,\
0,0,550,300,\
NULL,hMenu,hInstance,NULL
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;***************
*******************************************
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
_WinMain endp
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
WndMainProc proc uses ebx edi esi, \
hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,uMsg
.if eax == WM_CREATE
mov eax,hWnd
mov hWinMain,eax
call _Init
.elseif eax == WM_COMMAND
.if lParam == 0
mov eax,wParam
.if ax == IDM_EXIT
call _Quit
.elseif eax == WM_CLOSE
call _Quit
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
xor eax,eax
WndMainProc endp
_Init proc
invoke SendMessage,hWinMain,WM_SETICON,ICON_SMALL,hIcon
_Init endp
_Quit proc
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
_Quit endp
窗口程序的分析
让我们来简单分析一下这个程序,首先程序调用 _WinMain,在_WinMain 中定义了两个 @stMsg 和 @stWinMain,数据类型分别是 MSG 和 WNDCLASSEX结构,在参考手册中,可以看到WNDCLASSEX定义了一个窗口的所有参数,如使用的菜单、、颜色、窗口过程等,接下来的一大堆 mov 指令实际上就是在填写这个数据结构,填写完成后,最重要的两句是 mov @stWcMain.lpfnWndProc,offset WndMainProc 定义了处理消息的窗口过程, mov @stWcMain.lpszClassName,offset szClassName 定义了你要创建的类的名称,然后就是使用 RegisterClassEx 注册这个,注意,这时候窗口并没有创建,你只不过是定义好了一个子类,接下去你要用你定义的类去创建一个窗口。也就是使用 CreateWindowEx 函数去创建它。在手册中,CreateWindowEx 是这样定义的:
HWND CreateWindowEx(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // pointer to registered class name
LPCTSTR lpWindowName, // pointer to window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // handle to menu, or child-window identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // pointer to window-creation data );
其中的参数 dwExStyle 是窗口的风格,lpClassName 就是我们自己定义的类的名字。如果大家要创建一个已经定义好的类,如 RichEdit 类等等,只要把 lpClassName 指向 &RichEdit32& 字符串就行了,当然这时就不用 RegisterClass 以及编写自己的窗口过程了。执行 CreateWindowEx 后,得到一个返回值就是,这个值在以后是要经常用到了,所以要先保存下来。这时窗口并没有在屏幕上显示出来,而是处于隐藏状态,我们要用 ShowWindow 来显示出窗口并用UpdateWindow 来绘窗口的内容。
窗口显示出来后,程序就进入一个循环----,前面我已经说过,作用是不停地接收 Windows 消息并发送给窗口过程去处理。GetMessage 从中取出一条消息,如果取得的消息不是 WM_QUIT,那么 GetMessage 返回一个非零值,否则返回零,这时候循环结束,程序执行 ExitProcess退回操作系统。TranslateMessage 将消息进行一些键盘转换,用于处理一些快捷键,DispatchMessage 将处理后的消息发回 Windows,由Windows调用窗口进程进行处理,当窗口进程处理完返回后,程序才从 DispatchMessage 返回,从而开始下一个 GetMessage 调用。这些函的参数可以参考手册。
窗口过程的分析
窗口过程有四个参数,hWnd 是本窗口的句柄,和创建窗口时返回的值相同,uMsg 是本次调用的消息类型,wParam 和lParam是消息的参数,其含义和数值根据消息的不同而不同。在本程序中,我们处理 WM_CREATE,WM_COMMAND 和 WM_QUIT 消息,然后返回0,对不处理的消息,使用 invoke DefWindowProc,hWnd,uMsg,wParam,lParam 来处理并直接用 ret 将返回值传回 Windows。在响应 WM_CLOSE 消息时,我们用 DestroyWindow 清除窗口并用PostQuitMessage 产生一条 WM_QUIT 消息,从而使程序在 调用GetMessage 时返回0,以结束消息循环并结束程序。
win32常见应用
如何隐藏/显示任务栏
shell db &Shell_TrayWnd&,0 ; 任务栏的类名
invoke FindWindow,addr shell,NULL ; 先获得句柄,之后隐藏.
.if eax != 0
invoke ShowWindow,eax,SW_HIDE ; 用SW_SHOW显示
- 如何禁止/允许/显示/隐藏?
buffer db 127 dup(?)
shell db &Shell_TrayWnd&,0
sbar db &BUTTON&,0
child dd ?
invoke FindWindow,addr shell,NULL ; 获得状态栏句柄
mov tray, eax
invoke GetWindow,tray, GW_CHILD ; 获得状态栏的子窗口(如果有的话)
mov child, eax
.if child != 0
invoke GetClassName,child,offset buffer,获得子窗口类名
.if eax & 0
invoke lstrlen,获得类名长度
mov slen,eax
invoke CharUpperBuff,offset buffer,转为大写
invoke lstrcmp,addr buffer,将与'BUTTON'比较
.if eax == 0
invoke ShowWindow,child,SW_HIDE ; 隐藏开始按钮
; invoke ShowWindow,child,SW_SHOW ; 显示开始按钮
; invoke ,child,FALSE ; 禁止开始按钮
; invoke EnableWindow,child,TRUE ; 允许开始按钮
--------------------------------------------------------------------------------
- 如何创建一个真正的&总在最上面&窗口?
invoke SetWindowPos,hWin, HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE
- 如何创建?比如CTRL + ALT + A
hmsg db &HotKey CTRL + ALT + A Works good!&,0
hcap db &Hotkey Example&,0
.if uMsg == WM_CREATE
invoke ,hWnd,065h,MOD_CONTROL or MOD_ALT, 041 CTRL + ALT + A (041h is 65 - 065h is 101)
.elseif uMsg == WM_HOTKEY
invoke MessageBox,hWin,addr hmsg,addr hcap, MB_OK or MB_ICONINFORMATION
.elseif uMsg == WM_DESTROY
invoke ,hWin,065h
invoke PostQuitMessage,NULL
-如何获得Windows目录和系统目录?
buffer db 50 dup(?)
hCap db &WindowsDirectory&,0
invoke , addr buffer, 置Windows目录于缓冲区中
; invoke GetSystemDirectory, addr buffer,置系统目录于缓冲区中
invoke MessageBox,hWnd, addr buffer, addr hCap, MB_OK or MB_ICONINFORMATION
- 如何从我的程序打开?
invoke SendMessage,hWnd,,SC_TASKLIST,NULL
- 如何关闭正被激活的程序 ?
invoke GetForegroundWindow
mov fwin,eax
invoke SendMessage, fwin, WM_CLOSE,NULL
- 如何去掉窗口标题 ?
invoke GetWindowLong,hWnd,GWL_STYLE ; 获得当前窗口类
and eax,not WS_CAPTION ; 去掉WS_CAPTION
invoke SetWindowLong,hWnd,GWL_STYLE, 设置
- 如何知道窗口是否在任务栏中(或可见)?
invoke ,hWin
.if eax == TRUE
; 窗口可见
; 窗口不可见
- 如何隐藏一个窗口?
mirc db &mIRC32&,0
mhand dd ?
invoke FindWindow,addr mirc, NULL ; 寻找mIRC32
mov mhand,eax
.if mhand != 0 ; 找到?
invoke ShowWindow,mhand,SW_SHOW ; 显示窗口
; invoke ShowWindow,mhand,SW_HIDE ; 隐藏窗口
; mIRC32未运行...
- 如何将窗口置于前台?
invoke SetForegroundWindow, mhand
- 如何屏蔽CTRL+ALT+DEL,ALT+TAB+CTRL+ESC这些键?
invoke SystemParametersInfo,SPI_SCREENSAVERRUNNING,1,NULL,NULL
; Windows98 only 1 关闭 0 允许
- 如何确定Windows任务栏的自动隐藏特性是否被激活?
AppBar APPBARDATA {} ; {} 指使用默认值... Thanks to TTom
mov AppBar.cbSize, sizeof AppBar
invoke SHAppBarMessage, ABM_GETSTATE, addr AppB ShellApi命令
and eax, ABS_AUTOHIDE
.if eax == TRUE
; 任务栏被隐藏
; 任务栏未被隐藏
- 如何使用默认的浏览器或邮件程序?
lpPage db http://win32asm,0
lpMail db .tr&,0
lpOperation db &open&,0
invoke ShellExecute,hWin,addr lpOperation, addr lpPage, NULL, NULL, SW_SHOWNORMAL
invoke ShellExecute,hWin,addr lpOperation, addr lpMail, NULL, NULL, SW_SHOWNORMAL
- 如何用Win32 API显示网络连接对话框?
include \MASM32\INCLUDE\mpr.inc
includelib \MASM32\LIB\mpr.lib
invoke ,hWnd,RESOURCETYPE_DISK
win32主要错误
1、80端口问题
很大一部分都来自端口问题,但是一般没装IIS的。则不会出现这个问题
2、配置文件httpd.conf问题
配置文件中的则是拼写问题了,建议每次更改前都对httpd.conf 文件备份。主要检查 LoadModule php5_module && 的路径。包括有无中文字符,空格。以及ErrorLog 路径,php.ini文件路径无效等
3、第三就网上流传最广的解答办法了,直接copy了
这一般是netbios解析失败造成的。解决的办法很简单,步骤如下:
一、 在&网上邻居&上 点右键,菜单上选&属性(R)&。出来&网络连接&窗口,在&本地连接&上点右键,菜单中点&属性(R)&。出来&本地连接 属性&面板,在&此链接使用下列项目&中找到:&Internet 协议 (TCP/IP)&,并点击它。在弹出的&Internet 协议 (TCP/IP) 属性&面板上,点击&高级(V)...&按钮。&高级 TCP/IP 设置&面板上点&WINS&选项标签,去掉&启用 LMHOSTS 查询(L)&前面的勾,点&确定&按钮。
二、 打开&控制面板&,点击&Windows 防火墙&,点击&高级&选项标签,选择&本地连接&,并点击旁边的&设置(T)...&按钮。在服务选项中找到&安全 Web (HTTPS)&,并把它勾选上,点&确定&按钮。
4、第四相关软件影响。开启时,apache是启动不了的。可以关掉迅雷再试试
5、可能是php版本不是php5.0以上版。LoadModule phpX_module && 读取这个模块是权限不够。一般去掉这一行apache 就可以启动了,但是php 却没加载上来。建议使用5.0以上版。
6、打开httpd.conf文件。搜索 ServerAdmin 把这行改为&#ServerAdmin& 保存,重启。
可能还存在各种各样的问题。[1]
我的解决方式就是第6个。搞的我郁闷半天。不过还好启动了
启动服务错误时,如服务日志没有记录。可以使用,查看系统的日志错误。cmd 命令:eventvwr.msc 进入。
.新浪. 日 [引用日期]

我要回帖

更多关于 js中window 是什么 的文章

 

随机推荐