<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; WSH: Ctrl+C+C - возможно ли как поймать]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8234&amp;type=atom" />
	<updated>2013-06-03T17:39:50Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=8234</id>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=72699#p72699" />
			<content type="html"><![CDATA[<p>Почему то никто не вспомнил простую и элегантную реализацию <a href="http://forum.script-coding.com/viewtopic.php?id=6955">мониторинга за содержимым буфера обмена by Serge Yolkin</a>.</p>]]></content>
			<author>
				<name><![CDATA[mozers]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=4112</uri>
			</author>
			<updated>2013-06-03T17:39:50Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=72699#p72699</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=72658#p72658" />
			<content type="html"><![CDATA[<p>Написал <a href="http://blog.daspot.ru/2013/06/keylogger-powershell-javascript.html">одно решение</a> с подачи этого поста. Не Ctrl+C+C, но клаву &quot;поймать&quot; может. Clipboard тоже. <br />Симбиоз платформ COM и .NET, Windows Management Framework, облачных сервисов Google, PowerShell и JavaScript.</p><p>Без отправки данных на сервер, на PowerShell ловить события клавиатуры и писать в локальный лог можно так:<br /></p><div class="codebox"><pre><code>
$MAPVK_VSC_TO_VK_EX = 0x03

$virtualkc_sig = @&#039;
[DllImport(&quot;user32.dll&quot;, CharSet=CharSet.Auto, ExactSpelling=true)] 
public static extern short GetAsyncKeyState(int virtualKeyCode); 
&#039;@

$kbstate_sig = @&#039;
[DllImport(&quot;user32.dll&quot;, CharSet=CharSet.Auto)]
public static extern int GetKeyboardState(byte[] keystate);
&#039;@

$mapchar_sig = @&#039;
[DllImport(&quot;user32.dll&quot;, CharSet=CharSet.Auto)]
public static extern int MapVirtualKey(uint uCode, int uMapType);
&#039;@

$tounicode_sig = @&#039;
[DllImport(&quot;user32.dll&quot;, CharSet=CharSet.Auto)]
public static extern int ToUnicode(uint wVirtKey, uint wScanCode, byte[] lpkeystate, System.Text.StringBuilder pwszBuff, int cchBuff, uint wFlags);
&#039;@

$getKeyState = Add-Type -MemberDefinition $virtualkc_sig -name &quot;Win32GetState&quot; -namespace Win32Functions -passThru
$getKBState = Add-Type -MemberDefinition $kbstate_sig -name &quot;Win32MyGetKeyboardState&quot; -namespace Win32Functions -passThru
$getKey = Add-Type -MemberDefinition $mapchar_sig -name &quot;Win32MyMapVirtualKey&quot; -namespace Win32Functions -passThru
$getUnicode = Add-Type -MemberDefinition $tounicode_sig -name &quot;Win32MyToUnicode&quot; -namespace Win32Functions -passThru

$ss_ms = 50 # выполнение кода в бесконечном цикле каждые 50 миллисекунд
$logfile = &quot;$env:temp\key.log&quot; # путь к файлу журнала

while ($true) {
    Start-Sleep -Milliseconds $ss_ms
    $gotit = &quot;&quot;
    for ($char = 1; $char -le 254; $char++) {        
        $gotit = $getKeyState::GetAsyncKeyState($char)
        if ($gotit -eq -32767) {
            $scancode = $getKey::MapVirtualKey($char, $MAPVK_VSC_TO_VK_EX)

            $kbstate = New-Object Byte[] 256
            $checkkbstate = $getKBState::GetKeyboardState($kbstate)

            $mychar = New-Object -TypeName &quot;System.Text.StringBuilder&quot;;
            $unicode_res = $getUnicode::ToUnicode($char, $scancode, $kbstate, $mychar, $mychar.Capacity, 0)

            if ($unicode_res -gt 0) {                
                [System.IO.File]::AppendAllText($logfile, $mychar.ToString(), [System.Text.Encoding]::Unicode)
            }
        }
    }
}
</code></pre></div><p>С буфером обмена решил так:<br /></p><div class="codebox"><pre><code>
Add-Type -AssemblyName System.Windows.Forms
$ss_ms = 500 # выполнение кода в бесконечном цикле каждые 500 миллисекунд
$cbtext = &quot;&quot;
$cbfile = &quot;$env:temp\сlipboard.log&quot; # путь к файлу журнала буфера обмена
while ($true) {
    Start-Sleep -Milliseconds $ss_ms
    $tb = New-Object System.Windows.Forms.TextBox
    $tb.Multiline = $true
    $tb.Paste()
    $cb = $tb.Text
    if ($cbtext -ne $cb) {
        $cbtext = $cb
        Out-File -FilePath $cbfile -Encoding Unicode -Append -InputObject $cbtext.ToString()        
    }
}
</code></pre></div><p>С буфером можно и так:<br /></p><div class="codebox"><pre><code>
$ss_ms = 500
$cbtext = &quot;&quot;
$logfile = &quot;$env:temp\сlipboard.log&quot; # путь к файлу журнала буфера обмена
while ($true) {
    Start-Sleep -Milliseconds $ss_ms
    $cb = [System.Windows.Clipboard]::GetText()
    if ($cbtext -ne $cb) {
        $cbtext = $cb
        Out-File -FilePath $logfile -Encoding Unicode -Append -InputObject $cbtext.ToString()        
    }
}
</code></pre></div><p>или так:<br /></p><div class="codebox"><pre><code>
Add-Type -AssemblyName System.Windows.Forms
$ss_ms = 500
$cbtext = &quot;&quot;
$logfile = &quot;$env:temp\key.log&quot;
while ($true) {
    Start-Sleep -Milliseconds $ss_ms
    $cb = [Windows.Forms.Clipboard]::GetText()
    if ($cbtext -ne $cb) {
        $cbtext = $cb
        Out-File -FilePath $logfile -Encoding Unicode -Append -InputObject $cbtext.ToString()        
    }
}
</code></pre></div><p>но таким образом через командлет Start-Job не прокатит.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2013-06-02T16:45:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=72658#p72658</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71466#p71466" />
			<content type="html"><![CDATA[<p><strong>2smaharbA</strong>:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>ну, так в чём проблема, покажите мастер-класс — решите задачу автора средствами WSH.</p></div></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2013-04-16T16:07:36Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71466#p71466</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71461#p71461" />
			<content type="html"><![CDATA[<p>не все так однозначно с авторами - когда пользователь излагает беду - если не решено - проблема в поддержке, а не в неумении изложить.</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2013-04-16T14:59:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71461#p71461</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71459#p71459" />
			<content type="html"><![CDATA[<p>создайте ярлык на рабстоле и замените хоткей</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2013-04-16T14:57:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71459#p71459</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71431#p71431" />
			<content type="html"><![CDATA[<p><strong>2 alexii:</strong> Мда... Печальный случай ) </p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>Ну что ж. Не будем ему мешать ломать зубы о гранит познания. )</p></div></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2013-04-16T07:57:49Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71431#p71431</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71424#p71424" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong>, проблема в том, что:</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>автору не хватает знаний о том, как организована операционная система изнутри, потому такой сумбур в изложении. Как следствия:<br />а) автор изначально не сумел толком объяснить <em>проблему</em>, а вместо этого начал излагать своё понимание <em>решения</em>;<br />б) на любые попытки разъяснения автор неадекватно реагирует.</p></div></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2013-04-15T20:42:58Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71424#p71424</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71423#p71423" />
			<content type="html"><![CDATA[<p>Спасибо, поправил. Давненько не брал в руки... <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2013-04-15T20:40:51Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71423#p71423</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71421#p71421" />
			<content type="html"><![CDATA[<p><span style="color: Green"><strong>dab00</strong>, поправьте часовой пояс у себя в профиле (<a href="http://forum.script-coding.com/profile.php?section=settings&amp;id=27085">Настройки</a>) с «Прибалтики» на корректный.</span></p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2013-04-15T20:37:32Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71421#p71421</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71419#p71419" />
			<content type="html"><![CDATA[<p>off: На мой взгляд вопрос решен. Похоже на <a href="http://forum.script-coding.com/viewtopic.php?id=8232">один из предыдущих постов</a>, надо понимать разницу между &quot;прошу помощи&quot; и &quot;сделай за меня&quot; <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Обратил внимание, что время поста - минус час от МСК - сервак не в прибалтике? или&nbsp; Кёнигсберге? Да неважно, есть же возможность каждому показывать локальное время.<br />p.s. Сорри, как вышел - время поста устаканилось <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />p.p.s. Как зашел - обратно прибалтика <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2013-04-15T20:11:48Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71419#p71419</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71418#p71418" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>У Вас <br />1) <strong>вначале пользователь обязан засунуть в clipboard</strong> по Ctrl+C нечто <br />2) <strong>а потом выполнить еще одно действие</strong> Ctrl+(Shift/Alt)+C<br /><strong>Кроме того - пользователю нужно еще объяснить, чтобы он не забыл</strong> создать неким особенным ( <strong>он такого обычно не делает</strong> ) образом ярлык при установке программы на свой комп .<br />...<br />Не - <strong>мне как-раз НЕ надо никаких дополнительных тулзов</strong> - самый что ни на есть <strong>нативный подход - только то, что Windows- только WSH</strong> .<br />...<br /><strong>Кстати, есть же какие-то (не помню, как их звать) оболочки в виде dll, вроде DynamicWrapperX</strong> или что-то в этом роде, которая умеет работать с COM объектами Windows, если мне склероз не изменяет . Что ж - с помощью их нельзя в скриптах поймать нажатие клавиши ? </p><p>Вопрос - как ?! <strong>Ну да - пользователю придется инсталлировать DynamicWrapperX</strong> , а может - даже и непридется -&nbsp; это в самом скрипте можно организовать.<br />...<br /><strong>Вы думаете я не знаю - что я хочу ?</strong></p></blockquote></div><p>Ребята, это аут... <span class="postimg"><img src="http://www.kolobok.us/smiles/big_madhouse/wacko3.gif" alt="http://www.kolobok.us/smiles/big_madhouse/wacko3.gif" /></span></p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2013-04-15T20:06:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71418#p71418</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71414#p71414" />
			<content type="html"><![CDATA[<p><strong>kefi</strong>, &quot;нативного&quot; подхода с подобной реализацией как у Лингво - считаю, что не будет, все же Лингво предварительно запускается и видимо его резидендный модуль просто следит, чтобы между двумя последовательными Ctrl+C был малый промежуток времени (не более, например, 2-3 сек) для инициализации старта перевода содержимого буфера.</p><p>Может еще и следящая за нажатыми хоткеями тулза на AutoIt поможет, хотя легче организовать облегченную для пользователя процедуру установки ярлыка с хоткеем Ctrl+Shift+C / Ctrl+Alt+C, т.к. резидентную тулзу ведь тоже надо будет предварительно устанавливать и стартовать.</p><br /><p><em>оффтоп<br />кстати, у меня на Лингво под WinXP комбинация Ctrl+C - Ctrl+C работает, а на Win-7 - уже нет, хотя в настройках наче и включена, правда версии Лингво немного разные...</em></p>]]></content>
			<author>
				<name><![CDATA[Rom5]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=5724</uri>
			</author>
			<updated>2013-04-15T19:04:54Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71414#p71414</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71406#p71406" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong>, это бесполезно <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />.</p><div class="quotebox"><blockquote><p>Я хочу супер банального:…</p></blockquote></div><p><strong>kefi</strong>, флаг Вам в руки. Два направления исследований Вам были указаны.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2013-04-15T15:58:48Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71406#p71406</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71394#p71394" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Если текст где то выделяется, значит интерфейс уже какой то есть. Текст же рисуется не на рабочем столе, а в форме (окне) некоторого приложения ? Опять же, логичный вопрос, приложение чужое или собственной разработки ?</p></blockquote></div><p>К чему говорить о каком-то приложении ( второй день пошел , как толкем воду - видимо, все настолько ясно, что никто из корифеев не может осознать , что могут быть столь простейшие желания, придумывая какие-то сложности в постановке <br />Вот к чему эти придирки :<br /></p><div class="quotebox"><blockquote><p>само описание сочетания клавиш Ctrl+C+C как минимум странно. alexii не зря вас поправил &quot;Ctrl-C,C&quot;. Знак &quot;+&quot; в сочетании клавиш обозначает одновременное нажатие (зажатие) клавиш. И одну и туже клавишу &quot;зажать&quot; несколько раз невозможно</p></blockquote></div><p>ну понятно же - что невозможно одновременно нажать одну и ту же клавишу, так чего тут мусолить этот момент ?<br />Или&nbsp; - эти рассуждения, что &quot;алгоритму нельзя передать управление&quot; - что за иезуитская софистика !?<br />)</p><p>Так вот , неважно в каком приложении - я же сразу сказал - ВЕЗДЕ, где только в Windows возможно это сделать ( выделить текст и послать его в буфер) - в любом месте , где работает текстовый редактор Windows&nbsp; - да, хоть при переименовании имени ярлыка . Разговор об интерфейсе тут ни к чему.</p><div class="quotebox"><blockquote><p>Я стараюсь Вам помочь понять, чего Вы хотите. )</p></blockquote></div><p>Вы думаете я не знаю - что я хочу ? Я просто удивлен, что столь примитивные желания приходится толочь в объяснениях целый день, после чего alexii заявляет , что это невозможно - а чтоб сразу не сказать ( ?! )...</p><p>Я хочу супер банального: пользователь выделяет текст , отправляет его по Ctrl+C в буфер обмена, после добавляет быстренько (видимо, с настраиваемой в программе задержкой) еще одно нажатие C ( типа , как мы это делаем при вызове переводчика Lingvo, только там Ctrl+Ins+Ins ) и&nbsp; - как результат, видит у себя на экране некое окошечко , выданное обсуждаемой программкой. Все. Система WinXP SP3, PowerShell не знаю - есть там или нет - точнее, просто не знаю про PowerShell ничего ( это для ясности ).</p>]]></content>
			<author>
				<name><![CDATA[kefi]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24608</uri>
			</author>
			<updated>2013-04-15T15:00:25Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71394#p71394</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: WSH: Ctrl+C+C - возможно ли как поймать]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=71389#p71389" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>kefi пишет:</cite><blockquote><p>Про keylogger - это Ваше объяснение или Ваш вопрос мне ?</p></blockquote></div><p>Это и вопрос и предположение. </p><div class="quotebox"><blockquote><p>просто удобная вызывалка алгоритма расчета после того, как тот&nbsp; отправит в буфер число, выделенное в тексте</p></blockquote></div><p>Если текст где то выделяется, значит интерфейс уже какой то есть. Текст же рисуется не на рабочем столе, а в форме (окне) некоторого приложения ? Опять же, логичный вопрос, приложение чужое или собственной разработки ?</p><p>P.S &quot;Вызвать алгоритм&quot; нельзя. Вызвать можно неотложку, такси, врача или демона на крайний случай. ) А алгоритм можно составить. ) Ибо он всего лишь - </p><div class="quotebox"><blockquote><p>набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий.</p></blockquote></div><p> Нет. Я не придираюсь к словам. Я стараюсь Вам помочь понять, чего Вы хотите. )</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2013-04-15T13:49:42Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=71389#p71389</id>
		</entry>
</feed>
