月 | 火 | 水 | 木 | 金 | 土 | 日 |
---|---|---|---|---|---|---|
29 | 30 | 31 | 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 1 | 2 |
うまくいくといいなぁ。
・・・って、こんだけの内容でUPするのもなんなんで。
・・・続き・・・
これで、更新できない言訳がひとつ減ったぞ(滝汗)
2001/10/23の話の続き。
登録更新の手続きも、解除の手続きもしてない状態なんだけど。 まだ、接続はできてるみたい。 ここを見ても、 連絡をしなかった場合どうなるかが書かれていないのがちょっと怖いかな。
まぁ、とりあえずほっぽってみよう。
ってのが、VB Magazine2000年10月号で紹介されていた。 ・・・のを、ココの掲示板でお馴染み*1のOratorさんに某所で教えてもらったのだが。
さすがに、サンプルプログラムなだけあって、実用としてはびみょ〜に使いにくいのね。 ってことで、またまた自作することにしたんだけど*2。
いやぁ、VBのアドインって初めて作るけど、なかなか面白いわ。 とりあえずTips的なことがわかったら、ここに随時書いていくことにでもしようか。
とゆーかいきなり壁にぶち当たった。 IDEのキーボードイベントやらマウスイベントやらって通知する方法がないのね(T-T) だから、このサンプル使いにくくなっちゃったのか。。。
なんとか回避手段はないものだろーか。
*1: とゆーか私の行くところことごとくで常連さん
*2: こーやってどんどこやりかけのプロジェクトが増えていくのね(大汗)
結構前に買ったのに書き忘れてたよ。
ついにグインとレムスが再会した。 初期の頃からレムスファンだったのでヤンダルが乗り移ってる状態はショックだったんだけど、 レムス自身の自我は(まだ)崩壊してないって知って結構嬉しかったり。 ・・・まぁ、性格はずいぶん変わったけどね。
さて、次はグインとナリスかな。。。
昨日の日記を更新し忘れてた。 アップしとこう。
・・・って、今日書いちゃうと昨日の日記がトップページにこないんだよなぁ。。。
2001/11/07の日記を更新してなかったのって、グイン新刊の副題がわからなかったからだったのね。
グイン・サーガ 81巻 ○○ 栗本薫
とか書かれてるぢゃん。
う〜む。あまりにもお間抜けなんで直しておいたけど。。。(しくしく)
私と同じりぶちゃん*1を車内で使ってる人を見た。 ちょっと感動。
・・・ってことを、その別りぶのすぐ横で書いてみたり(^^;;
*1: Libretto L1/L2。どっちかまでは判別できず(あたりまえ)
VBでアドインを作成するとき、カレントプロシージャの位置を求める方法。
Private mVBInstance As VBIDE.VBE '有効な値が入ってると仮定 Private Sub GetCurrentProcedurePosition(ByRef StartLine As Long, ByRef EndLine As Long) Dim CurrentLine As Long Dim ProcName As String Dim ProcKind As vbext_ProcKind Dim ProcLineCount As Long With mVBInstance.ActiveCodePane ' カーソル位置を取得 ' ※ StartLine以外はいらないので 0 を渡す Call .GetSelection(CurrentLine, 0, 0, 0) ' 指定行に定義されているプロシージャ名を取得 ' ※ ProcOfLineの第二引数にはプロシージャの種類が入ってくる ProcName = .CodeModule.ProcOfLine(CurrentLine, ProcKind) ' プロシージャの先頭行を取得 StartLine = .CodeModule.ProcStartLine(ProcName, ProcKind) ' プロシージャの行数を取得 ProcLineCount = .CodeModule.ProcCountLines(ProcName, ProcKind) ' プロシージャの最終行を求める EndLine = StartLine + ProcLineCount - 1 End With End Sub
昨日に引き続いてアドイン関連。 ちょっと反則ワザに近いが、アドインを使用しているIDEのウィンドウハンドルを取得する方法。
Private mVBInstance As VBIDE.VBE '有効な値が入ってると仮定 Private Function GetIDEhWnd() As Long GetIDEhWnd = FindWindow("wndclass_desked_gsk", mVBInstance.MainWindow.Caption) End Function
"wndclass_desked_gsk"は私の環境*1で SPY++を使って調べた結果なので、他環境では違う値になるかも?
*1: Win2K+VB6SP5 and Win95SE+VB6SPなし
なんか、落ちてるね。 どーしよ(T-T)
また、新しいの探すかなぁ。。。
便利(だと思う)ショートカットキーを並べてみた。 幾つかメジャーなのもあるけど、意外と知られていないんじゃないかなってのを挙げたつもり。
コードウィンドウを表示する。
オブジェクトウィンドウを表示する。
プロジェクトウィンドウを表示する。 上記二つと組み合わせると、キーボード操作のみで任意のウィンドウが開けるようになる。
現在のカーソル位置にある変数・定数・関数等の定義位置へ移動する。
元の位置へ移動する。 上の[Shift]+[F2]と組み合わせると、「関数選択→定義位置へ→元へ戻る」のような動作が簡単にできる。
オブジェクトボックス*1へ移動する。
現在のカーソル位置にある単語で検索をする。
*1: コードウィンドウの上にあるコントロールの一覧コンボボックスのこと
1.5日ほど落ちてたみたいだけど、今日見てみたら無事復活してた。 その間のログが取れていないのがショックだけど、ま、しょーがないでしょ。
それはそうと、カウンタ復活後、統計ページの動きがおかしいのが気になるな。。。 *1
・・・とか書いたけど、もう直ってるみたいね。よかったよかった。
現在オープン中のカーソルの情報は V$OPEN_CURSOR で見ることができる。
SQL> SELECT Count(*) FROM V$OPEN_CURSOR;
*1: って書いたところで、ココ見てる人には関係ないんだけどね(^^;;
今日は一日寝てた。
・・・じ、充実した良い一日・・・、だったなぁ(虚勢)
・・・あれ?過去にっき検索しんたんだけど、16巻を買ってる記録が無い。 買い逃してるんだろーか。。。 部屋の本棚にも15巻までしか並んでないし。
2001/06/05にも書いてるんだけど、やっぱり絵が下手になってる気がする。 しかも、一箇所だけじゃなく全編通してず〜っと。 画風が変わったとかゆーんじゃなく、デッサンがむちゃくちゃになってるんだよね。
どーしたんだろ、ホントに。
IDEのキーボードイベントやらマウスイベントやらって通知する方法がないのね(T-T) なんとか回避手段はないものだろーか。
って書いて以来、実際の検索機能はほっぽってこの件についていろいろ試してみている。
最初は
アドインってActiveX DLLでしょ?(たぶん) ってことは同じプロセス内で動くんだよね(あやふや) ってことはローカルフックのフックプロシージャ書いても大丈夫だよね(自信ゼロ)
なんて、妄想200%な考えを基にローカルフックの手法で試してたんだけど、やり方がまずいのか前提がまずいのか *1、 うまくいかず玉砕。
仕方がないんで、VCでDLL作って*2フックプロシージャ置いてシステムフックするよーにしてみたんだけど。 今度は、ちゃんとフックされてキーイベントが発生♪ま、とーぜんといえばとーぜんなんだろーけど、ちょっと感動。
・・・したのもつかの間、VBIDE.VBEなオブジェクトに対していろいろやろうとしたらオートメーションエラーが出てしまった。 このオブジェクトたちに触らなければいいんだけど、それじゃあんまり意味無いしねぇ。 惜しいところまでは来てるんだけど、これ以上は私ではどーしようもないっぽい。
誰か解決手段おせーて(懇願)
システムフック時のフックプロシージャ内でSendMessageするのってやっぱり危険なのかなぁ。。。 今作ってるシステムフック用DLLがこんな感じのソースなんだけど。 上にも書いたオートメーションエラーの問題ってこのDLL側に原因があるのかな〜なんて思ってみちゃったりしてるのだ。
// MomoHook.cpp #include <windows.h> #include "MomoHook.h" #pragma data_seg(".MomoHook") HHOOK m_hHook = NULL; HWND m_hWnd = NULL; UINT m_msg = NULL; #pragma data_seg() static HINSTANCE m_hInst = NULL; int WINAPI DllMain(HINSTANCE hInst, DWORD fdwReason, PVOID pvReserved) { m_hInst = hInst; return TRUE; } BOOL CALLBACK MomoSetWindowsHook(HWND hwnd, UINT msg, int idHook, DWORD dwThreadId) { //すでにフックされてれば失敗 if(m_hHook != NULL) return FALSE; //ハンドルを登録 m_hWnd = hwnd; m_msg = msg; //フック開始 m_hHook = ::SetWindowsHookEx(idHook, (HOOKPROC)CallWndProc, m_hInst, dwThreadId); //フックハンドルが取得できていなければ失敗 if(!m_hHook) return FALSE; return TRUE; } BOOL CALLBACK MomoUnhookWindowsHook(void) { BOOL rtn = FALSE; if(m_hHook != NULL){ rtn = ::UnhookWindowsHookEx(m_hHook); m_hHook = NULL; } return rtn; } LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode < 0) return ::CallNextHookEx(m_hHook, nCode, wParam, lParam); return ::SendMessage(m_hWnd, m_msg, wParam, lParam); }
*1: フックされてなかったっぽいんで、前提がまずかったんだろーな。
*2: 初体験♪
なんか刊行ペース早いな〜とか感じてたんだけど。 過去にっき見たらそうでもないのね。 普通に3ヶ月毎に出てるみたい。
とりあえず、延っっ々と続いてたメガフロートでの戦いが終わって、 コメディ色が復活してきたんでうれしいかな。
新しいプロジェクトを始めるたびに、フォーマットが変わってしまう。 どーにかならんもんかな。。。
ちょっと作りかけてた、VBのアドインなんだけど、 この問題が解決しないんで嫌気がさして止めてしまった(^^;; ・・・ので、ず〜っとやりたかったももめもの作り直しを今更ながら始めてみた。
とは言っても、C++で作るのは断念しちゃった(^^;; やっぱり慣れない言語だと思うように作れないね。 ・・・って毛嫌いしてると、いつまでたってもスキルアップしないのはわかってるんだけど(T-T)
ま、なんにせよ、例によって例のごとくVBでサクっと作ってしまうことにした。 いちおーメモ機能の充実を図ろうかと思ってる。
さて、今度こそ公開できるレベルまで作りこめるといいなぁ。。。
う〜ん。まだ続いてたんだねぇ。ほそぼそと。
んで、ひさしぶりに全巻読み直してみたんだけど、全っっ然ストーリー進んでないんだね。実は。 このままだとあと5〜10年は連載しないと終わらなそう。 それまでガンガンが廃刊せずに残ってるんだろーか?(- -)
赤石せんせ自ら「ずっとあたためてた作品」とゆーだけあって、赤石作品では一番のお気に入りになりそうな気配。 ま、エンディングしだいかな。。。
「サイレント・アイ」と「永遠かもしれない」の番外編を収録した短編集。
・・・とか書きつつ、一番気に入ってるのは上記二つではない「いつか黄昏に出会う」だったり。
帰りの電車の中で、溜まったメールの整理をしていたのだが。 振り分け条件の追加して、再振り分けをしたらいつまでたっても終わりゃしない。 最寄の駅まで帰ってきたのにりぶれっと閉じられないので、しかたなくホームに残ってこーやってにっき書いて時間つぶしてる。
あ〜あ。早く終わらないかなぁ。。。
・・・。
・・・・・・。
・・・・・・・・・。
ん〜。まだ終わらない。ネタ尽きちゃったよ。 えっと、えっと・・・何書こう・・・。
あ、そうそ。 今作ってる新ももめも――あ、名称変更は止めたの。メモ機能が充実する(予定)だからね。――は、 とりあえず版をVer.2.00として暫定公開しようかなーって思ってる。 多分、来月頭くらいになるかな。 設定画面が付いてない&iniファイルの設定をほとんど無視しちゃう版だろーけどね。
・・・って書いてるうちに終わったみたいだから、これ以上自分の首を絞めるよーなことを書くのは止めとこう・・・(- -)
作中にパソコンがらみのネタが出てくると、どーしてもダメ出ししてしまう。 こーゆーのも職業病ってゆーのかしら。
このページにリンクを張りたい人はご自由にどうぞ。
疑問・感想・要望・不満・文句・愚痴等々ありましたら↓までメール下さいましm(_ _)m