はてなキーワード: ahkとは
一度投稿したうえで別タブを開いてプログラム的(fetch)に送信してその別タブが閉じられる仕組み。
// ==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 });
})();
// ==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);
}
})();
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
#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-----
ようやく(ほぼ)すべてが自動化された。
あとはローカルサーバーの起動をスタートアップに設定する(方法をAIに聞いて指示に従う)だけの消化試合。
署名時要求してくるパスワードを自動入力するahkファイルはドキュメントのAutoHotkey配下に置いた。
バッチファイル(make.sign.bat)はデスクトップに置いた。
#Persistent #SingleInstance ignore SetTitleMatchMode, 2 WinWaitActive, pinentry SendInput お前のパスワード Sleep 100 SendInput {Enter} ExitApp
// 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/'); });
@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
// ==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-----
濁点喘ぎや♡喘ぎのあるエロ小説が大好きで、もっと読みたいから。
自分はエロ小説を書けなかったので、書ける人にもっとたくさん書いてほしいから。
あと、自分がAutoHotkeyを入れてからだいぶたってしまったので、導入がおぼろげなのは申し訳ない。
そして肝心の、一番お世話になったサイトを忘れてしまった。最悪だ。見つけたら絶対貼る。
見つけた。これだ。
書き終わってから見つけた。
https://clrmemory.com/pc-mobile/windows/autohotkey-any-character/
AutoHotkeyのwiki。困ったらここを見る。
https://autohotkey.com/download/
(ここがおぼろげなのがひたすらに申し訳ない)
どこかフォルダを作る。後々、他に必要なファイルも入れていく。
自分はドキュメントフォルダの中に「小説用フォルダ」を作成した。
新しく作ったそのフォルダの中で、右クリック→新規作成→「AutoHotkey Script」を選択。
作成した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
保存した?よし。閉じていいよ。
おっとそうだ、さっきのフォルダに入れなきゃいけないのがあった。
の「AutoHotkey_L固有の不具合」にあるが、詳しくわからないのでとりあえず、
https://w.atwiki.jp/eamat/pages/17.html
中にあるフォルダ(ANSIかUTF8)の中の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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
消して保存した?おし
「小説用.ahk」(自分で作成したほうのファイル)を右クリックで「Run script」で実行できる。
が、ショートカットが作成できる。作成して別なところに置いたほうが楽な人はそうするとOK。
コンパイルしないといけない……かと思いきや、しなくても実行できたから、コンパイルは要らないか。まぁいいか。
もし「要るよ」って人がいたら、作ったほうのファイルを右クリックして「Compile なんちゃら」でコンパイルできるので、どうぞ。
使い方。まずは実行開始から。
開始時になんかちっちゃいウィンドウが出てくるが、気にせず「OK」を押していい。(出ないかも)
さっきのスクリプトの中身は
が打てるようになる。
注意点としては、
他のキー割り当て一覧
書いてみよう。
「あ゛あ゛あ゛♡♡♡♡」
どうしても「一度変換を確定しないといけない」というのがちょっとひっかかるが、それでもわざわざ濁点を変換して入れたり、ダブルクォートを代わりに使うよりはいい。
喘ぎ声はひらがなやカタカナが多いから変換を確定せずに打てるのが一番いいが、コツをつかめばきっと上手く活用できるはず。活用してください。
意外と忘れがちだが、大事。
画面右下の上矢印を押すと、いろいろ出てくる。
もう誰もこのエロ小説用スクリプトが実行されていたなんて気づかない。
もっと便利にしたいときは、AutoHotkeyのwikiが参考になるはず。
他にも、ホットキーとかショートカットキーとかでいろいろある。
でも「特定の文字を入力する」はAutoHotkeyでないとできなさそうだった(自分が見つけられた範囲では)
もっ゛とかい゛てぇ゛ぇ゛ぇ゛ぇ゛ぇ゛♡゛♡♡♡♡
み゛た゛い゛の゛お゛お゛お゛お゛お゛♡♡♡♡♡♡
Space/Enter/Backspace/Delete も文字入力
F4 はAltと押してウィンドウ閉じる。単体は個人的には独自のショートカットに割り当ててるから使ったこと無い。
F5 はリロード
F11 は全画面
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(キーボード)ごとにいろいろできる。
余り使わないのはあっても、全く使わないはほとんどなかった。
git →ぎっと
ifttt →?
str →すとりんぐ
char →ちゃー
eth0 →いーさぜろ
ifcfg →あいえふこふぃぐ
ifconfig →あいえふこんふぃぐ
ptr →?
txt →てきすと
bat →ばっち
ahk →?
py →び
rb →るびーは使わない
win7 →うぃんなな
win10 →うぃんじゅう
asus →あすす
which →ふぃっち
git → 「ギット」
ifttt → 使ったことがない
ieee → 「アイイーイーイー」
eth0 → 「イーサゼロ」
ptr → 「ポインタ」
bat → 「バッチ」
ahk → 使ったことがない
py → 「パイ」
rb → 「ルビー」
win10 → 「ウィンテン」
which → 「ウィッチ」
AutoHotKey・KeySwap・Atok2005を使った
また、これは AutoHotkey.ahk (AutoHotkey設定ファイル) 自身でもある。
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::
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の機能で実現
; CapsLock = F10 =>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
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
AutoHotKey.ahk のキーボードリマップ 2011_07_02_
; 半角・全角 = カタカナ =>KeySwapで実現
; 変換 = 半角・全角 =>KeySwapで実現
; CapsLock = F7 =>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
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+\ に
;────AutoHotKey.ahk のキーボードリマップ 2011_06_30_
; 半角・全角 = カタカナ =>KeySwapで実現
; CapsLock = 半角・全角 =>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
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+\ に