2013-01-01から1年間の記事一覧

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

ブログ CSS 編集中

このブログの「デザイン CSS」というものを編集した。「デザイン CSS」とは、はてなが提供しているテンプレートの CSS に加えて、ユーザーが自由に定義できる CSS のことだ。優先順位は、テンプレートの CSS より「デザイン CSS」のほうが高い。テンプレート…

Win 8 アカウント画像リセット

Windows 8 で ユーザー アカウント の画像をデフォルトの灰色人間アイコンに戻せない問題があった。が、解決方法が判明した。 方法 設定中のアカウント画像は C:\Users\Public\AccountPictures に入っているので、削除すればよい。そして、サインアウトする…

Base Filtering Engine は Firewall に必須

Otbedit が起動しない問題は、otbedit_local.ini を 0B にし、アクセス許可機能を使って書き込み禁止にすると再発しなくなったが、当然のことながらファイル履歴が使用できず、不便だったため、根本的な解決を図った結果、成功した。otbedit.ini は、XP 時代…

Opera 12 (Win8) スキン背景色の黒さ解決

Opera 12.16 で自前のスキンがうまく表示されない問題があった。メニューバーの背景色が砂嵐のようなノイズで表示され、アドレスバーの背景色が真っ黒に塗りつぶさており、文字やアイコンが見えづらくなっていたのだ。スキンのタイプは、Native であり、スキ…

「Windows のシャットダウン」ダイアログへのショートカット

Windows 8 にはスタートボタンがなく、シャットダウンするための UI は、チャームバー内に存在する。 チャームバーは、画面の右上隅か、右下隅にカーソルを合わせることで、半ば出現する。ここで問題がある。たとえば、最大化したウィンドウの閉じるボタンに…

Skip Metro Suite の仕組み

Skip Metro Suite には、Windows 8 起動時に、自動でデスクトップを表示し、かつ、ホットコーナーを選択的に無効にする機能がある。これはどういう仕組みで実現しているのかを調べた。 Process Monitor を使用して、Skip Metro Suite がレジストリにどんな値…