js.exe なら XULRunner

SpiderMonkey は Firefox の JavaScript エンジンとして組み込まれている。が、他にも、「JavaScript シェル」と呼ばれる、JavaScript コードが実行できるバイナリがある。それが js.exe だ。 見つからない SpiderMonkey のソースコードは公開されている。そ…

MGSV の新しい公式プレイデモ

先日、東京ゲームショウ 2013 で、MGSV のデモプレイがあった。その様子は、ニコ生で生中継されていて、リアルタイムで観ることができた。監督の解説付きで行われたプレイは、2 種類あって、それぞれ、東京ゲームショウ専用に特別につくられた、夜と昼のミッ…

gcc -nostartfiles 完全版

gcc で C ソースコードをコンパイル&リンクするとき -nostartfiles をつけると、標準スタートアップファイルがリンクされないため、実行ファイルサイズが非常に小さくなる。実行ファイルサイズを小さくしたいときは、この方法を採用するといい。 この方法で…

gcc -nostartfiles その6

gcc の -nostartfiles オプションを有効にしてコンパイル&リンクすると、ファイルサイズが小さくなるかわりに、エントリポイントが、先頭に定義した関数にすりかわる。そこで、その関数で WinMain を呼ぶことにより、スタンダードな C ソースコードの流れを…

gcc -nostartfiles その5

gcc で -nostartfiles オプションを付けて C ソースコードをコンパイル&リンクすると、エントリポイントが必ず WinMain ではなくなり、コードの先頭に定義した関数になる。 #include <windows.h> void Main() { int exitcode = WinMain(0, 0, "", 0); ExitProcess(exit</windows.h>…

gcc -nostartfiles その4

gcc で -nostartfiles オプションを有効にすると、できあがりの実行ファイルサイズが小さくなる代わりに、処理の流れが変化する。すなわち、コード中で最初に定義した関数がエントリポイントとなる。 どうしよう? #include <windows.h> void hello() { MessageBox(NULL,</windows.h>…

gcc -nostartfiles その3

何もしないはずのソースコード hello.c を gcc -nostartfiles でコンパイルして起動すると、定義した関数が、呼び出していないのに実行された。 #include <windows.h> void hello() { MessageBox(NULL, TEXT("Hello, world!"), TEXT(""), MB_OK); } int WINAPI WinMain(</windows.h>…

gcc -nostartfiles その2

gcc で -nostartfiles オプションをつけると、標準スタートアップファイルのリンクが行われないため、できあがりの実行ファイルサイズが大幅に小さくなる。 しかしながら、スタートアップルーチンが正常に機能しないのではないだろうか。その疑問への回答の…

gcc -nostartfiles

#include <windows.h> int WINAPI WinMain(HINSTANCE hi, HINSTANCE hp, LPSTR cl, int cs) { return 0; } 小さくしたい 何もしないソース nop.c を gcc -mwindows -s でコンパイル&リンクしたところ、18.0 KB のアプリケーションファイルが生成された。 -s を付けても</windows.h>…

gcc -s とその先

#include <windows.h> int WINAPI WinMain(HINSTANCE hi, HINSTANCE hp, LPSTR cl, int cs) { return 0; } ファイルサイズが大きすぎる WinMain 関数で、最後に 0 を返すだけで何の処理も行わない C のソースコード nop.c を gcc でコンパイルすると、90.9 KB の EXE フ</windows.h>…

gcc による utf-8 コンパイルの詳細

gcc で utf-8 の C ソースコードをコンパイルする場合は、以下のようなコマンドを実行する。 gcc -DUNICODE snow.c -DUNICODE の詳細 gcc のコマンドラインオプション -DUNICODE とは、正確には -D というオプションに UNICODE という文字列が付加されたもの…

gcc の導入と utf-8 コンパイル

Windows 用のフリーソフト MinGw には、gcc というコンパイラが含まれており、これで C のソースコードをコンパイルして、拡張子 EXE のアプリケーションを生成することができる。ようするに、Windows 用のソフトをつくるソフトである。 パスを通す 導入は簡…

gccrun.cmd その6

gccrun.cmd では、gcc で C ソースコードのコンパイルとリンクをして、できあがったアプリケーションを実行するというのがメインの処理になっている。 それ以外では、いくつかのエラー処理を行う。 REM 引数チェック if "%1"=="" goto argerr if not exist "…

gccrun.cmd その5

gccrun.cmd で、ソースコードのコンパイルとリンクが終わったら、次は、生成したアプリケーションの実行に移る。 :run REM 出力プログラム実行 if %win%==1 (start %srb%.exe) else %srb%.exe goto end 変数 win が 1 ならば、start %srb%.exe を実行し、そ…

gccrun.cmd その4

こうして、コンパイル前に、事前に .exe を削除しておくのだ。 :main REM コンパイル前処理 if exist %srb%.exe del %srb%.exe if exist %srb%.rc goto rccompile goto compile 次に、ファイル %srb%.rc の存在を確認する。.rc とは、リソーススクリプトファ…

gccrun.cmd その3

前回に引き続き、gccrun.cmd のソースコードについて、コメントを書き残していく。 :var REM コンパイルオプション set copt= if %win%==1 set copt=-mwindows set src=%~dp1%~nx1 set srb=%~dp1%~n1 set src=%~dp1%~nx1 では、変数 src に %~dp1%~nx1 を代…

gccrun.cmd その2

というわけで、バッチファイルでは、for /f を使って、ファイルの中身を読むのだ。 set win=0 if "%2"=="-c" set win=0 if "%2"=="-w" set win=1 if "%2"=="" for /f "tokens=2 delims=<>" %%a in (%1) do ( if "%%a"=="windows.h" set win=1 ) C で書かれた…

gccrun.cmd

前回の記事通り、久々に gcc で Windows アプリケーションを作成したわけだが、その際、バッチファイルを使って、ビルドおよび実行を簡単にできるような状態にしていた。そのバッチファイルは、GitHub のレポジトリに置いた。 使い方は、gccrun src.c -c と…

Windows API で PC サスペンド

PC をスタンバイ状態に移行する Windows アプリケーションをつくった。ソースコードの言語は C だ。コンパイルは gcc で gcc -mwindows suspend.c -o suspend.exe -s -Wall として行った。 以下が、suspend.c のソースコードである。 #include <windows.h> int WINAPI W</windows.h>…

extimer.hta // コメント

前回の記事で公開した、時限式コマンド実行アプリ extimer.hta のソースコードについて、コメントを記していく。 <meta http-equiv="X-UA-Compatible" content="IE=9" /> この meta 要素により、mshta.exe の動作モードを IE9 にする。IE10 モードでは、後述の hta:application 要素が動作しないからだ。 </meta>

extimer.hta

Windows 8 で、指定時間経過後にコマンドを実行する HTA が完成した。 ファイル名は extimer.hta である。引数を加えて extimer.hta 10000 calc として実行すると、10 秒後に電卓を開くタイマーが作動開始する。 以下にソースコードを記す。 <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=9" /> </meta></meta>

IE10 の HTA 問題

HTA ファイルの制作をやっている。指定時間経過後に PC をスリープ状態に移行する JScript ファイルの高機能移植版である。現行の JScript 版では、ActiveX オブジェクトの WScript.Shell が提供する popup メソッドを使用して、指定時間経過後に自動的に閉…

Win + I ↓↓↓↓↓↓ Enter

Windows 8 のデスクトップで、左上隅にカーソルを合わせると、起動中のストアアプリがあれば、そのサムネイルが表示される。クリックすると、画面が、デスクトップから、そのアプリに切り替わる。アプリ内で同じように画面左上隅をクリックすると、今度は、…

Opera font HWA, 仮想メモリ

Opera 12 フォント不具合 Opera 12.16 を使っていたら、フォントの表示が微妙におかしいことに気が付いた。文字と文字の間隔が狭くなっているのだ。設定画面から、フォントを設定しなおしたり、再起動したりして、いくらか試してみたが、全く改善されなかっ…

Windows 8 PC に USB で Ubuntu

Windows 8 がプリインストールされている PC で Live USB 式の Ubuntu を起動させることに成功した。 この PC には UEFI というモノが入っている。これは、BIOS の代替となっているファームウェアであり、BIOS よりセキュアらしい。マルウェアによるブート汚…

続・Opera 12 スキンデバッグ

Opera 12.16 スキンのデバッグをもう少し進めた。すなわち、skin.ini の編集作業である。前回は、メニューバーとアドレスバーおよびコンテンツブロックバーについて、背景色の黒さを解決したのだが、今回は、Wand バーの解決を行った。Wand バーとは、パスワ…

KillSwitch

はてなブログのモバイル表示 userAgent を偽装する Firefox のアドオン User Agent Overrider 0.2.1 (by muzuiget) を使用し、Firefox 22/Android に成り済まして、自分のブログを表示した。すると、携帯端末用のスタイルで表示された。おそらく、すべてのは…

TinyWall

TinyWall というソフトを試してみた。Windows 8 標準のファイアウォールの補助的な役割を担う。インストールして、通常モードにすると、あらゆる通信をブロックするようになり、アプリケーションに手動で通信許可を与えなければならなくなる。パスでファイル…

literate C.js

つい最近は、あなごるの literate C という問題が終了した。この問題は、以下のようなルールになっている。 hoge fuga >hoge >fuga piyo >piyo 上記のようなテキストファイルがあったとする。 hoge のように、行の最初の文字が > でないならば、その行をコメ…

netsh

Windows 8 には、ネットワーク接続を管理するためのインターフェースがある。コントロールパネルまたは、タスクバーにあるネットワークアイコンの右クリックメニューから開くことができる、ネットワークと共有センターである。 ネットワークと共有センターで…