作者弄到了Windows系统的部分源代码文件,今天把其中是c语言的文件给大家分享一下

/* cds utilities */
#include "types.h"
#include "sysvar.h"
#include "cds.h"
#include "dpb.h"
#include <dos.h>extern struct sysVarsType SysVars ;char fGetCDS(i, pLCDS)
int i ;
struct CDSType *pLCDS ;
{struct CDSType far *cptr ;int j ;if (i >= 0 && i < SysVars.cCDS) {*(long *)(&cptr) = SysVars.pCDS + (i * sizeof(*pLCDS)) ;for (j=0 ; j <= sizeof(*pLCDS) ; j++)*((char *)pLCDS+j) = *((char far *)cptr+j) ;return TRUE ;} ;return FALSE ;
}char fPutCDS(i, pLCDS)
int i ;
struct CDSType *pLCDS ;
{struct CDSType far *cptr ;int j ;if (i >= 0 && i < SysVars.cCDS) {*(long *)(&cptr) = SysVars.pCDS + (i * sizeof(*pLCDS)) ;for (j=0 ; j <= sizeof(*pLCDS) ; j++)*((char far *)cptr+j) = *((char *)pLCDS+j) ;return TRUE ;} ;return FALSE ;
}/* returns TRUE if drive i is a physical drive.  Physical means that logical* drive n corresponds with physical drive n.  This is the case ONLY if the* CDS is inuse and the DPB corresponding to the CDS has the physical drive* equal to the original drive.*/char fPhysical(i)
int i ;
{struct DPBType DPB ;struct DPBType *pd = &DPB ;struct DPBType far *dptr ;int j ;struct CDSType CDS ;if (!fGetCDS(i, &CDS))return FALSE ;if (TESTFLAG(CDS.flags,CDSNET | CDSSPLICE | CDSLOCAL))return FALSE ;*(long *)(&dptr) = CDS.pDPB ;for (j=0 ; j <= sizeof(DPB) ; j++)*((char *)pd+j) = *((char far *)dptr+j) ;return(i == DPB.drive) ;
}/* return TRUE if the specified drive is a network drive.  i is a 0-based* quantity*//*    MODIFICATION HISTORY**  M000    June 5/85   Barrys*  Removed extra net check.*/char fNet(i)
int i ;
{union REGS ir ;register union REGS *iregs = &ir ; /* Used for DOS calls      */struct CDSType CDS ;if (!fGetCDS(i, &CDS))return FALSE ;iregs->x.ax = IOCTL9 ;         /* Function 0x4409     */iregs->x.bx = i + 1 ;intdos(iregs, iregs) ;/***   M000return(TESTFLAG(CDS.flags,CDSNET) || TESTFLAG(iregs->x.dx,0x1000)) ;
***/return(TESTFLAG(CDS.flags,CDSNET)) ;
}/* return TRUE if the specified drive is a shared drive.  i is a 0-based* quantity*/
char fShared(i)
int i ;
{struct CDSType CDS ;union REGS ir ;register union REGS *iregs = &ir ; /* Used for DOS calls      */if (!fGetCDS(i, &CDS))return FALSE ;iregs->x.ax = IOCTL9 ;         /* Function 0x4409     */iregs->x.bx = i + 1 ;intdos(iregs, iregs) ;return TESTFLAG(CDS.flags,CDSNET) || TESTFLAG(iregs->x.dx,0x0200) ;
}
/* dpb.c - retrieve DPB for physical drive */#include "types.h"
#include "sysvar.h"
#include "dpb.h"
#include "cds.h"extern char NoMem[], ParmNum[], BadParm[] ;
extern struct sysVarsType SysVars ;/* Walk the DPB list trying to find the appropriate DPB */long GetDPB(i)
int i ;
{struct DPBType DPB ;struct DPBType *pd = &DPB ;struct DPBType far *dptr ;int j ;*(long *)(&dptr) = DPB.nextDPB = SysVars.pDPB ;DPB.drive = -1 ;while (DPB.drive != i) {if ((int)DPB.nextDPB == -1)return -1L ;*(long *)(&dptr) = DPB.nextDPB ;for (j=0 ; j <= sizeof(DPB) ; j++)*((char *)pd+j) = *((char far *)dptr+j) ;} ;return (long)dptr ;
}
#include "types.h"
#include "dpb.h"
#include <dos.h>/*  #define KANJI   TRUE  *//* return FALSE if drive is valid AND the path is not a prefix of a non-root* current directory.*/
char fPathErr(p)
char *p ;
{char buf[MAXARG] ;int d ;
#ifdef KANJIchar *p1;
#endifif (p[1] == ':')d = *p-'A'+1 ;elsed = 0 ;if (curdir(buf, d) == -1) /* drive is invalid => error       */return(TRUE) ;if (strlen(buf) == 3)      /* current directory is root => OK */return(FALSE) ;if (strpre(p, buf)) {
#ifdef KANJIp1 = p;while (*p1 != NULL) {if(testkanj(*p1 & 0xFF))p1 += 2 ;elseif((*p1++ == '\\') && (*p1 == NULL))return(TRUE) ;}
#elseif (p[strlen(p)-1] == '\\') /* prefix matched, prefix had...*/return(TRUE) ;       /* ...trailing / => valid ...   *//* ...prefix => ERROR    */
#endifd = buf[strlen(p)] ;if (d == 0 || d == '\\') /* prefix matched,... */return(TRUE) ;        /* ...prefix had no trailing /, *//* ...next char was / => ...    *//* ...valid prefix => ERROR    */} ;return(FALSE) ;    /* drive letter good and not valid prefix => OK  */
}strpre(pre, tot)char   *pre;char   *tot;
{return(!strncmp(pre, tot, strlen(pre)));
}Fatal(p)
char *p ;
{printf("%s\n", p) ;exit(1) ;
}ffirst(pb, attr, pfbuf)
char *pb ;
int attr ;
struct findType *pfbuf ;
{union REGS regs ;/* set DMA to point to buffer */regs.h.ah = 0x1A ;regs.x.dx = (unsigned) pfbuf ;intdos (&regs, &regs) ;/* perform system call */regs.h.ah = 0x4E ;regs.x.cx = attr ;regs.x.dx = (unsigned) pb ;intdos (&regs, &regs) ;return (regs.x.cflag ? -1 : 0) ;
}fnext (pfbuf)
struct findType *pfbuf;
{union REGS regs;/* set DMA to point to buffer */regs.h.ah = 0x1A;regs.x.dx = (unsigned) pfbuf;intdos (&regs, &regs);/* perform system call */regs.h.ah = 0x4F;intdos (&regs, &regs);return (regs.x.cflag ? -1 : 0) ;
}char *strbscan(str, class)
char *str ;
char *class ;
{char *p ;char *strpbrk() ;p = strpbrk(str, class) ;return((p == NULL) ? (str + strlen(str)) : p) ;
}/* curdir.c - return text of current directory for a particular drive */curdir (dst, drive)
char *dst ;
int drive ;
{union REGS regs ;*dst++ = PathChr ;regs.h.ah = 0x47 ;regs.h.dl = drive ;regs.x.si = (unsigned) dst ;intdos (&regs, &regs) ;return(regs.x.cflag ? -1 : 0) ;
}/*rootpath
*//*** rootpath  --  convert a pathname argument to root based cannonical form** rootpath determines the current directory, appends the path argument (which* may affect which disk the current directory is relative to), and qualifies* "." and ".." references.  The result is a complete, simple, path name with* drive specifier.** If the relative path the user specifies does not include a drive spec., the* default drive will be used as the base.  (The default drive will never be* changed.)**  entry: relpath  -- pointer to the pathname to be expanded*       fullpath -- must point to a working buffer, see warning*   exit: fullpath -- the full path which results* return: true if an error occurs, false otherwise** calls: curdir, getdrv** warning: fullpath must point to a working buffer large enough to hold the*      longest possible relative path argument plus the longest possible*      current directory path.**/
int rootpath(relpath, fullpath)
char *relpath ;
char *fullpath ;
{int drivenum ;char tempchar, getdrv() ;register char *lead, *follow ;char *p1, *p2;/* extract drive spec */drivenum = getdrv() ;if ((*relpath != NULL) && (relpath[1] == COLON)) {drivenum = toupper(*relpath) - 'A' ;relpath += 2 ;}fullpath[0] = (char) ('A' + drivenum) ;fullpath[1] = COLON ;/* append relpath to fullpath/base */if (*relpath == PathChr) {/* relpath starts at base */strcpy(fullpath+2, relpath) ;}else {/* must get base path first */if (curdir(fullpath+2, drivenum+1))return(TRUE) ;         /* terrible error */if ((*relpath != ASCNULL) && (strlen(fullpath) > 3))strcat(fullpath, "\\") ;strcat(fullpath, relpath) ;}/* convert path to cannonical form */lead = fullpath ;while(*lead != ASCNULL) {/* mark next path segment */follow = lead ;lead = (char *) strpbrk(follow+1, "\\") ;if (lead == NULL)lead = fullpath + strlen(fullpath) ;tempchar = *lead ;if (tempchar == PathChr)tempchar = BACKSLASH ;    /* make breaks uniform */*lead = ASCNULL ;/* "." segment? */if (strcmp(follow+1, ".") == 0) {*lead = tempchar ;strcpy(follow, lead) ; /* remove "." segment */lead = follow ;}/* ".." segment? */else if (strcmp(follow+1, "..") == 0) {*lead = tempchar ;tempchar = *follow ;*follow = NULL ;p2 = fullpath - 1 ;while(*(p2=strbscan(p1=p2+1,"\\")) != NULL) ;/* p1 now points to the start of the previous element */*follow = tempchar ;if(p1 == fullpath)return(TRUE) ; /* tried to .. the root */follow = p1 - 1 ;    /* follow points to path sep */strcpy(follow, lead) ;          /* remove ".." segment */lead = follow ;}/* normal segment */else*lead = tempchar ;}if (strlen(fullpath) == 2)  /* 'D:' or some such */strcat(fullpath, "\\") ;/* shift to upper case */strupr(fullpath) ;return(FALSE) ;
}/* getdrv - return current drive as a character */char getdrv()
{union REGS regs ;regs.h.ah = CURDISK ;        /* Function 0x19           */intdos (&regs, &regs) ;return(regs.h.al) ;
}
/*** MSDOS JOIN Utility      Vers 4.0**  This utility allows the splicing of a physical drive to a pathname*  on another physical drive such that operations performed using the*  pathname as an arguement take place on the physical drive.**  MODIFICATION HISTORY**  Converted to CMERGE 03/26/85 by Greg Tibbetts**  M000   May 23/85   Barrys*  Disallow splicing similar drives.**  M001  May 24/85   Barrys*  The original IBM version of JOIN allowed the delete splice switch*  "/D" immediately after the drive specification.  The argument parsing*  code has been modified to allow this combination.**  M002    June 5/85   Barrys*  Changed low version check for specific 320.**  M003    July 15/85  Barrys*  Checked for any possible switch characters in the other operands.**  M004  July 15/85  Barrys*  Moved check for physical drive before check for NET and SHARED tests.**  33D0016   July 16/86  Rosemarie Gazzia*  Put SHARED test on an equal basis with physical drive check.*  Last fix (M004) erroneously allowed joining physical or local shared*  drives.  This is because it only performed the SHARED test if the drive*  failed the physical test.*/#include "types.h"
#include "versionc.h"
#include "sysvar.h"
#include "cds.h"
#include <dos.h>
#include <ctype.h>extern char NoMem[], ParmNum[], BadParm[], DirNEmp[], NetErr[], BadVer[] ;
extern char *strchr();          /* M003 */struct sysVarsType SysVars ;/***  main - program entry point**  Purpose:* To test arguements for validity and perform the splice**  int main(int c, char *v[])**  Args:*  c - the number of command line arguements*  v - pointer to pointers to the command line arguements**  Links:*   ERRTST.C - Drive and path validity testing functions*   SYSVAR.C - Functions to get/set DOS System Variable structures* CDS.C    - Functions to get/set DOS CDS structures**  Returns:* Appropriate return code with error message to stdout if*    necessary.**/main(c, v)
int c ;
char *v[] ;
{char *strbscan() ;union REGS ir;register union REGS *iregs = &ir ;    /* Used for DOS calls */struct findType findbuf ;char path [MAXPATHLEN],*p ;struct CDSType CDS ;int i ;int  dstdrv;             /* dest. drive number M000 */int    delflag = FALSE;       /* delete splice flag M001 */int    arglen;             /* length of argument M001 *//* check os version */iregs->h.ah = GETVERS ;      /* Function 0x30       */intdos(iregs, iregs) ;if ( (iregs->h.al != expected_version_major) || (iregs->h.ah != expected_version_minor) )Fatal(BadVer);/*    i = (iregs->h.al * 100) + iregs->h.ah;   *//*   if (i < LowVersion || i > HighVersion)     *//*       Fatal(BadVer) ;          */SHIFT(c,v) ;for (i=0 ; i < c ; i++)    /* Convert to upper case       */strupr(v[i]) ;GetVars(&SysVars) ;      /* Access to DOS data structures   */if (c > 2)          /* M001 */Fatal(ParmNum);   /* M001 */if (c == 0)DoList() ;       /* list splices            */else {/* Process drive letter */i = **v - 'A' ;if ((*v)[1] != ':') {if (c == 1) {Fatal(ParmNum);}else {Fatal(BadParm) ;}}if (!fGetCDS(i, &CDS)) {Fatal(BadParm) ;}/* Accept arguments separate or mixed with drive spec  M001 */arglen = strlen(*v);if (arglen != 2) {if ((*v)[2] != SwitChr) {Fatal(ParmNum);}if (arglen != 4) {if (c == 1) {Fatal(BadParm);}else {Fatal(ParmNum);}}/* Advance arg pointer to possible switches */(*v)++; (*v)++;}else {SHIFT(c,v) ;}/* Check for splice deletion switch */if (**v == SwitChr) {if ((*v)[1] == 'D')delflag = TRUE;else {Fatal(BadParm);}}if (delflag == TRUE) {    /* Deassigning perhaps?    */if (!TESTFLAG(CDS.flags, CDSSPLICE)) {Fatal(BadParm) ; /* If NOT spliced */}if (fPathErr(CDS.text)) {Fatal(BadParm) ; /* If prefix of curdir */}CDS.text[0] = i + 'A' ;CDS.text[1] = ':' ;CDS.text[2] = '\\' ;CDS.text[3] = 0 ;CDS.cbEnd = 2 ;if (i >= SysVars.cDrv)CDS.flags = FALSE ;elseCDS.flags = CDSINUSE ;GetVars(&SysVars) ;SysVars.fSplice-- ;PutVars(&SysVars) ;fPutCDS(i, &CDS) ;}else {/* Test if there are any other possible switches* in the operand M003*/if (strchr(v[0], SwitChr)) {Fatal(ParmNum);}if (TESTFLAG(CDS.flags,CDSSPLICE)) {Fatal(BadParm) ; /* If now spliced */}rootpath(*v, path) ; /* Get root path   */strupr(path) ;     /* Upper case      *//* M004 Start */if (i == getdrv() || /* Can't mov curdrv */fPathErr(path) ||    /* or curdir prefix */*strbscan(path+3, "/\\") != 0 ||!fPhysical(i)  ||fShared(i))    { /* 33D0016   RG    *//* Determine if it was a NET error */if (fNet(i) || fShared(i)) {Fatal(NetErr) ;}Fatal(BadParm) ;}if (fNet(path[0] - 'A') || fNet(path[0] - 'A')) {Fatal(NetErr) ; /* Same for dest   */}/* M004 End *//* Check src and dst drives are not same */dstdrv = *path - 'A';           /* M000 */if (i == dstdrv)      /* M000 */Fatal (BadParm);  /* M000 */if (mkdir(path) == -1) {  /* If can't mkdir *//* or if no dir or  *//* if node is file  */if (ffirst(path, A_D, &findbuf) == -1 ||!TESTFLAG(findbuf.attr,A_D))Fatal(BadParm) ;p = path + strlen(path) ;strcat(p, "\\*.*") ;if (ffirst(path, 0, &findbuf) != -1)Fatal(DirNEmp) ; /* if dir   *//* not empty */*p = 0 ;} ;strcpy(CDS.text, path) ;CDS.flags = CDSINUSE | CDSSPLICE ;fPutCDS(i, &CDS) ;GetVars(&SysVars) ;SysVars.fSplice++ ;PutVars(&SysVars) ;} ;}exit(0) ;
}DoList()
{int i ;struct CDSType CDS ;for (i=0 ; fGetCDS(i, &CDS) ; i++) {if (TESTFLAG(CDS.flags,CDSSPLICE))printf("%c: => %s\n", i+'A', CDS.text) ;} ;
}
#include "internat.h"
#include <dos.h>
#define   NULL    0
#define   TRUE    0xffff
#define   FALSE   0
#define   KANJI   TRUE
char    haveinttab = FALSE;
/** ECS Support - This module provides support for international >7FH and * TWO-BYTE character sets.  The toupper routine uses the DOS MAP_CASE call.* In addition, STRING.C contains a default_tab containing a default lead* byte table for two byte character sets.  If single byte operation is* desired, modify this table as follows:  ="\000".  If this utility * is run on a DOS with Function 63H support, the default table will * be replaced by the table in the DOS.  The lbtbl_ptr is the far ptr to* which ever table is in use.
*/
long    lbtbl_ptr;
char    *default_tab="\201\237\340\374\000\000";
char    have_lbtbl = FALSE;struct  InterTbl Currtab;int toupper(c)
int c;
{union REGS regs ;if(!haveinttab) {regs.x.ax = 0x3800 ;regs.x.dx = (unsigned) &Currtab ;intdos (&regs, &regs) ;       /* INIT the table */haveinttab = TRUE;}return(IToupper(c,Currtab.casecall));}char *strupr(string)
char *string;
{register char *p1;p1 = string;while (*p1 != NULL) {/**  A note about the following " & 0xFF" stuff. This is*  to prevent the damn C compiler from converting bytes*  to words with the CBW instruction which is NOT correct*  for routines like toupper*/
#ifdef KANJIif(testkanj(*p1 & 0xFF))p1 += 2 ;else*p1++ = toupper(*p1 & 0xFF);
#else*p1++ = toupper(*p1 & 0xFF);
#endif}return(string);
}char *strpbrk(string1,string2)
char *string1;
char *string2;
{register char *p1;while (*string1 != NULL) {/**  A note about the following " & 0xFF" stuff. This is*  to prevent the damn C compiler from converting bytes*  to words with the CBW instruction which is NOT correct*  for routines like toupper*/
#ifdef KANJIif(testkanj(*string1 & 0xFF))string1 += 2 ;else {
#endifp1 = string2;while (*p1 != NULL) {if(*p1++ == *string1)return(string1);}string1++;
#ifdef KANJI}
#endif}return(NULL);            /* no matches found */
}#ifdef KANJI
testkanj(c)
unsigned char c;
{long *p1;union REGS regs ;int  i;p1 = &lbtbl_ptr ;            if (!have_lbtbl ) {lbtbl_ptr = default_tab ;   /* Load offset in pointer */get_lbtbl( p1 );have_lbtbl=TRUE;}if ( test_ecs( c, lbtbl_ptr )) return(TRUE);elsereturn(FALSE);
}
#endif
#include "types.h"
#include "internat.h"
#include <dos.h>/*  #define KANJI   TRUE  */char  haveinttab = FALSE;struct  InterTbl Currtab;int toupper(c)
int c;
{union REGS regs ;if(!haveinttab) {regs.x.ax = 0x3800 ;regs.x.dx = (unsigned) &Currtab ;intdos (&regs, &regs) ;       /* INIT the table */haveinttab = TRUE;}return(IToupper(c,Currtab.casecall));}char *strupr(string)
char *string;
{register char *p1;p1 = string;while (*p1 != NULL) {/**  A note about the following " & 0xFF" stuff. This is*  to prevent the damn C compiler from converting bytes*  to words with the CBW instruction which is NOT correct*  for routines like toupper*/
#ifdef KANJIif(testkanj(*p1 & 0xFF))p1 += 2 ;else*p1++ = toupper(*p1 & 0xFF);
#else*p1++ = toupper(*p1 & 0xFF);
#endif}return(string);
}char *strpbrk(string1,string2)
char *string1;
char *string2;
{register char *p1;while (*string1 != NULL) {/**  A note about the following " & 0xFF" stuff. This is*  to prevent the damn C compiler from converting bytes*  to words with the CBW instruction which is NOT correct*  for routines like toupper*/
#ifdef KANJIif(testkanj(*string1 & 0xFF))string1 += 2 ;else {
#endifp1 = string2;while (*p1 != NULL) {if(*p1++ == *string1)return(string1);}string1++;
#ifdef KANJI}
#endif}return(NULL);            /* no matches found */
}#ifdef KANJI
testkanj(c)
unsigned char c;
{if((c >= 0x81 && c <= 0x9F) || (c >= 0xE0 && c <= 0xFC))return(TRUE);elsereturn(FALSE);
}
#endif
/* return the system variables in sysVars */#include "types.h"
#include "sysvar.h"
#include <dos.h>GetVars(pSVars)
struct sysVarsType *pSVars ;
{struct sysVarsType far *vptr ;int i ;union REGS ir ;register union REGS *iregs = &ir ;    /* Used for DOS calls      */struct SREGS syssegs ;iregs->h.ah = GETVARS ;          /* Function 0x52       */intdosx(iregs, iregs, &syssegs) ;*(long *)(&vptr) = (((long)syssegs.es) << 16)+(iregs->x.bx & 0xffffL) ;for (i=0 ; i <= sizeof(*pSVars) ; i++)*((char *)pSVars+i) = *((char far *)vptr+i) ;}PutVars(pSVars)
struct sysVarsType *pSVars ;
{struct sysVarsType far *vptr ;int i ;union REGS ir ;register union REGS *iregs = &ir ;    /* Used for DOS calls      */struct SREGS syssegs ;iregs->h.ah = GETVARS ;          /* Function 0x52       */intdosx(iregs, iregs, &syssegs) ;*(long *)(&vptr) = (((long)syssegs.es) << 16)+(iregs->x.bx & 0xffffL) ;for (i=0 ; i <= sizeof(*pSVars) ; i++)*((char far *)vptr+i) = *((char *)pSVars+i) ;}

我分享的内容就到这里,若还想要Windows源代码中的其他文件请加微信wangtaohan0714

Windows系统C语言代码一览相关推荐

  1. 成绩查询系统c语言,学生成绩查询系统C语言代码(分服务器端和客户端).doc

    学生成绩查询系统C语言代码(分服务器端和客户端) 客户端:#include#include#include #pragma comment(lib , "Wsock32.lib " ...

  2. 航班系统C语言程序流程图,飞机订票系统(C语言代码及流程图)

    飞机订票系统(C语言代码及流程图) 目录 第一部分 源程序---------------------------------------------------3 第二部分 函数流程图-------- ...

  3. 微软多个 Windows 系统存在远程代码执行漏洞(ICMP协议)(MPS-2023-1376)

    漏洞描述 Internet Control Message Protocol (ICMP) 协议是TCP/IP协议簇的一个子协议,用于在IP主机.路由器之间传递控制消息.raw socket 是一种网 ...

  4. McAfee Agent漏洞可导致黑客以Windows 系统权限运行代码

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 McAfee Enterprise(现更名为 Trellix)修复了McAfee Agent 软件 Windows 版中的一个漏洞(CVE-20 ...

  5. Windows系统蓝屏代码分析

    注:转自网络,拿出来和大家分享. 症状描述: 当您在运行 Microsoft Windows 2000/XP/Server 2003 . Microsoft Windows Vista/Server ...

  6. Windows系统下敲代码快速将光标移动到行尾或行首

    是不是还有很多人敲了很久的代码还不知道,Home键就是将光标移动到行首,End键就是将光标移动到行首. 移动光标到行首/行尾,拒绝←键和→键,从我做起,兄弟们快用起来! 附上其他Windows系统快捷 ...

  7. 动物识别系统 c语言代码_C ++程序员避不开虚函数的,就像C语言程序员避不开指针一样...

    初学者刚接触C++语言中的 virtual 函数(虚函数)时,常常会感觉到迷惑,比如,书上说虚函数定义在基类中,其他继承此基类的派生类都可以重写该虚函数,因此虚函数是C++语言多态特性中非常重要的概念 ...

  8. 校园导游系统c语言代码,GitHub - iamywang/Campus-Guide-System: 校园导游系统

    校园导游系统 Qt5 图形界面版本 v2.1.5 更新内容 2019.2.25 Version 2.1.5 新增道路信息查询功能,输入道路起点和终点即可查询道路具体信息 新增范例地图,支持一键录入已有 ...

  9. Windows系统C语言检测键盘的状态

    GetKeyState是一个Windows API函数,该函数检取指定虚拟键的状态.该状态指定此键是UP状态,DOWN状态,还是被触发的(开关每次按下此键时进行切换). 函数原型SHORT GetKe ...

最新文章

  1. Solr Schema.xml分析
  2. 肺炎疫情期间购买口罩小记
  3. 百练OJ:1013:Counterfeit Dollar(假币)
  4. 合并的表格怎么加横线_excel表格如何在数据之间加横线-在excel里怎么添加单元格横线...
  5. 函数默认形参与占位参数
  6. Python 集合(set) 介绍
  7. C++: new是否进行初始化的问题
  8. 用Python统计瓦尔登湖的词频
  9. Selenium自动化测试-JavaScript定位
  10. Android 使用JSON格式与服务器交互 中文乱码问题解决
  11. cron 任务执行表达式
  12. SDUT 1953 Idol
  13. WSDL(Web服务描述语言)详细解析
  14. 大唐凌烟阁开国廿四将
  15. 组建家庭计算机网络过程是怎么样的,如何组建完善的家庭无线网络操作步骤
  16. python异常值处理实例_Python对杂乱文本数据进行处理实例
  17. DBCHART的使用
  18. AndroidManifest基本定义
  19. 梳妆谐振器的matlab实现,基于HOPF振荡器的CPG单元模型matlab实现
  20. 群晖DSM PT软件安装记录一:安装transmission

热门文章

  1. 移动应用崛起新契机:超级app+轻应用
  2. BW增强-BAdI(初级)
  3. 苹果招聘人手继续改善Siri功能
  4. java web设置首页_java web设置默认首页方法
  5. atca背板_高速背板及相关标准介绍
  6. 邓仲祥:神奇魅力的太子山
  7. 热插拔+远程控制,同为(TOWE)智能桌面PDU产品APZ-1026HR
  8. 王者荣耀服务器维护中有什么漏洞,王者荣耀英雄漏洞
  9. OS X Mountain Lion高手进阶
  10. excel减法函数_发现EXCEL隐藏功能,SUMIFS函数居然可以多条件求差值看了不后悔...