精华内容
下载资源
问答
  • 其实这里得变量只是指局部变量#include <stdio.h>int g1 = 0,g2 = 0,g3 = 0; int main() { static int s1 = 0,s2 = 0, s3 = 0; int l1 = 0, l2 = 0,l3 = 0; printf("0x%08x\n",&l1); printf("0x%08x\n",&l2); pr

    其实这里得变量只是指局部变量

    #include <stdio.h>
    
    int g1 = 0,g2 = 0,g3 = 0;
    int main()
    {
        static int s1 = 0,s2 = 0, s3 = 0;
        int l1 = 0, l2 = 0,l3 = 0;
    
        printf("0x%08x\n",&l1);
        printf("0x%08x\n",&l2);
        printf("0x%08x\n",&l3);
    
        printf("0x%08x\n",&g1);
        printf("0x%08x\n",&g2);
        printf("0x%08x\n",&g3);
    
        printf("0x%08x\n",&s1);
        printf("0x%08x\n",&s2);
        printf("0x%08x\n",&s3);
    
        return 0;
    }

    输出如下:
    0x010efbb4
    0x010efba8
    0x010efb9c
    0x00ed8130
    0x00ed8134
    0x00ed8138
    0x00ed813c
    0x00ed8140
    0x00ed8144

    发现局部变量的地址竟然相差12,不是4。然后一番搜索之后,初步有一点收获。

       int a = 0;
       int i;
       printf("%d",&a - &i);
    //结果是1,编译选项为/RTCu
    //结果为3,编译选项为/RTC1

    在 Visual Studio 开发环境中设置此编译器选项
    打开此项目的“属性”对话框->C/C++ ->代码生成
    修改下列属性之一或两者都修改:“基本运行时检查”或“较小类型检查”。

    以编程方式设置此编译器选项
    请参见 BasicRuntimeChecks 和 SmallerTypeCheck 属性。

    展开全文
  • 空字符串 char s[]=""; 即第dao一个字符是'\0' 空格字符 ...只有空格组成的字符串字符串变量 ...s就是字符串变量 ...其中s全部的字符串"abcdef",就是主串,其中连续的一部分,例如"abc","bcde","ef"等都可...

    空字符串

    char s[]="";

    即第dao一个字符是'\0'

     

    空格字符

    char s[]="   ";

    只有空格组成的字符串字符串变量

     

    char s[] = "abc";

    s就是字符串变量

     

    char *s = "abc";

    s就是字符串常量,"abc"也是字符串常量。字符串里面的字符的值不能再改变了

     

    主串和子串

    char s[] = "abcdef";其中s全部的字符串"abcdef",就是主串,其中连续的一部分,例如"abc","bcde","ef"等都可以叫子串。

     

    串变量的名字与串变量的值

    char s[] = "abcdef";

    s是串的名字,"abcdef"是串的值。

    展开全文
  • 变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效. (全局变量应该是成员变量的俗称) 在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中有效. 成员变量又分为实例变量...

    类体由2部分构成:


    一部分是变量的定义;
    一部分是方法的定义(一个类中可以有多个方法)


    在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效.


    (全局变量应该是成员变量的俗称)


    在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中有效.


    成员变量又分为实例变量和类变量(static静态变量).

    class One
    { 
        float x; //x为实例变量
        static int y; //只要有关键字static, y为类变量
    }

    局部变量是在函数或方法中的变量,实例变量指的是类的一个实例,就是一个对象, 成员变量就是类中的变量(不是方法中的变量!), 类变量是类中的静态变量。


      局部、实例、成员变量的作用域和生存周期同局部变量一样,而类变量如果用public声明则作用域同全局变量,如果是private则作用域只在类的内部,


    生存周期同全局变量.




    成员方法和类方法跟局部变量和类变量的关系一样.
     
     
     
    1.栈 - 由编译器自动分配释放 
    2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 
    3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 
    4.另外还有一个专门放常量的地方。- 程序结束释放
     
     
    java类的成员变量有俩种:


    一种是被static关键字修饰的变量,叫类变量或者静态变量;
    另一种没有static修饰,为实例变量。


    类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。


    而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。

    public class Temp {
        int t; //实例变量
        public static void main(String args[]){
            int t=1; //局部变量
            System.out.println(t); //打印局部变量
            Temp a= new Temp(); //创建实例
            System.out.println(a.t); //通过实例访问实例变量
        }
    }


    结果为:
    1
    0 (成员变量具有缺省值 而局部变量则没有)

    把代码改为

    public class Temp {
          static int t; //类变量
          public static void main(String args[]){
               System.out.println(t); //打印类变量
               int t=1; //局部变量
               System.out.println(t); //打印局部变量
               Temp a= new Temp(); //创建实例
               System.out.println(a.t); //通过实例访问实例变量
          }
    }

    结果则为
    0
    1
    0
     
     
    关于一个protected的例子 发现了一个容易被忽视的错误


    一般来说 访问控制分4种级别:
    公开:public 同类 同包 子类 不同包 都可以访问
    默认:只向同包同类放开
    私有:private 只有类本身可以访问
    保护:protected 向子类以及同一个包中的类放开 


    来看一下在该节中的例子
    先定义一个ClassA 并把它放在mypack1包中


    package mypack1;
    public class ClassA {
         public int var1;
         protected int var2;
         int var3;
         private int var4;
    
         public void method(){
             var1=1;
             var2=1;
             var3=1;
             var4=1;
    
             ClassA a = new ClassA();
             a.var1=1;
             a.var2=1;
             a.var3=1;
             a.var4=1;
        }
    }

    然后又在另外一个包 mypackage2中 存在ClassA的一个子类 ClassC

    package mypack2;
    import mypack1.ClassA;
    class ClassC extends mypack1.ClassA{
          public void method(){
               ClassA a = new ClassA();
               a.var1=1;
               a.var2=1; //此行出错
          } 
    }


    实际上这个例子有问题
    你会看到ide(或者编译时)在 a.var2=1 这一行报错 提示不能访问protected对象
    这就是protected经常被人忽视的地方
    尽管ClassC是ClassA的一个子类
    但是在ClassC中创建的是ClassA的一个实例
    该实例中的protected成员变量则很明显没有被ClassC继承到
    自然在ClassC中无法访问var2


    所以对于这种情况 将代码改为如下,则可以编译通过。

    package mypack2;
    import mypack1.ClassA;
    class ClassC extends mypack1.ClassA{
    
          public void method(){
               ClassA a = new ClassA();
               a.var1=1;
               super.var2=1;
               ClassC c = new ClassC();
               c.var1=1;
               c.var2=1;
          }
    }


    OK,用java in a nutshell中的一段话来总结一下全文:
    protected access requires a little more elaboration. Suppose class A declares a protected field x and is extended by a class B, which is defined in a different package (this last point is important). Class B inherits the protected field x, and its code can access that field in the current instance of B or in any other instances of B that the code can refer to. This does not mean, however, that the code of class B can start reading the protected fields of arbitrary instances of A! If an object is an instance of A but is not an instance of B, its fields are obviously not inherited by B, and the code of class B cannot read them.




    静态变量: 
    也称为类变量!在程序加载时系统就为它在堆中开辟了内存,堆中的内存地址存放于栈以便于高速访问。静态变量的生命周期--一直持续到整个"系统"关闭。 (待考量)


    实例变量: 
    当你使用java关键字new的时候,系统在堆中开辟并不一定是连续的空间分配给变量(比如说类实例),然后根据零散的堆内存地址,通过哈希算法换算为一长串数字以表征这个变量在堆中的"物理位置"。 实例变量的生命周期--当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中,但并不是马上就释放堆中内存。 


    局部变量: 
    局部变量,由声明在某方法,或某代码段里(比如for循环),执行到它的时候直接在栈中开辟内存并使用的。当局部变量脱离作用域,存放该作用域的栈指针,栈顶与栈底重合即为释放内存,速度是非常快的。
     
    ava优化编程-静态变量


    静态变量 


    在程序运行期间,类中的静态变量其内存空间对所有该类的实例是共享的,因此在某些时候,为了节省内存空间开销,共享资源, 
    我们可以将类中的变量声明为静态变量。 
    但是因为静态变量生命周期太长,并且不易被系统回收,所有如果使用不合理,就会适得其反,从而造成大量内存的浪费。 
    因此建议在全部符合下列条件的情况下才使用静态变量: 
    (1)变量所包含的对象体积较大,占用内存较多 
    (2)变量所包含的对象生命周期较长 
    (3)变量所包含的对象数据稳定 
    (4)该类的实例 有 对该变量包含对象的共享需求
     
     
    关键字: java 变量 作用域 
    1. 类的静态变量在内存中只有一个。静态变量位于方法区,被类的所有实例共享。静态变量的生命周期取决于类的生命周期(即类何时被加载和卸载)。


    2. 类的每个实例都有相应的实例变量。实例变量位于堆区中。实例变量的生命周期取决于实例的生命周期(即实例何时被创建及销毁)。


    3. 假如成员变量(包括静态变量和实例变量)是引用变量,那么当该成员变量结束生命周期时,并不意味着它所引用的对象也一定结束生命周期。变量的生命周期
    和对象的生命周期是两个不同的概念。


    4. 局部变量位于栈区,其生命周期取决于所属的方法何时被调用及结束调用。


         总结一下:
         局部变量位于栈区,静态变量位于方法区,实例变量位于堆区,方法的字节码位于方法区,对象本身位于堆区,对象的引用位于栈区。

     
    展开全文
  • ahk变量与内置变量

    千次阅读 2017-02-09 10:14:35
    变量 变量的类型: AutoHotkey 中没有明确的变量类型. 然而, 只包含数字 (可以含有小数点) 的变量进行数学运算或比较时, 会被自动转换为数值. (为了提高性能, 在内部会对数字进行缓存以避免与字符串之间的转换.)...
     
    

    变量

    变量的类型: AutoHotkey 中没有明确的变量类型. 然而, 只包含数字 (可以含有小数点) 的变量进行数学运算或比较时, 会被自动转换为数值. (为了提高性能, 在内部会对数字进行缓存以避免与字符串之间的转换.)

    变量的作用域和声明: 除了函数中的 局部变量, 其他所有变量都是全局的; 即可以在脚本的任意位置读取或修改它们的内容. 除了在函数页面注明的情况,变量都是不需要声明的;使用它们的时候它们就产生了(每个变量初始为空).

    变量的名称: 变量名不区分大小写 (例如, CurrentDate 等同于 currentdate). 变量名可以含有多达 253 个字符, 并且可以由字母, 数字以及后面的标点组成: # _ @ $

    考虑到命名的惯例, 通常在命名变量时最好仅使用字母, 数字和下划线 (例如: CursorPositionTotal_Items 和 entry_is_valid). 这样的风格可以让熟悉其他计算机语言的人更容易理解您的脚本. 而且, 如果您在 AutoHotkey 和其他语言中使用相同的风格, 您会发现能更容易重新读懂自己的脚本.

    尽管变量名可以完全由数字组成, 但通常这样的名称仅用于 传入的命令行参数. 这样数值名称的变量不能用在 表达式 中, 因为它们会被看成是数字而不是变量.

    因为单词 ANDOR 和 NOT 作为表达式的 运算符 使用, 所以通常不应该把它们用作变量名称. 在表达式中使用这样的名称会无法正确计算.

    给变量赋值: 要把字符串或数字保存到变量中, 有两种方法: 传统方法和表达式方法. 传统方法使用 等号运算符 (=) 来指定 没有加引号的 原义字符串或包围在百分号中的变量. 例如:

    MyNumber = 123
    MyString = This is a literal string.
    CopyOfVar = %Var%  ; 和 = 运算符一起使用时, 需要使用百分号来获取变量的内容.

    与之相比, 表达式方法使用 冒号等号运算符 (:=) 来保存数字, 加引号的 字符串和其他类型的 表达式. 下面的例子在功能上与前面的例子相同:

    MyNumber := 123
    MyString := "This is a literal string."
    CopyOfVar := Var  ; 和前面段落中与其作用相同的语句不同, 百分号不和 := 运算符一起使用.

    后一种方法由于其更清晰并且与其他许多语言几乎一致的 表达式语法 成为大多数人的首选方法.

    从上面的例子中您可能已经想到了有两种方法来清除变量的内容 (即让变量为空):

    MyVar =
    MyVar := ""

    上面的这对空引号只能和 := 运算符一起使用, 因为和 = 运算符一起使用时, 则会在变量中保存两个原义的引号字符.

    获取变量的内容: 如同赋值有两种方法, 获取变量的内容也有两种方法: 传统方法和表达式方法. 传统方法需要将变量名包围在百分号中来获取变量的内容. 例如:

    MsgBox The value in the variable named Var is %Var%.
    CopyOfVar = %Var%

    与之相比, 表达式方法省去了变量名两边的百分号, 但原义的字符串必须包围在双引号中. 所以, 下面的表达式作用等同于上面的例子:

    MsgBox % "The value in the variable named Var is " . Var . "."  ; 使用句点连接 (join 拼接) 两个字符串.
    CopyOfVar := Var

    在上面的 MsgBox 这行, 通过使用百分号和空格把参数从传统模式改变为表达式模式. 因为所有的命令默认情况下使用传统模式 (除了另外注明的那些), 所以这是必须的. 不过, 某些命令的特定参数已注明接受表达式, 此时前导的百分号可以省略. 例如, 下面的所有语句都是等效的, 因为 Sleep 的首个参数可以是表达式:

    Sleep MillisecondsToWait
    Sleep %MillisecondsToWait%
    Sleep % MillisecondsToWait

    变量的比较: 请阅读下面表达式部分中关于不同类型变量比较的重要提示, 尤其是关于何时使用小括号的内容.

    表达式

    表达式用来对一系列变量, 原义字符串和/或原义数字执行一个或多个操作.

    表达式中的变量名称不用包围在百分号中(伪数组和其他的双重引用除外).所以, 为了与变量区别, 原义的字符串必须用双引号包围. 例如:

    if (CurrentSetting > 100 or FoundColor <> "Blue")
        MsgBox The setting is too high or the wrong color is present.

    在上面的例子中, 因为 "Blue" 是原义字符串, 所以包围在双引号中. 要在原义字符串中包含真实的引号字符,请指定两个连续的引号,如同此例中的两次演示:"She said, ""An apple a day.""".

    重要说明:含有表达式的 if 语句与传统的 if 语句(例如 If FoundColor <> Blue),可以通过单词"if"后是否有开括号来区分.尽管通常把整个表达式包围在括号中,不过也可以写成这样:if (x > 0) and (y > 0).此外, 如果单词 "if" 后的第一项为 函数调用 或类似 "not" 或 "!" 这样的运算符时, 开括号可以完全省略.

    空字符串: 要在表达式中使用空字符串, 请指定一对空引号. 例如,当 MyVar 非空时语句 if (MyVar <> "") 的结果为真.然而, 在 传统 if 语句 中, 一对空引号会被视为原义的字符串. 例如,当 MyVar 仅包含一对真实的引号时语句 if MyVar = "" 结果为真.因此,要使用传统的 if 语句判断变量是否为空,则需要让 = 或 <> 的右侧为空,例如:if Var =.

    相关提示,任何无效的表达式例如 (x +* 3) 会产生空字符串.

    保存表达式的结果: 要把结果赋值给变量, 请使用 := 运算符. 例如:

    NetPrice := Price * (1 - Discount/100)

    布尔值: 要计算表达式结果为真还是假时 (例如 IF 语句), 表达式结果为空或零被视为假, 而其他所有结果都视为真. 例如,仅当 ItemCount 为空或 0 时 if ItemCount 的结果才为假.类似地,表达式 if not ItemCount 将产生相反的结果.

    像 NOT/AND/OR/>/=/< 这些运算符的运算会自动产生真值或假值的结果: 真值时结果为 1 而假值时为 0. 例如, 在下面的表达式中, 如果有一个条件为真则变量 Done 被赋值为 1:

    Done := A_Index > 5 or FoundIt

    如上面提示的那样, 简单地置空变量或为其赋值为 0 可以让它假值. 利用这种特性,可以使用简写语句 if Done 来检查变量 Done 是真还是假.

    单词 true 和 false 是值分别为 1 和 0 的内置变量. 使用它们可以增加脚本的可读性, 例如:

    CaseSensitive := false
    ContinueSearch := true

    整数和浮点数: 在表达式中, 含有小数点的数字被视为浮点数; 否则视为整数. 对于大多数运算符(例如加法和乘法),只要其中的一个输入是浮点数,那么结果也将是浮点数.

    不论在表达式中还是在表达式外的其他地方, 整数都可以表示成十六进制或十进制. 十六进制数必须以前缀 0x 开头. 例如,Sleep 0xFF 等同于 Sleep 255.在 v1.0.46.11+,可以识别用科学计数法表示的浮点数;但只有在它们含有小数点时才行(例如 1.0e4 和 -2.1E-4).

    强制使用表达式: 通过在表达式前加上百分号和空格或 tab, 能把表达式用在不直接支持表达式的参数中 (除了像 StringLen 的 OutputVar 和 InputVar 的那些参数). 这种技巧常用来访问 数组. 例如:

    FileAppend, % MyArray%i%, My File.txt
    FileAppend, % MyPseudoArray%i%, My File.txt
    MsgBox % "The variable MyVar contains " . MyVar . "."
    Loop % Iterations + 1
    WinSet, Transparent, % X + 100
    Control, Choose, % CurrentSelection - 1

    表达式中的运算符

    优先级相同的运算符例如乘 (*) 和除 (/) 按从左到右的顺序计算, 下面另行注明的除外. 与之相比, 低优先级的运算符例如加 (+) 在更高优先级的运算符例如 (*) 之后 计算. 例如, 3 + 2 * 2 等价于 3 + (2 * 2). 使用括号可以改变优先级, 例如: (3 + 2) * 2

    除了下面注明的情况, 其他时候在数学运算中包含的任何空值 (空字符串) 或非数字值包括算术运算符中的都 不会 被假定为零. 而是被视为错误, 这将导致那部分表达式的计算结果为空字符串. 例如, 如果变量 X 为空, 那么表达式 X + 1 会返回空值而不是 1.

    For historical reasons, quoted numeric strings such as "123" are always considered non-numeric when used directly in an expression (but not when stored in a variable or returned by a function). This non-numeric attribute is propagated by concatenation, so expressions like "0x" nalso produce a non-numeric value (even when n contains valid hexadecimal digits). This problem can be avoided by assigning the value to a variable or passing it through a function like Round(). Scripts should avoid using quote marks around literal numbers, as the behavior may change in a future version.

    表达式运算符 (按优先级降序排列)

    %Var%

    如果表达式中的变量包围在百分号中 (例如 %Var%), 不管此变量 包含 什么内容都会被假定为另一个变量 (如果不存在这样的变量, 那么 %Var% 会被解析为空字符串) 的名称或部分名称. 这种方法常用来引用 伪数组 元素, 例如:

    Var := MyArray%A_Index% + 100

    为了向后兼容, 注明了 "可以使用表达式" 的命令参数把百分号中的孤立名称 (例如 %Var%, 但不是 Array%i%) 当作其两边的百分号不存在一样. 通过把引号包围在括号中可以避免这种情况;例如 Sleep (%Var%).

    [AHK_L 52+]: 除了普通变量, %Var% 还可以解析为 环境变量, 剪贴板或任何的 保留/只读的变量. 在修订号 52 之前, 在这些情况中 %Var% 会被当成空字符串.

    x.y[AHK_L 31+]: 对象访问. 从对象 x 中取值或为其存入值或调用其方法, 此处 y 是个原义值. 请参阅 对象语法.
    new[v1.1.00+]:基于其他对象创建新对象.例如,x := new y 通常等价于 x := {base: y}.new 后应该跟着变量或 GlobalClass.NestedClass 形式的简单类名,还可以像 x := new y(z) 那样加上可选参数(其中 y 是变量而非函数名).更多细节请参阅自定义对象.
    ++
    --
    前置和后置的自增/自减. 从变量中增加或减去 1 (但在 1.0.46 之前的版本中, 只有把它们放在一行中才能用; 此行中不能使用其他运算符). 运算符可以放在变量名的前面或后面. 如果放在变量名的 前面, 会立即执行运算并把结果用于后面的运算. 例如,Var := ++X 让 X 自增后才把它的值赋给 Var.相反地, 如果运算符放在变量名的 后面, 在后面的运算使用了变量 之后 才对其进行自增运算. 例如,Var := X++ 把 X 的当前值赋给 Var 后才进行自增.由于向后兼容性,仅当空变量在单独一行时运算符 ++ 和 -- 才把它们视为零;例如 y:=1, ++x 和 MsgBox % ++x 当 x 为空时结果都为空.
    **. 底数和指数都可以为小数. 如果指数为负数, 即使底数和指数都为整数, 结果也会被格式化为浮点数. 因为 ** 的优先级高于一元负号,所以 -2**2 的计算过程和 -(2**2) 一样且得到结果 -4.因此,要让负号的优先级高于幂运算,需要把它们包围在括号中,例如 (-2)**2.注意:不支持底数为负数且指数为分数的情况,例如 (-2)**0.5;它会产生空字符串.但 (-2)**2 和 (-2)**2.0 都是支持的.
    -
    !
    ~
    & *

    一元负号 (-):尽管它和减运算符使用相同的符号,但一元负号仅应用于单项或子表达式,如此例中的两次演示:-(3 / -x).相关提示, 表达式中的任何一元正号 (+) 都会被忽略.

    逻辑非 (!): 如果运算数为空或 0, 那么逻辑非的结果为 1, 这表示 "真". 否则, 结果为 0 (假). 例如:!x or !(y and z).注意: 单词 NOT 和 ! 含义相同, 但 ! 优先级更高. 在 v1.0.46+,允许使用连续的一元运算符,例如 !!Var,因为它们是按从右到左的顺序计算.

    按位非 (~): 此运算符对运算数按位取反. 如果运算数为浮点数, 则在计算前把它截取成整数. 如果运算数介于 0 和 4294967295 (0xffffffff) 之间, 那么它会被视为 无符号的 32 位值. 否则, 它被视为 有符号的 64 位值. 例如,~0xf0f 计算结果为 0xfffff0f0(4294963440).

    取址(&):&MyVar 获取 MyVar 的内容的内存地址,此地址一般和 DllCall 结构一起使用.同时 &MyVar 也禁用了此变量中的二进制数的缓存,如果它经常用于数学或数值比较,那么这会拖慢其性能.每当变量的地址改变时会重新启用它的缓存 (例如使用 VarSetCapacity()).

    解除引用(*):*Expression 假定 Expression 解析为数值的内存地址;它会获取在一个介于 0 和 255 之间的数字表示的内存地址中一个字节的内容(地址为 0 时获取的结果也总是 0;但应该避免使用其他任何无效地址,因为它可能会让脚本崩溃).然而, 使用 NumGet() 获取二进制数通常会更好.

    *
    /
    //

    乘 (*): 如果两个输入都为整数, 则结果为整数; 否则结果为浮点数.

    真除 (/): 与 EnvDiv 不同, 即使两个输入都是整数, 真除的结果也为浮点数. 例如,3/2 结果为 1.5 而不是 1,而 4/2 结果为 2.0 而不是 2.

    向下舍除 (//): 如果两个输入都是整数, 那么双斜线运算符使用高效的整数除法. 例如,5//3 结果为 1 而 5//-3 结果为 -1.如果任何一个输入为浮点数, 则执行浮点除法并把结果往下取整到最近的整数. 例如,5//3.0 结果为 1.0 而 5.0//-3 结果为 -2.0.尽管浮点除法的结果为整数, 但它被保存为浮点格式, 以便其他使用者能使用浮点格式. 关于求模运算,请参阅 mod().

    *= 和 /= 运算符是用变量的值乘以或除以另一个值的一种简写形式. 例如,Var*=2 和 Var:=Var*2 会得到相同的结果(不过前者执行的更好).

    除数为零时结果为空 (空字符串).

    +
    -

    加 (+) 和 减 (-). 相关提示, += 和 -= 运算符是从变量中增加或减少值的一种简写形式. 例如,Var+=2 和 Var:=Var+2 会得到相同的结果(不过前者执行的更好).同样地,使用 Var++,Var--,++Var 或 --Var 可以让变量增加或减小 1.

    <<
    >>
    按位左移 (<<) 和 右移 (>>). 用法示例:Value1 << Value2.任何浮点数在计算前会被截取成整数. 左移 (<<) 相当于把 Value1 乘以 "2 的 Value2 次幂". 右移(>>)相当于把 Value1 除以"2 的 Value2 次幂"并把结果往下取整到最近的整数;例如,-3>>1 结果为 -2.
    &
    ^
    |
    按位与 (&)按位异或 (^) 和 按位或 (|). 这三个运算符中, & 优先级最高而 | 优先级最低. 任何浮点数在计算前会被截取成整数.
    .

    连接. 句点运算符用于把两个项目组合成单个字符串 (在句点的两边至少必须有一个空格). 省略句点也可以达到相同的目的(除非表达式中有不明确的关系,例如 -y,或在右边的项目含有前导的 ++ 或 -- 运算符). 省略句点时,合并的两个项目间应该至少有一个空格.
    示例(表达式方法): <c6>Var := "The color is " . FoundColor
    示例(传统方法):Var = The color is %FoundColor%

    还可以用来连接子表达式. 例如:Var := "The net price is " . Price * (1 - Discount/100).

    以句点 (或其他任何运算符) 开始的行会自动 附加到 前一行的末尾.

    ~=[AHK_L 31+]: 对 RegExMatch 的简写. 例如,"abc123" ~= "\d" 会设置 ErrorLevel 为 0 并得到结果 4(首个数字的位置).在 v1.1.03 之前, 此运算符和 等号 (=) 运算符优先级相同, 但没有完全说明.
    >   <
    >= <=
    大于(>)小于 (<)大于或等于 (>=), 和 小于或等于 (<=). 如果某个输入不是数字, 则按字母顺序比较 (加了引号的原义字符串例如 "55" 在这种情况中总是被当成是非数值的). 仅当 StringCaseSense 打开时, 比较才区分大小写. 另请参阅: Sort
    =
    ==
    <> !=
    等号 (=)区分大小写等于 (==) 和 不等于(<> 或 !=). 运算符 != 和 <> 功能完全相同. 当两个输入都是数字时, 运算符 == 和 = 是一样的, 当某个输入不是数字时, == 总是区分大小写, 而 = 总是不区分大小写(不区分大小写的方法由 StringCaseSense 决定). 与之相比, <> 和 != 都遵循 StringCaseSense. 注意: 加了引号的字符串例如 "55" 在这种情况下总是被当成非数值的.
    NOT逻辑非. 除了优先级较低外, 其他的与 ! 运算符相同. 例如, not (x = 3 or y = 3) 等同于 !(x = 3 or y = 3).
    AND
    &&
    这两个运算符都是 逻辑与. 例如:x > 3 and x < 10. 要提高性能, 则要应用 求值优化. 此外, 以 AND/OR/&&/|| (或其他任何运算符) 开始的行会自动 附加到 前一行的末尾.
    OR
    ||
    这两个运算符都是 逻辑或. 例如:x <= 3 or x >= 10. 要提高性能, 则要应用 求值优化.
    ?:三元运算符 [v1.0.46+]. 此运算符是 if-else 语句 的简写形式. 它计算左侧的条件来决定两个分支中哪个作为最终结果. 例如, var := x>y ? 2 : 3, 当 x 大于 y 时保存 2 到 Var;否则保存 3. 为了提高性能, 只计算决定性的分支(请参阅求值优化).
    :=
    +=
    -=
    *=
    /=
    //=
    .=
    |=
    &=
    ^=
    >>=
    <<=

    赋值. 对变量的内容进行运算, 然后把结果保存到同一个变量中 (但在 1.0.46 之前的版本中, 这些运算符只能在一行中最左边使用, 且仅支持前五个运算符). 最简单的赋值运算符为 冒号等号 (:=), 它把表达式的结果保存到变量中. 关于其他运算符的功能说明, 请参阅这个表格中它们的相关条目. 例如, Var //= 2 执行向下舍除, 把 Var 除以 2, 然后把结果保存回 Var. 同样地, Var .= "abc" 为 Var := Var . "abc"的一种简写形式.

    与其他大多数运算符不同, 赋值运算是从右往左执行的. 因此, Var1 := Var2 := 0 这个语句中首先把 0 赋值给 Var2, 然后把 Var2 赋值给 Var1.

    如果使用赋值运算的结果作为其他某些运算符的输出, 那么输入的值是变量自身. 例如, 如果变量 Var 新增值后大于 50, 那么表达式 (Var+=2) > 50 结果为真. 这样还允许赋值被作为 ByRef 传递或获取它的地址, 例如:&(x:="abc").

    需要避免语法错误或提供更直观的操作时, 会自动提升赋值运算符的优先级. 例如:not x:=y 等价于 not (x:=y). 同样地, ++Var := X 等价于 ++(Var := X);而 Z>0 ? X:=2 : Y:=2 等价于 Z>0 ? (X:=2) : (Y:=2).

    由向后兼容引起的已知限制(可能会在未来的版本中解决):1) 当 /= 为表达式中最左边的运算符并且它不是多语句表达式的一部分时, 而且输入都不是浮点数时, 它会执行向下舍除(在其他所有情况中, /= 会执行真除);2) 仅当 += 和 -= 为一行中最左边的运算符时, 它们才支持日期/时间的计算;3) 运算符 +=-= 和 *= 仅在空变量在单独一行时才把它们视为零;例如, y:=1, x+=1 和 MsgBox % x-=3 当 x 为空时都得到空的结果.

    ,

    逗号 (多语句) [v1.0.46+]. 逗号可以用来在单行中书写多个子表达式. 最常用于把多个赋值或函数调用聚集在一起. 例如:x:=1, y+=2,++index, func(). 这样的语句按从左到右的顺序执行. 注意: 以逗号 (或其他任何运算符) 开始的行会自动 附加到 前一行的末尾. 另请参阅: 逗号的性能.

    在 v1.0.46.01+, 当逗号后紧跟着变量和等号时, 则这个等号会被自动当成赋值 赋值 (:=). 例如, 后面所有的都是赋值:x:=1, y=2, a=b=c.

    mod()
    round()
    abs()

    这些和其他内置数学函数在 这里 阐述.

    %func%()

    See Dynamically Calling a Function.
    func.()

    弃用的: 不推荐使用这个语法. 而应该用 %func%() (对于函数名称和对象) 或 func.Call() (对于函数对象) 替代.

    [AHK_L 48+]: 试图调用对象 func 的命名的空方法. 按照约定, 这是对象的 "默认" 方法. 如果 func 不是对象, 则调用 默认基对象.

    [v1.0.95+]: 如果 func 为函数名, 则调用这个命名的函数.

    F(p*)[AHK_L 60+]: 请参阅 可变参数函数.
    x[y][AHK_L 31+]: 对象访问. 从对象 x 中取值或为其存入值或调用其方法, 这里的 y 是参数列表或计算方法名. 请参阅 数组语法 和 对象语法.

    性能: 从 v1.0.48+ 开始, 使用逗号运算符常常比分开写单独的表达式速度更快, 尤其是把一个变量的值赋给另一个变量时 (例如: x:=y, a:=b). 当越多的表达式联合成单个表达式时, 性能会持续得到提升; 例如, 把五个或十个简单的表达式联合成单个表达式速度可能提升 35%.

    内置变量

    下列变量内置于程序中, 可以在任何脚本中引用. 除了 ClipboardErrorLevel 和 命令行参数, 其他变量都是只读的; 即它们的内容无法在脚本中直接修改.

    目录

    特殊字符

    A_Space此变量包含单个空格字符. 请参阅 AutoTrim 了解详情.
    A_Tab此变量包含单个 tab 字符. 请参阅 AutoTrim 了解详情.

    脚本属性

    1, 2, 3 等每当启动带命令行参数的脚本时, 会自动创建这些变量. 可以像普通变量一样修改和引用它们 (例如: %1%). 变量 %0% 包含了命令行参数的数目 (如果没有则为 0). 需了解详情请参阅 命令行参数.
    A_WorkingDir脚本当前工作目录, 这是脚本访问文件的默认路径. 除非是根目录, 否则路径末尾不包含反斜线. 两个示例: C:\ 和 C:\My Documents. 使用 SetWorkingDir 可以改变当前工作目录.
    A_ScriptDir当前脚本所在目录的绝对路径. 不包含最后的反斜线(根目录同样如此).
    A_ScriptName当前脚本的文件名称, 不含路径, 例如 MyScript.ahk.
    A_ScriptFullPath上面两个变量的组合, 包含了当前脚本的完整路径和名称, 例如 C:\My Documents\My Script.ahk
    A_ScriptHwnd
    [v1.1.01+]
    脚本隐藏主窗口的唯一 ID (HWND/句柄).
    A_LineNumber

    当前脚本中正在执行的行所在的行号 (或其 #Include 文件 的行号). 这个行号与 ListLines 显示的一致;它可以用在报告错误的时候, 例如:MsgBox Could not write to log file (line number %A_LineNumber%).

    由于 已编译脚本 已经把它所有的 #Include 文件 合并成一个大脚本, 所以它的行号可能与它在未编译模式运行时不一样.

    A_LineFileA_LineNumber 所属文件的完整路径和名称, 除非当前行属于未编译脚本的某个 #Include 文件, 否则它将和 A_ScriptFullPath 相同.
    A_ThisFunc
    [v1.0.46.16+]
    当前正在执行的 自定义函数 的名称 (没有则为空); 例如: MyFunction. 另请参阅: IsFunc()
    A_ThisLabel
    [v1.0.46.16+]
    当前正在执行的 标签 (子程序) 的名称 (没有则为空); 例如: MyLabel. 每当脚本执行 Gosub/Return 或 Goto 时会更新此变量的值. 执行自动调用的标签时也会更新此变量的值, 例如计时器GUI 线程菜单项热键热字串OnClipboardChange 和 OnExit. 不过, 当执行从前面的语句"进入"一个标签时不会更新 A_ThisLabel 的值, 即此时它还是保持原来的值. 另请参阅: A_ThisHotkey 和 IsLabel()
    A_AhkVersion在 1.0.22 之前的版本, 此变量为空. 否则, 它包含了运行当前脚本的 AutoHotkey 主程序的版本号, 例如 1.0.22. 在 已编译脚本 中, 它包含了原来编译时使用的主程序的版本号. 格式化的版本号使得脚本可以使用 > 或 >= 来检查 A_AhkVersion 是否大于某个最小的版本号, 例如:if A_AhkVersion >= 1.0.25.07.
    A_AhkPath

    对于未编译脚本: 实际运行当前脚本的 EXE 文件的完整路径和名称. 例如: C:\Program Files\AutoHotkey\AutoHotkey.exe

    对于 已编译脚本: 除了通过注册表条目 HKEY_LOCAL_MACHINE\SOFTWARE\AutoHotkey\InstallDir 获取 AutoHotkey 目录外, 其他的和上面相同. 如果找不到这个注册表条目, 则 A_AhkPath 为空.

    A_IsUnicode当字符串为 Unicode (16 位) 时值为 1, 字符串为 ANSI (8 位) 时为空字符串 (这会被视为 false). 字符串的格式取决于用来运行当前脚本的 AutoHotkey.exe, 如果为已编译脚本, 则取决于用来编译它的主程序.
    A_IsCompiled如果当前运行的脚本为 已编译 EXE 时此变量值为 1, 否则为空字符串 (这会被视为 false).
    A_ExitReason最近一次要求脚本终止的原因. 除非脚本含有 OnExit 子程序并且此子程序当前正在运行或被退出尝试至少调用过一次, 否则此变量为空. 请参阅 OnExit 了解详情.

    日期和时间

    A_YYYY4 位数表示的当前年份 (例如 2004). 与 A_Year 含义相同. 注意:要获取符合您区域设置和语言的格式化时间或日期, 请使用 FormatTime, OutputVar(时间和长日期)或 FormatTime, OutputVar,, LongDate(获取长格式日期).
    A_MM2 位数表示的当前月份 (01-12). 与 A_Mon 含义相同.
    A_DD2 位数表示的当前月份的日期 (01-31). 与 A_MDay 含义相同.
    A_MMMM使用当前用户语言表示的当前月份的全称, 例如 July
    A_MMM使用当前用户语言表示的当前月份的简称, 例如 Jul
    A_DDDD使用当前用户语言表示的当前星期几的全称, 例如 Sunday
    A_DDD使用当前用户语言表示的当前星期几的 3 个字母的简称, 例如 Sun
    A_WDay1 位数表示的当前星期经过的天数 (1-7). 在所有区域设置中 1 都表示星期天.
    A_YDay当前年份中经过的天数 (1-366). 不会使用零对变量的值进行填充, 例如会获取到 9, 而不是 009. 要对变量的值进行零填充, 请使用:FormatTime, OutputVar, , YDay0.
    A_YWeek符合 ISO 8601 标准的当前的年份和周数 (例如 200453). 要分离年份和周数, 请使用 StringLeft, Year, A_YWeek, 4 和 StringRight, Week, A_YWeek, 2. A_YWeek 的准确定义为: 如果含有 1 月 1 日的星期有四天以上在新年里, 则它被认为是新年的第一个星期. 否则, 它为前一年的最后一个星期, 而下一星期为新年的第一星期.
    A_Hour在 24 小时制 (例如, 17 表示 5pm) 中 2 位数表示的当前小时数 (00-23). 要获取带 AM/PM 提示的 12 小时制的时间, 请参照此例:FormatTime, OutputVar, , h:mm:ss tt
    A_Min

    2 位数表示的当前分钟数 (00-59).

    A_Sec2 位数表示的当前秒数 (00-59).
    A_MSec3 位数表示的当前毫秒数 (000-999). 要移除前导零, 请参照此例:Milliseconds := A_MSec + 0.
    A_NowYYYYMMDDHH24MISS 格式的当前本地时间. 注意: 使用 EnvAdd 和 EnvSub 可以对日期和时间进行计算. 此外, 使用 FormatTime 可以根据您的区域设置或选项来格式化日期和/或时间.
    A_NowUTCYYYYMMDDHH24MISS 格式的当前的协调世界时 (UTC). UTC 本质上和格林威治标准时间 (GMT) 一致.
    A_TickCount

    计算机重启后经过的毫秒数. 通过把 A_TickCount 保存到变量中, 经过一段时间后从最近的 A_TickCount 值中减去那个变量, 可以计算出所经过的时间. 例如:

    StartTime := A_TickCount
    Sleep, 1000
    ElapsedTime := A_TickCount - StartTime
    MsgBox,  %ElapsedTime% milliseconds have elapsed.

    如果您需要比 A_TickCount 的10ms 更高的精确度, 请使用 QueryPerformanceCounter().

    脚本设置

    A_IsSuspended当脚本 挂起时 值为 1, 否则为 0.
    A_IsPaused
    [v1.0.48+]
    当紧随当前线程的 线程 被 暂停 时值为 1. 否则为 0.
    A_IsCritical
    [v1.0.48+]
    当前线程 的 Critical 设置关闭时值为 0. 否则它包含大于零的整数, 即 Critical 使用的 消息检查频率. 因为 Critical 0 关闭了当前线程的关键性, 所以 Critical 的当前状态可以这样来保存和恢复:Old_IsCritical := A_IsCritical, 后来执行 Critical %Old_IsCritical%.
    A_BatchLines(同义于 A_NumBatchLines) 由 SetBatchLines 设置的当前值. 例如: 200 或 10ms (取决于格式).
    A_TitleMatchMode由 SetTitleMatchMode 设置的当前模式: 1, 2, 3 或 RegEx.
    A_TitleMatchModeSpeed由 SetTitleMatchMode 设置的当前匹配速度 (fast 或 slow).
    A_DetectHiddenWindows由 DetectHiddenWindows 设置的当前模式 (On 或 Off).
    A_DetectHiddenText由 DetectHiddenText 设置的当前模式 (On 或 Off).
    A_AutoTrim由 AutoTrim 设置的当前模式 (On 或 Off).
    A_StringCaseSense由 StringCaseSense 设置的当前模式 (On, Off 或 Locale).
    A_FileEncoding[AHK_L 46+] 包含了多个命令使用的默认编码; 请参阅 FileEncoding.
    A_FormatInteger由 SetFormat 设置的当前整数格式 (H 或 D). [AHK_L 42+]: 此变量还可能为小写字母 h.
    A_FormatFloat由 SetFormat 设置的当前浮点数格式.
    A_SendMode[v1.1.23+]: 由 SendMode 设置的当前模式字符串 (可能的值为: Event, Input, Play 或 InputThenPlay).
    A_SendLevel[v1.1.23+]: 当前 SendLevel 的设置 (可能的值为: 0 到 100 之间的整数, 包括0和100).
    A_StoreCapslockMode[v1.1.23+]: 由 SetStoreCapslockMode 设置的当前模式字符串 (可能的值为: On 或 Off).
    A_KeyDelay
    A_KeyDuration
    由 SetKeyDelay 设置的当前延迟 (总是十进制数, 不是十六进制). A_KeyDuration 依赖 [v1.1.23+] .
    A_KeyDelayPlay
    A_KeyDurationPlay
    表示由 SetKeyDelay 设置 SendPlay 模式的延迟或持续时间 (总是十进制数, 不是十六进制). 依赖 [v1.1.23+].
    A_WinDelay由 SetWinDelay 设置的当前延迟 (总是十进制数, 不是十六进制).
    A_ControlDelay由 SetControlDelay 设置的当前延迟 (总是十进制数, 不是十六进制).
    A_MouseDelay
    A_MouseDelayPlay
    由 SetMouseDelay 设置的当前延迟 (总是十进制数, 不是十六进制). A_MouseDelay 表示传统的 SendEvent 模式, 而 A_MouseDelayPlay 则表示 SendPlay. A_MouseDelayPlay 依赖 [v1.1.23+].
    A_DefaultMouseSpeed由 SetDefaultMouseSpeed 设置的当前速度 (总是十进制数, 不是十六进制).
    A_CoordModeToolTip
    A_CoordModePixel
    A_CoordModeMouse
    A_CoordModeCaret
    A_CoordModeMenu
    [v1.1.23+]: CoordMode 的当前设置值的字符串. (可能的值为: Window, Client 或 Screen)
    A_RegView[v1.1.08+]: 由 SetRegView 设置的当前注册表视图.
    A_IconHidden托盘图标当前隐藏时值为 1, 否则为 0. 此图标可以使用 #NoTrayIcon 或 Menu 命令进行隐藏.
    A_IconTip如果使用 Menu, Tray, Tip 为托盘图标指定了自定义的工具提示时, 变量的值为这个提示的文本, 否则为空.
    A_IconFile如果使用 Menu, tray, icon 指定了自定义的托盘图标时, 变量的值为图标文件的完整路径和名称, 否则为空. 已知限制:如果脚本原来传递相对路径给系统的 DLL, 那么此变量中的路径可能不正确;例如 Menu, Tray, Icon, user32.dll, 2.
    A_IconNumber当 A_IconFile 为空时此变量为空. 否则, 它的值为 A_IconFile 中的图标编号 (通常为 1).

    用户空闲时间

    A_TimeIdle从系统最后一次接收到键盘, 鼠标或其他输入后所经过的毫秒数. 这可以用来判断用户是否离开. 用户的物理输入和由 任何 程序或脚本生成的模拟输入 (例如 Send 或 MouseMove 命令) 会让此变量重置为零. 由于此变量的值趋向于以 10 的增量增加, 所以不应该判断它是否等于另一个值. 相反, 应该检查此变量是否大于或小于另一个值. 例如:IfGreater, A_TimeIdle, 600000, MsgBox, The last keyboard or mouse activity was at least 10 minutes ago.
    A_TimeIdlePhysical

    与上面类似, 但在安装了相应的钩子 (键盘 或 鼠标) 后会忽略模拟的键击和/或鼠标点击; 即此变量仅反应物理事件. (这样避免了由于模拟键击和鼠标点击而误以为用户存在.) 如果两种钩子都没有安装, 则此变量等同于 A_TimeIdle. 如果仅安装了一种钩子, 那么仅此类型的物理输入才会对 A_TimeIdlePhysical 起作用 (另一种/未安装钩子的输入, 包括物理的和模拟的, 都会被忽略).

    GUI 窗口和菜单栏

    A_DefaultGui [v1.1.23+]当前线程的 GUI 名称或序号.
    A_DefaultListView [v1.1.23+]ListView控件 的 变量名 或 句柄 ,这取决与使用了何种 ListView 函数 . 如果默认GUI中没有ListView控件,此变量为空.
    A_DefaultTreeView [v1.1.23+]TreeView控件 的 变量名 或 句柄 ,这取决与使用了何种 TreeView 函数 . 如果默认GUI中没有TreeView控件,此变量为空.
    A_Gui启动了 当前线程 的 GUI 的名称或编号. 除非当前线程是由 Gui 控件, 菜单项或 Gui 事件 (例如 GuiClose/GuiEscape) 启动的, 否则此变量为空.
    A_GuiControl启动 当前线程 的 GUI 控件的关联变量名. 如果那个控件没有 关联变量, 则 A_GuiControl 包含此控件的文本/标题中前 63 个字符 (这常用来避免给每个按钮分配变量名). 出现后面这些情况时 A_GuiControl 为空: 1) A_Gui 为空; 2) GUI 菜单项或事件 (例如 GuiClose/GuiEscape) 启动了当前线程; 3) 那个控件没有关联变量, 也没有标题; 或 4) 最初启动当前线程的控件已经不存在 (可能由于 Gui Destroy 的原因).
    A_GuiWidth
    A_GuiHeight
    在 GuiSize 子程序 中引用时, 它们分别包含了 GUI 窗口的宽度和高度. 它们对应于窗口的工作区, 这是窗口中不包括标题栏, 菜单栏和边框的区域. [v1.1.11+]:这些值会受 DPI 缩放的影响.
    A_GuiX
    A_GuiY
    它们包含了 GuiContextMenu 和 GuiDropFiles 事件中的 X 和 Y 坐标. 这里的坐标相对于窗口的左上角. [v1.1.11+]: 这些值会受 DPI 缩放 的影响.
    A_GuiEvent
    or A_GuiControlEvent

    启动 当前线程 的事件类型. 如果当前线程不是由 GUI 动作 启动的, 则此变量为空. 否则, 它为下列字符串的其中一个:

    Normal: 此事件是由左键单击和键击 (方向键, TAB 键, 空格键, 带下划线的快捷键等) 触发的. 此变量的值还可以用于菜单项和特殊的 Gui 事件, 例如 GuiClose 和 GuiEscape.

    DoubleClick: 此事件是由双击触发的. 注意: 双击中的首次点击仍会引起 Normal 事件首先被接收到. 换句话说, 双击时子程序会运行两次: 一次在首次点击时, 再次是在第二次点击时.

    RightClick: 仅出现在 GuiContextMenuListViews 和 TreeViews.

    上下文相关值:要了解详情请参阅 GuiContextMenuGuiDropFilesSliderMonthCalListView 和 TreeView.

    A_EventInfo

    包含下列事件的额外信息:

    注意: 与类似 A_ThisHotkey 这样的变量不同, 每个 线程 会为 A_Gui, A_GuiControl, A_GuiX/Y, A_GuiEvent 和 A_EventInfo 保存它自己本身的值. 因此, 如果一个线程被另一个中断, 在这个线程恢复时它仍将看到这些变量的原来/正确的值.

    热键, 热字串和自定义菜单项

    A_ThisMenuItem最近选择的 自定义菜单项 的名称 (没有则为空).
    A_ThisMenuA_ThisMenuItem 所在菜单的名称.
    A_ThisMenuItemPos表示 A_ThisMenuItem 在 A_ThisMenu 当前 位置的编号. 菜单中首个项目为 1, 第二项为 2, 依此类推. 菜单分隔线也计算在内. 如果 A_ThisMenuItem 为空或已不存在于 A_ThisMenu 中, 则此变量为空. 如果 A_ThisMenu 已不存在, 则此变量也为空.
    A_ThisHotkey

    最近执行的 热键 或 非自动替换热字串 的按键名称 (如果没有则为空), 例如 #z. 如果 当前线程 被其他热键中断, 那么此变量的值会变化, 所以如果之后需要在子程序中使用原来的值, 则必须马上把它复制到另一个变量中.

    首次创建热键时 (通过 Hotkey 命令 或 双冒号标签 ), 其键名以及修饰符的顺序成为此热键的固定名称,被所有热键 variants 变量共享.

    另请参阅: A_ThisLabel

    A_PriorHotkey除了保存前一次热键的名称外, 其他的与上面相同. 如果没有它会为空.
    A_PriorKey[v1.1.01+]: 在最近按键按下或按键释放前最后按下的按键名称, 如果在按键历史中没有适用的按键按下则为空. 不包括由 AutoHotkey 脚本生成的所有输入. 要使用此变量, 首先必须安装 键盘 或 鼠标钩子 同时启用 按键历史.
    A_TimeSinceThisHotkey从 A_ThisHotkey 按下后到现在经过的毫秒数. 如果 A_ThisHotkey 为空, 则此变量的值为 -1.
    A_TimeSincePriorHotkey从 A_PriorHotkey 按下后到现在经过的毫秒数. 如果 A_PriorHotkey 为空, 则此变量的值为 -1.
    A_EndChar用户最近按下的触发了 非自动替换热字串 的 终止符. 如果不需要终止符 (由于使用了 * 选项), 那么此变量将为空.

    操作系统和用户信息

    ComSpec
    [v1.0.43.08+]
    此变量的值与系统环境变量 ComSpec 一样 (例如 C:\Windows\system32\cmd.exe). 常与 Run/RunWait 一起使用. 注意: 此变量不带 A_ 前缀.
    A_Temp
    [v1.0.43.09+]
    存放临时文件的文件夹的完整路径和名称 (例如 C:\DOCUME~1\UserName\LOCALS~1\Temp). 它的值从下列的其中一个位置获取 (按顺序): 1) 环境变量 TMP, TEMP 或 USERPROFILE; 2) Windows 目录.
    A_OSType正在运行的操作系统类型. 由于 AutoHotkey 1.1 仅支持基于 NT 的操作系统, 所以此变量总是为 WIN32_NT. 旧版本的 AutoHotkey 运行在 Windows 95/98/ME 时会返回 WIN32_WINDOWS.
    A_OSVersion

    下列字符串中的一个(如果存在):WIN_7 [需要 AHK_L 42+], WIN_8 [需要 v1.1.08+], WIN_8.1 [需要 v1.1.15+], WIN_VISTA, WIN_2003, WIN_XP, WIN_2000.

    在AutoHotKey的执行文件或编译后的脚本属性里添加兼容性设置会让操作系统报告不同的版本信息,可以间接得出 A_OSVersion .

    [v1.1.20+]: 如果系统版本没有被识别成上述版本,会返回一个"major.minor.build"形式的字符串. 如, Windows 10 TP 是 6.4.9841.

    ; 这个示例已过时了, 里面的这些操作系统都不再受支持. 
    if A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME  ; 注:逗号两边没有空格. 
    {
        MsgBox This script requires Windows 2000/XP or later.
        ExitApp
    }
    A_Is64bitOS[v1.1.08+]:当操作系统为 64 位则值为 1(真), 为 32 位则为 0(假).
    A_PtrSize[AHK_L 42+]: 包含指针的大小值, 单位为字节. 值为 4(32 位)或 8(64位), 取决于运行当前脚本的执行程序的类型.
    A_Language当前系统的默认语言, 值为 这些 4- 位数字编码 的其中一个.
    A_ComputerName在网络上看到的计算机名称.
    A_UserName运行当前脚本的用户的登录名.
    A_WinDirWindows 目录. 例如: C:\Windows
    A_ProgramFiles
    或 ProgramFiles

    Program Files 目录 (例如 C:\Program Files 或者 C:\Program Files (x86)). 一般来说和 ProgramFiles 环境变量 一样.

    在 64位系统 (非32位系统) 上适用:

    • 如果可执行文件 (EXE) 以32位脚本运行的时候, A_ProgramFiles 返回路径为 "Program Files (x86)" 目录.
    • 对于32位的进程, 这个 ProgramW6432 环境变量 指向 64 位 Program Files 目录. 在 Windows 7 和更高版本上, 对于 64 位的进程也是这样设置的.
    • 而 ProgramFiles(x86) 环境变量指向 32 位 Program Files 目录.

    在 v1.0.43.08+, 前缀 A_ 可以省略, 这样有助于自然过渡到 #NoEnv.

    A_AppData
    [v1.0.43.09+]
    当前用户的应用程序数据文件夹的完整路径和名称. 例如: C:\Documents and Settings\Username\Application Data
    A_AppDataCommon
    [v1.0.43.09+]
    所有用户的应用程序数据文件夹的完整路径和名称.
    A_Desktop当前用户的桌面文件夹的完整路径和名称.
    A_DesktopCommon所有用户的桌面文件夹的完整路径和名称.
    A_StartMenu当前用户的开始菜单文件夹的完整路径和名称.
    A_StartMenuCommon所有用户的开始菜单文件夹的完整路径和名称.
    A_Programs当前用户的开始菜单中程序文件夹的完整路径和名称.
    A_ProgramsCommon所有用户的开始菜单中程序文件夹的完整路径和名称.
    A_Startup当前用户的开始菜单中启动文件夹的完整路径和名称.
    A_StartupCommon所有用户的开始菜单中启动文件夹的完整路径和名称.
    A_MyDocuments当前用户 "我的文档" 文件夹的完整路径和名称. 与大多数类似变量不同, 当此文件夹为驱动器的根目录时, 此变量的值不包含最后的反斜线. 例如, 它的值我 M: 而不是 M:\
    A_IsAdmin

    如果当前用户有管理员权限, 则此变量的值为 1. 否则为 0.

    在 Windows Vista 或更高版本中, 一些脚本可能需要管理员权限才能正常运行 (例如与使用管理员权限执行的进程和窗口进行交互的脚本). 要做到这点, 请把下列语句添加到脚本的顶部:

    if not A_IsAdmin
    {
       Run *RunAs "%A_ScriptFullPath%"  ; 需要 v1.0.92.01+
       ExitApp
    }

    尽管这个方法也可以让脚本对以管理员权限运行的程序窗口进行自动化操作,但这并不是唯一的方法. 详参 FAQ .

    A_ScreenWidth
    A_ScreenHeight

    主监视器的宽度和高度, 单位为像素 (例如 1024 和 768).

    要获取多显示器系统中其他显示器的尺寸, 请使用 SysGet.

    要获取整个桌面(即使它横跨多个显示器)的宽度和高度, 请使用下面的例子:

    SysGet, VirtualWidth, 78
    SysGet, VirtualHeight, 79
    

    此外, 使用 SysGet 可以获取显示器的工作区域, 它比显示器的整个区域小, 因为它不包括任务栏和其他注册的桌面工具栏.

    A_ScreenDPI [v1.1.11+]在屏幕宽度上每逻辑寸的像素数. 在多显示器的系统中, 这个值对于所有的显示器都是一样的. 在大多数系统中该值为 96;它取决于系统文本大小(DPI)设置. 另请参阅 Gui -DPIScale.
    A_IPAddress1 到 4计算机中前 4 个网卡的 IP 地址.

    杂项

    A_Cursor

    当前显示的鼠标光标类型. 其值为下列单词的其中一个: AppStarting, Arrow, Cross, Help, IBeam, Icon, No, Size, SizeAll, SizeNESW, SizeNS, SizeNWSE, SizeWE, UpArrow, Wait, Unknown. 与 size 指针类型一起的首字母表示方向, 例如 NESW = NorthEast+SouthWest. 手型指针 (点击和抓取) 属于 Unknown 类别.

    A_CaretX
    A_CaretY

    当前光标 (文本插入点) 的 X 和 Y 坐标. 如果没有使用 CoordMode 使得坐标相对于整个屏幕, 默认坐标相对于活动窗口. 如果没有活动窗口或无法确定文本插入点的位置, 则这两个变量为空.

    下面这个脚本可以让您在四处移动文本插入点时, 查看显示在自动更新工具提示上的当前位置. 注意在某些窗口 (例如某些版本的 MS Word) 会不管文本插入点的实际位置如何都报告同样的位置.

    #Persistent
    SetTimer, WatchCaret, 100
    return
    WatchCaret:
      ToolTip, X%A_CaretX% Y%A_CaretY%, A_CaretX, A_CaretY - 20
    return
    
    Clipboard操作系统剪贴板的内容, 可以从中读取或写入内容. 请参阅 剪贴板 章节.
    ClipboardAll剪贴板中的完整内容 (包含格式和文本). 请参阅 ClipboardAll.
    ErrorLevel请参阅 ErrorLevel.
    A_LastError操作系统 GetLastError() 函数或最近 COM 对象调用返回的结果. 要了解详情, 请参阅 DllCall() 和 Run/RunWait.

    Loop

    A_Index当前循环重复的次数 (64 位整数). 例如, 当脚本首次执行此循环体时, 此变量的值为 1. 要了解详情请参阅 Loop 或 While 循环.
    A_LoopFileName 等此变量和其他相关变量仅在 文件循环 中有效.
    A_LoopRegName 等此变量和其他相关变量仅在 注册表循环 中有效.
    A_LoopReadLine请参阅 文件读取循环.
    A_LoopField请参阅 解析循环.

    环境变量与 "普通" 变量

    环境变量由操作系统维护. 在命令提示符中输入 SET 并回车后, 您可以看到环境变量列表.

    脚本中可以使用 EnvSet 创建新的环境变量或改变现有环境变量的内容. 但是, 这样的添加和改变都是私有的; 它们不会被系统的其他部分看到. 一个例外是当脚本使用 Run 或 RunWait 运行程序时 (甚至是另一个脚本): 这样的程序会继承其父脚本的环境变量的副本, 包括私有的那些.

    在 v1.0.43.08+, 推荐在所有新脚本中使用以下方式获取环境变量, 例如 Path:

    EnvGet, OutputVar, Path  ; 想了解含义, 请参阅 #NoEnv.

    变量的容量和占用内存

    • 每个变量最多可以含有64MB的文本(使用#MaxMem可以突破这个限制).
    • 当赋值给变量比当前更长的内容时, 会自动分配额外的系统内存给这个变量.
    • 通过赋值为空可以释放大变量占用的内存, 例如 Var := "".
    • 脚本可以创建的变量数量没有限制. 程序设计用来支持至少几百万的变量而不会出现明显的性能下降.
    • 接受数值输入的命令, 函数和表达式通常可以支持 15 位的浮点数精度. 对于整数, 可以支持 64 位有符号整数, 其范围从 -9223372036854775808 (-0x8000000000000000) 到 9223372036854775807 (0x7FFFFFFFFFFFFFFF). 此范围外的任何整数不受支持, 并可能产生错误的结果. 与之相比, 整数的算数运算结果超出此范围时会产生溢出 (例如 0x7FFFFFFFFFFFFFFF + 1 = -0x8000000000000000).
    展开全文
  • Flowable API 变量

    千次阅读 2019-02-01 11:14:56
    Flowable API 变量   流程实例按步骤执行时,需要使用一些数据。 在Flowable中,这些数据称作变量(variable),并会存储在数据库中。变量可以用在表达式中(例如在排他网关中用于选择正确的出口路径),也可以...
  • Ubuntu设置环境变量

    千次阅读 2013-03-28 15:18:41
    Ubuntu Linux系统环境变量配置文件: /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。 /etc /environment : 在登录时...
  • linux的bash环境变量

    千次阅读 2017-09-09 14:54:32
    环境变量简介  Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都  是相同的,这个默认环境实际上就是一组环境变量的定义。  环境变量是全局的,设置...
  • 分离变量

    千次阅读 2017-09-04 10:03:00
    分离变量法 目录 1. 线性 2. 齐次 3. 线性方程解叠加原理 4. 在有限端处具有零温度的热传导方程 (1)乘积解形式 (2)分离变量 (3)不定常方程 (4)边值问题 a. 当\(\lambda &gt;0\) b. 当\(\lambda = ...
  • Perl特殊变量

    千次阅读 2012-08-21 15:07:10
    来源: ChinaUnix博客 日期: 2007.11.26 07:49 http://blog.chinaunix.net/u/8985/index.php 最新版本可以从这里获取(POD 格式):  ... NAME perlvar - Perl 预定义变量 D
  • 一部分是方法的定义(一个类中可以有多个方法) <br />在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效. <br />(全局变量应该是成员变量的俗称) <br />在方法体中定义的变量...
  • 变量实际上是一段连续的存储空间的别名。一个变量名就是代表内存某一段地址的数据。程序中通过变量来申请存储空间,并将这段存储空间命名为变量名。程序员通过变量的地址就可以使用这段存储空间的内容了。 数据类型...
  • 随机变量和概率分布

    千次阅读 2018-05-16 20:28:07
    随机变量可以是连续的或者离散的,离散随机变量拥有有限或者可数无限多的状态。注意这些状态并非一定是整数,它们也可能只是一些被命名的状态而没有数值。连续随机变量伴随着实数值。 概率分布用来描述随机变量...
  • 【数据收集】名义变量、序级变量、区间变量、比率变量的理解及例子名义变量(Nominal Variable)分类及举例序级变量(Ordinal Variable)分类和举例区间变量(Interval Variable)分类和举例比率变量分类和举例...
  • JS 基础之全局变量,局部变量

    千次阅读 2018-08-23 09:56:29
    本章将概要介绍一些编写高质量JavaScript的最佳实践、模式和习惯,比如避免全局变量、使用单var声明、预缓存循环中的length、遵守编码约定等等。本章还包括一些编程习惯,这些习惯跟具体的代码关系不大,而是更多...
  • 多元线性回归哑变量设置方法

    千次阅读 2021-04-14 23:53:13
    多元线性回归是研究一个连续变量和其他多个变量间线性关系的统计学分析方法,如果在自变量中存在分类变量,如果直接将分类变量连续变量统一纳入模型进行分析是有问题的,尤其是无序分类资料,即使进入了模型,...
  • 类体由2部分构成: ...在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效. (全局变量应该是成员变量的俗称) 在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中
  • mysql系统变量详解

    千次阅读 2012-11-09 10:40:12
    mysqld服务器维护两种变量。全局变量影响服务器的全局操作。会话变量影响具体客户端连接相关操作。 服务器启动时,将所有全局变量初始化为默认值。可以在选项文件或命令行中指定的选项来更改这些默认值。服务器...
  • MATLAB中的连续小波变换CWT

    万次阅读 2019-01-09 13:53:26
    下面来介绍一下如何在MATLAB实现CWT,也就是我们常说的连续小波变换,具体如下: 所谓小波(wavelet),即存在于一个较小区域的波。小波函数的数学定义是:设ψ(t)为一平方可积函数,即ψ(t)∈L2(R),若其傅里叶变换...
  • MySql环境变量说明

    千次阅读 2013-02-27 21:13:35
    服务器将维护许多表示其配置的系统变量。所有变量均有默认值。可以在命令行中或选项文件设置选项在服务器启动时对它们进行设置。大多数可以在运行时使用SET语句来设置。 mysqld服务器维护两种变量。全局变量影响...
  • perl内置变量

    千次阅读 2016-05-11 11:21:48
    一、正则表达式特殊变量: 1、$n:包含上次模式匹配的第n个子串 2、$&:前一次成功模式匹配的字符串 3、$`:前次匹配成功的子串之前的内容 4、$’:前次匹配成功的子串之后的内容 5、$+:前一次使用括号的模式匹配的...
  • 衡量变量之间的关系

    2018-11-22 15:36:24
    前段时间把连续变量之间的这个关系看了一下,其中就提到了相关度(英文是correlation,或者相关系数,它的一个量化),这个概念仅仅使用于线性的关系,这是我很长一段时间都弄错了的概念。那么如果是非线性的线性...
  • 随机变量统计独立性的相关证明

    千次阅读 2017-07-19 16:38:53
    1. 和的期望和方差两随机变量 x,z 统计独立,证明下列两个等式:
  • 【小白话通信】连续分布的产生

    千次阅读 2015-11-08 10:42:06
    由于篇幅有限,前一篇文章中只讲述了用均匀分布产生离散分布的方法,那么本文接着讲如何利用均匀分布产生连续分布的方法。 连续分布 连续分布主要有以下几种:均匀分布 伽马分布 正态分布 贝塔分布 柯西分布 ...
  • jmeter读取csv文件变量

    万次阅读 2017-12-25 19:37:22
    仔细看过后,觉得用得最多的应该是csvread函数、用户自定义变量以及CSV DATA CONFIG控制器这几个,但是做练习之后,在结果树和聚合报告中怎么查看执行结果是个问题,没找到对应的数据。 正则表达式和数据库连接...
  • perl内置变量的解释

    千次阅读 2016-02-22 20:43:49
    [转]perl 中的特殊内置变量 2013-1-21 阅读500 评论0 $- 当前页可打印的行数,属于Perl 格式系统的一部分 $! 根据上下文内容返回错误号或者错误串 $” 列表分隔符 $# 打印数字时默认的数字输出格式 $$ Perl 解释器的...
  • 问题描述:统计学题,多选1、下列变量属于离散变量的有( )A.机床台数 B.学生人数 C.耕地面积D.粮食产量 E.汽车产量2、在全国人口普查中( )A、全国人口总数是统计总体B、男性是品质标志表现C、人的年龄是变量D、每一...
  • linux bash环境变量简单总结

    千次阅读 2017-02-10 09:28:20
    环境变量简介 Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都  是相同的,这个默认环境实际上就是一组环境变量的定义。  环境变量是全局的,设置好的...
  • 在x86汇编中使用C语言的全局变量

    千次阅读 2017-10-21 17:01:19
    事实上,C中所有的变量名在汇编看来都是标签,都是一段连续内存空间的别名。 这样358行就好理解了,p_proc_ready这个地址标签所指向的内容就是我们需要的指针值。 在下面这篇博客中,介绍了相反的应用,在C中...
  • 协方差矩阵为学习高维连续变量模型的处理打开了一扇大门 1维正态随机变量的概率密度 n维正态随机变量的概率密度 马尔科夫不等式 如果X为非负的随机变量,那么 大数定理 大数定律有若干个表现形式,现列出常用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,257
精华内容 17,302
关键字:

下列属于连续变量的