Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - YoClickamann

Pages: [1]
1
Почитал сегодня справку по командам Нира (маленькой консольной утилитки в 100 кб) по советам 0raven и i0, нашёл для себя немного интересных моментов с примерами:
[spoiler=Бенефиты Нира]
speak text ~$clipboard$ - читает текст из буфера
speak file "c:\temp\speak.txt" 0 100 "c:\temp\speak.wav" 48kHz16BitStereo - превращает текстовый файл в аудио, озвучивает письмена автоматом
changesysvolume -5000 - уменьшает громкость на компе
mutesysvolume 2 - заглушает/включает звук (триггер)
cmdshortcut "~$folder.desktop$" "Switch Volume" mutesysvolume 2 - кидает на Рабочий стол ярлык, которым можно сделать предыдущее действие
monitor off - выключает моник
cmdshortcut " "~$folder.desktop$ "Close All IE" win close class "IEFrame" - создаёт ярлык, закрывающий все окна ослика Ие
win trans ititle "internet explorer" 192 - делает полупрозрачным нужное окно
rasdial "My Internet" - автодозвон для неимеющих роутера
win hide class "CabinetWClass" - прячет все окна проводника со всеми открытыми папками
win -style title "my computer" 0x00C00000 - удаляет слова из заголовка программы
win settopmost title "Calculator" 1 - закрепляет окно поверх остальных
win child class "Shell_TrayWnd" hide class "button"  - прячет Пуск, не знаю кому это нужно  :)
win child class "Shell_TrayWnd" show class "TrayClockWClass" - прячет часы, можно над другом поугарать до перезагрузки
urlshortcut "http://www.nirsoft.net" "~$folder.desktop$" "NirSoft" - создаёт ярлык для сайта, можно на его основе создать автологгер-историю посещений в формате ярлыков
setdisplay 800 600 24 - устанавливает режим монитора и поллитру  ;)
execmd copy "~$folder.desktop$\*.lnk" f:\temp\desktop - бесшумно бекапит Рабочий стол
nircmd regedit "~$clipboard$" - открывает в редакторе Реестра винды ключ из буфера
setfiletime "c:\temp\myfile.txt" "24-06-2003 17:57:11" "22-11-2005 10:21:56" - дата созд/изм файла
clipboard readfile "c:\My Files\info1.txt" - копируем текст файла в буфер
paramsfile "c:\temp\folders.txt" "" "" execmd md ~$fparam.1$ - создаём дерево папок по шаблону в файле
dlg "" "" click yes - кликаем Да во всех вылетающих диалогах этих ваших Виндов
cmdwait 2000 savescreenshot "f:\temp\shot.png" - ждём 2 сек и сейваем скрин
waitprocess firefox.exe speak text "Firefox was closed" - озвучивает выход из программы
elevatecmd runassystem c:\windows\regedit.exe - запускает Регедит от админа
sendkeypress ctrl+alt+del - жмакает комбинацию клавиш
Переменные системы
folder.cookies - возвращает путь к кукам юзера
folder.system - путь к System32
loopcount - указывает количество повторов скрипта/батника
infobox "The current logged-on user is ~$sys.username$" "logged-on user" - показывает имя пользователя
savescreenshot c:\temp\scr~$currdate.MMddyyyy$-~$currtime.HHmmss$.png - сохраняет скриншот с датой/временем
multiremote - выполняет указанные команды на многих удалённых компах, например:
multiremote copy "c:\temp\computers.txt" monitor off - выключает мониторы на нужных компьютерах в локалке
cmdwait 1000 monitor off - тушит экран после паузы
loop 10 60000 savescreenshot c:\temp\scr~$loopcount$.png - 10 раз один раз в минуту делает скрин по маске
shortcut "f:\Program Files" "c:\temp\MyShortcuts" "Program Files Folder" "" "f:\winnt\system32\shell32.dll" 45 - вешает нужную иконку на ярлык
cmdshortcutkey "c:\temp" "Turn Monitor Off" "Ctrl+Shift+M" monitor off - создаёт ярлык с хоткеем
urlshortcut "http://www.google.com" "~$folder.favorites$\Search Engines" "Google" - кидает ярлык в нужную папку Избранного
exec hide "c:\temp\wul.exe" /savelangfile - запускает программу в скрытом режиме, без окна/иконки в трее
execmd del "~$folder.desktop$\calc.lnk" - втихую выполняет операции, опять повод для пранка
shexec "open" "http://www.nirsoft.net" - открывает веб-страничку в вашем любимом браузере по умолчанию
shexec "print" "d:\files\1.pdf" - печатает указанные доки
clonefiletime "c:\temp\file1.txt" "c:\temp\file2.txt" - клонирует дату создания из файла
setbrightness 60 2 - меняет яркость на нубуке  :D
killprocess "c:\winnt\system32\calc.exe" - убивает процесс, быстро и с крахом информации
closeprocess /1830 - выключает нужный процесс/окно, медленно, надёжно и по всем канонам гуи
suspendprocess "c:\winnt\system32\calc.exe" - замораживает программу, она перестаёт отвечать/закрываться
setprocesspriority iexplore.exe high - устанавливает нужный приоритет программе
setprocessaffinity "c:\winnt\system32\calc.exe" 0 1 2 3 - выделяет программе определённые ядра процессора
service pause w3svc - ставит службу на паузу
win hide ititle "culat" - прятать все окна с этим текстом в заголовке
win show class "SciCalc" - показать все окна нужного класса, одной программы
win max handle 0x00009c01 - разворачивает окно с указанным хендлером
win setsize class "IEFrame" 50 50 400 300 - меняет размер окна
win child class "Shell_TrayWnd" show class "button" - показывает все дочерние окна указанного класса/айди
win sendmsg title "calculator" 0x10 0 0 - посылает биты состояния окну через мессидж WinAPi
win dlgclick class "#32770" cancel - жмёт автоматом Отмену во всех всплывающих окнах нужной программы
win togglehide class MozillaWindowClass - скрывает-прячет/снова показывает окно (работает как переключалка)
clipboard saveimage "c:\temp\clip01.png" - сохраняет картинку из буфера в прописанный файл в нужном формате
clipboard clear - очищает, дезинфицирует буфер обмена
clipboard set ~$folder.desktop$ - копирует путь папки десктопа в буфер
clipboard saveclp "c:\temp\1.clp" - сохраняет содержимое буфера в файл стандарта, понимаемого Виндой
stdbeep - озвучивает стандартно для Винды сообщение об ошибке
setappvolume wmplayer.exe 0.75 Speakers - устанавливает уровень громкости в программе и переключает аудио
muteappvolume /1275 2 1 - отключает звук в указанном по айди процессе
setdefaultsounddevice "Microphone" 2 - устанавливает/переключает звуковые устройства по умолчанию
setcursor 100 50 - перемещает курсор в нужное место
sendkeypress ctrl+shift+esc alt+tab - посылает окну несколько хоткеев/нажатий через командную строку
sendkeypress Shift+n i r spc shift+s o f t - пишет "НирСофт" по буквам, эмулируя ввод, в активном окне
Нажатия клавиш
sendkey enter press - указываем константой
sendkey 0x2e press - по коду клавиши
sendkey shift down - полунажатие, первая фаза, без релиза
Управлению мышью на автомате
sendmouse wheel 1200 - прокрутка-робот
sendmouse left down
sendmouse move -30 20
sendmouse left dblclick
convertimage "c:\temp\test1.gif" "c:\temp\test1.png" - конвертирует картинки межформатно
convertimages "c:\temp\*.jpg" .gif - конвертит фотки по маске
savescreenshotwin *clipboard* - скриншотит в буфер нужное окно, в котором находится фокус
shellcopy "c:\temp\*.*" "d:\temp" yestoall noerrorui - копирует файло без шуму и пыли, подавляя ошибки/вопросы
filldelete "c:\temp\*.*" - затирает выбранные файлы нулями и затем удаляет, без возможности восстановления
speak file "c:\temp\speak1.txt" - озвучивает текст из файла
elevatecmd runassystem c:\windows\regedit.exe - выполняет программу от имени нужного юзера, в данном случае - из-под системной учётки
trayballoon "Hello" "This is a test..." "shell32.dll,22" 15000 - системное уведомление в трее с иконкой и таймером
mediaplay 10000 "c:\temp\1.mp3" - проигрывает файл с аудио в течение 10 секунд
writeufile - пишет файл в уникоде
setprimarydisplay - устанавливает выбранный дисплей дефолтным из нескольких
shellrefresh - обновляет шелл после обнов реестра, но без перезагрузки?
..
Много других вкусностей, но уже задолбался писать  ::)
[/spoiler]
Самое интересное/неожиданное на мой лук выделил жирным.

Только опробовать всё не хватило времени, да и остались ещё некоторые непонятки/тупняки в нире:
[spoiler=NirLags]
Есть разные однотипные функции - enable, active, activate, focus.
paramsfile "c:\temp\shortcuts.txt" "," "~q" shortcut ~$fparam.1$ "~$folder.desktop$" ~$fparam.2$ -  мозг отказывается понимать ЭТО, надеюсь что только сегодня
dlg "explorer.exe" "run" settext 12298 "calc.exe" - самые нужные функции бывают и самыми непонятными
execmd copy "~$folder.desktop$\*.lnk" f:\temp\desktop - вместо копирования файлов в папку у меня создался один файл (с именем папки) в непонятном формате, может не хватило привилегий?
[/spoiler]

Сразу после прочтения почудилось, что и наш, русский кликер должен уметь все нировские красоты кода из строки запуска с параметрами, тем более что функционал у кликера мощнее нировского. Да и некоторые фишки нира не выглядят настолько продуманными.

В справке нашёл также пару слов про консольную версию нира и про отличие от обычной: Starting from version 1.50, console version of NirCmd (nircmdc.exe) is also available. In the console version, all error messages goes to the console window, instead of using a message box. Вот.

Пишите в комментариях, какие интересные реализации вы используете и как хитрите с ниром, можете также рассказать о необычном опыте с другими консолями. Чего из данных выше указанных функций вы не знали/не ждали от возможностей нира?

2
Когда читаю справку, всегда думаю, а что же значит это h в начале команд. Но только что порылся по MSDN и открыл для себя пару фактов:
1) h (в функциях hGet, hSet) значит handle (у каждого окна есть свой управляющий хендлер)
2) w (wParam) = word
3) l (lParam) = long

Пишут, что во времена 16-битной Винды параметры передавались через одно короткое 16-битное слово word и через длинное 32-битное long, а сейчас в Вин64 передаются и int64 в 64 бита соответственно (если кому интересно - здесь оригинал). На сайте указывается также и Message-структура для разных языков .NET:
[spoiler=HWnd, LParam, Msg, Result, WParam]
Имя   Описание
HWnd   Получает или задает дескриптор окна сообщения.
LParam   Задает поле LParam сообщения.
Msg   Получает или задает идентификатор сообщения.
Result   Указывает значение, возвращаемое операционной системе Windows в ответ на обработку сообщения.
WParam   Получает или задает поле WParam сообщения.
[/spoiler]

Также, если вы видели в справке кликера последнюю страницу (приложение с кодами клавиш), то возможно вам будет интересно посмотреть и более полную версию 16-ричных кодов на сайте Мелкософта (в статье Virtual-Key Codes for Windows).

А вот что говорится в доке по ВинАПИ, про функцию отрисовки окон, в которой и задаются все эти ваши LParam да WParam:
[spoiler=WndProc]
Эта функция производит обработку сообщений для окна. Мы ее связываем с окном при заполнении структуры класса окна WNDCLASS в поле lpfnWndProc:

WNDCLASS WC;
......
WC.lpfnWndProc = WndProc;
Вот эта функция WndProc и будет получать сообщения, которые Windows будет отсылать окну. Соответственно эта функция должна быть объявлена ранее. Прототип у этой функции такой:

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
Общий вид для реализации:

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
   if (Message == WM_DESTROY )
   {
      PostQuitMessage(0);
      return 0;
   }
   return DefWindowProc(hwnd,Message,wparam,lparam);
}
В этой функции мы обрабатываем сообщения от Windows. При этом, если обработку не совершаем, то вызываем функцию по умолчанию DefWindowProc, которая умеет обрабатывать сообщения по умолчанию.


LRESULT DefWindowProc

   HWND hWnd,   // указатель окна
   UINT Msg,      // идентификатор сообщения
   WPARAM wParam,   // первый параметр сообщения
   LPARAM lParam   // второй параметр сообщения
);
Возврашает результат обработки сообщения. Обычно в функции WndProc организуется огромный switch для обработки сообщений.
[/spoiler]
И вот пример одной из конкретных реализаций, так сказать каркас:
[spoiler]
Code: (cpp) [Select]
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}
[/spoiler]

Также на МСДН нашёл страничку с перечнем разных типов оконных WM-сообщений, где говорится, что кроме WM, есть и другие виды сообщений:
[spoiler=Типы определяемых системой сообщений]
Prefix   Message category   Documentation
ABM and ABN   Application desktop toolbar   Shell Messages and Notifications
ACM and ACN   Animation control   Animation Control Messages and Animation Control Notifications
BCM, BCN, BM, and BN   Button control   Button Control Messages and Button Control Notifications
CB and CBN   ComboBox control   ComboBox Control Messages and ComboBox Control Notifications
CBEM and CBEN   ComboBoxEx control   ComboBoxEx Messages and ComboBoxEx Notifications
CCM   General control   Control Messages
CDM   Common dialog box   Common Dialog Box Messages
DFM   Default context menu   Shell Messages and Notifications
DL   Drag list box   Drag List Box Notifications
DM   Default push button control   Dialog Box Messages
DTM and DTN   Date and time picker control   Date and Time Picker Messages and Date and Time Picker Notifications
EM and EN   Edit control   Edit Control Messages, Edit Control Notifications, Rich Edit Messages, and Rich Edit Notifications
HDM and HDN   Header control   Header Control Messages and Header Control Notifications
HKM   Hot key control   Hot Key Control Messages
IPM and IPN   IP address control   IP Address Messages and IP Address Notifications
LB and LBN   List box control   List Box Messages and List Box Notifications
LM   SysLink control   SysLink Control Messages
LVM and LVN   List view control   List View Messages and List View Notifications
MCM and MCN   Month calendar control   Month Calendar Messages and Month Calendar Notifications
PBM   Progress bar   Progress Bar Messages
PGM and PGN   Pager control   Pager Control Messages and Pager Control Notifications
PSM and PSN   Property sheet   Property Sheet Messages and Property Sheet Notifications
RB and RBN   Rebar control   Rebar Control Messages and Rebar Control Notifications
SB and SBN   Status bar window   Status Bar Messages and Status Bar Notifications
SBM   Scroll bar control   Scroll Bar Messages
SMC   Shell menu   Shell Messages and Notifications
STM and STN   Static control   Static Control Messages and Static Control Notifications
TB and TBN   Toolbar   Toolbar Control Messages and Toolbar Control Notifications
TBM and TRBN   Trackbar control   Trackbar Control Messages and Trackbar Control Notifications
TCM and TCN   Tab control   Tab Control Messages and Tab Control Notifications
TDM and TDN   Task dialog   Task Dialog Messages and Task Dialog Notifications
TTM and TTN   Tooltip control   Tooltip Control Messages and Tooltip Control Notifications
TVM and TVN   Tree-view control   Tree View Messages and Tree View Notifications
UDM and UDN   Up-down control   Up-Down Messages and Up-Down Notifications
[/spoiler]

А вот какие существуют виды WM-сообщений общего назначения:
[spoiler]
Clipboard Messages
Clipboard Notifications
Common Dialog Box Notifications
Cursor Notifications
Data Copy Message
Desktop Window Manager Messages
Device Management Messages
Dialog Box Notifications
Dynamic Data Exchange Messages
Dynamic Data Exchange Notifications
Hook Notifications
Keyboard Accelerator Messages
Keyboard Accelerator Notifications
Keyboard Input Messages
Keyboard Input Notifications
Menu Notifications
Mouse Input Notifications
Multiple Document Interface Messages
Raw Input Notifications
Scroll Bar Notifications
Timer Notifications
Window Messages
Window Notifications
[/spoiler]

А вот как выглядит вызов функции SendMessage под cpp:
Code: (cpp) [Select]
LRESULT WINAPI SendMessage(
  _In_ HWND   hWnd,
  _In_ UINT   Msg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);
Взято отсюда, также там есть пару ремарок про используемые параметры. А вот какой вид имеет функция отрисовки не для основного окна, а для диалогового:
[spoiler]
Code: (cpp) [Select]
BOOL CALLBACK DlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
default:
return FALSE;
}
}
[/spoiler]

Пока что не знаю, зачем точно это здесь и как именно это применить, но надеюсь, что здесь найдётся герой, изучащий всё это и ответящий нам на некоторые возникающие вопросы по месседжам.

3
Здравствуйте, есть такой вопрос.
У меня последняя версия кликера, Виндовс 8.0, отключил кликеру "Предотвращение выполнения данных" DEP (всё, как полагается).

Мне нужно снять скриншот экрана с всплывающей менюшкой, на которой размещён список открытых в системе окон, чтобы потом скрипт нашёл нужный мне пункт меню с программой и тыкнул в него для закрепления программы поверх всех окон. Но скриншот почему-то не снимается, пробовал даже давать кликеру привилегии админа, скриншоты с других областей экрана у меня делаются и распознаются успешно. Как я понимаю, эта меню представляет собой некий слой, который не виден на скрине, может быть, кто-то знает, как сделать этот слой видимым? Пробовал также привязку к этому меню и выполнение к нему WNDBUMP (). При этом сам фокус на меню, разумеется, происходит, и могу там перемещаться по пунктам меню из скрипта. Хотел ограничить зону поиска картинки пункта меню его явным местом нахождения, но поиск не находит картинку даже по всему экрану.

Или может кто подскажет другой быстрый способ, как зафиксировать окно определённой программы над всеми окнами, может даже напрямую из самого кликера или из другой утилитки, можно через команды (желательно именно так, если будет быстрее закрепить, чем через клики по if_picture_in). Спасибо.

Для справки: программка с этой менюшкой сидит в трее, и оттуда же открываю через скрипт эту меню, находит его нормально через if_picture_in, а вот дальше дело не идёт.

Если нужно, выложу код скрипта:
[spoiler=Поиск иконки программы в трее, вызов меню окна программы]
Code: (clickermann) [Select]
/keypress (#WIN)
move(0, $_ymax)
wait(0.7)
getscreen

/IF_PICTURE_IN (0,0, $_xmax,$_ymax, "ontop.bmp")
IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "ontop.bmp")
  print("ontop.bmp found at X=", $_return1, ", Y=", $_return2)
  move($_return1+5, $_return2+5)
rclick(-1,-1)
else
  print("ontop.bmp not found") 
END_IF

wait(1.5)
/keypress (#up)
/keypress (#up)
getscreen
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "redaktor.bmp")
/IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "redaktor.bmp")
  print("redaktor.bmp found at X=", $_return1, ", Y=", $_return2)
  move($_return1+5, $_return2+5)
/lclick(-1,-1)
else
  print("redaktor.bmp not found") 
END_IF


halt
wait(5)
+

/IF_PICTURE_IN (0,0, $_xmax,$_ymax, "tray.bmp")
IF_PICTURE_IN (1100,600, $_xmax,$_ymax, "tray.bmp")
  print("tray.bmp found at X=", $_return1, ", Y=", $_return2)
  move($_return1+3, $_return2+0)
/lclick(-1,-1)
else
  print("tray.bmp not found") 
END_IF


halt
[/spoiler]

Pages: [1]