開発」カテゴリーアーカイブ

適当な覚え書き。 HSP で PARAFORMAT2

なんでこうC++ で書かなかったのだと思うところではありますが、

しょうがないのでSDKのRichedit.h に書いてあったのをHSP風に解釈

 

———————————————————- (Richedit.h より抜粋。 持ってきて良いのかは疑問だけど。)

typedef struct _paraformat2
{
    UINT    cbSize;
    DWORD    dwMask;
    WORD    wNumbering;
    WORD    wReserved;
    LONG    dxStartIndent;
    LONG    dxRightIndent;
    LONG    dxOffset;
    WORD    wAlignment;
    SHORT    cTabCount;
    LONG    rgxTabs[MAX_TAB_STOPS];
     LONG    dySpaceBefore;            // Vertical spacing before para           
    LONG    dySpaceAfter;            // Vertical spacing after para           
    LONG    dyLineSpacing;            // Line spacing depending on Rule       
    SHORT    sStyle;                    // Style handle                           
    BYTE    bLineSpacingRule;        // Rule for line spacing (see tom.doc)   
    BYTE    bOutlineLevel;            // Outline Level                       
    WORD    wShadingWeight;            // Shading in hundredths of a per cent   
    WORD    wShadingStyle;            // Byte 0: style, nib 2: cfpat, 3: cbpat
    WORD    wNumberingStart;        // Starting value for numbering               
    WORD    wNumberingStyle;        // Alignment, Roman/Arabic, (), ), ., etc.
    WORD    wNumberingTab;            // Space bet 1st indent and 1st-line text
    WORD    wBorderSpace;            // Border-text spaces (nbl/bdr in pts)   
    WORD    wBorderWidth;            // Pen widths (nbl/bdr in half twips)   
    WORD    wBorders;                // Border styles (nibble/border)       
} PARAFORMAT2;

———————————————————-

参照:MSDN – PARAFORMAT2 Structure()

http://msdn.microsoft.com/en-us/library/bb787942(VS.85).aspx

 

宣言 HSP変数 メンバ名 オフセット サイズ
UNIT cbSize pfm2(0) cbSize 0 4
DWORD dwMask pfm2(1) dwMask 4 4
WORD wNumbering
WORD wReserved
上位ワード
下位ワード

pfm2(2)

wNumbering
wReserved
8
10
2
2
LONG    dxStartIndent pfm2(3) dxStartIndent 12 4
LONG    dxRightIndent pfm2(4) dxRightIndent 16 4
LONG    dxOffset pfm2(5) dxOffset 20 4
WORD wAlignment
SHORT cTabCount
上位ワード
下位ワード

pfm2(6)

wAlignment
cTabCount
24
26
2
2
LONG    rgxTabs[MAX_TAB_STOPS] pfm2(7) ~ pfm2(38) rgxTabs 28 128
LONG    dySpaceBefore pfm2(39) dySpaceBefore 156 4
LONG    dySpaceAfter pfm2(40) dySpaceAfter 160 4
LONG    dyLineSpacing pfm2(41) dyLineSpacing 164 4
SHORT    sStyle
BYTE  bLineSpacingRule
BYTE  bOutlineLevel
上位ワード
上位バイト
下位バイト

下位ワード

pfm2(42)

sStyle
bLineSpacingRule
bOutlineLevel
168
170
171
2
1
1
WORD    wShadingWeight
WORD    wShadingStyle
上位ワード
下位ワード

pfm2(43)

wShadingWeight
wShadingStyle
172
174
2
2
WORD    wNumberingStart
WORD    wNumberingStyle
上位ワード
下位ワード

pfm2(44)

wNumberingStart
wNumberingStyle
176
178
2
2
WORD    wNumberingTab
WORD    wBorderSpace
上位ワード
下位ワード

pfm2(45)

wNumberingTab
wBorderSpace
180
182
2
2
WORD    wBorderWidth
WORD    wBorders
上位ワード
下位ワード

pfm2(46)

wBorderWidth
wBorders
184
186
2
2

 

適当に書いてみましたが、こんな感じかな・・?

あっていればいいけれど。

 

んー・・。それより前に疑問なのが、

PARAFORMAT2 構造体をHSPで使う人って居るのかなぁ・・。なんて。

もしかして自分だけかも?なんて思いますが、

一応需要があったらいいなー。と

 

HSPで書く人への補足

cbSize は 188 バイト。

それと、ワード・バイトの書き込みは、

wpoke とか poke とか使うと楽かも。

逆は wpeek と peek

 

そんなわけで、一応書いてみると、

 

dim pfm2,47

pfm2(0)=188

 

ってなかんじで。

 

そんなわけで、

・間違いを発見した人

-> すぐに教えてください。

・これを見て書く人

-> 少しでも生かせれば幸いです。

Windows Live Messenger への曲通知。

ふと。

フリーソフトの H2k6 を使っている友人から

「曲通知したい」と。

作ってみました。

 

なかなか簡単なシステムで。わかりやすかったです。

最初はタイトルバーから取得しようかとも思っていたのですが、

見てみれば、再生時にコマンドラインを指定してプログラムを実行するオプションがあるじゃないですか。

 

ということで、これを使って・・。

http://mimumimu.net/software/#wlmis

Windows Live Messenger Music Info Sender.

つくってみました。

 

2010/02/13 
ここのページに飛んでくる人が多いのに、ダウンロードリンクを的確に指していなかったので、

上記リンクを現在の物に変更しました。

 

1.ダウンロードして、H2k6 と同じフォルダに send.exe を置く。

2.オプション -> 設定 -> トリガーに以下のように設定

演奏開始時 : send.exe %tagTitle%\0%tagArtist%

演奏停止時 : send.exe

 

これで再生時に通知されて表示され、

止めたときに消えます。

 

そして・・。

いちおーこのプログラム、

取っても単純で、

send.exe に続いて (曲名)\0(アーティスト)

を送りつけるだけで動きます。

新しいソフトウェアのサポートや

既存のソフトウェアに曲通知機能を付けたり。引数指定で起動できればどんなプログラムでも利用可能です。

 

—————————-

今回使用させていただきました 「H2k6」のダウンロード先

http://hogehoge2006.genin.jp/

 

————————————————————

P.S.

プログラマーの皆さんにいろいろと。

まず引数についてですが、チェックは何もやってません。(うわぁ。

あと、(曲名)と(アーティスト)のあいだの\0 ですが、

これは 0x0000 の \0 ではありません。

0x5c,0x30 の \0 です。

もっと言えば、 \0 ではなくて \\0 になりますね。

単刀直入に言えばただの文字の「\0」です。NULLとかじゃなく。

 

そして、もっと恥ずかしいことを言えば、

この通知のプログラムを組んだことのある方はもう説明書きを見たときに、

「こいつ・・・何手抜きしているんだ」と内心思っていたと思います。

そうなんです。

内部的に曲名とアーティスト名の区切りは \\0 で行うようになってるんです。

本当は曲名とアーティスト名を指定するときに、もっと優しく指定できるようにすべきなのかも知れませんが、

実際の所、このように引数を指定すると、実に内部構造が楽なんです。

そのまま与えて、あとは適当に設定すればいいんですから。

んー・・。手抜き過ぎるかな・・。