我是pywinauto
的新手,我正在创建几个记事本窗口,并在所有窗口中键入文本。但是,这并不相互依赖,因此可以使用线程同时运行。
但是,当我尝试执行相同操作时,文本混乱了,因为有多个线程试图同时访问type_keys()
方法。有什么办法可以同时实现相同目标吗?
答案 0 :(得分:2)
还有另一种方法.set_text("...")
,它不需要窗口成为焦点。仅适用于编辑框。
.type_keys()
或.click_input()
对于并发自动化或锁定的计算机/ RDP最小化不是一个很好的选择。可以在Remote Execution Guide中找到更多详细信息。
答案 1 :(得分:1)
您也可以尝试从pywinauto导入keybord,并且您要发送的发送行是一个小例子:
#include <iostream>
#include <vector>
#include <sstream>
#include <string>
#include <stack>
using namespace std;
string trim(const string& str)
{
size_t first = str.find_first_not_of(' ');
if (string::npos == first)
{
return str;
}
size_t last = str.find_last_not_of(' ');
return str.substr(first, (last - first + 1));
}
vector<string> split(const std::string& str, char delim = ' ')
{
vector<string> elements;
stringstream ss(str);
string token;
while (getline(ss, token, delim)) {
elements.push_back(token);
}
return elements;
}
double evaluate(string operation)
{
vector<string> values = split(operation, ' ');
vector<string> result_vector;
double result = 0;
for(unsigned int i = 0; i < values.size(); i++){
if(values[i] == "*"){
double mini_result = stod(result_vector.back()) * stod(values[i+1]);
result_vector.pop_back();
i++;
result_vector.push_back(to_string(mini_result));
}
else if(values[i] == "/"){
double mini_result = stod(result_vector.back()) / stod(values[i+1]);
result_vector.pop_back();
i++;
result_vector.push_back(to_string(mini_result));
}
else{
result_vector.push_back(values[i]);
}
}
auto iterator = result_vector.begin();
while(iterator != result_vector.end()){
if(*iterator == "-"){
iterator++;
result -= stod(*iterator);
}
else if(*iterator == "+"){
iterator++;
result += stod(*iterator);
}
else{
result += stod(*iterator);
}
iterator++;
}
return result;
}
int main()
{
cout<<evaluate("5 * 44 + 3 / 2 * 4 - 12");
}
使用此代码,您将打开Notepade并在记事本中打个招呼,我刚刚创建为.py文件,并且两者都具有相同的代码,并且确实在主文件上调用了它们,并且工作完美 我创建了A.py并在上面放了代码,然后我创建了B.py并放了相同的代码,在C.py中,我导入了A,导入了B并运行了它,它确实打开了2 Notpad并为该示例编写了文本外观: A.py
from pywinauto import application
from pywinauto import keyboard
app = application.Application()
app.start("Notepad.exe")
keyboard.SendKeys('hello')
B.py
from pywinauto import application
from pywinauto import keyboard
app = application.Application()
app.start("Notepad.exe")
keyboard.SendKeys('hello')
C.py
from pywinauto import application
from pywinauto import keyboard
app = application.Application()
app.start("Notepad.exe")
keyboard.SendKeys('hello friends',with_spaces=True)
运行C.py使所有文件保存在同一文件夹中