AutoIT对窗体控件进行操作的例子

#include <GuiListView.au3>
;获取窗口句柄
$handle = WinGetHandle(".NET Reflector 6")
WinActivate($handle)
;获取控件句柄;
$control = ControlGetHandle($handle,"","WindowsForms10.SysListView32.app.0.232467a_r11_ad11")
;获取列表中List数目
$count = ControlListView($handle,"",$control,"GetItemCount")

for $i = 1 to 10
    ;获取位置信息
    $x = _GUICtrlListView_GetItemPositionX($control, $i-1)
    $y = _GUICtrlListView_GetItemPositionY($control, $i-1)

    ControlClick($handle,"", $control,"right",1, $x, $y)
    ControlSend($handle,"",$control,"{down 2}{enter}")
    WinWait("Save As")
    WinWaitActive("Save As")
    $handle2 = WinGetHandle("Save As")
    ControlSetText($handle2,"", "Edit1", "C:\Users\chenpassion\Desktop\Autoit\pic\" & $i & ".png")
    ControlClick($handle2,"","Button1")
    WinWaitClose("Save As")
    ControlSend($handle,"",$control,"{down}")
Next



autoit最好的,对窗口,控件进行操作的例子
http://www.cnblogs.com/autotest/p/3299200.html
### 栈在括号匹配中的应用 栈是一种非常适合处理嵌套结构的数据结构,比如括号匹配。通过遍历字符串并利用栈的特性可以轻松检测括号是否正确配对。 当遇到左括号时将其压入栈;而碰到右括号,则尝试弹出栈顶元素并与之比较。如果两者不是一对对应的括号则说明存在错误。最终整个过程结束后应确保栈为空表示所有括号都已成功匹配[^1]。 ```java public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for (char c : s.toCharArray()) { if (c == '(' || c == '{' || c == '[') { stack.push(c); } else { if (stack.isEmpty()) return false; char top = stack.pop(); if ((c == ')' && top != '(') || (c == '}' && top != '{') || (c == ']' && top != '[')) { return false; } } } return stack.isEmpty(); } ``` ### 栈用于进制转换的应用 对于整数向不同基数系统的转换也可以借助于栈来简化算法设计。具体做法是从最低位开始逐位除以目标基底取余数存入栈中直到商变为零为止。之后按照先进后出的原则依次取出这些余数值即为目标进制下的各位数字[^2]。 ```java public String convertToBase(int num, int base) { StringBuilder result = new StringBuilder(); Stack<Integer> remainderStack = new Stack<>(); while (num > 0) { int rem = num % base; remainderStack.push(rem); num /= base; } while (!remainderStack.empty()){ result.append(remainderStack.pop()); } return result.toString(); } ``` ### 使用栈进行前缀、中缀和后缀表达式的转换及求值 #### 中缀转后缀表达式 为了将中缀表达式转换为更易于计算机解析的形式—后缀表达式(逆波兰记法),同样采用栈作为辅助工具。扫描输入串过程中遵循特定规则决定何时把符号放入输出队列还是暂存至栈内等待后续处理: - 数字直接加入结果序列; - 遇到操作符依据其相对于当前栈顶项的重要性程度选择立即输出或是先入栈再延迟处理; - 左圆括号无条件进入栈; - 右圆括号促使连续弹出直至遇见相应的左圆括号,并忽略这对括号本身[^3]. ```java private static final Map<String, Integer> PRECEDENCE_MAP; static { PRECEDENCE_MAP = new HashMap<>(); PRECEDENCE_MAP.put("+", 1); PRECEDENCE_MAP.put("-", 1); PRECEDENCE_MAP.put("*", 2); PRECEDENCE_MAP.put("/", 2); } public List<String> infixToPostfix(List<String> tokens){ LinkedList<String> outputQueue = new LinkedList<>(); Deque<String> operatorStack = new ArrayDeque<>(); for (String token : tokens) { switch(token){ case "+": case "-": case "*": case "/": while(!operatorStack.isEmpty() && !Objects.equals(operatorStack.peek(), "(") && PRECEDENCE_MAP.getOrDefault( operatorStack.peek(), 0 ) >= PRECEDENCE_MAP.get(token)){ outputQueue.addLast(operatorStack.pop()); } operatorStack.push(token); break; case "(": operatorStack.push(token);break; case ")": while(!Objects.equals(operatorStack.peek(),"(")) outputQueue.addLast(operatorStack.pop()); operatorStack.pop(); // Remove the left parenthesis from stack. break; default:outputQueue.addLast(token); // Numbers go directly to queue. } } while(!operatorStack.isEmpty()) outputQueue.addLast(operatorStack.pop()); return outputQueue; } ``` #### 计算后缀表达式 一旦获得了后缀形式的操作序列,就可以非常方便地对其进行评估了。只需要再次运用栈的概念即可完成此任务:每当读取到一个数值就把它推送到栈上;若是碰到了运算符便从栈里提取所需数量的操作数来进行相应计算并将得到的新值重新放回栈中去。最后留在栈里的唯一一项便是所求的结果[^4]。 ```java public double evaluatePostfixExpression(List<String> postfixTokens) throws Exception{ Deque<Double> operandStack = new ArrayDeque<>(); for (String token : postfixTokens) { try { Double.parseDouble(token); operandStack.push(Double.valueOf(token)); } catch(NumberFormatException e){ if(PRECEDENCE_MAP.containsKey(token)){ double opnd2 = operandStack.pop().doubleValue(); double opnd1 = operandStack.pop().doubleValue(); switch(token.charAt(0)){ case '+': operandStack.push(opnd1 + opnd2); break; case '-': operandStack.push(opnd1 - opnd2); break; case '*': operandStack.push(opnd1 * opnd2); break; case '/': if(Math.abs(opnd2)<Double.MIN_NORMAL) throw new ArithmeticException("Division by zero"); operandStack.push(opnd1 / opnd2); break; } }else{ throw new IllegalArgumentException("Invalid Token:" +token); } } } return operandStack.pop(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值