「ahk」を含む日記 RSS

はてなキーワード: ahkとは

2025-06-13

我が名はサイボーグdorawii

パーマリンク署名対象にするより堅牢自動化を作れた。

一度投稿したうえで別タブを開いてプログラム的(fetch)に送信してその別タブが閉じられる仕組み。

改めてスクリプト配布しちゃる

最初投稿してエントリページに移動した親タブ側のjsコード
// ==UserScript==
      // @name         PGP署名検出と別タブ自動編集
      // @namespace    http://tampermonkey.net/
      // @version      1.0
      // @description  PGP署名がない投稿自動編集ページへ誘導
      // @match        https://anond.hatelabo.jp/*
      // @grant        GM_setValue
      // @grant        GM_getValue
      // @grant        GM.openInTab
      // ==/UserScript==

      (function () {
        'use strict';

        const body = document.getElementById('entry-page');
        if (!body) return;

        const titleText = document.title;
        if (!titleText.includes('dorawii')) return;

        const pgpRegex = /BEGIN.*PGP(?: SIGNED MESSAGE| SIGNATURE)?/;
        const preElements = document.querySelectorAll('div.body pre');
        let hasPgpSignature = false;

        for (const pre of preElements) {
          if (pgpRegex.test(pre.textContent)) {
            hasPgpSignature = true;
            break;
          }
        }

        if (hasPgpSignature) return;

        const editLink = document.querySelector('a.edit');
        const childTab = GM.openInTab(editLink.href, { active: false, insert: true, setParent: true });

      })();
親タブから開かれる編集ページの子タブのjsコード
 // ==UserScript==
      // @name         編集ページ処理と自動送信・閉じ
      // @namespace    http://tampermonkey.net/
      // @version      1.0
      // @description  編集ページで署名処理と送信、タブ自動閉じ
      // @match        https://anond.hatelabo.jp/dorawii_31/edit?id=*
      // @grant        GM_getValue
      // @grant        GM_xmlhttpRequest
      // @grant        GM_setClipboard
      // @grant        GM_notification
      // @connect      localhost
      // ==/UserScript==

      (async function () {
        'use strict';

        const shouldRun = await GM_getValue('open-tab-for-edit', '0');

        const textareaId = 'text-body';
        const textarea = document.getElementById(textareaId);

        if (!textarea) return;

        const content = textarea.value;

        const pgpSignatureRegex = /-----BEGIN PGP SIGNED MESSAGE-----[\s\S]+?-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/;
        if (pgpSignatureRegex.test(content)) {
          console.log('[PGPスクリプト] 署名が検出されたためそのまま送信します');
          return;
        }

        const httpRequest = (url, data) => {
          return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
              method: 'POST',
              url: url,
              headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
              data: `value=${encodeURIComponent(data)}`,
              onload: function (response) {
                resolve(response.responseText);
              },
              onerror: function (error) {
                reject(error);
              }
            });
          });
        };


        // textarea の値を取得
        // 1. 現在のページのURLからURLオブジェクト作成
        const currentUrl = new URL(window.location.href);

        // 2. ベースとなる部分 (例: "https://anond.hatelabo.jp") を取得
        const origin = currentUrl.origin;

        // 3. 'id' パラメータの値 (例: "20250610184705") を取得
        const idValue = currentUrl.searchParams.get('id');

        // 4. ベース部分とIDを結合して、目的URL文字列を生成
        //    idValueが取得できた場合のみ実行する
        let newUrl = null;
        if (idValue) {
          newUrl = `${origin}/${idValue}`;
        }

        // 5. 生成されたURL変数に代入し、コンソールに出力して確認
        console.log(newUrl);
        const valueToSend = newUrl;

        try {
          const signatureText = await httpRequest('http://localhost:12345/run-batch', valueToSend);
          console.log('バッチ応答:', signatureText);
          if (!signatureText.includes('BEGIN PGP SIGNED MESSAGE')) {
            alert('PGP署名クリップボードに見つかりませんでした。');
            return;
          }

          const newText = content.replace(/\s*$/, '') + '\n' + signatureText + '\n';
          textarea.value = newText;

          console.log('[PGPスクリプト] 署名を貼り付けました。送信を再開します。');


          const form = document.forms.edit;

          const newForm = form.cloneNode(true);
          form.replaceWith(newForm);

          newForm.addEventListener('submit', async (e) => {
            e.preventDefault(); // HTML標準のsubmitをキャンセル
            const bodyText = textarea?.value || '';

            // reCAPTCHA トークンの取得
            const recaptchaToken = await new Promise((resolve) => {
              grecaptcha.enterprise.ready(() => {
                grecaptcha.enterprise.execute('hoge', { action: 'EDIT' })
                  .then(resolve);
              });
            });

            // POSTするデータの構築
            const formData = new FormData(newForm);
            formData.set('body', bodyText);
            formData.set('recaptcha_token', recaptchaToken);
            formData.set('edit', '1');
            try {
              const response = await fetch(newForm.action, {
                method: 'POST',
                body: formData,
                credentials: 'same-origin'
              });


              if (response.ok) {
                console.log('送信成功');
                window.close();


              } else {
                console.error('送信失敗', response.status);
              }
            } catch (err) {
              console.error('送信中にエラーが発生', err);
            }

          });

          // プログラム的に送信トリガー
          newForm.dispatchEvent(new Event('submit', { bubbles: true }));

        } catch (e) {
          console.error('バッチ呼び出し失敗:', e);
        }

      })();
node.jsで動かすローカルサーバーコード
const http = require('http');
const { exec } = require('child_process');
const querystring = require('querystring');

const server = http.createServer((req, res) => {
  if (req.method === 'GET' && req.url === '/ping') {
    res.writeHead(200);
    res.end('pong');
  } else if (req.method === 'POST' && req.url === '/run-batch') {
    let body = '';

    req.on('data', chunk => {
      body += chunk.toString();
    });

    req.on('end', () => {
      const parsed = querystring.parse(body);
      const value = parsed.value || 'default';

      // 値を引数としてバッチに渡す
      exec(`C:\\Users\\hoge\\Desktop\\makesign.bat "${value}"`, { encoding: 'utf8' }, (err, stdout, stderr) => {
        if (err) {
          res.writeHead(500);
          res.end('Error executing batch: ' + stderr);
        } else {
          res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
          res.end(stdout.trim());
        }
      });
    });

  } else {
    res.writeHead(404);
    res.end('Not found');
  }
});

server.listen(12345, () => {
  console.log('Batch server running at http://localhost:12345/');
});
@echo off
setlocal enabledelayedexpansion


:: 署名するファイルset "infile=%~1"
set outfile=%TEMP%\pgp_output.asc

:: 以前の出力があれば削除
if exist "%outfile%" del "%outfile%"


:signloop
:: AutoHotkeyパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える)
start "" /b "C:\Users\hoge\Documents\AutoHotkey\autopass.ahk"

:: PGPクリア署名作成
echo %infile% | gpg --yes --clearsign --output "%outfile%"


:: 署名成功していればループを抜ける
if exist "%outfile%" (

    goto postprocess
) else (

    timeout /t 1 > nul
    goto signloop
)
:postprocess

powershell -nologo -command ^
  "$header = '>|'; $footer = '|<'; $body = Get-Content '%outfile%' -Raw; Write-Output ($header + \"`r`n\" + $body + $footer)"

powershell -nologo -command ^
  "$header = '>|'; $footer = '|<'; $body = Get-Content 'signed.asc' -Raw; Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)"

endlocal
exit /b
AutoHotkey(以前と同じ)
#Persistent
#SingleInstance ignore
SetTitleMatchMode, 2
WinWaitActive, pinentry
SendInput password
Sleep 100
SendInput {Enter}
ExitApp

動けばいいという考えで作っているので余分なコードも含んでいるかもしれない。

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

https://anond.hatelabo.jp/20250613185036 
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEv1FQAKCRBwMdsubs4+
SHHkAQDUOLgBcdji2T6MJ7h/vlMdFfGlWAzNdXijjE1gIuEPywEAiMNMZqhrMmtl
c7UqRuggNJ/UTa5xTIcKp622+7jJQQg=
=Lgkl
-----END PGP SIGNATURE-----

2025-06-09

dorawii

ようやく(ほぼ)すべてが自動化された。

あとはローカルサーバーの起動をスタートアップに設定する(方法AIに聞いて指示に従う)だけの消化試合

ここにほとんどAI頼りのコードを公開しておく。

事前にインストールしておくもの

autohotkey

nodejs

ユーザースクリプトを実行できる拡張機能

パスとかの注意

署名要求してくるパスワードを自動入力するahkファイルドキュメントAutoHotkey配下に置いた。

バッチファイル(make.sign.bat)はデスクトップに置いた。

以下コード

autopass.ahk
#Persistent
#SingleInstance ignore
SetTitleMatchMode, 2
WinWaitActive, pinentry
SendInput お前のパスワード
Sleep 100
SendInput {Enter}
ExitApp
run-bacth-server.js
// run-batch-server.js
const http = require('http');
const { exec } = require('child_process');

const server = http.createServer((req, res) => {
  if (req.url === '/ping') {
    res.writeHead(200);
    res.end('pong');
  } else if (req.url === '/run-batch') {
    exec('C:\\Users\\you\\Desktop\\makesign.bat', (err) => {
      res.writeHead(200);
      res.end(err ? 'Error' : 'OK');
    })
    ;
  } else {
    res.writeHead(404);
    res.end('Not found');
  }
});

server.listen(12345, () => {
  console.log('Batch server running at http://localhost:12345/');
});
makesign.bat
@echo off
setlocal enabledelayedexpansion

:: ミリ秒単位UTC時刻を取得
for /f %%a in ('powershell -nologo -command "[int64]::Parse((Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmssfff'))"') do set timestamp=%%a

:: 署名するファイルset infile=%TEMP%\pgp_input.txt
set outfile=%TEMP%\pgp_output.asc

:: 以前の出力があれば削除
if exist "%outfile%" del "%outfile%"

:: タイムスタンプを原文として保存
echo %timestamp% > "%infile%"

:signloop
:: AutoHotkeyパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える)
start "" /b "C:\Users\infini\Documents\AutoHotkey\autopass.ahk"

:: PGPクリア署名作成
gpg --yes --clearsign --output "%outfile%" "%infile%"


:: 署名成功していればループを抜ける
if exist "%outfile%" (
    echo [INFO] 署名成功
    goto postprocess
) else (
    echo [WARN] 署名失敗、再試行します…
    timeout /t 1 > nul
    goto signloop
)
:postprocess

:: PowerShellで余計な改行なしに |< をつけてクリップボードコピー
powershell -nologo -command ^
  "$header = '>|'; $footer = '|<'; $body = Get-Content '%outfile%' -Raw; Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)"

echo Done. signed.asc created and clipboard updated (no extra blank line).
endlocal
exit /b
tempermonkeyとかに登録するユーザースクリプト
// ==UserScript==
// @name         PGP署名自動付加スクリプト(GM_xmlhttpRequest版)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  投稿前にPGP署名を付けてから送信(fetch未使用)
// @match        https://anond.hatelabo.jp/dorawii_31/edit*
// @grant        GM_xmlhttpRequest
// @grant        GM_setClipboard
// @grant        GM_notification
// / @connect      localhost
// ==/UserScript==

(function () {
  'use strict';

  const submitId = 'submit-button';
  const textareaId = 'text-body';
  const localServer = 'http://localhost:12345/run-batch';

  const pgpSignatureRegex = /-----BEGIN PGP SIGNED MESSAGE-----[\s\S]+?-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/;

  const httpRequest = (url) => {
    return new Promise((resolve, reject) => {
      GM_xmlhttpRequest({
        method: 'GET',
        url: url,
        onload: function (response) {
          resolve(response.responseText);
        },
        onerror: function (error) {
          reject(error);
        }
      });
    });
  };

  const interceptClick = () => {
    const btn = document.getElementById(submitId);
    if (!btn || btn.dataset.pgpIntercepted === 'true') return;
    btn.dataset.pgpIntercepted = 'true';

    btn.addEventListener('click', async function (e) {
      const textarea = document.getElementById(textareaId);
      if (!textarea) return;

      const content = textarea.value;

      if (pgpSignatureRegex.test(content)) {
        console.log('[PGPスクリプト] 署名が検出されたためそのまま送信します');
        return;
      }

      e.preventDefault();
      e.stopImmediatePropagation();
      console.log('[PGPスクリプト] 署名が見つからないため処理を停止し、署名を取得します');

      try {
        await httpRequest(localServer); // バッチ実行

        const signatureText = await navigator.clipboard.readText();
        if (!signatureText.includes('BEGIN PGP SIGNED MESSAGE')) {
          alert('PGP署名クリップボードに見つかりませんでした。');
          return;
        }

        const newText = content.replace(/\s*$/, '') + '\n' + signatureText + '\n';
        textarea.value = newText;

        console.log('[PGPスクリプト] 署名を貼り付けました。送信を再開します。');
        btn.click(); // イベント再発火

      } catch (err) {
        alert('PGP署名の取得または貼り付けに失敗しました。\n' + err);
      }
    }, true);
  };

  window.addEventListener('load', () => {
    setTimeout(interceptClick, 1000);
  });
})();

プロミスメソッドとか全然まだ理解してなくてそのなかに関数代入したその関数オブジェクトプロパティresponseを?いやまあそのあたりのコードが示すデータの流れが全然理解できないような人間でもここまでできちゃった。

AIすごいなと思うよ。そして思うのは今後重要になってくるのは文法とか自体に詳しいことじゃなくて、そのプログラムの処理内容を指示できるシステムエンジニア的な言語化能力のほうじゃないかなと思った。

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

20250609111559680 
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEbCbwAKCRBwMdsubs4+
SLueAPwOv7PBk4voAe5qlcCEvs/PJhmKc5QAb/1R43JMQFuDZgD/UTPEKsL/PhK9
jFGv2HDXK1dVjLNwvosgX9uYJh5xxwY=
=qiOE
-----END PGP SIGNATURE-----

2021-05-05

濁点喘ぎや♡喘ぎの゛や♡を楽に書く方法

動機

濁点喘ぎや♡喘ぎのあるエロ小説が大好きで、もっと読みたいから。

自分エロ小説を書けなかったので、書ける人にもっとたくさん書いてほしいから。

あと、自分AutoHotkeyを入れてからだいぶたってしまったので、導入がおぼろげなのは申し訳ない。

そして肝心の、一番お世話になったサイトを忘れてしまった。最悪だ。見つけたら絶対貼る。

見つけた。これだ。

書き終わってから見つけた。

https://clrmemory.com/pc-mobile/windows/autohotkey-any-character/

前提

技術系に詳しくないのでカンベン。

スマホエロ小説書いてる人は申し訳ない。

参考

http://ahkwiki.net/Top

AutoHotkeywiki。困ったらここを見る。

大まかな手順

  1. AutoHotkeyを入れる
  2. スクリプト作成編集する
  3. スクリプトを実行する
  4. エロ小説を書く
  5. スクリプトを停止する)
AutoHotkeyを入れる

https://autohotkey.com/download/

公式サイトからダウンロードする。

ダウンロードしたインストーラーを実行する。

(ここがおぼろげなのがひたすらに申し訳ない)

スクリプト作成編集する

どこかフォルダを作る。後々、他に必要ファイルも入れていく。

自分ドキュメントフォルダの中に「小説フォルダ」を作成した。

新しく作ったそのフォルダの中で、右クリック新規作成→「AutoHotkey Script」を選択

自分は「小説用.ahk」にした。

作成したahkファイル右クリックプログラムから開く→エディタで開く(最初から入ってる「メモ帳」でOK

開いたらなんか初期状態で書いてあるけど気にしなくてよし。ってか自分はよくわからなかったから削除した。はいまっさら

とりあえず以下の内容にして保存。(最初からあった文章は消してしまったので、まんまこの内容)

#Include IME.ahk
;;;Pgupで♡
Pgup::
  ime := IME_Get()
  IME_Set(0)
  Send, ♡
  IME_Set(ime)
return
;;;PgDnで゛
PgDn::
  ime := IME_Get()
  IME_Set(0)
  Send, ゛
  IME_Set(ime)
return

保存した?よし。閉じていいよ。

おっとそうだ、さっきのフォルダに入れなきゃいけないのがあった。

IME.ahk」のファイルが要る。

http://ahkwiki.net/Trouble

の「AutoHotkey_L固有の不具合」にあるが、詳しくわからないのでとりあえず、

https://w.atwiki.jp/eamat/pages/17.html

からダウンロードzipなので展開する。

中にあるフォルダANSIかUTF8)の中のIME.ahkコピーして、さっき新規作成したフォルダ自分なら「小説用」)にペースト

どっちのフォルダのを入れたかは忘れた…。

持ってこれた?おっしゃ

そしたらIME.ahk編集する。

編集内容はお世話になったサイトに書いてあったんだけど、忘れたのでもう全部ここに貼ってやろう。

と思ったけど多かったので、消す部分だけ貼る。以下のやつを消さないと、実行したときに「ンンンンンン」ってなる。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;
; 動作確認用 内部ルーチン (マウスカーソル位置ウィンドウIME状態を見る)
;  単体起動時のテスト用なので削除しても問題なし
_ImeAutoExecuteSample:
    Hotkey,#1,_ImeGetTest
    Hotkey,#2,_ImeSetTest
    Hotkey,#3,_ImeIsConvertingTest
    Hotkey,+ESC,_ImeTestExt
    SetTimer,_ImeInfoTimer,ON
return

;--- IME状態表示タイマ ---
_ImeInfoTimer:
    Tooltip,% "IME_GET			: "     . IME_GET(_mhwnd())             . "`n"
          .  "IME_GetConvMode		: " . IME_GetConvMode(_mhwnd())     . "`n"
          .  "IME_GetSentenceMode	: " . IME_GetSentenceMode(_mhwnd()) . "`n"
          .  "IME_GetConverting	: "     . IME_GetConverting(_mhwnd())
return

;--- IME Get Test [Win]+[1] ---
_ImeGetTest:
    MsgBox,% "IME_GET			: "     . IME_GET(_mhwnd())             . "`n"
          .  "IME_GetConvMode		: " . IME_GetConvMode(_mhwnd())     . "`n"
          .  "IME_GetSentenceMode	: " . IME_GetSentenceMode(_mhwnd()) . "`n"
return
;--- IME Get Test [Win]+[2] ---
_ImeSetTest:
    MsgBox,% "IME_SET			: "     . IME_SET(1,_mhwnd())             . "`n"
          .  "IME_SetConvMode		: " . IME_SetConvMode(0x08,_mhwnd())  . "`n"
          .  "IME_SetSentenceMode	: " . IME_SetSentenceMode(1,_mhwnd()) . "`n"
return

_mhwnd(){	;background test
	MouseGetPos,x,,hwnd
	return "ahk_id " . hwnd
}

;------------------------------------------------------------------
; IME窓のクラス名を調べるテストルーチン
;   入力or変換状態Ime窓にマウスカーソル持ってって [Win]+[3]押す
;   Clipboardに Class名がコピーされる。入力窓/候補窓 それぞれ調べる。
;   調べたクラス名は 正規表現になおして
;      IME_GetConverting("A","入力クラス","候補クラス")
;   とかやって使う。(もしくは IME_GetConverting()の中に直接追加する)
;
;   あああ    ← 入力窓の上に マウスカーソル持ってって [Win]+[3]押す
;    ̄ ̄ ̄       Clipboardに Class名がコピーされる。
;                ※ MS Office系のシームレス入力状態では取れないっぽい
;                   DetectHiddenWindows,ONでもダメシームレスOFFにしないと無理
;
;   愛
;  |愛   | ← 候補窓の上にマウスカーソル持ってって [Win]+[3]押す
;  |亜依  |    Clipboardに Class名がコピーされる。
;  |あい  |
;  |藍   |
;  | :  |
;   ̄ ̄ ̄ ̄
;------------------------------------------------------------------
_ImeIsConvertingTest:
    _ImeTestClassCheck()
return
_ImeTestClassCheck()  {
    MouseGetPos,,,hwnd
    WinGetClass,Imeclass,ahk_id %hwnd%
    Clipboard := Imeclass
    ;IME_GetConverting() 動作チェック & IME 入力窓/候補 Class確認
    MsgBox,% Imeclass "`n" IME_GetConverting()
}
;--- 常駐テスト終了 [Shift]+[ESC] ---
_ImeTestExt:
ExitApp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

消して保存した?おし

ファイル作成編集はこれでOK

スクリプトを実行する

小説用.ahk」(自分作成したほうのファイル)を右クリックで「Run script」で実行できる。

が、ショートカット作成できる。作成して別なところに置いたほうが楽な人はそうするとOK

コンパイルしないといけない……かと思いきや、しなくても実行できたから、コンパイルは要らないか。まぁいいか

もし「要るよ」って人がいたら、作ったほうのファイル右クリックして「Compile なんちゃら」でコンパイルできるので、どうぞ。

しなくても大丈夫なのであまり気にしなくてよさそう。

エロ小説を書く

使い方。まずは実行開始から

作成したファイルダブルクリック

ショートカットなら、ショートカットダブルクリック

コンパイルしたなら、コンパイルしたやつをダブルクリック

開始時になんかちっちゃいウィンドウが出てくるが、気にせず「OK」を押していい。(出ないかも)

さっきのスクリプトの中身は

が打てるようになる。

注意点としては、

他のキー割り当て一覧

http://ahkwiki.net/KeyList

書いてみよう。

「あ゛あ゛あ゛♡♡♡♡」

どうしても「一度変換を確定しないといけない」というのがちょっとひっかかるが、それでもわざわざ濁点を変換して入れたり、ダブルクォートを代わりに使うよりはいい。

喘ぎ声はひらがなカタカナが多いから変換を確定せずに打てるのが一番いいが、コツをつかめばきっと上手く活用できるはず。活用してください。

スクリプトを停止する

意外と忘れがちだが、大事

これをしないと、家族との共用パソコンを使っているならば、

「なんでこのキー押すと濁点とハートが出るの?」

という家族からの痛い追及を被ることになる。

画面右下の上矢印を押すと、いろいろ出てくる。

その中に、緑背景に白文字のHのアイコンがある。

これを右クリックExitで停止。

もう誰もこのエロ小説スクリプトが実行されていたなんて気づかない。

終わり

もっと便利にしたいときは、AutoHotkeywikiが参考になるはず。

http://ahkwiki.net/Top

他にも、ホットキーとかショートカットキーとかでいろいろある。

でも「特定文字入力する」はAutoHotkeyでないとできなさそうだった(自分が見つけられた範囲では)

世の中に濁点喘ぎと♡喘ぎの小説が増えますように。

もっ゛とかい゛てぇ゛ぇ゛ぇ゛ぇ゛ぇ゛♡゛♡♡♡♡

み゛た゛い゛の゛お゛お゛お゛お゛お゛♡♡♡♡♡♡

2020-09-20

SHK

なんでNHKはSHKに改称しないの?

大体、AHKに改称する前にそのチャンス逃してるし

https://anond.hatelabo.jp/20200920165342

2019-07-27

anond:20190724165035

ほんとそれ。

現時点の状況ではどう考えてもAHKって名乗らないとおかしい。

2019-02-09

NHKっていつまでAHKじゃなくてNHKって名乗り続けるつもり?

さすがにそりゃないでしょ?

2019-01-27

anond:20190127085214

映画じゃないけど昨日の夜AHKで、ゾンビが出たか人生考え直した件ってみちゃったよ💦

2019-01-19

NHKってなんでAHKに改称しないの?

マジで意味わかんねえんだけど?

2018-11-07

anond:20181107002636

なんでNHKってAHKに改称しないんだろうね?

おかしいよね?

2018-10-31

なんでNHKってAHKに改称しないの?

まじでわかんないんだけど

2017-06-01

\ を打つときってキーボードの右上と右下どっち使ってる?

PC上級者の多いはてな民なら、パス区切り文字とか制御文字的な意味ときバックスラッシュの右下で、円マークって意味なら右上とか使い分けてるよね

私は全部右上だけど




おまけ

思いつきで ahk 使って右上の円マークだとバックスラッシュじゃなくて本当に円マーク入力できるようにしてみた

\::Send, ¥

バックスラッシュは使っても円マークって要らないことに気づいた

2017-04-24

http://anond.hatelabo.jp/20170423213123

a-zと0-9とその他記号系は普通に文字入力

Space/Enter/Backspace/Delete文字入力

Ctrl/Shift/Alt/Winは各種ショートカット

F1ヘルプ

F2名前変更。エクセルセル編集とかも

F3検索

F4 はAltと押してウィンドウ閉じる。単体は個人的には独自ショートカットに割り当ててるから使ったこと無い。

F5 はリロード

F6IMEひらがな

F7 はIMEカタカナ

F8IMEで半角カタカナ

F9 はIMEで全角アルファベット

F10 はIMEで半角アルファベット

F11 は全画面

F12 はブラウザ開発者ツール出す

ESC はいろいろなキャンセルっぽいときに使える。一番使うのはタスクマネージャにCtrl-Shift-ESC。ChromeだとShift-ESC

PrtScr はスクショ。Altと押すことが多め。

ScrollLock はエクセルスクロールのしかた変えるとき

PauseBreak はコマンドプロンプトの流れていくのを一時的に止めるとき

Insert は上書きモードにしたいとき。あと、ShiftやCtrlと組み合わせてカットコピーになるソフトがある

PgUp/PgDn はネットみてるときエディタで一気にスクロールしたいとき

Home/End もブラウザ最初最後に飛んだり、エディタで行もしくは全体の最初最後に飛ぶ時

Tabフォーカス切り替え。あとプログラムとか書くならインデント

CapsLock はShiftと押して大文字固定にしたり、単体で押してアルファベット入力だけどIME使いたいときの切り替えとか

半角全角はIMEの切り替え

NumLock はテンキー付きなら常時ONでいいんだけど、テンキー無しのキーボードテンキー配列入力したいときに押す

無変換はひらがなカタカナ・半角カタカナに切り替えるときに。F6/F7/F8でもいい。個人的にはAHKで修飾キーにもしてる

変換は入力確定したのをIMEで再編集するとき。稀にスペースキーバグって変換できないときにスペース代わりに押したこともある

右側Ctrl/Alt/Shiftはめったに使わないけど、片手で操作したいときVirtualBox特殊キーに使う(安いキーボードだとたまにない)

アプリケーションキー?は右クリック代わり。webページで右クリック禁止されてるときにこっち押したりする

ひらがなカタカナローマ字は使ったこと無い。

Fnキーキーが足りないキーボードについててWi-Fiや画面表示や外部接続の切り替えとかPCキーボード)ごとにいろいろできる。

余り使わないのはあっても、全く使わないはほとんどなかった。

2017-03-03

http://anond.hatelabo.jp/20170303122424

git →ぎっと

ifttt →?

str →すとりんぐ

char →ちゃー

ieeeあいとりぷるいー

eth0 →いーさぜろ

ifcfg →あいえふこふぃぐ

ifconfig →あいえふこんふぃぐ

ptr →?

txt →てきすと

bat →ばっち

ahk →?

py →び

rb →るびーは使わない

win7 →うぃんなな

win10 →うぃんじゅう

asus →あすす

which →ふぃっち

http://anond.hatelabo.jp/20170303122424

git → 「ギット」

ifttt → 使ったことがない

str → 「ストリング」「ストラ」

char → 「キャラ

ieee → 「アイイーイーイー」

eth0 → 「イーサゼロ

ifcfg → 「アイエフコンフィグ

ifconfig → 「アイエフコンフィグ

ptr → 「ポインタ

txt → 「テキスト

bat → 「バッチ

ahk → 使ったことがない

py → 「パイ

rb → 「ルビー

win7 → 「ウィンセブン

win10 → 「ウィンテン」

asus → 「エイスース

which → 「ウィッチ

基本的略称系は全部略す前で読んでるな。

http://anond.hatelabo.jp/20170303122424

str → ストア

それだと string を指すときにも store を連想しちゃわない?

これらの IT 用語をどう読むか教えてほしい

ちなみに俺はこう。

2011-08-30

キーボードリマップ 2011_08_29_

AutoHotKey・KeySwap・Atok2005を使った

また、これは AutoHotkey.ahk (AutoHotkey設定ファイル) 自身でもある。

なお、Atokでのキーボードリマップは、以下の通り。

ATOKプロパティ  =>キーローマ字・色 タブ =>キーカスタマイズ 

ここから

────────────────────

; IMPORTANT INFO ABOUT GETTING STARTED: Lines that start with a

; semicolon, such as this one, are comments. They are not executed.

; This script has a special filename and path because it is automatically

; launched when you run the program directly. Also, any text file whose

; name ends in .ahk is associated with the program, which means that it

; can be launched simply by double-clicking it. You can have as many .ahk

; files as you want, located in any folder. You can also run more than

; one ahk file simultaneously and each will get its own tray icon.

; SAMPLE HOTKEYS: Below are two sample hotkeys. The first is Win+Z and it

; launches a web site in the default browser. The second is Control+Alt+N

; and it launches a new Notepad window (or activates an existing one). To

; try out these hotkeys, run AutoHotkey again, which will load this file.

#z::Run www.autohotkey.com

^!n::

IfWinExist Untitled - Notepad

WinActivate

else

Run Notepad

return

; Note: From now on whenever you run AutoHotkey directly, this script

; will be loaded. So feel free to customize it to suit your needs.

; Please read the QUICK-START TUTORIAL near the top of the help file.

; It explains how to perform common automation tasks such as sending

; keystrokes and mouse clicks. It also explains more about hotkeys.

; ! → Alt

; ^ → Control

; + → Shift

;────AutoHotKey.ahk のキーボードリマップ 2011_08_29_

; 変換 = IME ON (日本語)  =>Atok機能で実現

; 無変換 = IME OFF (英語)  =>Atok機能で実現

; カタカナ = F7  =>KeySwapで実現

; CapsLock = F10  =>KeySwapで実現

; 右Alt = Home  =>KeySwapで実現

; 右Ctrl = End   =>KeySwapで実現

; その他はAutoHotKey機能で実現。

;vk1D::return ;無変換キー単体で動かないようにする

;RShift::^z ;右Shift で Ctrl+z

;SC07B & Space::send,{Blind}{Enter} ;無変換+Space で Enter

;SC07B & j::send,{Blind}{Home} ;無変換+j で Home

;SC07B & k::send,{Blind}{End} ;無変換+k で End

;SC07B & h::send,{Blind}^{Home} ;無変換+h で Ctr+Home

;SC07B & l::send,{Blind}^{End} ;無変換+l で Ctr+End

;SC07B & u::send,{Blind}{} ;無変換+u で

;SC07B & i::send,{Blind}{} ;無変換+i で

;SC07B & LButton::send,{Blind}{Home} ;無変換 + LButton でHome

;SC07B & RButton::send,{Blind}{End} ;無変換 + RButton でEnd  =>Ctrlと組み合わせ可。

;SC07B & y::send,{Blind}^{ } ;無変換+y で Ctr+

;SC07B & o::send,{Blind}^{ } ;無変換+o で Ctr+

;SC07B & w::send,{Blind}{Home} ;無変換+w で Home

;SC07B & r::send,{Blind}{End} ;無変換+r で End

;SC07B & e::send,{Blind}{Up} ;無変換+e で Up

;SC07B & d::send,{Blind}{Down} ;無変換+d で Down

;SC07B & f::send,{Blind}{Right} ;無変換+f で Right

;SC07B & s::send,{Blind}{Left} ;無変換+s で Left

1::+1 ;1 を Shift+1 に(記号にする)

2::+2 ;2 を Shift+2 に

3::+3 ;3 を Shift+3 に

4::+4 ;4 を Shift+4 に

5::+5 ;5 を Shift+5 に

6::+6 ;6 を Shift+6 に

7::+7 ;7 を Shift+7 に

8::+8 ;8 を Shift+8 に

9::+9 ;9 を Shift+9 に

0::+- ;0 を Shift+- に

\::+\ ;\ を Shift+\ に

;──────────────────── http://nanabit.net/softwares/autohotkey/

; Alt+F6 (例:2011_08_04_)

; Ctrl+F6 (例:03:48)

; Alt+Ctrl+F6 (例:2011_08_04_16:45)

!F6::

Send, %A_YYYY%_%A_MM%_%A_DD%_

return

^F6::

Send, %A_Hour%:%A_Min%

return

!^F6::

Send, %A_YYYY%_%A_MM%_%A_DD%_%A_Hour%:%A_Min%

return

2011-07-04

AutoHotKey.ahk のキーボードリマップ 2011_07_02_

AutoHotKey.ahk のキーボードリマップ 2011_07_02_

; 半角・全角 = カタカナ   =>KeySwapで実現

; 変換  = 半角・全角   =>KeySwapで実現

; CapsLock = F7   =>KeySwapで実現

; カタカナ = F10   =>KeySwapで実現

vk1D::return ;無変換キー単体で動かないようにする

RShift::^z ;右Shift で Ctrl+z

SC07B & Space::send,{Blind}{Enter} ;無変換+Space で Enter

SC07B & h::send,{Blind}{Delete} ;無変換+h で BackSpace

SC07B & k::send,{Blind}{Delete} ;無変換+k で Delete

SC07B & u::send,{Blind}{Home} ;無変換+u で Home

SC07B & i::send,{Blind}{End} ;無変換+i で End

SC07B & w::send,{Blind}{Home} ;無変換+w で Home

SC07B & r::send,{Blind}{End} ;無変換+r で End

SC07B & e::send,{Blind}{Up} ;無変換+e で Up

SC07B & d::send,{Blind}{Down} ;無変換+d で Down

SC07B & f::send,{Blind}{Right} ;無変換+f で Right

SC07B & s::send,{Blind}{Left} ;無変換+s で Left

1::+1 ;1 を Shift+1 に(記号にする)

2::+2 ;2 を Shift+2 に

3::+3 ;3 を Shift+3 に

4::+4 ;4 を Shift+4 に

5::+5 ;5 を Shift+5 に

6::+6 ;6 を Shift+6 に

7::+7 ;7 を Shift+7 に

8::+8 ;8 を Shift+8 に

9::+9 ;9 を Shift+9 に

0::+- ;0 を Shift+- に

\::+\ ;\ を Shift+\ に

2011-07-01

AutoHotKey.ahk のキーボードリマップ 2011_06_30_

;────AutoHotKey.ahk のキーボードリマップ 2011_06_30_

; 半角・全角 = カタカナ   =>KeySwapで実現

; CapsLock  = 半角・全角   =>KeySwapで実現

; カタカナ = F7   =>KeySwapで実現

; 右ALT = F10   =>KeySwapで実現

; ! → Alt

; ^ → Control

; + → Shift

vk1D::return ;無変換キー単体で動かないようにする

vk1C::^z ;変換 で Ctrl+z

SC07B & Space::send,{Blind}{Enter} ;無変換+Space で Enter

SC07B & j::send,{Blind}{BackSpace} ;無変換+j で BackSpace

SC07B & k::send,{Blind}{Delete} ;無変換+k で Delete

SC07B & u::send,{Blind}{Home} ;無変換+u で Home

SC07B & i::send,{Blind}{End} ;無変換+i で End

SC07B & w::send,{Blind}{Home} ;無変換+w で Home

SC07B & r::send,{Blind}{End} ;無変換+r で End

SC07B & e::send,{Blind}{Up} ;無変換+e で Up

SC07B & d::send,{Blind}{Down} ;無変換+d で Down

SC07B & f::send,{Blind}{Right} ;無変換+f で Right

SC07B & s::send,{Blind}{Left} ;無変換+s で Left

1::+1 ;1 を Shift+1 に(記号にする)

2::+2 ;2 を Shift+2 に

3::+3 ;3 を Shift+3 に

4::+4 ;4 を Shift+4 に

5::+5 ;5 を Shift+5 に

6::+6 ;6 を Shift+6 に

7::+7 ;7 を Shift+7 に

8::+8 ;8 を Shift+8 に

9::+9 ;9 を Shift+9 に

0::+- ;0 を Shift+- に

\::+\ ;\ を Shift+\ に

ログイン ユーザー登録
ようこそ ゲスト さん