AHK betiği çalışırken dengesiz


2

Harici HDD imalat şirketinde çalışıyorum. FW'yi binlerce HDD için yükseltmem gerekiyor. Yüklemeyi tamamlamak için iki dosyayı sırasıyla yüklemem gerekiyor. Manuel işlem yapmak zaman alır ve İnsan hatası yapma şansını da sağlar. Bu yüzden Auto Hot Key kullanarak tuş vuruşlarını ve fare tıklamalarını otomatikleştirmeye karar verdim. Ben de senaryoyu derledim. Ancak komut dosyası dengesiz. Bazen iyi çalışıyor. Bazı durumlarda kontrol tıklaması çalışmaz. Bazen tuş girişi dolu yazılmaz. Ama senaryo benim bilgime dayanarak tamam. Herhangi bir hata varsa lütfen beni düzeltin. Ayrıca, sürücüyü güvenli bir şekilde çıkarmak istiyorum, böylece kodlaması varsa, lütfen onu da ekleyin.

Benim işlemim açıklama aşağıdadır.

  1. HDD’yi PC’ye bağlayın ve HDD’yi tespit etmek için PC’yi bekleyin
  2. FW yükleme aracını açın
  3. RESCAN seçeneğini tıklayın ve HDD’nin araçta görünmesini bekleyin.
  4. İlk FW dosyasına gözatın.
  5. Ardından, araçta gösterilen HDD'nin yanındaki onay kutusunu seçin.
  6. İNDİR düğmesini tıklatın ve bir sonraki uyarı iletisinde enter tuşuna basın.
  7. İndirme işleminin bitmesini bekleyin ve gösterilen başarılı mesajın ardından Tamam tuşuna basın.
  8. İkinci FW dosyası için 3. ve 7. adımları tekrarlayın.
  9. Çıkış'a tıklayın ve HDD'yi güvenli bir şekilde çıkarın.

Aşağıda benim senaryom.

Run, open "Application Location"
Winwait, Warning
if ErrorLevel
{
    MsgBox, Window timed out.
    return
}
else
{
ControlClick, OK, Warning
Winwait, Application Window name
if ErrorLevel
{
    MsgBox, WinWait timed out.
    return
}
else
{
; Upload first FW File
ControlClick, Rescan, Application Window name
ControlClick, Browse, Application Window name
Winwait, Open
if ErrorLevel
{
    MsgBox, WinWait timed out.
    return
}
else
{
SendInput, {Raw}Location of First File
Send, {Enter}
}
sleep, 1500
WinActivate, Application Window name
CoordMode, Mouse, Relative
Click 43, 126
ControlClick, Download, Application Window name
Winwait, Warning
if ErrorLevel
{
    MsgBox, WinWait timed out.
    return
}
else
{
Send, {Enter}
}
Winwait, Download Successful
if ErrorLevel
{
    MsgBox, WinWait timed out.
    return
}
else
{
ControlClick, OK, Download Successful
}
}
; Upload Second FW File
WinActivate, Application Window name
ControlClick, Rescan, Application Window name
ControlClick, Browse, Application Window name
Winwait, Open
if ErrorLevel
{
    MsgBox, WinWait timed out.
    return
}
else
{
SendInput, {Raw}Second FW File location
Send, {Enter}
}
sleep, 1500
WinActivate, Application Window name
CoordMode, Mouse, Relative
Click 43, 126
sleep, 2000
ControlClick, Download, Application Window name
Winwait, Warning
if ErrorLevel
{
    MsgBox, WinWait timed out.
    return
}
else
{
Send, {Enter}
}
Winwait, Download Successful
if ErrorLevel
{
    MsgBox, WinWait timed out.
    return
}
else
{
ControlClick, OK, Download Successful
sleep, 1500
ControlClick, Exit, Application Window name
}
}

İnsanların HDD'lerinin güvenilirliği ve kullanılabilirliği için çok önemli bir görevi yerine getirmeleri için İnternet'teki kişilerin tavsiyelerine güvenmeyin. Bunu otomatik olarak yapabilmeniz için bazı yazılımları gerçekten geliştirip test edin!
allquixotic 23:15

eee. Hayır, AHK burada tamamen konuyla ilgili. @ Allquixotic’in söylediğine ek olarak, kullandığınız yazılımı bilmeden bir cevabı test etmek oldukça zordur ve başka bir darboğaz varsa
Journeyman Geek

Ayrıca, belki de daha önemlisi, Windows GUI'nin otomatikleştirilmesi, yarış koşulları, senkronizasyon, giriş gecikmesi, vb. Nedenlerle tasarım gereği her zaman doğal olarak hataya neden olacaktır. Bunun yerine, üretici yazılımı yama aracının kaynak koduna erişin ve komut satırı bayraklarıyla veya bir yapılandırma dosyasıyla otomatikleştirebileceğiniz ve bir HDD'yi otomatik olarak bekletip ardından mümkünse otomatik olarak üretici yazılımını yanıp söndürebilen, etkileşimli (konsol tabanlı) sürümü. Bu görev, burada denediğinizden çok daha sağlam bir şekilde tasarlanmış bir çözüm gerektiriyor.
allquixotic 23:15

Beyler yorumlarınız için teşekkürler. Yanlış anlatayım ve düzeltmeme izin ver. Siz dengesizliğin senaryomdan değil, Windows GUI'nin otomasyondan kaynaklanan doğal davranışlarından kaynaklandığını söylüyorsunuz, değil mi? Diğer bir şey ise, yazılım yama aracı üçüncü taraf bir araçtır ve kaynak kodunu göremiyorum veya değiştiremiyorum. Bu araç, bellenimi yükseltmemizi isteyen müşteri tarafından sağlanır ve işlemi otomatikleştirmek için onlarla konuştum, ancak zaten reddetti. Bu yüzden başka bir seçenek deniyordum ve AHK'yı buldum.
Dragonborn

@Dragonborn - Dürüst olmak gerekirse, tanımladığınız şey, neredeyse tüm modern işletim sistemi GUI'lerinin doğal davranışıdır. Bir ofis arkadaşı, 10 yıldan daha eski olan bir PC'ye Ubuntu'nun son sürümünü koymaktan bahsettiğini, farenin hareket etmesini beklemek zorunda kaldığını, modern işletim sisteminin aynı anda hem daha hızlı hem de daha fazla kaynak harcadığını anlatıyor. Elektroniğimizin daha hızlı hale geldiği nokta, daha fazlasını yapma kabiliyetine sahip olmaları, bunun anlamı, kullanıcı arayüzlerini çevreleyen bazı temel kavramlar, zaman geçtikçe daha karmaşık hale gelmek. Herhangi bir programlama kaynağı doğru fiyata satın alınabilir.
Ramhound

Yanıtlar:


1

Birkaç düşünce:

  1. İlk birkaç satırdaki hata seviyesine geri dönerseniz, betiğin geri kalanını bir Else deyimine ve kapsülleme parantezlerine almanıza gerek kalmaz. Gerekli değil.

  2. WinWait kullanımı WinWaitActive ile aynı değildir. Etkin olmadan bir pencere olabilir, bu nedenle arka planda bir pencere aramanız gerekmiyorsa daima WinWaitActive kullanın. WinWait'i kullanmak, pencere gerçekten etkin olmadan önce komut dosyası yürütmenin wait deyiminin ötesine geçmesine neden olarak açıkladığınız sorunların bir kısmına neden olabilir.

  3. Send ve SendInput arasında geçiş yapma ihtiyacı olmadıkça, birine veya diğerine bağlı kalın ... genellikle SendInput, yardım dosyalarında açıklanan nedenlerden dolayı daha çok tercih edilen seçenektir. Her ikisini de kullanmak (kullanılan programa bağlı olarak), tuşların nasıl gönderileceği konusunda zamanlama sorunlarına neden olabilir.

  4. Devam etmeden önce pencerenin etkin olduğundan emin olmak için herhangi bir WinActivate örneğinden sonra WinWaitActive kullanın.

  5. Tekrarlanan kod için, bir alt yordam kullanmayı deneyin, örneğin, gosub veya işlev çağrısı. Dosya konumu değiştiğinden, dosya konumunu çağrılar arasında değişken olacak şekilde ayarlayabilir veya değişkeni işlev çağrısının parametresi olarak kullanabilirsiniz. Bu, rutini değiştirirseniz, her şeyi iki kez yeniden yazmak zorunda kalmazsınız.


Önerin için teşekkürler. Senaryomu tekrar yazmama ve çözümü kontrol etmeme izin verin.
Dragonborn

İhtiyacınız olan başka bir yardımcı araç, uyku ifadeleri eklemektir, bu nedenle komut dosyası pencereler için çok hızlı bir şekilde çalışıyorsa, birkaç yüz milisaniyelik nominal bir uyku ifadesi eklemeyi deneyebilirsiniz. Çok daha uzun bir uyku ifadesi eklemek (örneğin, birkaç saniye), sorunları tespit etmenize yardımcı olabilir. Araç ipucu komutunun liberal kullanımı, programın çalışırken izlemekte çalıştığı yeri anlamak için de yararlıdır.
JJohnston2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.