การตั้งค่าไดเรกทอรีในกล่องโต้ตอบ“ บันทึกเป็น” มาตรฐาน


1

แผนของฉันคือการสร้างแมโคร Autohotkey ที่บันทึกไฟล์ที่เปิดในปัจจุบันใน Notepad ++ บนเดสก์ท็อปของฉัน ฉันสามารถเปิดกล่องโต้ตอบมาตรฐาน "บันทึกเป็น" แต่ฉันไม่รู้ว่าจะไปยังเดสก์ท็อปได้อย่างไร (Windows 7) ฉันรู้จัก ClassNN ของ combobox ที่คุณสามารถเลือกโฟลเดอร์ได้ แต่เมื่อฉันส่ง 'D' สำหรับการกดแป้นพิมพ์บนเดสก์ท็อปมันจะเข้าสู่พาร์ติชั่นหนึ่งของฉันแทนที่จะเป็นเดสก์ท็อป

แฮ็คจะส่งการคลิกไปยังคอมโบบ็อกซ์ที่มีไดเรกทอรีหลักจากนั้นส่ง 'ลูกศรขึ้น' 50 ครั้งจากนั้นส่ง 'd' จากนั้น {ป้อน} แต่นี่ไม่ใช่สิ่งที่สง่างามหรือมีเสถียรภาพ

นี่คือรหัสปัจจุบันของฉัน:

#IfWinActive, ahk_class Notepad++
!F11::
    Send ^s
    WinWaitActive, Save As
    ;ControlSend, ComboBox1, {Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up}{Up} d, Save As
    ControlSend, Edit1, `%USERPROFILE`%\Desktop\%A_Hour% %A_Min% %A_Sec%, Save As
    ;ControlSend, Button2, {Space}, Save As 
Return
#IfWinActive

ต่อไปนี้คือการรับรู้ตัวอย่างที่ยังคงมีการปนเปื้อนด้วย SHIFT ในเวลาสุ่ม:

%USERPROFILE%|DEsktop\02 27 40
5USERPROFILE%\desktop\02 30 25

1
นอกจากนี้คุณยังสามารถระบุC:\Users\UserName\Desktopเป็นไดเรกทอรีเปิด / บันทึกเริ่มต้นสำหรับ Notepad ++
Karan

คำตอบ:


1

ทำไมไม่ให้ชื่อไฟล์มัน:% USERPROFILE% \ Desktop \ abc.txt

รหัส:

MyFileName=abc
Send, `%USERPROFILE`%\Desktop\%MyFileName%`.txt

คุณต้องหลีกเลี่ยงสัญญาณ% และจุด

คุณไม่ใช่คนเดียวที่มีปัญหานี้ ฉันสามารถทำซ้ำได้เช่นกันและมีคำถามหลายข้อและไม่มีคำตอบที่เชื่อถือได้เกี่ยวกับการเปลี่ยนแปลงแบบสุ่มใน ControlSend บนเวทีต่างๆ

วิธีหนึ่งในการหลีกเลี่ยงสิ่งนี้คือการใช้ ControlFocus ไม่ดีเท่า ControlSend เพราะคุณอาจปล่อยโฟกัสไม่ได้ แต่อย่างน้อยก็มีความน่าเชื่อถือมากกว่า

การส่งสตริงช้าดังนั้นคุณสามารถเก็บสตริงในคลิปบอร์ดและส่ง ^ v เพื่อเร่งความเร็วได้

#IfWinActive, ahk_class Notepad
!F11::
    Send ^s
    WinWaitActive, Save As
    MyFileName=`%USERPROFILE`%\Desktop\%A_Hour% %A_Min% %A_Sec%
    ControlFocus, Edit1
    Send, %MyFileName%
    ;ControlSend, Button2, {Space}, Save As 
Return
#IfWinActive

ตกลงนี่คือหวังว่าคำแนะนำสุดท้าย! สิ่งนี้ทำงานได้อย่างไม่มีที่ติบนเครื่องของฉัน!

#IfWinActive, ahk_class Notepad
!F11::
    Send ^s
    WinWaitActive, Save As
        ControlSetText, Edit1, `%USERPROFILE`%\Desktop\%A_Hour% %A_Min% %A_Sec%, Save As
Return
#IfWinActive

ฉันไม่รู้ว่าคุณสามารถใส่สตริงไดเรกทอรีทั้งหมดในชื่อไฟล์ ขอบคุณอีกครั้ง
Wuschelbeutel Kartoffelhuhn

ที่จริงแล้วมีสิ่งผิดปกติเกิดขึ้น: ControlSends มีการปนเปื้อนด้วยปุ่มที่ SHIFT'ed ดูเหมือนว่า SHIFT เปิดใช้งานในเวลาสุ่มแม้ว่าจะไม่เรียกแมโครในทางใดทางหนึ่ง (ฉันยังไม่ส่งการเปลี่ยนแปลงใด ๆ ในสคริปต์เอง): C: \ uSers \, c: | ผู้ใช้ \, C: | ผู้ใช้ , c: | uSers, c: | uSers \ c: \ USers .... (ในคีย์บอร์ดของสหรัฐอเมริกา \ และ | เป็นคีย์เดียวกัน แต่ตัวหลังถูกเปิดใช้งานด้วย SHIFT) ความคิดใดที่ทำให้เกิดสิ่งนี้
Wuschelbeutel Kartoffelhuhn

ลองดูรหัสใหม่ของฉัน หวังว่านี่จะช่วยแก้ปัญหาของคุณ
Robert Ilbrink

ขอบคุณสำหรับคำแนะนำ แต่มันไม่ได้ช่วยแก้ปัญหากะ ฉันได้เพิ่มเอาต์พุตตัวอย่างและสคริปต์ของฉันในโพสต์ต้นฉบับ
Wuschelbeutel Kartoffelhuhn

@ Wuschelbeutel ตรวจสอบรหัสที่แก้ไขและแจ้งให้เราทราบว่ามันใช้งานได้ดีขึ้น
Robert Ilbrink

0
  • ฉันเขียนสคริปต์ AutoHotkey ที่ฉันได้ปรับให้เหมาะกับวัตถุประสงค์ของคุณ มันวนซ้ำผ่านปุ่มแถบเครื่องมือและทริกเกอร์เดสก์ท็อป มันตั้งค่าข้อความควบคุมและใช้เลือกทั้งหมด
  • นอกจากนี้ยังจะกดปุ่มเดสก์ท็อปหากคุณกด F11 เมื่อคุณอยู่ที่บันทึกเป็นพรอมต์แล้วอัปเดตการประทับเวลา ฟังก์ชันเพิ่มเติมนี้สามารถลบออกได้โดยการแสดงความคิดเห็นในบรรทัด 'F11 ::; notepad ++ (บันทึกเป็น)'
  • สคริปต์นี้สามารถปรับให้ทำงานกับพรอมต์ Windows Save As มาตรฐานอื่น ๆ รูปแบบเก่าเช่น Notepad ++ และสคริปต์ที่ใหม่กว่าเช่น Notepad (Windows 7)
  • หมายเหตุ: คุณจะต้องวางไฟล์ Acc.ahk ในโฟลเดอร์ AutoHotkey \ Lib ของคุณ https://github.com/Drugoy/Autohotkey-scripts-.ahk/blob/master/L ไลบรารี/Acc.ahk
    [ทางด้านขวาของหน้าจอคลิกขวาที่ Raw บันทึกเป้าหมายเป็น ... ]
  • ทดสอบบน Notepad ++ 7.2.2.0 (Windows 7 64 บิต)

-

;note: requires Acc.ahk library in AutoHotkey\Lib folder
;https://github.com/Drugoy/Autohotkey-scripts-.ahk/blob/master/Libraries/Acc.ahk
;on right of screen right-click Raw, Save target as...

#IfWinActive, ahk_class Notepad++
F11:: ;notepad++ - save, click Desktop button + set text
    Send ^s
    WinWaitActive, Save As

#IfWinActive, Save As ahk_class #32770 ahk_exe notepad++.exe
F11:: ;notepad++ - click Desktop button + set text

WinGet, hWnd, ID, A
WinGetClass, vWinClass, ahk_id %hWnd%
WinGet, vPName, ProcessName, ahk_id %hWnd%
if !(vWinClass = "#32770") OR !(vPName = "notepad++.exe")
Return

hCtl := ""

if !hCtl ;check for treeview e.g. Notepad Win 7
{
ControlGet, hCtl, Hwnd, , SysTreeView321, ahk_id %hWnd%
if hCtl
oAcc := Acc_Get("Object", "outline", 0, "ahk_id " hCtl)
}

if !hCtl ;check for toolbar e.g. Notepad Win XP
{
ControlGet, hCtl, Hwnd, , ToolbarWindow322, ahk_id %hWnd%
if hCtl
oAcc := Acc_Get("Object", "tool_bar", 0, "ahk_id " hCtl)
}

Loop, % oAcc.accChildCount
if (oAcc.accName(A_Index) = "Desktop")
if (1, oAcc.accDoDefaultAction(A_Index))
break

FormatTime, vDate, , HH mm ss
ControlSetText, Edit1, %vDate%, ahk_id %hWnd%
PostMessage, 0xB1, 0, -1, Edit1, ahk_id %hWnd% ;EM_SETSEL
Return
#IfWinActive
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.