Python + pywinauto-เตฝ เดกเต†เดธเตเด•เตเดŸเต‹เดชเตเดชเต GUI เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต: MS UI เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเตเดฎเดพเดฏเดฟ เดŽเด™เตเด™เดจเต† เดšเด™เตเด™เดพเดคเตเดคเด‚ เด•เต‚เดŸเดพเด‚

เดชเตˆเดคเตเดคเตบ เดฒเตˆเดฌเตเดฐเดฑเดฟ pywinauto เดตเดฟเตปเดกเต‹เดธเดฟเตฝ เดกเต†เดธเตเด•เตเดŸเต‹เดชเตเดชเต GUI เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดพเดฃเต. เด•เดดเดฟเดžเตเดž เดฐเดฃเตเดŸเต เดตเตผเดทเดฎเดพเดฏเดฟ, เด…เดคเดฟเตฝ เดชเตเดคเดฟเดฏ เดชเตเดฐเดงเดพเดจ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต:

  • MS UI เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเตเด•เตเด•เตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ. เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด’เดจเตเดจเตเดคเดจเตเดจเต†เดฏเดพเดฃเต, เด‡เดชเตเดชเต‹เตพ เด‡เดคเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต: WinForms, WPF, Qt5, Windows Store (UWP) เด…เด™เตเด™เดจเต† เดชเดฒเดคเตเด‚ - Windows-เตฝ เด‰เดณเตเดณ เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เดŽเดฒเตเดฒเดพเด‚.
  • เดฌเดพเด•เตเด•เต†เตปเดกเต/เดชเตเดฒเด—เดฟเดจเตเด•เดณเตเดŸเต† เดธเดฟเดธเตเดฑเตเดฑเด‚ (เดจเดฟเดฒเดตเดฟเตฝ เด…เดตเดฏเดฟเตฝ เดฐเดฃเตเดŸเต†เดฃเตเดฃเด‚ เดนเตเดกเดฟเดจเต เด•เต€เดดเดฟเตฝ เด‰เดฃเตเดŸเต: เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ "win32" เดชเตเดคเดฟเดฏเดคเตเด‚ "uia"). เดคเตเดŸเตผเดจเตเดจเต เดžเด™เตเด™เตพ เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เดฎเดฟเดฒเต‡เด•เตเด•เต เดธเตเด—เดฎเดฎเดพเดฏเดฟ เดจเต€เด™เตเด™เตเดจเตเดจเต.
  • เดฎเต—เดธเดฟเดจเตเด‚ เด•เต€เดฌเต‹เตผเดกเดฟเดจเตเดฎเตเดณเตเดณ Win32 เดนเตเด•เตเด•เตเด•เตพ (เดชเตˆเดนเต‚เด•เตเด•เดฟเดจเตเดฑเต† เดธเตเดชเดฟเดฐเดฟเดฑเตเดฑเดฟเดฒเตเดณเตเดณ เดนเต‹เดŸเตเดŸเต เด•เต€เด•เตพ).

เดกเต†เดธเตโ€Œเด•เตโ€ŒเดŸเต‹เดชเตเดชเต เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเดพเดฏเดฟ เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเดฟเตฝ เดŽเดจเตเดคเต†เดฒเตเดฒเดพเด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด…เดตเดฒเต‹เด•เดจเดตเตเด‚ เดžเด™เตเด™เตพ เดจเตฝเด•เตเด‚ (เด—เตเดฐเตเดคเดฐเดฎเดพเดฏ เด’เดฐเต เดคเดพเดฐเดคเดฎเตเดฏเดฎเดพเดฏเดฟ เด…เดญเดฟเดจเดฏเดฟเด•เตเด•เดพเดคเต†).

เดˆ เดฒเต‡เด–เดจเด‚ เดฎเดฟเตปเดธเตเด•เดฟเตฝ เดจเดŸเดจเตเดจ SQA Days 20 เด•เต‹เตบเดซเดฑเตปเดธเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเดฟเดจเตเดฑเต† เดญเดพเด—เดฟเด• เดŸเตเดฐเดพเตปเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดพเดฃเต (เดตเต€เดกเดฟเดฏเต‹เดŸเต‡เดชเตเดชเต ะธ เดธเตเดฒเตˆเดกเตเด•เตพ), เดญเดพเด—เดฟเด•เดฎเดพเดฏเดฟ เดฑเดทเตเดฏเตป เดชเดคเดฟเดชเตเดชเต เด—เตˆเดกเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด• pywinauto-เดฏเตโ€Œเด•เตเด•เต.

เดˆ เดฎเต‡เด–เดฒเดฏเดฟเดฒเต† เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเดฟเดจเตเดฑเต† เด’เดฐเต เดนเตเดฐเดธเตเดต เด…เดตเดฒเต‹เด•เดจเดคเตเดคเต‹เดŸเต† เดจเดฎเตเด•เตเด•เต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚. เดกเต†เดธเตโ€Œเด•เตโ€ŒเดŸเต‹เดชเตเดชเต GUI เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ, เดธเต†เดฒเดฟเดจเดฟเดฏเด‚ เด‰เดณเตเดณ เดตเต†เดฌเดฟเดจเต‡เด•เตเด•เดพเตพ เดŽเดฒเตเดฒเดพเด‚ เด•เตเดฑเดšเตเดšเตเด•เต‚เดŸเดฟ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฃเต. เดชเตเดฐเดงเดพเดจ เดธเดฎเต€เดชเดจเด™เตเด™เตพ เด‡เดคเดพ:

เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเต เดฐเต€เดคเดฟ

เด•เตเดฒเดฟเด•เตเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ เดนเดพเตผเดกเตเด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเด•, เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏ เดนเดฟเดฑเตเดฑเตเด•เตพ เดžเด™เตเด™เตพ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.
[+] เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚, เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต.
[+] เดŸเต†เดธเตเดฑเตเดฑเต เดฑเต†เด•เตเด•เต‹เตผเดกเดฟเด‚เด—เตเด•เตพ "เดฑเต†เด•เตเด•เต‹เตผเดกเต-เดฑเต€เดชเตเดฒเต‡" เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต.
[-] เดธเตเด•เตเดฐเต€เตป เดฑเต†เดธเดฒเตเดฏเต‚เดทเตป, เดคเต€เด‚, เดซเต‹เดฃเตเดŸเตเด•เตพ, เดตเดฟเตปเดกเต‹ เดตเดฒเตเดชเตเดชเด™เตเด™เตพ เดฎเตเดคเดฒเดพเดฏเดต เดฎเดพเดฑเตเดฑเตเดจเตเดจเดคเดฟเตฝ เดเดฑเตเดฑเดตเตเด‚ เด…เดธเตเดฅเดฟเดฐเดฎเดพเดฃเต.
[-] เดตเดฒเดฟเดฏ เดชเดฟเดจเตเดคเตเดฃเดพ เดถเตเดฐเดฎเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต; เดธเตเด•เตเดฐเดพเดšเตเดšเดฟเตฝ เดจเดฟเดจเตเดจเต เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เดชเตเดจเดฐเตเดœเตเดœเต€เดตเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเตเดตเดฎเต‡เดงเดฏเดพ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต.
[-] เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดฎเดพเดคเตเดฐเด‚ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต; เดกเดพเดฑเตเดฑ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดฎเดฑเตเดฑเต เดฐเต€เดคเดฟเด•เดณเตเดฃเตเดŸเต.

เดŸเต‚เดณเตเด•เตพ (เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚): เด“เดŸเตเดŸเต‹เดชเดฟ, PyAutoGUI, PyUserInput เด•เต‚เดŸเดพเดคเต† เดฎเดฑเตเดฑเต เดชเดฒเดคเตเด‚. เดธเดพเดงเดพเดฐเดฃเด—เดคเดฟเดฏเดฟเตฝ, เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดŸเต‚เดณเตเด•เดณเดฟเตฝ เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต (เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เด…เดฒเตเดฒ).

เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเต เดฐเต€เดคเดฟเด•เตเด•เต เดฎเดฑเตเดฑเต เดธเดฎเต€เดชเดจเด™เตเด™เดณเต† เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเต เดชเดฑเดฏเต‡เดฃเตเดŸเดคเดพเดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เด—เตเดฐเดพเดซเดฟเด•เตโ€Œเดธเดฟเดจเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด†เดชเต‡เด•เตเดทเดฟเด• เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเตเด•เดณเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเดพเด‚ (เดตเดฟเตปเดกเต‹เดฏเตเดŸเต† / เด˜เดŸเด•เดคเตเดคเดฟเดจเตเดฑเต† เดฎเตเด•เดณเดฟเตฝ เด‡เดŸเดคเต เด•เต‹เดฃเดฟเตฝ เดจเดฟเดจเตเดจเต, เดฎเตเดดเตเดตเตป เดธเตโ€Œเด•เตเดฐเต€เดจเดฟเดฒเตเด‚ เด…เดฒเตเดฒ) - เด‡เดคเต เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดคเดฟเด•เดšเตเดšเตเด‚ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฃเต, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚ เดจเดฟเด™เตเด™เตพ เด…เดคเดฟเดจเตเดฑเต† เดจเต€เดณเด‚ / เดตเต€เดคเดฟ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ. เดฎเตเดดเตเดตเตป เด˜เดŸเด•เดตเตเด‚ (เด…เดชเตเดชเต‹เตพ เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเตโ€Œเด•เตเดฐเต€เตป เดฑเต†เดธเดฒเตเดฏเต‚เดทเดจเตเด•เตพ เด‰เดชเดฆเตเดฐเดตเดฟเด•เตเด•เดฟเดฒเตเดฒ).

เดฎเดฑเตเดฑเตŠเดฐเต เด“เดชเตเดทเตป: เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเดจเดพเดฏเดฟ เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตเดณเตเดณ เด’เดฐเต เดฎเต†เดทเต€เตป เดฎเดพเดคเตเดฐเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด• (เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เดฎเดฒเตเดฒ, เดšเดฟเดฒ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ เด‡เดคเต เดจเดฒเตเดฒเดคเดพเดฃเต).

เดฑเดซเดฑเตปเดธเต เด‡เดฎเต‡เดœเต เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตฝ

[+] เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚
[+-] เดคเดพเดฐเดคเดฎเตเดฏเต‡เดจ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฃเต (เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเต เดฐเต€เดคเดฟเดฏเต‡เด•เตเด•เดพเตพ เดฎเดฟเด•เดšเตเดšเดคเต), เดชเด•เตเดทเต‡ เด‡เดชเตเดชเต‹เดดเตเด‚ เดšเดฟเดฒ เดคเดจเตเดคเตเดฐเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต.
[-+] เดคเดพเดฐเดคเดฎเตเดฏเต‡เดจ เดชเดคเตเด•เตเด•เต†, เด•เดพเดฐเดฃเด‚ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตฝ เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ CPU เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต.
[-] เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดฑเต†เด•เตเด•เด—เตเดจเดฟเดทเตป (OCR), เดšเดŸเตเดŸเด‚ เดชเต‹เดฒเต†, เดšเต‹เดฆเตเดฏเดคเตเดคเดฟเดจเต เดชเตเดฑเดคเตเดคเดพเดฃเต => เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เดฒเดญเดฟเด•เตเด•เดฟเดฒเตเดฒ. เดŽเดจเดฟเด•เตเด•เดฑเดฟเดฏเดพเดตเตเดจเตเดจเดฟเดŸเดคเตเดคเต‹เดณเด‚, เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ OCR เดธเตŠเดฒเตเดฏเต‚เดทเดจเตเด•เตพ เด‡เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดœเต‹เดฒเดฟเด•เตพเด•เตเด•เต เดตเดณเดฐเต† เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดฒเตเดฒ, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เด…เดต เดตเตเดฏเดพเดชเด•เดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเดฟเดฒเตเดฒ (เด‡เดคเต เด‡เดคเดฟเดจเด•เด‚ เด…เด™เตเด™เดจเต†เดฏเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เดธเตเดตเดพเด—เดคเด‚).

เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ: เดธเดฟเด•เตเดฒเดฟ, เดฒเดพเด•เตเด•เดฟ (เดธเดฟเด•เตเดฒเดฟ-เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ, เดถเตเดฆเตเดงเดฎเดพเดฏ เดชเตˆเดคเตเดคเตบ), PyAutoGUI.

เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดค เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ

[+] เดเดฑเตเดฑเดตเตเด‚ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดฐเต€เดคเดฟ, เด•เดพเดฐเดฃเด‚ เดธเดฟเดธเตเดฑเตเดฑเดฎเต‹ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต‹ เดŽเด™เตเด™เดจเต† เดฑเต†เตปเดกเตผ เดšเต†เดฏเตโ€Œเดคเดพเดฒเตเด‚, เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดคเดฟเดฐเดฏเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.
[+] เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เดŽเด•เตโ€Œเดธเตโ€ŒเดŸเตเดฐเดพเด•เตโ€Œเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต => เดŸเต†เดธเตเดฑเตเดฑเต เดซเดฒเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต.
[+] เดšเดŸเตเดŸเด‚ เดชเต‹เดฒเต†, เดเดฑเตเดฑเดตเตเด‚ เดตเต‡เด—เดคเดฏเต‡เดฑเดฟเดฏเดคเต, เด•เดพเดฐเดฃเด‚ เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ CPU เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.
[-] เด’เดฐเต เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เดŸเต‚เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต: เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚ เดŽเดฒเตเดฒเดพ เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเตเด‚ เด’เดจเตเดจเต‹ เดฐเดฃเตเดŸเต‹ เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดค เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เดณเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. Windows/Linux/MacOS-เดจเต† TestComplete, UFT เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ Squish เดชเต‹เดฒเตเดณเตเดณ เดชเดฃเดฎเดŸเดšเตเดšเตเดณเตเดณเดต เด’เดดเดฟเด•เต† เดฎเดฑเตเดฑเดพเดฐเตเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.
[-] เด…เดคเตเดคเดฐเด‚ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดคเดคเตเดตเดคเตเดคเดฟเตฝ เดฒเดญเตเดฏเดฎเดฒเตเดฒ. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, VirtualBox-เดจเตเดณเตเดณเดฟเตฝ เดฒเต‹เดกเดฟเด‚เด—เต เดธเตเด•เตเดฐเต€เตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต - เด‡เดฎเต‡เดœเต เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตฝ เด‡เดฒเตเดฒเดพเดคเต† เด‡เดคเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ. เดŽเดจเตเดจเดพเตฝ เดชเดฒ เด•เตเดฒเดพเดธเดฟเด•เต เด•เต‡เดธเตเด•เดณเดฟเดฒเตเด‚, เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดค เดธเดฎเต€เดชเดจเด‚ เด‡เดชเตเดชเต‹เดดเตเด‚ เดฌเดพเดงเด•เดฎเดพเดฃเต. เด‡เดคเต เด•เต‚เดŸเตเดคเตฝ เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเตเด‚.

เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ: TestStack.White C#-เตฝ, Winium.Desktop C#-เตฝ (เดธเต†เดฒเดฟเดจเดฟเดฏเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเด‚), MS WinApp เดกเตเดฐเตˆเดตเตผ C#-เตฝ (Appium เด…เดจเตเดฏเต‹เดœเตเดฏเด‚), pywinauto, pyatom (LDTP เด…เดจเตเดฏเต‹เดœเตเดฏเด‚) เดชเตˆเดคเตเดคเตบ-เดฏเตเดเดŽ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป-เดซเต‹เตผ-เดตเดฟเตปเดกเต‹เดธเต, เดฑเต‹ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เดฑเต‚เดฌเดฟเดฏเดฟเตฝ, เดŽเตฝ.เดกเดฟ.เดŸเดฟ.เดชเดฟ (เดฒเดฟเดจเด•เตเดธเต เดกเต†เดธเตเด•เตเดŸเต‹เดชเตเดชเต เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต) เด…เดคเดฟเดจเตเดฑเต† เดตเดฟเตปเดกเต‹เดธเต เดชเดคเดฟเดชเตเดชเตเด‚ เด•เต‹เดฌเตเดฐ.

เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดคเดพ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เดเด• เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดŸเต‚เตพ (เด•เต‚เดŸเตเดคเตฝ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเตเดŸเต† เด’เดฐเต เด•เตเดŸเตเด‚เดฌเด‚) LDTP เด†เดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดคเต เดตเดณเดฐเต† เดœเดจเดชเตเดฐเดฟเดฏเดฎเดฒเตเดฒ. เดžเดพเตป เด‡เดคเต เดธเตเดตเดฏเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒ, เดชเด•เตเดทเต‡ เด…เดตเดฒเต‹เด•เดจเด™เตเด™เตพ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต, เด…เดคเดฟเดจเตเดฑเต† เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดเดฑเตเดฑเดตเตเด‚ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดฒเตเดฒ. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดซเต€เดกเตเดฌเดพเด•เตเด•เต เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เด…เดคเต เดชเด™เตเด•เดฟเดŸเตเด•.

เดŸเต†เดธเตเดฑเตเดฑเต เดฌเดพเด•เตเด•เตเดกเต‹เตผ (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‡เตปเดกเต‹เตผ เดฌเตˆเด•เตเด•เต)

เด•เตเดฐเต‹เดธเต-เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ, เดŸเต†เดธเตเดฑเตเดฑเดฌเดฟเดฒเดฟเดฑเตเดฑเดฟ เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผ เดคเดจเตเดจเต† เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด’เดฐเต เด†เดจเตเดคเดฐเดฟเด• เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด…เดตเตผ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เด’เดฐเต เดธเต‡เดตเดจ เดŸเดฟเดธเดฟเดชเดฟ เดธเต†เตผเดตเตผ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เด…เดคเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เด•เดฎเดพเตปเดกเตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต: เดŽเดจเตเดคเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเดฃเด‚, เดกเดพเดฑเตเดฑ เดŽเดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต เดฒเดญเดฟเด•เตเด•เตเด‚ เดฎเตเดคเดฒเดพเดฏเดต. เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฃเต, เดชเด•เตเดทเต‡ เดธเดพเตผเดตเดคเตเดฐเดฟเด•เดฎเดฒเตเดฒ.

เด…เดŸเดฟเดธเตเดฅเดพเดจ เดกเต†เดธเตเด•เตเดŸเต‹เดชเตเดชเต เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดค เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เตพ

เดจเดฒเตเดฒ เดชเดดเดฏ Win32 API

WPF-เดจเตเดฑเต† เดฑเดฟเดฒเต€เดธเดฟเดจเต เดฎเตเดฎเตเดชเต เดŽเดดเตเดคเดฟเดฏ เดฎเดฟเด•เตเด• เดตเดฟเตปเดกเต‹เดธเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเด‚ เดตเดฟเตปเดกเต‹เดธเต เดธเตเดฑเตเดฑเต‹เดฑเตเด‚ เด’เดฐเต เดคเดฐเดคเตเดคเดฟเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเตŠเดฐเต เดฐเต€เดคเดฟเดฏเดฟเตฝ Win32 API-เดฏเดฟเตฝ เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดคเดพเดฃเต. เด…เดคเดพเดฏเดคเต, MFC, WTL, C++ Builder, Delphi, VB6 - เดˆ เด‰เดชเด•เดฐเดฃเด™เตเด™เดณเต†เดฒเตเดฒเดพเด‚ Win32 API เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดตเดฟเตปเดกเต‹เดธเต เดซเต‹เดฎเตเด•เตพ เดชเต‹เดฒเตเด‚ เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ Win32 API เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต.

เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ: เด“เดŸเตเดŸเต‹เด‡เดฑเตเดฑเต (เดตเดฟเดฌเดฟเด•เตเด•เต เดธเดฎเดพเดจเดฎเดพเดฏเดคเต) เดชเตˆเดคเตเดคเตบ เดฑเดพเดชเตเดชเดฑเตเด‚ pautoit, เด“เดŸเตเดŸเต‹ เดนเต‹เดŸเตเดŸเตเด•เต€ (เดธเตเดตเดจเตเดคเด‚ เดญเดพเดท, เด’เดฐเต IDispatch COM เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด‰เดฃเตเดŸเต) pywinauto (เดชเตˆเดคเตเดคเตบ) เดฑเต‹ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป (เดฑเต‚เดฌเดฟ) win32-autogui (เดฑเต‚เดฌเดฟ).

เดฎเตˆเด•เตเดฐเต‹เดธเต‹เดซเตเดฑเตเดฑเต เดฏเตเด เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป

เดชเตเดฐเดงเดพเดจ เดจเต‡เดŸเตเดŸเด‚: MS UI เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เด…เดชเต‚เตผเดตเดฎเดพเดฏ เด’เดดเดฟเดตเดพเด•เตเด•เดฒเตเด•เดณเต‹เดŸเต† เดตเดฟเตปเดกเต‹เดธเดฟเดฒเต† เดญเต‚เดฐเดฟเดญเดพเด—เด‚ GUI เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเต†เดฏเตเด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เดชเตเดฐเดถเตเดจเด‚: Win32 API-เดฏเต†เด•เตเด•เดพเตพ เดชเด เดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เดคเตเดฐ เดŽเดณเตเดชเตเดชเดฎเดฒเตเดฒ. เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚, เด†เดฐเตเด‚ เด…เดคเดฟเดจเตเดฎเต‡เตฝ เดชเตŠเดคเดฟเด•เตพ เด‰เดฃเตเดŸเดพเด•เตเด•เดฟเดฒเตเดฒ.

เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เด‡เดคเต เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค COM เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เดณเตเดŸเต† เด’เดฐเต เด•เต‚เดŸเตเดŸเดฎเดพเดฃเต (เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ UIAutomationCore.dll), เด•เต‚เดŸเดพเดคเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด’เดฐเต .NET เดฑเดพเดชเตเดชเดฑเตเด‚ เด‰เดฃเตเดŸเต namespace System.Windows.Automation. เดตเดดเดฟเดฏเดฟเตฝ, เด‡เดคเดฟเดจเต เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดš เด’เดฐเต เดฌเด—เต เด‰เดณเตเดณเดคเดฟเดจเดพเตฝ เดšเดฟเดฒ UI เด˜เดŸเด•เด™เตเด™เตพ เดจเดทเตโ€ŒเดŸเดฎเดพเดฏเต‡เด•เตเด•เดพเด‚. เด…เดคเดฟเดจเดพเตฝ, UIAutomationCore.dll เดจเต‡เดฐเดฟเดŸเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต (เดจเดฟเด™เตเด™เตพ C#-เตฝ UiaComWrapper-เดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‡เดŸเตเดŸเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด‡เดคเต เด‡เดคเดพเดฃเต).

COM เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เดณเตเดŸเต† เดคเดฐเด™เตเด™เตพ:

(1) เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เด…เดŸเดฟเดธเตเดฅเดพเดจ - "เดŽเดฒเตเดฒเดพ เดคเดฟเดจเตเดฎเด•เดณเตเดŸเต†เดฏเตเด‚ เดฑเต‚เดŸเตเดŸเต". เดเดฑเตเดฑเดตเตเด‚ เดคเดพเดดเตเดจเตเดจ เดจเดฟเดฒ, เด’เดฐเดฟเด•เตเด•เดฒเตเด‚ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดธเต—เดนเตƒเดฆเดฎเดฒเตเดฒ.
(2) เดเดกเดฟเดธเตเดชเดพเดšเตเดšเตเด‚ เดกเต†เดฑเดฟเดตเต‡เดฑเตเดฑเต€เดตเตเด•เดณเตเด‚ (เด‰เดฆเดพ Excel.Application), เด‡เดคเต win32com.client เดชเดพเด•เตเด•เต‡เดœเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตˆเดคเตเดคเดฃเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ (pyWin32-เตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต). เดเดฑเตเดฑเดตเตเด‚ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดตเตเด‚ เดฎเดจเต‹เดนเดฐเดตเตเดฎเดพเดฏ เด“เดชเตเดทเตป.
(3) เด’เดฐเต เดฎเต‚เดจเตเดจเดพเด‚ เด•เด•เตเดทเดฟ เดชเตˆเดคเตเดคเตบ เดชเดพเด•เตเด•เต‡เดœเดฟเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เตพ เด•เต‹เด‚เดŸเตˆเดชเตเดชเตเด•เตพ.

เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ: TestStack.White C#-เตฝ, pywinauto 0.6.0+, Winium.Desktop C#-เตฝ, เดชเตˆเดคเตเดคเตบ-เดฏเตเดเดŽ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป-เดซเต‹เตผ-เดตเดฟเตปเดกเต‹เดธเต (UIAutomationCore.dll เดตเดดเดฟเดฏเตเดณเตเดณ C เดฑเดพเดชเตเดชเดฑเตเด•เดณเตเดŸเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เดตเต†เดณเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ) เดฑเต‹ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เดฑเต‚เดฌเดฟเดฏเดฟเตฝ.

เดŽเดŸเดฟ-เดŽเดธเตเดชเดฟเด

เดฒเดฟเดจเด•เตเดธเต เด•เตเดŸเตเด‚เดฌเดคเตเดคเดฟเดฒเต† เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เดŽเดฒเตเดฒเดพ เด…เด•เตเดทเด™เตเด™เดณเตเด‚ เดŽเด•เตเดธเต เดตเดฟเตปเดกเต‹ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดฒเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเตเดจ เดตเดธเตเดคเตเดค เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดŸเตเดŸเตเด‚ (เดซเต†เดกเต‹เดฑ 25-เตฝ, "เดŽเด•เตเดธเต" เดตเต†เดฏเตโ€Œเดฒเดพเตปเดกเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเดฟ), "เดŽเด•เตเดธเต" เดจเดฟเด™เตเด™เดณเต† เดŸเต‹เดชเตเดชเต เดฒเต†เดตเตฝ เดตเดฟเตปเดกเต‹เด•เดณเตเด‚ เดฎเต—เดธเตเด‚ เดฎเดพเดคเตเดฐเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด•เต€เดฌเต‹เตผเดกเต. เดฌเดŸเตเดŸเดฃเตเด•เตพ, เดฒเดฟเดธเตเดฑเตเดฑเต เดฌเต‹เด•เตเดธเตเด•เตพ เดคเตเดŸเด™เตเด™เดฟเดฏเดตเดฏเตเดŸเต† เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเต, AT-SPI เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเตเดฃเตเดŸเต. เดเดฑเตเดฑเดตเตเด‚ เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฏ เดตเดฟเตปเดกเต‹ เดฎเดพเดจเต‡เดœเตผเดฎเดพเตผเด•เตเด•เต AT-SPI เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟ เดกเต†เดฎเตบ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต, เด…เดคเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ เด’เดฐเต เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเดกเต GUI เดจเตฝเด•เตเดจเตเดจเต (เด•เตเดฑเดžเตเดžเดคเต Qt, GTK เดŽเดจเตเดจเดฟเดตเดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต).

เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ: pyatspi2.

pyatspi2, เดŽเดจเตเดฑเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, PyGObject เดชเต‹เดฒเตเดณเตเดณ เดจเดฟเดฐเดตเดงเดฟ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เดคเดจเตเดจเต† เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดกเตˆเดจเดพเดฎเดฟเด•เต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดพเดฏเดฟ เดฒเดญเตเดฏเดฎเดพเดฃเต libatspi.so. เด’เดฐเต เด‰เดฃเตเดŸเต เดฑเดซเดฑเตปเดธเต เดฎเดพเดจเตเดตเตฝ. pywinauto เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตเด•เดพเดฏเดฟ, AT-SPI เดชเดฟเดจเตเดคเตเดฃ เดˆ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดชเดฆเตเดงเดคเดฟเดฏเดฟเดŸเตเดจเตเดจเต: libatspi.so, ctypes เดฎเตŠเดกเตเดฏเต‚เตพ เดŽเดจเตเดจเดฟเดต เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†. เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเดคเดฟเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดฎเดพเดคเตเดฐเด‚ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เดชเตเดฐเดถเตเดจเดฎเตเดฃเตเดŸเต, เด•เดพเดฐเดฃเด‚ GTK+, Qt เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เต เด…เดต เด…เดฒเตเดชเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต. เดชเต‚เตผเดฃเตเดฃ เดฒเดฟเดจเด•เตเดธเต เดชเดฟเดจเตเดคเตเดฃเดฏเต‹เดŸเต† pywinauto 0.7.0 เดจเตเดฑเต† เดฑเดฟเดฒเต€เดธเต 2018 เดจเตเดฑเต† เด†เดฆเตเดฏ เดชเด•เตเดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เดพเด‚.

Apple เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดค API

MacOS-เดจเต เดธเตเดตเดจเตเดคเด‚ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เดญเดพเดทเดฏเตเดฃเตเดŸเต, AppleScript. เดชเตˆเดคเตเดคเดฃเดฟเตฝ เด‡เดคเตเดชเต‹เดฒเตŠเดจเตเดจเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดจเดฟเด™เตเด™เตพ ObjectiveC-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดซเด‚เด—เตเดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเต, MacOS 10.6-เตฝ, pyobjc เดชเดพเด•เตเด•เต‡เดœเต เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดค เดชเตˆเดคเตเดคเดฃเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต. pywinauto-เดฏเดฟเตฝ เดญเดพเดตเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตโ€Œเด•เตเด•เดพเดฏเดฟ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เดฒเดฟเดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเด‚ เด‡เดคเต เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเด‚.

เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ: เด†เดชเตเดชเดฟเตพ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดญเดพเดทเดฏเตเด•เตเด•เต เดชเตเดฑเดฎเต‡, เด‡เดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต ATOMac, aka pyatom. เด‡เดคเต เดŽเตฝโ€Œเดกเดฟโ€ŒเดŸเดฟโ€Œเดชเดฟเดฏเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจ เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด†เดฃเต, เดชเด•เตเดทเต‡ เด’เดฐเต เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตเดŸ เดฒเตˆเดฌเตเดฐเดฑเดฟ เด•เต‚เดŸเดฟเดฏเดพเดฃเต. เด…เดคเดฟเดจเตเดฃเตเดŸเต macO-เด•เดณเดฟเดฒเต† iTunes เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚, เดŽเดจเตเดฑเต† เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟ เดŽเดดเตเดคเดฟเดฏเดคเต. เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เด’เดฐเต เดชเตเดฐเดถเตเดจเดฎเตเดฃเตเดŸเต: เดซเตเดฒเต†เด•เตเดธเดฟเดฌเดฟเตพ เดŸเตˆเดฎเดฟเด‚เด—เตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ (เดฐเต€เดคเดฟเด•เตพ waitFor*). เดŽเดจเตเดจเดพเตฝ เดฎเตŠเดคเตเดคเดคเตเดคเดฟเตฝ, เด’เดฐเต เดฎเต‹เดถเด‚ เด•เดพเดฐเตเดฏเดฎเดฒเตเดฒ.

Pywinauto เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเด™เตเด™เดจเต† เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚

เด’เดฐเต GUI เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเต เด‡เตปเดธเตโ€Œเดชเต†เด•เตเดŸเตผ (เดธเตโ€Œเดชเตˆ เดŸเต‚เตพ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเดคเต) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดตเดฏเด‚ เด†เดฏเตเดงเดฎเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เด†เดฆเตเดฏเดชเดŸเดฟ. เด‰เดณเตเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเด เดฟเด•เตเด•เดพเตป เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚: เดฎเต‚เดฒเด•เด™เตเด™เดณเตเดŸเต† เดถเตเดฐเต‡เดฃเดฟ เดŽเด™เตเด™เดจเต† เด˜เดŸเดจเดพเดชเดฐเดฎเดพเดฃเต, เดŽเดจเตเดคเตŠเด•เตเด•เต† เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เดฒเดญเตเดฏเดฎเดพเดฃเต. เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดถเดธเตเดคเดฎเดพเดฏ เดธเตˆเดฑเตเดฑเต เด‡เตปเดธเตเดชเต†เด•เตเดŸเตผเดฎเดพเตผ:

  • เดธเตเดชเตˆ++ - เดŽเด•เตเดธเตเดชเตเดฐเดธเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเดฑเตเดฑเดฟ เดชเดคเดฟเดชเตเดชเต เด‰เตพเดชเตเดชเต†เดŸเต†, เดตเดฟเดทเตเดตเตฝ เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต. Win32 API เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด…เดฆเตเดฆเต‡เดนเดคเตเดคเดฟเดจเตเดฑเต† เด•เตเดฒเต‹เดฃเตเด‚ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต เด“เดŸเตเดŸเต‹เด‡เดฑเตเดฑเต เดตเดฟเตปเดกเต‹ เดตเดฟเดตเดฐเด‚.
  • Inspect.exe - Windows SDK-เดฏเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เดจเดฟเด™เตเด™เตพ เด‡เดคเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, 64-เดฌเดฟเดฑเตเดฑเต เดตเดฟเตปเดกเต‹เดธเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเต เดซเต‹เตพเดกเดฑเดฟเตฝ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ C:Program Files (x86)Windows Kits<winver>binx64. เด‡เตปเดธเตเดชเต†เด•เตเดŸเดฑเดฟเตฝ เดคเดจเตเดจเต† เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดฎเต‹เดกเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เดฏเตเด เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เดŽเด‚เดŽเดธเต เดŽเดŽเดฏเตเด•เตเด•เต เดชเด•เดฐเด‚ (เดธเดœเต€เดต เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดค, เดฏเตเด เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเตเดฑเต† เดชเต‚เตผเดตเตเดตเดฟเด•เตป).

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดš เดถเต‡เดทเด‚, เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดฌเดพเด•เตเด•เต†เตปเดกเต เดžเด™เตเด™เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเต. เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดฌเดพเด•เตเด•เต†เตปเดกเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดพเตฝ เดฎเดคเดฟ.

  • เดฌเดพเด•เตเด•เต†เตปเดกเต=โ€win32โ€ณ โ€” เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, MFC, WTL, VB6, เดฎเดฑเตเดฑเต เดฒเต†เด—เดธเดฟ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดจเตเดจเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.
  • เดฌเดพเด•เตเด•เต†เตปเดกเต=โ€uiaโ€ - MS UI เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเดพเดฏเตเดณเตเดณ เดชเตเดคเดฟเดฏ เดฌเดพเด•เตเด•เต†เตปเดกเต: WPF, WinForms เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดจเตเดจเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต; เดกเต†เตฝเดซเดฟ, เดตเดฟเตปเดกเต‹เดธเต เดธเตเดฑเตเดฑเต‹เตผ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เตเด‚ เดจเดฒเตเดฒเดคเดพเดฃเต; Qt5, เดšเดฟเดฒ เดœเดพเดต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เดชเตŠเดคเตเดตเต‡, Inspect.exe เดฎเต‚เดฒเด•เด™เตเด™เดณเตเด‚ เด…เดตเดฏเตเดŸเต† เด—เตเดฃเด™เตเด™เดณเตเด‚ เด•เดพเดฃเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดˆ เดฌเดพเด•เตเด•เต†เตปเดกเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต. เดคเดคเตเดตเดคเตเดคเดฟเตฝ, เดฎเดฟเด•เตเด• เดฌเตเดฐเต—เดธเดฑเตเด•เดณเตเด‚ เดฏเตเด เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต (เดฎเต‹เดธเดฟเดฒเตเดฒ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ Chrome-เดจเต เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เด•เต€ เดจเตฝเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. --force-renderer-accessibilityInspect.exe-เดฒเต† เดชเต‡เดœเตเด•เดณเดฟเดฒเต† เด˜เดŸเด•เด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเต). เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดˆ เดฎเต‡เด–เดฒเดฏเดฟเตฝ เดธเต†เดฒเดฟเดจเดฟเดฏเดตเตเดฎเดพเดฏเตเดณเตเดณ เดฎเดคเตเดธเดฐเด‚ เดธเดพเดงเตเดฏเดฎเดฒเตเดฒ. เดฌเตเดฐเต—เดธเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดฎเดฑเตเดฑเตŠเดฐเต เดฎเดพเตผเด—เด‚ (เด’เดฐเต เด•เตเดฐเต‹เดธเต-เดชเตเดฐเตŠเดกเด•เตเดฑเตเดฑเต เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดจเต เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฏเต‡เด•เตเด•เดพเด‚).

เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเตเดณเตเดณ เดŽเตปเดŸเตเดฐเดฟ เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดตเดฟเดชเตเดฒเดฎเดพเดฏเดฟ เด—เดตเต‡เดทเดฃเด‚ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เด’เดฐเต เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเต เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดšเต เด…เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเต‹ เด‡เดคเดฟเดจเด•เด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด’เดจเตเดจเดฟเดฒเต‡เด•เตเด•เต เด…เดฑเตเดฑเดพเดšเตเดšเตเดšเต†เดฏเตเดฏเดพเดจเต‹ เดธเดฎเดฏเดฎเดพเดฏเดฟ. เด‡เดคเต เด’เดฐเต เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด•เตเดฒเดพเดธเดฟเดจเตเดฑเต† เด’เดฐเต เด•เตเดฒเต‹เตบ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ subprocess.Popen, เด…เดคเดพเดฏเดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเต†เดฏเตเด‚ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเดŸเต† เด…เดคเดฟเดฐเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจ เด’เดฐเต เด‡เตปเดชเตเดŸเตเดŸเต เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต. เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดจเดฟเดฐเดตเดงเดฟ เดธเดจเตเดฆเตผเดญเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เด‡เดคเต เดตเดณเดฐเต† เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดต เดคเตŠเดŸเดพเตป เดจเดฟเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.

from pywinauto.application import Application
app = Application(backend="uia").start('notepad.exe')

# ะžะฟะธัˆะตะผ ะพะบะฝะพ, ะบะพั‚ะพั€ะพะต ั…ะพั‚ะธะผ ะฝะฐะนั‚ะธ ะฒ ะฟั€ะพั†ะตััะต Notepad.exe
dlg_spec = app.UntitledNotepad
# ะถะดะตะผ ะฟะพะบะฐ ะพะบะฝะพ ั€ะตะฐะปัŒะฝะพ ะฟะพัะฒะธั‚ัั
actionable_dlg = dlg_spec.wait('visible')

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต‡เดธเดฎเดฏเด‚ เดจเดฟเดฐเดตเดงเดฟ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดˆ เด•เตเดฒเดพเดธเต เดจเดฟเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚ Desktop. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, Win10-เดฒเต† เด’เดฐเต เด•เดพเตฝเด•เตเด•เตเดฒเต‡เดฑเตเดฑเดฑเดฟเตฝ, เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต† เดถเตเดฐเต‡เดฃเดฟ เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เดณเดฟเตฝ เดตเตเดฏเดพเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ calc.exe). เด…เดคเดฟเดจเดพเตฝ เด’เดฐเต เดตเดธเตเดคเตเดตเตเด‚ เด‡เดฒเตเดฒ Desktop เดชเต‹เดฐเดพ.

from subprocess import Popen
from pywinauto import Desktop

Popen('calc.exe', shell=True)
dlg = Desktop(backend="uia").Calculator
dlg.wait('visible')

เดฑเต‚เดŸเตเดŸเต เด’เดฌเตเดœเด•เตเดฑเตเดฑเต (Application เด…เดฅเดตเดพ Desktop) เดจเดฟเด™เตเด™เตพ เดฌเดพเด•เตเด•เต†เตปเดกเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸ เด’เดฐเต‡เดฏเตŠเดฐเต เดธเตเดฅเดฒเดฎเดพเดฃเต. เดฎเดฑเตเดฑเต†เดฒเตเดฒเดพเด‚ "เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเตป-> เดฑเดพเดชเตเดชเตผ" เดŽเดจเตเดจ เด†เดถเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดธเตเดคเดพเดฐเตเดฏเดฎเดพเดฏเดฟ เดตเต€เดดเตเดจเตเดจเต, เด…เดคเต เดชเดฟเดจเตเดจเต€เดŸเต เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚.

เดตเดฟเตปเดกเต‹/เดŽเดฒเดฎเต†เดจเตเดฑเต เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ

เด‡เดคเดพเดฃเต pywinauto เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเดงเดพเดจ เด†เดถเดฏเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดตเดฟเตปเดกเต‹/เด˜เดŸเด•เด‚ เดเด•เดฆเต‡เดถเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเด‚, เด…เดคเต เด‡เดคเตเดตเดฐเต† เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเดฒเตเด‚ เด‡เดคเดฟเดจเด•เด‚ เด…เดŸเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚. เดตเดฟเตปเดกเต‹ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเตป (เดตเดธเตเดคเต เดตเดฟเตปเดกเต‹ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเตป) เด’เดฐเต เดฏเดฅเดพเตผเดคเตเดฅ เดตเดฟเตปเดกเต‹ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด˜เดŸเด•เดคเตเดคเดฟเดจเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฎเดพเดจเดฆเดฃเตเดกเด‚ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเตปเดกเต‹ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚:

>>> dlg_spec = app.window(title='Untitled - Notepad')

>>> dlg_spec
<pywinauto.application.WindowSpecification object at 0x0568B790>

>>> dlg_spec.wrapper_object()
<pywinauto.controls.win32_controls.DialogWrapper object at 0x05639B70>

เดฐเต€เดคเดฟ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดตเดฟเตปเดกเต‹ เดคเดฟเดฐเดฏเตฝ เดคเดจเตเดจเต† เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต .wrapper_object(). เด‡เดคเต เด’เดฐเต เดฏเดฅเดพเตผเดคเตเดฅ เดตเดฟเตปเดกเต‹/เด˜เดŸเด•เด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดคเตเดฐเต‹เด•เตพเด•เตเด•เดพเดฏเดฟ เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค "เดฑเดพเดชเตเดชเตผ" เดจเตฝเด•เตเดจเตเดจเต ElementNotFoundError (เดšเดฟเดฒเดชเตเดชเต‹เตพ ElementAmbiguousError, เดจเดฟเดฐเดตเดงเดฟ เด˜เดŸเด•เด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดพเตฝ, เด…เดคเดพเดฏเดคเต, เดจเดฟเด™เตเด™เตพ เดคเดฟเดฐเดฏเตฝ เดฎเดพเดจเดฆเดฃเตเดกเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต). เดˆ "เดฑเดพเดชเตเดชเตผ" เด‡เดคเดฟเดจเด•เด‚ เด’เดฐเต เด˜เดŸเด•เด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดšเดฟเดฒ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเตเด‚ เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเตเด‚ เด…เดฑเดฟเดฏเดพเด‚.

เดชเตˆเดคเตเดคเดฃเดฟเดจเต เด•เต‹เตพ เดฎเดฑเดฏเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ .wrapper_object(), เด…เดคเดฟเดจเดพเตฝ เด…เดจเตเดคเดฟเดฎ เด•เต‹เดกเต เดšเต†เดฑเตเดคเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต. เดกเต€เดฌเด—เตเด—เดฟเด‚เด—เต เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดฎเดพเดคเตเดฐเด‚ เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด…เดŸเตเดคเตเดค เดฐเดฃเตเดŸเต เดตเดฐเดฟเด•เดณเตเด‚ เด’เดฐเต‡ เด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

dlg_spec.wrapper_object().minimize() # debugging
dlg_spec.minimize() # production

เด’เดฐเต เดตเดฟเตปเดกเต‹ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เดจเดฟเดฐเดตเดงเดฟ เดคเดฟเดฐเดฏเตฝ เดฎเดพเดจเดฆเดฃเตเดกเด™เตเด™เดณเตเดฃเตเดŸเต. เด‡เดตเดฟเดŸเต† เดเดคเดพเดจเตเด‚ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดฎเดพเดคเตเดฐเด‚:

# ะผะพะณัƒั‚ ะธะผะตั‚ัŒ ะฝะตัะบะพะปัŒะบะพ ัƒั€ะพะฒะฝะตะน
app.window(title_re='.* - Notepad$').window(class_name='Edit')

# ะผะพะถะฝะพ ะบะพะผะฑะธะฝะธั€ะพะฒะฐั‚ัŒ ะบั€ะธั‚ะตั€ะธะธ (ะบะฐะบ AND) ะธ ะฝะต ะพะณั€ะฐะฝะธั‡ะธะฒะฐั‚ัŒัั ะพะดะฝะธะผ ะฟั€ะพั†ะตััะพะผ ะฟั€ะธะปะพะถะตะฝะธั
dlg = Desktop(backend="uia").Calculator
dlg.window(auto_id='num8Button', control_type='Button')

เดธเดพเดงเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดฎเดพเดจเดฆเดฃเตเดกเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดซเด‚เด—เตเดทเตป เดกเต‹เด•เตโ€Œเดธเดฟเตฝ เด‰เดฃเตเดŸเต pywinauto.findwindows.find_elements(...).

เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด‚ เด•เต€เดฏเตเด‚ เดตเดดเดฟเดฏเตเดณเตเดณ เด†เด•เตโ€Œเดธเดธเตเดธเดฟเดจเตเดฑเต† เดฎเดพเดจเตเดคเตเดฐเดฟเด•เดค

เดตเดฟเตปเดกเต‹ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เตพ เดšเดฒเดจเดพเดคเตเดฎเด•เดฎเดพเดฏเดฟ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตเดจเตเดจเดคเตเด‚ เดชเตˆเดคเตเดคเตบ เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจเต (เด†เดจเตเดคเดฐเดฟเด•เดฎเดพเดฏเดฟ, เดฐเต€เดคเดฟ เด…เดธเดพเดงเตเดตเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต __getattribute__). เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดฑเต† เดชเต‡เดฐเดฟเดฒเตเดณเตเดณ เด…เดคเต‡ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เตพ เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต เดจเดพเดฎเดคเตเดคเดฟเดฒเตเด‚ เดเตผเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต (เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเตเด•เดณเต‹ เด•เต‹เดฎเด•เดณเต‹ เดฎเดฑเตเดฑเต เดชเตเดฐเดคเตเดฏเต‡เด• เดชเตเดฐเดคเต€เด•เด™เตเด™เดณเต‹ เดšเต‡เตผเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ). เดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เด…เด•เตเดทเดฐเดคเตเดคเต†เดฑเตเดฑเตเด•เตพเด•เตเด•เตเด‚ เดšเต†เดฑเดฟเดฏ เดตเตเดฏเดคเดฟเดฏเดพเดจเด™เตเด™เตพเด•เตเด•เตเด‚ เดชเตเดฐเดคเดฟเดฐเต‹เดงเดถเต‡เดทเดฟเดฏเตเดณเตเดณ "เดฎเดฟเด•เดšเตเดš เดชเตŠเดฐเตเดคเตเดคเด‚" เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจ เดคเดฟเดฐเดฏเตฝ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ pywinauto เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

app.UntitledNotepad
# ั‚ะพ ะถะต ัะฐะผะพะต, ั‡ั‚ะพ
app.window(best_match='UntitledNotepad')

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดชเตเดชเต‹เดดเตเด‚ เดฏเต‚เดฃเดฟเด•เต‹เดกเต เดธเตโ€ŒเดŸเตเดฐเดฟเด‚เด—เตเด•เตพ เด†เดตเดถเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฑเดทเตเดฏเตป เดญเดพเดทเดฏเตโ€Œเด•เตเด•เต), เดธเตโ€Œเดชเต†เดฏเตโ€Œเดธเตเด•เตพ เดฎเตเดคเดฒเดพเดฏเดต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เต€ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚ (เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดจเดฟเด˜เดฃเตเดŸเต เดชเต‹เดฒเต†):

app['Untitled - Notepad']
# ั‚ะพ ะถะต ัะฐะผะพะต, ั‡ั‚ะพ
app.window(best_match='Untitled - Notepad')

เดฎเดพเดจเตเดคเตเดฐเดฟเด• เดจเดพเดฎเด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เด…เดžเตเดšเต เดจเดฟเดฏเดฎเด™เตเด™เตพ

เดธเดพเดงเดพเดฐเดฃ เดฎเดพเดœเดฟเด•เต เดชเต‡เดฐเตเด•เตพ เดŽเด™เตเด™เดจเต† เด•เดฃเตเดŸเต†เดคเตเดคเดพเด‚? เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เด˜เดŸเด•เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด…เดธเตˆเตป เดšเต†เดฏเตเดคเดต. เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฏ เด’เดฐเต เดชเต‡เดฐเต เดจเดฟเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดพเตฝ, เด˜เดŸเด•เด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเด‚.

  1. เดถเต€เตผเดทเด•เด‚ เดชเตเดฐเด•เดพเดฐเด‚ (เดŸเต†เด•เตโ€Œเดธเตเดฑเตเดฑเต, เดชเต‡เดฐเต): app.Properties.OK.click()
  2. เดตเดพเดšเด•เด‚ เดตเดดเดฟเดฏเตเด‚ เดŽเดฒเดฎเต†เดจเตเดฑเต เดคเดฐเด‚ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต: app.Properties.OKButton.click()
  3. เดคเดฐเดตเตเด‚ เดจเดฎเตเดชเดฑเตเด‚ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต: app.Properties.Button3.click() (เดชเต‡เดฐเตเด•เตพ Button0 ะธ Button1 เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏ เด†เดฆเตเดฏเดคเตเดคเต† เดฎเต‚เดฒเด•เดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, Button2 - เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต‡เดคเดฟเดฒเต‡เด•เตเด•เต, เดคเตเดŸเตผเดจเตเดจเต เด•เตเดฐเดฎเดคเตเดคเดฟเตฝ - เดšเดฐเดฟเดคเตเดฐเดชเดฐเดฎเดพเดฏเดฟ เด‡เดคเต เดธเด‚เดญเดตเดฟเดšเตเดšเดคเต เด‡เด™เตเด™เดจเต†เดฏเดพเดฃเต)
  4. เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต (เด‡เดŸเดคเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเตเด•เดณเดฟเตฝ) เด•เต‚เดŸเดพเดคเต† เดคเดฐเด‚ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต: app.OpenDialog.FileNameEdit.set_text("") (เดกเตˆเดจเดพเดฎเดฟเด•เต เดŸเต†เด•เตเดธเตเดฑเตเดฑเตเดณเตเดณ เด˜เดŸเด•เด™เตเด™เตพเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฃเต)
  5. เดŸเตˆเดชเตเดชเตเด‚ เด‰เดณเตเดณเดฟเดฒเต† เดตเดพเดšเด•เดตเตเด‚ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต: app.Properties.TabControlSharing.select("General")

เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดฐเดฃเตเดŸเต‹ เดฎเต‚เดจเตเดจเต‹ เดจเดฟเดฏเดฎเด™เตเด™เตพ เด’เดฐเต‡ เดธเดฎเดฏเด‚ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดชเต‚เตผเดตเตเดตเดฎเดพเดฏเดฟ เด•เต‚เดŸเตเดคเตฝ. เด“เดฐเต‹ เด˜เดŸเด•เดคเตเดคเดฟเดจเตเด‚ เดเดคเตŠเด•เตเด•เต† เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดชเต‡เดฐเตเด•เตพ เดฒเดญเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ print_control_identifiers(). เด‡เดคเดฟเดจเต เดธเตโ€Œเด•เตเดฐเต€เดจเดฟเดฒเต‡เด•เตเด•เตเด‚ เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเด‚ เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดŸเตเดฐเต€ เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚. เด“เดฐเต‹ เดฎเต‚เดฒเด•เดคเตเดคเดฟเดจเตเด‚, เด…เดคเดฟเดจเตเดฑเต† เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฎเดพเดœเดฟเด•เต เดชเต‡เดฐเตเด•เตพ เด…เดšเตเดšเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต เดšเตˆเตฝเดกเต เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต† เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดชเด•เตผเดคเตเดคเดฟ เด’เดŸเตเดŸเดฟเด•เตเด•เดพเด‚. เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดฒเต† เดซเดฒเด‚ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

app.Properties.child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13087", control_type="Edit")

เดฎเต‚เดฒเด•เด™เตเด™เดณเตเดŸเต† เดตเตƒเด•เตเดทเด‚ เดคเดจเตเดจเต† เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด’เดฐเต เดตเดฒเดฟเดฏ เดชเดพเดฆเดฐเด•เตเดทเดฏเดพเดฃเต.

>>> app.Properties.print_control_identifiers()

Control Identifiers:

Dialog - 'Windows NT Properties'    (L688, T518, R1065, B1006)
[u'Windows NT PropertiesDialog', u'Dialog', u'Windows NT Properties']
child_window(data-gt-translate-attributes='["title"]' title="Windows NT Properties", control_type="Window")
   |
   | Image - ''    (L717, T589, R749, B622)
   | [u'', u'0', u'Image1', u'Image0', 'Image', u'1']
   | child_window(auto_id="13057", control_type="Image")
   |
   | Image - ''    (L717, T630, R1035, B632)
   | ['Image2', u'2']
   | child_window(auto_id="13095", control_type="Image")
   |
   | Edit - 'Folder name:'    (L790, T596, R1036, B619)
   | [u'3', 'Edit', u'Edit1', u'Edit0']
   | child_window(data-gt-translate-attributes='["title"]' title="Folder name:", auto_id="13156", control_type="Edit")
   |
   | Static - 'Type:'    (L717, T643, R780, B658)
   | [u'Type:Static', u'Static', u'Static1', u'Static0', u'Type:']
   | child_window(data-gt-translate-attributes='["title"]' title="Type:", auto_id="13080", control_type="Text")
   |
   | Edit - 'Type:'    (L790, T643, R1036, B666)
   | [u'4', 'Edit2', u'Type:Edit']
   | child_window(data-gt-translate-attributes='["title"]' title="Type:", auto_id="13059", control_type="Edit")
   |
   | Static - 'Location:'    (L717, T669, R780, B684)
   | [u'Location:Static', u'Location:', u'Static2']
   | child_window(data-gt-translate-attributes='["title"]' title="Location:", auto_id="13089", control_type="Text")
   |
   | Edit - 'Location:'    (L790, T669, R1036, B692)
   | ['Edit3', u'Location:Edit', u'5']
   | child_window(data-gt-translate-attributes='["title"]' title="Location:", auto_id="13065", control_type="Edit")
   |
   | Static - 'Size:'    (L717, T695, R780, B710)
   | [u'Size:Static', u'Size:', u'Static3']
   | child_window(data-gt-translate-attributes='["title"]' title="Size:", auto_id="13081", control_type="Text")
   |
   | Edit - 'Size:'    (L790, T695, R1036, B718)
   | ['Edit4', u'6', u'Size:Edit']
   | child_window(data-gt-translate-attributes='["title"]' title="Size:", auto_id="13064", control_type="Edit")
   |
   | Static - 'Size on disk:'    (L717, T721, R780, B736)
   | [u'Size on disk:', u'Size on disk:Static', u'Static4']
   | child_window(data-gt-translate-attributes='["title"]' title="Size on disk:", auto_id="13107", control_type="Text")
   |
   | Edit - 'Size on disk:'    (L790, T721, R1036, B744)
   | ['Edit5', u'7', u'Size on disk:Edit']
   | child_window(data-gt-translate-attributes='["title"]' title="Size on disk:", auto_id="13106", control_type="Edit")
   |
   | Static - 'Contains:'    (L717, T747, R780, B762)
   | [u'Contains:1', u'Contains:0', u'Contains:Static', u'Static5', u'Contains:']
   | child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13088", control_type="Text")
   |
   | Edit - 'Contains:'    (L790, T747, R1036, B770)
   | [u'8', 'Edit6', u'Contains:Edit']
   | child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13087", control_type="Edit")
   |
   | Image - 'Contains:'    (L717, T773, R1035, B775)
   | [u'Contains:Image', 'Image3', u'Contains:2']
   | child_window(data-gt-translate-attributes='["title"]' title="Contains:", auto_id="13096", control_type="Image")
   |
   | Static - 'Created:'    (L717, T786, R780, B801)
   | [u'Created:', u'Created:Static', u'Static6', u'Created:1', u'Created:0']
   | child_window(data-gt-translate-attributes='["title"]' title="Created:", auto_id="13092", control_type="Text")
   |
   | Edit - 'Created:'    (L790, T786, R1036, B809)
   | [u'Created:Edit', 'Edit7', u'9']
   | child_window(data-gt-translate-attributes='["title"]' title="Created:", auto_id="13072", control_type="Edit")
   |
   | Image - 'Created:'    (L717, T812, R1035, B814)
   | [u'Created:Image', 'Image4', u'Created:2']
   | child_window(data-gt-translate-attributes='["title"]' title="Created:", auto_id="13097", control_type="Image")
   |
   | Static - 'Attributes:'    (L717, T825, R780, B840)
   | [u'Attributes:Static', u'Static7', u'Attributes:']
   | child_window(data-gt-translate-attributes='["title"]' title="Attributes:", auto_id="13091", control_type="Text")
   |
   | CheckBox - 'Read-only (Only applies to files in folder)'    (L790, T825, R1035, B841)
   | [u'CheckBox0', u'CheckBox1', 'CheckBox', u'Read-only (Only applies to files in folder)CheckBox', u'Read-only (Only applies to files in folder)']
   | child_window(data-gt-translate-attributes='["title"]' title="Read-only (Only applies to files in folder)", auto_id="13075", control_type="CheckBox")
   |
   | CheckBox - 'Hidden'    (L790, T848, R865, B864)
   | ['CheckBox2', u'HiddenCheckBox', u'Hidden']
   | child_window(data-gt-translate-attributes='["title"]' title="Hidden", auto_id="13076", control_type="CheckBox")
   |
   | Button - 'Advanced...'    (L930, T845, R1035, B868)
   | [u'Advanced...', u'Advanced...Button', 'Button', u'Button1', u'Button0']
   | child_window(data-gt-translate-attributes='["title"]' title="Advanced...", auto_id="13154", control_type="Button")
   |
   | Button - 'OK'    (L814, T968, R889, B991)
   | ['Button2', u'OK', u'OKButton']
   | child_window(data-gt-translate-attributes='["title"]' title="OK", auto_id="1", control_type="Button")
   |
   | Button - 'Cancel'    (L895, T968, R970, B991)
   | ['Button3', u'CancelButton', u'Cancel']
   | child_window(data-gt-translate-attributes='["title"]' title="Cancel", auto_id="2", control_type="Button")
   |
   | Button - 'Apply'    (L976, T968, R1051, B991)
   | ['Button4', u'ApplyButton', u'Apply']
   | child_window(data-gt-translate-attributes='["title"]' title="Apply", auto_id="12321", control_type="Button")
   |
   | TabControl - ''    (L702, T556, R1051, B962)
   | [u'10', u'TabControlSharing', u'TabControlPrevious Versions', u'TabControlSecurity', u'TabControl', u'TabControlCustomize']
   | child_window(auto_id="12320", control_type="Tab")
   |    |
   |    | TabItem - 'General'    (L704, T558, R753, B576)
   |    | [u'GeneralTabItem', 'TabItem', u'General', u'TabItem0', u'TabItem1']
   |    | child_window(data-gt-translate-attributes='["title"]' title="General", control_type="TabItem")
   |    |
   |    | TabItem - 'Sharing'    (L753, T558, R801, B576)
   |    | [u'Sharing', u'SharingTabItem', 'TabItem2']
   |    | child_window(data-gt-translate-attributes='["title"]' title="Sharing", control_type="TabItem")
   |    |
   |    | TabItem - 'Security'    (L801, T558, R851, B576)
   |    | [u'Security', 'TabItem3', u'SecurityTabItem']
   |    | child_window(data-gt-translate-attributes='["title"]' title="Security", control_type="TabItem")
   |    |
   |    | TabItem - 'Previous Versions'    (L851, T558, R947, B576)
   |    | [u'Previous VersionsTabItem', u'Previous Versions', 'TabItem4']
   |    | child_window(data-gt-translate-attributes='["title"]' title="Previous Versions", control_type="TabItem")
   |    |
   |    | TabItem - 'Customize'    (L947, T558, R1007, B576)
   |    | [u'CustomizeTabItem', 'TabItem5', u'Customize']
   |    | child_window(data-gt-translate-attributes='["title"]' title="Customize", control_type="TabItem")
   |
   | TitleBar - 'None'    (L712, T521, R1057, B549)
   | ['TitleBar', u'11']
   |    |
   |    | Menu - 'System'    (L696, T526, R718, B548)
   |    | [u'System0', u'System', u'System1', u'Menu', u'SystemMenu']
   |    | child_window(data-gt-translate-attributes='["title"]' title="System", auto_id="MenuBar", control_type="MenuBar")
   |    |    |
   |    |    | MenuItem - 'System'    (L696, T526, R718, B548)
   |    |    | [u'System2', u'MenuItem', u'SystemMenuItem']
   |    |    | child_window(data-gt-translate-attributes='["title"]' title="System", control_type="MenuItem")
   |    |
   |    | Button - 'Close'    (L1024, T519, R1058, B549)
   |    | [u'CloseButton', u'Close', 'Button5']
   |    | child_window(data-gt-translate-attributes='["title"]' title="Close", control_type="Button")

เดšเดฟเดฒ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ, เดฎเตเดดเตเดตเตป เดŸเตเดฐเต€เดฏเตเด‚ เดชเตเดฐเดฟเดจเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดฎเดจเตเดฆเด—เดคเดฟเดฏเดฟเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, iTunes-เตฝ เด’เดฐเต เดŸเดพเดฌเดฟเตฝ เดฎเต‚เดตเดพเดฏเดฟเดฐเดคเตเดคเต‹เดณเด‚ เด˜เดŸเด•เด™เตเด™เตพ เด‰เดฃเตเดŸเต!), เดŽเดจเตเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด“เดชเตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ depth (เด†เดดเด‚): depth=1 - เดฎเต‚เดฒเด•เด‚ เดคเดจเตเดจเต†, depth=2 - เด‰เดŸเดจเดŸเดฟเดฏเตเดณเตเดณ เด•เตเดŸเตเดŸเดฟเด•เตพ เดฎเดพเดคเตเดฐเด‚, เดคเตเดŸเด™เตเด™เดฟเดฏเดต. เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเตเด‚ เด‡เดคเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเด‚ child_window.

เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ

เดžเด™เตเด™เตพ เดจเดฟเดฐเดจเตเดคเดฐเด‚ เดจเดฟเดฑเดฏเตเด•เตเด•เตเดจเตเดจเต เดถเต‡เด–เดฐเดคเตเดคเดฟเดฒเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด•. เด…เดŸเตเดคเตเดคเดฟเดŸเต†เดฏเตเดณเตเดณเดตเดฏเดฟเตฝ, WireShark เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด…เดจเดฒเตˆเดธเดฑเดฟเดจเตเดฑเต† เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต (เด‡เดคเต เด’เดฐเต Qt5 เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดฎเดฟเด•เดšเตเดš เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฃเต; เด’เดฐเต GUI เด‡เดฒเตเดฒเดพเดคเต† เดˆ เดŸเดพเดธเตโ€Œเด•เตเด•เต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเดฒเตเด‚, เด•เดพเดฐเดฃเด‚ เด‰เดฃเตเดŸเต scapy.Sniffer เดชเตˆเดคเตเดคเตบ เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเด•เดพเดชเตเดชเดฟ). เดฑเดฟเดฌเตบ เดŸเต‚เตพเดฌเดพเดฑเดฟเดจเตŠเดชเตเดชเด‚ เดŽเด‚เดŽเดธเต เดชเต†เดฏเดฟเดจเตเดฑเต เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเดตเตเดฎเตเดฃเตเดŸเต.

เดŽเดจเตเดฑเต† เด’เดฐเต เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟ เดŽเดดเตเดคเดฟเดฏ เดฎเดฑเตเดฑเตŠเดฐเต เดฎเดฟเด•เดšเตเดš เด‰เดฆเดพเดนเดฐเดฃเด‚: explorer.exe-เตฝ เดจเดฟเดจเตเดจเต Google เดกเตเดฐเตˆเดตเดฟเดจเดพเดฏเตเดณเตเดณ Chrome เดชเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดซเดฏเตฝ เดตเดฒเดฟเดšเตเดšเดฟเดŸเตเดจเตเดจเต (เด…เดคเต เด•เตเดฑเดšเตเดšเต เด•เดดเดฟเดžเตเดžเต เดชเตเดฐเดงเดพเดจ เดถเต‡เด–เดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด™เตเด™เตเด‚).

เด•เต‚เดŸเดพเดคเต†, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด•เต€เดฌเต‹เตผเดกเต (เดนเต‹เดŸเตเดŸเต เด•เต€เด•เตพ), เดฎเต—เดธเต เด‡เดตเดจเตเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต‡เด•เตเด•เต เดธเดฌเตโ€Œเดธเตโ€Œเด•เตเดฐเตˆเดฌเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚:
hook_and_listen.py.

เด…เด‚เด—เต€เด•เดพเดฐเด™เตเด™เตพ

เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดจเดฟเดฐเดจเตเดคเดฐเด‚ เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดตเตผเด•เตเด•เต เดชเตเดฐเดคเตเดฏเต‡เด• เดจเดจเตเดฆเดฟ. เดŽเดจเดฟเด•เตเด•เตเด‚ เด’เดชเตเดชเด‚ เดตเดพเดฒเดจเตเดฑเตˆเตป เด‡เดคเตŠเดฐเต เดธเตเดฅเดฟเดฐเด‚ เดนเต‹เดฌเดฟเดฏเดพเดฃเต. UNN-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดŽเดจเตเดฑเต† เดฐเดฃเตเดŸเต เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเด•เตพ เด…เดŸเตเดคเตเดคเดฟเดŸเต† เดˆ เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เด…เดตเดฐเตเดŸเต† เดฌเดพเดšเตเดšเดฟเดฒเต‡เดดเตเดธเต เดกเดฟเด—เตเดฐเดฟเด•เดณเต† เดจเตเดฏเดพเดฏเต€เด•เดฐเดฟเดšเตเดšเต. ะะปะตะบัะฐะฝะดั€ MS UI เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดตเดฒเดฟเดฏ เดธเด‚เดญเดพเดตเดจ เดจเตฝเด•เดฟ, เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ "เดฑเต†เด•เตเด•เต‹เตผเดกเต-เดชเตเดฒเต‡เดฌเดพเด•เตเด•เต" เดคเดคเตเดตเดคเตเดคเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เด…เดŸเตเดคเตเดคเดฟเดŸเต† เด’เดฐเต เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เดกเต เดœเดจเดฑเต‡เดฑเตเดฑเตผ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดฟ (เด‡เดคเต เดเดฑเตเดฑเดตเตเด‚ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดธเดตเดฟเดถเต‡เดทเดคเดฏเดพเดฃเต), เด‡เดคเตเดตเดฐเต† "uia" เดฌเดพเด•เตเด•เต†เตปเดกเดฟเดจเดพเดฏเดฟ เดฎเดพเดคเตเดฐเด‚. เด‡เดตเดพเตป AT-SPI (เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ) เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดฒเดฟเดจเด•เตเดธเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดชเตเดคเดฟเดฏ เดฌเดพเด•เตเด•เต†เตปเดกเต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต mouse ะธ keyboard เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเต python-xlib - เด‡เดคเดฟเดจเด•เด‚ 0.6.x เดฑเดฟเดฒเต€เดธเตเด•เดณเดฟเตฝ).

เดžเดพเตป เด•เตเดฑเดšเตเดšเต เด•เดพเดฒเดฎเดพเดฏเดฟ เดชเตˆเดคเตเดคเดฃเดฟเตฝ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด•เต‹เดดเตโ€Œเดธเต เดชเด เดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดšเดฟเดฒ เดฎเดพเดธเตเดฑเตเดฑเต‡เดดเตเดธเต เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเด•เตพ เด—เตƒเดนเดชเดพเด เด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดšเต†เดฑเดฟเดฏ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเต‹ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเต‹ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เด—เดตเต‡เดทเดฃ เด˜เดŸเตเดŸเดคเตเดคเดฟเดฒเต† เดšเดฟเดฒ เดชเตเดฐเดงเดพเดจ เด•เดพเดฐเตเดฏเด™เตเด™เดณเตเด‚ เด’เดฐเดฟเด•เตเด•เตฝ เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฐเตเดจเตเดจเต. เดšเดฟเดฒเดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพ เด•เต‹เดกเดฟเดจเตเดฑเต† เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเด‚ เด•เตผเดถเดจเดฎเดพเดฏเดฟ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚. เดเด•เดฆเต‡เดถเด‚ 95% เด•เต‹เดกเต เด•เดตเดฑเต‡เดœเตเดณเตเดณ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเดฑเตเด•เดณเตเด‚ (QuantifiedCode, Codacy, Landscape) เด•เตเดฒเต—เดกเดฟเดฒเต† เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เดŸเต†เดธเตเดฑเตเดฑเตเด•เดณเตเด‚ (AppVeyor เดธเต‡เดตเดจเด‚) เด‡เดคเดฟเดจเต เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เดธเดนเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเต.

เด•เต‚เดŸเดพเดคเต† เด…เดตเดฒเต‹เด•เดจเด™เตเด™เตพ เดจเตฝเด•เตเด•เดฏเตเด‚ เดฌเด—เตเด•เตพ เด‰เดฏเตผเดคเตเดคเตเด•เดฏเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดจเดจเตเดฆเดฟ!

เด…เดงเดฟเด• เดตเดฟเดญเดตเด™เตเด™เตพ

เดžเด™เตเด™เตพ เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เดชเดฟเดจเตเดคเตเดŸเดฐเตเดจเตเดจเต StackOverflow เดŽเดจเตเดจเดคเดฟเตฝ เดŸเดพเด—เต เดšเต†เดฏเตเดฏเตเด• (เด…เดŸเตเดคเตเดคเดฟเดŸเต† เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเดคเต SO เดฏเตเดŸเต† เดฑเดทเตเดฏเตป เดชเดคเดฟเดชเตเดชเดฟเตฝ เดŸเดพเด—เต) เด’เดชเตเดชเด‚ เดŸเต‹เดธเตเดฑเตเดฑเดฑเดฟเดฒเต† เด•เต€เดตเต‡เดกเต เดตเดดเดฟ. เด‰เดฃเตเดŸเต เด—เดฟเดฑเตเดฑเดฑเดฟเตฝ เดฑเดทเตเดฏเตป เดญเดพเดทเดฏเดฟเดฒเตเดณเตเดณ เดšเดพเดฑเตเดฑเต.

เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพ เดฎเดพเดธเดตเตเด‚ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต GUI เดชเดฐเดฟเดถเต‹เดงเดจเดฏเตเด•เตเด•เตเดณเตเดณ เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเตเดŸเต† เดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต. GitHub-เดฒเต† เดจเด•เตเดทเดคเตเดฐเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, Autohotkey (เด…เดตเดฏเตเด•เตเด•เต เดตเดณเดฐเต† เดตเดฒเดฟเดฏ เด’เดฐเต เดธเดฎเต‚เดนเดตเตเด‚ เด’เดฐเต เดจเต€เดฃเตเดŸ เดšเดฐเดฟเดคเตเดฐเดตเตเดฎเตเดฃเตเดŸเต) PyAutoGUI เดŽเดจเตเดจเดฟเดต เดฎเดพเดคเตเดฐเดฎเต‡ เด…เดคเดฟเดตเต‡เด—เด‚ เดตเดณเดฐเตเดจเตเดจเตเดณเตเดณเต‚ (เด…เดคเดฟเดจเตเดฑเต† เดฐเดšเดฏเดฟเดคเดพเดตเต เด…เตฝ เดธเตเดตเต€เด—เดพเตผเดŸเตเดŸเดฟเดจเตเดฑเต† เดชเตเดธเตเดคเด•เด™เตเด™เดณเตเดŸเต† เดœเดจเดชเตเดฐเต€เดคเดฟ เด•เดพเดฐเดฃเด‚: โ€œเดฌเต‹เดฑเดฟเด™เต เดธเตเดฑเตเดฑเดซเต เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด• เดชเตˆเดคเตเดคเตบ" เดŽเดจเตเดจเดฟเดตเดฏเตเด‚ เดฎเดฑเตเดฑเตเดณเตเดณเดตเดฏเตเด‚).

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

DDoS เดชเดฐเดฟเดฐเด•เตเดทเดฏเตเดณเตเดณ เดธเตˆเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เตเด•, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ ๐Ÿ”ฅ DDoS เดชเดฐเดฟเดฐเด•เตเดท, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ เด‰เดณเตเดณ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเต เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เต‚ | ProHoster