ฉันมีทางออกที่ฉันใช้อยู่ในขณะนี้ ฉันใช้เวลาหลายชั่วโมงในการเขียนโค้ดนี้และฉันก็พอใจมากที่มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ไปข้างหน้าและใช้มันหากคุณต้องการเพียงแค่เครดิตฉัน (drange17) หากคุณต้องการโพสต์รหัสนี้ทางออนไลน์ในฟอรัม ในทางกลับกันฉันก็ต้องการเครดิตLexikosสำหรับรหัสสำหรับ ConsoleSend
ประการแรกฉันวางทางลัดไปยังพรอมต์คำสั่งที่เรียกว่า "cmd.lnk" ในไฟล์ C: \ Program ฉันไปที่คุณสมบัติของทางลัดนี้ >> แท็บทางลัด >> ขั้นสูง >> เปิดใช้งานเรียกใช้ในฐานะผู้ดูแลระบบ
ประการที่สองฉันดาวน์โหลด AutoHotkey และทำให้มันทำงานเมื่อเริ่มต้น (วางทางลัดไปที่ AutoHotkey ในโฟลเดอร์ Start Menu Startup) ด้วยรหัสต่อไปนี้ (ซึ่งไม่หรูหรามากอย่างแน่นอนฉันแน่ใจว่าบางคนทำได้ดีกว่า แต่ก็ทำได้ดีกว่า งานของการ จำกัด แถบงานแนวตั้งให้ฉัน):
Sleep, 15000
SendInput {LWin Down}r{LWin Up}
IfWinExist, Run
WinActivate
Sleep, 500
SendInput {Raw}RunDll32.exe shell32.dll,Options_RunDLL 1
SendInput {Enter}
WinWait, Taskbar and Start Menu Properties
SendInput {Tab}{Space}{Enter}
WinWaitClose
Run C:\Program Files\cmd.lnk
WinWait, Administrator: cmd ahk_class ConsoleWindowClass
winwaitactive Administrator: cmd ahk_class ConsoleWindowClass
ConsoleSend("net stop uxsms", "ahk_class ConsoleWindowClass")
ConsoleSend("`r", "ahk_class ConsoleWindowClass")
Sleep, 3000
ConsoleSend("net start uxsms", "ahk_class ConsoleWindowClass")
ConsoleSend("`r", "ahk_class ConsoleWindowClass")
Sleep, 3000
ConsoleSend("exit", "ahk_class ConsoleWindowClass")
ConsoleSend("`r", "ahk_class ConsoleWindowClass")
WinWaitClose
SendInput {LWin Down}r{LWin Up}
IfWinExist, Run
WinActivate
Sleep, 500
SendInput {Raw}RunDll32.exe shell32.dll,Options_RunDLL 1
SendInput {Enter}
WinWait, Taskbar and Start Menu Properties
SendInput {Tab}{Space}{Enter}
Run outlook.exe
ConsoleSend(text, WinTitle="", WinText="", ExcludeTitle="", ExcludeText="")
{
WinGet, pid, PID, %WinTitle%, %WinText%, %ExcludeTitle%, %ExcludeText%
if !pid
return false, ErrorLevel:="window"
if !DllCall("AttachConsole", "uint", pid)
return false, ErrorLevel:="AttachConsole"
hConIn := DllCall("CreateFile", "str", "CONIN$", "uint", 0xC0000000
, "uint", 0x3, "uint", 0, "uint", 0x3, "uint", 0, "uint", 0)
if hConIn = -1
return false, ErrorLevel:="CreateFile"
VarSetCapacity(ir, 24, 0) ; ir := new INPUT_RECORD
NumPut(1, ir, 0, "UShort") ; ir.EventType := KEY_EVENT
NumPut(1, ir, 8, "UShort") ; ir.KeyEvent.wRepeatCount := 1
Loop, Parse, text ; for each character in text
{
NumPut(Asc(A_LoopField), ir, 14, "UShort")
NumPut(true, ir, 4, "Int") ; ir.KeyEvent.bKeyDown := true
gosub ConsoleSendWrite
NumPut(false, ir, 4, "Int") ; ir.KeyEvent.bKeyDown := false
gosub ConsoleSendWrite
Sleep, 10
}
gosub ConsoleSendCleanup
return true
ConsoleSendWrite:
if ! DllCall("WriteConsoleInput", "uint", hconin, "uint", &ir, "uint", 1, "uint*", 0)
{
gosub ConsoleSendCleanup
return false, ErrorLevel:="WriteConsoleInput"
}
return
ConsoleSendCleanup:
if (hConIn!="" && hConIn!=-1)
DllCall("CloseHandle", "uint", hConIn)
DllCall("FreeConsole")
return
}
นี่คือแถบงานแนวตั้งบาง ๆ ที่เกิดขึ้น: