2014-01-27 5 views
0

Недавно я обновился до Windows 8.1 x64, теперь скрипт, который я использовал, больше не работает. Этот скрипт должен щелкнуть правой кнопкой мыши значок панели задач определенной программы, чем перейти к одному из его вариантов, а затем щелкнуть по этой опции.Что делать, если ControlSend или Send не работает?

Вот сценарий :::

;#NoTrayIcon 
DetectHiddenWindows, On 

;Outlook on the Desktop-------------------------------------------------------------------------------------------------------------------------------- 

^1:: ;25,000$ Fine Tuned 

Info := TrayIcons("OutlookDesktop.exe") ; OutlookDesktop.exe is the prog i tested with 
StringSplit, TrayInfo, Info,| 
PostMessage, TrayInfo1, TrayInfo2, 0x0205,, ahk_id %TrayInfo3% ; this is the right-click 
Sleep 500 
Send {Down 3}{Right}{Down 7}{Right}{Down 4}{Enter} 
return 

^2:: ;Projects 

Info := TrayIcons("OutlookDesktop.exe") ; OutlookDesktop.exe is the prog i tested with 
StringSplit, TrayInfo, Info,| 
PostMessage, TrayInfo1, TrayInfo2, 0x0205,, ahk_id %TrayInfo3% ; this is the right-click 
Sleep 500 
Send {Down 3}{Right}{Down 7}{Right}{Down 1 4}{Enter} 
return 

^3:: ;Due This Week - unfinished 

Info := TrayIcons("OutlookDesktop.exe") ; OutlookDesktop.exe is the prog i tested with 
StringSplit, TrayInfo, Info,| 
PostMessage, TrayInfo1, TrayInfo2, 0x0205,, ahk_id %TrayInfo3% ; this is the right-click 
Sleep 500 
Send {Down 3}{Right}{Down 7}{Right}{Down 2 4}{Enter} 
return 

^4:: ;To-do Bar Calendar View 

Info := TrayIcons("OutlookDesktop.exe") ; OutlookDesktop.exe is the prog i tested with 
StringSplit, TrayInfo, Info,| 
PostMessage, TrayInfo1, TrayInfo2, 0x0205,, ahk_id %TrayInfo3% ; this is the right-click 
Sleep 500 
Send {Down 3}{Right}{Down 7}{Right}{Down 7 4}{Enter} 
return 

; Found and abused from 
; http://www.autohotkey.com/forum/topic17314.html 
; thx, Sean ... GREAT WORK! 

TrayIcons(sExeName = "OutlookDesktop.exe") 
{ 
WinGet, pidTaskbar, PID, ahk_class Shell_TrayWnd 
hProc := DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar) 
pRB := DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0 
, "Uint", 20, "Uint", 0x1000, "Uint", 0x4) 
VarSetCapacity(btn, 20) 
VarSetCapacity(nfo, 24) 
VarSetCapacity(sTooltip, 128) 
VarSetCapacity(wTooltip, 128 * 2) 
SendMessage, 0x418, 0, 0, ToolbarWindow32, ahk_class Shell_TrayWnd 
Loop, %ErrorLevel% 
{ 
SendMessage, 0x417, A_Index - 1, pRB, ToolbarWindow32, ahk_class Shell_TrayWnd 
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", pRB, "Uint", &btn, "Uint", 20, "Uint", 0) 
iBitmap := NumGet(btn, 0), idn := NumGet(btn, 4), Statyle := NumGet(btn, 8) 
dwData := NumGet(btn,12), iString := NumGet(btn,16) 
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", dwData, "Uint", &nfo, "Uint", 24, "Uint", 0) 
hWnd := NumGet(nfo, 0), uID := NumGet(nfo, 4) 
nMsg := NumGet(nfo, 8) 
WinGet, pid, PID, ahk_id %hWnd% 
WinGet, sProcess, ProcessName, ahk_id %hWnd% 
WinGetClass, sClass, ahk_id %hWnd% 
If !sExeName || (sExeName = sProcess) || (sExeName = pid) 
{ 
DllCall("ReadProcessMemory", "Uint", hProc, "Uint", iString 
, "Uint", &wTooltip, "Uint", 128 * 2, "Uint", 0) 
DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "str", wTooltip 
, "int", -1, "str", sTooltip, "int", 128, "Uint", 0, "Uint", 0) 
sTrayIcons .= nMsg "|" uID "|" hWnd 
} 
} 
DllCall("VirtualFreeEx", "Uint", hProc, "Uint", pRB, "Uint", 0, "Uint", 0x8000) 
DllCall("CloseHandle", "Uint", hProc) 
Return sTrayIcons 
} 


;Outlook on the Desktop-----------------------END OF SCRIPT------------------------------------------------------------------------------ 

Теперь я гугле еще немного и нашел этот сценарий :::

BlockInput, on 
pos := Tray_Define("CCC.exe", "i") 
Tray_Click(pos, "R") 
WinWait, ahk_class #32768 
; WinHide, ahk_class #32768 ;this and next line are to hide the menu. 
; WinKill, ahk_class SysShadow 
ControlSend,,{Down}{Down}{Down}{Down}{Down}{ENTER},ahk_class #32768 
BlockInput, off 
ExitApp 

Интересно, что сценарий отлично работает на Catalyst Control Centar (CCC .exe), но не в той программе, над которой я хочу работать, она успешно выполняет щелчки правой кнопкой мыши, но передача управляющих команд не работает. (Также попробовали только Отправить вместо ControlSend)

Что вы, ребята, думаете, проблема здесь, почему команды ControlSend и Send не работают? Что вы предлагаете мне попробовать?

+0

Чтобы исключить одну проблему, вы могли бы попытаться запустить сценарий, поднятый до прав администратора? –

+0

Просто попробовал свое предложение и, когда он был запущен как администратор, он зависает (не может перемещать мышь, но работает на клавиатуре) должен ctrl_alt_del, а затем запустить диспетчер задач, внезапно мышь работает! Что вы предлагаете, здесь происходит? Это очень странно ... –

+0

Вау, еще одна причина для меня придерживаться Windows 7 (с классической оболочкой) в обозримом будущем .... Мне иногда приходится поднимать AHK до администратора, но никогда не сталкивался с ними (замораживание мыши), поэтому, к сожалению, я не могу вам помочь. –

ответ

2

Это частичный ответ:

Поскольку Windows 7, АХК должны всегда работать как администратор, в противном случае он показывает странное поведение (иногда не слушая горячих клавиш, иногда не посылать ключи).

Просьба указать вашу точку с BlockIntput в другой ответ.

Смежные вопросы