Win32API 質問箱 Build8

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、
   Win32 Application *Programmer* Interface
についての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、質問する前に検索ぐらいしる!!

過去スレ・参考 >>2-5
2デフォルトの名無しさん:02/12/27 13:50
31:02/12/27 13:52
>>1
乙ー
4かおりん祭 ◇VqKAORinK6:02/12/27 14:02
   ∋oノハヽo∈ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     从o゚ー゚从< 新スレおめでとうございま−す♪
   = ⊂   )   \_______
   = (__/"(__) トテテテ
>>1 >>4
乙CurrySummer(w
沢村は出入り禁止だ!!
スタートメニューとかお気に入りの項目って
右クリックしたときと左クリックしたときで挙動が違うよね。
あれをやりたいんだけど

TrackPopupMenuで
TPM_LEFTBUTTON | TPM_RIGHTBUTTON
を指定したときに
親ウィンドウにWM_COMMANDが送られてくるんだけど、
これが右クリックか左クリックか分からない。

どうしたらいい?


age
>>7
ここだけの話、奴らはメニューのフリをした独自ウィンドウなんだ。
ナイショダヨ
>>9

えっ!自分で作れってこと?

サンプルはどっかにありませんか?
11デフォルトの名無しさん:02/12/28 00:10
>>7
WM_COMMANDとWM_CONTEXTMENUを処理してやれば?
>7
> メニューのフリをした独自ウィンドウ
なんだが、不完全に似たことをするなら
> TPM_LEFTBUTTON | TPM_RIGHTBUTTON
から TPM_RIGHTBUTTON を外して
かわりに WM_MENURBUTTONUP を処理する。
13デフォルトの名無しさん:02/12/28 02:25
スタートメニューは隠れAPIがあるんじゃ。
タスクバーのハンドルをFindWindowで取得して
MoveWindowでリサイズしようとしても出来ませんでした。

どなたかご教授いただけないでしょうか。
追伸:
タスクバーのスタートボタンなどはMoveWindowsでウィンドウサイズを
変更できるんです。
なぜタスクバーだけうまくいかないんでしょうか・・・。
16デフォルトの名無しさん:02/12/28 11:48
携帯からだけど
ソースあげてみ

ハンドル取得するところと、ウィンドウサイズ変えるところ
> 携帯からだけど

わざわざ・・・
HWND hTaskbar = FindWindowEx(NULL, NULL, "Shell_TrayWnd", "");
MoveWindow(hTaskbar, x, y, cx, cy, TRUE);

携帯からとは・・・。
筋金入りの2ちゃんねらーですな。
よろしくお願いします。
19gn355my0:02/12/28 13:49
んで hTaskbar の中身は確認したのか?
タスクバーのハンドルをFindWindowで取得して
MoveWindowでリサイズしようとしても出来ませんでした。

タスクバーのスタートボタンなどはMoveWindowsでウィンドウサイズを
変更できるんです。
なぜタスクバーだけうまくいかないんでしょうか・・・。

どなたかご教授いただけないでしょうか。

HWND hTaskbar = FindWindowEx(NULL, NULL, "Shell_TrayWnd", "");
MoveWindow(hTaskbar, x, y, cx, cy, TRUE);
実際 MoveWindow でリサイズできないウィンドウってのは作れるわけだし
ウィンドウのサイズの変更はウィンドウ側で制御できるんだから
タスクバーがそのようにしているんでないの?
2220:02/12/28 18:35
> 実際 MoveWindow でリサイズできないウィンドウってのは作れるわけだし
それは知りませんでした。
つまり無理だということですか・・・。
もうちょっと足掻いて駄目だったら諦めます・・・。
23名無し@沢村:02/12/28 18:40
>>20
無理じゃないよ。実際windowsのタスクバーはリサイズできるわけだし…。
もっと研究してごらん?
さっき携帯から書いた筋金入り(重症の方が的確だな)だけど、出来た。
SetWindowPos(hTaskbar,NULL,100,100,500,500,SWP_NOZORDER|SWP_NOSENDCHANGING);

なんでこんな事をしたいのかはしらないが
名無し@沢村は無視で。
プログラミングしたこともないのにあれこれ突っ込むヒキコモリです。
26デフォルトの名無しさん:02/12/28 20:23
メニューをフローティングツールバーのように移動できるようにする方法ないですか?
一応、猫で分かる〜のサイトは見たのですが、あれと違うアプローチの仕方ってないでしょうか?
>>26
C+APIでだったら地道に実装するしかないかと。

というか質問の意味を質問させて欲しい。
メニューをフローティングツールバーのように移動、というのを
もうすこし具体的に頼みます
2820:02/12/28 20:30
>>24
おおおっ!!
ありがとうございます。早速試させて頂きます。
実は横長画面のノートでタスクバーを横においてるんですが
なぜかシャットダウンのたびにタスクバーの幅が短くなってしまって
対策プログラムを作ろうと思ってたんです。
2926:02/12/28 20:47
>>27
メニューバーを、レバーコントロールみたいに、ドラッグしながら移動可能にしたいんですよ。
メニューバーってのは、文字だけの「ファイル(F) 編集(E)・・・」とかいうあれです。
>>29
環境は?C+APIですか?なら自分で実装するしかないです。
猫、のアプローチってどんな方法?
3126:02/12/28 21:32
>>30
C+Win32APIです。

猫でも分かる〜はhttp://www.kumei.ne.jp/c_lang/sdk4/sdk_311.htm
ここから説明されてるんですけど、かなり実装が面倒っぽいので
もっとスマートな方法があるんじゃないかと思って。
32デフォルトの名無しさん:02/12/28 21:41
文字を表示させる関数(TextOutとか)はどれが一番使いやすいのですか?
>>31
いや〜面倒だと思うよ。MFCを使えばある程度簡単に実装できるだろうと思うけれど。
俺の直感では、やはりRebarを使ってなんとかやろうと思うだろうけど、
それだと猫氏のページと同じ方法だし、もしかしたら1から作る方が楽かもしれない。

シェブロンを出さなくていい&フローティング無しならば、wtlを使う方法があるが・・・
これは激簡単だけれど、ATL(C++)のかなりの理解が必要となるから、自信があるなら紹介します。
>>32
場合によりけりです。俺は何も考えずに表示するだけでよければ迷わずMessageBoxです。
35名無し@沢村:02/12/28 22:13
>>34
俺はMessageBoxをデバッグに使ってるね。
自作のDebug関数の中に入れて、どんな型の引数でも表示できるようにオーバーロードしてるよ。
3626:02/12/28 22:24
>>33
やっぱり面倒ですか。
IEとかその他のアプリでも当たり前のように使われてるので
そういうAPIがあると期待してたのですが。
ATLやWTLは、今回は使いたくないので、なんとかAPIでやってみます。
ありがとうございました。
3734:02/12/28 22:24
>>35
あなたのことは聞いてません。
>>36
ちなみにRebarを使う方法はIEの存在が前提になると思います。多分。
>>37
かまうなって、喜ぶから。
40デフォルトの名無しさん:02/12/29 00:40
物理メモリのみを確保したいんですが、どうすればいいのでしょうか?
>>40
VirtualLockを使えばできます。これ以上の説明も必要?
MSDNちょっとみてきます。
できればもうちょっと説明していただけるとうれしいです。
43ルート大芝:02/12/29 01:01
Win98で、C:\にあるファイルとフォルダのパスを列挙する
プログラムを作りたいんだけど、MSDNのFindFirstFileの説明で

ルートディレクトリ内のファイルを検索するには、この関数で "C:\*"
のようなファイル名を指定し、引き続き GetFileAttributes 関数を
使ってルートディレクトリ内を検索してください。

って書いてあるけど、FindFirstFile("C:\\*", &f);は
FindFirstFileが失敗します。どうしたらいいの?
44ルート大芝:02/12/29 01:11
すまんこ、FindFirstFile("C:\\*", &f);は失敗しませんでした。
>>42
説明はいいんだけれど、解らないことを具体的に聞いてね。
解りづらい部分だと思うから、解らないところを絞ってほしい。
メモリーはnewでしか確保したことなくてnew以外のWinのメモリ確保の
仕方すらまだわかってません。
で、ちょっとさがしたらVirtualAllocを使ってVirtualLockでスワップ不可にして
物理メモリに確保でよろしいのでしょうか?
>>46
特に難しい話ではないです。ロックしたいアドレスを指定すればいいだけ。

sample:
#include <Windows.h>
#define BUF 300

int main(void){char *p=new char[BUF];
BOOL b;
b=VirtualLock(p,BUF);
if(b==0) MessageBox(0,"","失敗",0);
else VirtualUnlock(p,BUF);
delete p;return 0;}

ここで例えば
b=VirtualLock(p,BUF*1000000);
とやると当然失敗する。
GetLastErrorはその時
1453"クォータが不足しているため、要求されたサービスを完了できません。"
になる。
>>47
丁寧にサンプルまでつけていただきどうもです。
ここまでしていただければよくわかります。
フリーな物理メモリは取れるようですから、
それを見た上で適量を確保すればいいっぽいですね。
OS入れなおしたばっかなんで今はできないですが、晩にでもやって報告に来ます。

ファイル解析で時間かかるんで、物理メモリのみの確保だとかなり速くなるんで楽しみです。
CDの挿入を検出し, かつautorunの実行の可否をプログラムから制御するには
どうしたらよいのでしょうか。
何かメッセージが飛んでくるとかいうのをどこかで読んだ気がするんですが。
>>49
俺が知っているのはレジストリのNoDriveTypeAutoRunだけだが…
そんなメッセージがあるのかな?
>>49
捕まえるとしたら
WM_DEVICECHANGE
DBT_DEVICEARRIVAL
あたりかな?
5249:02/12/29 11:36
IQueryCancelAutoPlayで制御できるみたいです。XP限定ですが。
53質問:02/12/29 13:05
ReBarコントロールで、XPライクなLUNAインターフェースを実現するには、どうすればいいですか?

自分で勉強をしようと思いますので、マイクロソフトのMSDN内に、LUNAインターフェースに関する技術文書はありますか?
検索すればいいじゃん。
55質問:02/12/29 14:07
>>54
そうか・・・。
あまり詳しい人はいないのか。
>>55
文献探しも勉強のウチ・・・
>>53
LUNAインターフェースとはなんぞや?
>>49
WM_DEVICECHANGEを拾えばよい。AUTORUNのキャンセルも出来る。
Autorunを必ず実行させるのは難しい。けど本質ではないので問題詳細は略。

詳細はここ(英文)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/autorun/autoplay_reg.asp
59デフォルトの名無しさん :02/12/29 18:05
SetStretchBltModeのHALHTONEの原理はどうなっているの?
色の平均化とかSDKには書いていたけど、どんなふうに平均化しているの?

ペゾルドの本でもチラッとしか書いてなかったよ。




>>59
激しく意味不明
>>60
ちったぁオツム使えや。
62デフォルトの名無しさん:02/12/29 18:49
>>60
いや、だからさぁ、これを使った後に、StretchBltを使って拡大縮小する場合、
ビットマップが比較的に汚くならないでしょ?

このHALFTONEってどういうことをやっているのかなって思ったわけね。

だから、SetStretchBltModeでHALFTONEを指定して、StretchBltした
場合の内部の処理を知りたいんでした。




>>62
詳しく説明してくれてthx。最初HALHTONEで検索してて意味不明だった(恥
世の中に、それに関してどんな処理があるのかすら解らないです。スマソ。
ここで解決しなければ、ゲーム制作技術板に行くと詳しい人がいるかもしれません。
>>59
↑ペゾルドを読んだことがこいつの自慢らしい。
>>64
その程度は調べた、という風に解釈してやろうじゃないか。煽りは別板で
StretchBltで具体的にどう補間されるかってビデオカード次第だった気もするが。
いまだとテクスチャの補間と一緒にバイリニアとかトライリニアとかでやってんじゃない?
>>66
そういえば、GetDeviceCapsにRC_STRETCHBLTという項目があるしね。
68質問:02/12/29 20:48
今、猫さんのホームページを見ながらWin32APIの勉強をしています。
http://www.kumei.ne.jp/c_lang/

で、今困っていまして・・・。
猫さんのHPの一部を抜粋↓
「dllのバージョンは5.81以降が必要です。
IE5.0以降がインストールされていれば大丈夫です。
また、生のVC++6.0ではコンパイルできません。
SPをインストールしてもヘッダファイルやライブラリは更新されないので、マイクロソフトのページなどからプラットフォームSDKを更新する必要があります。」

そのプラットフォームSDKを探しているのですが、マイクロソフトのHP内で見つかりません。
MSDNの中とかも探しているんですが・・。

どこにプラットフォームSDKがあるかご存知の方はいませんか?
このままではプログラム開発が進まなくて困ってます。
70デフォルトの名無しさん:02/12/29 21:18
Win32APIのみでフレームウィンドウを使うにはどうすればいいの?
既出だったらごめん。(というか、多分既出)
そんぐらい検索すれ
72質問:02/12/29 21:52
>>69
ありました。CoreSDKをダウンロードしてますが・・・

・・・これを見て、ウツになりました。
「Download size: 176.9 MB」
>>72
MSDNに付いてくるからなぁ。
MSに連絡すると、多分郵便で送って貰えるとは思うけど
>>70
1を読め。猫に行け。
7559:02/12/30 00:16
意見くれた方、ありがとうございます。

>>66の「バイリニアとかトライリニア」を参考にして考えてみます。

 Sendinput関数をつかって他のアプリにキー送信をしたいのですが、いい例が見つかりませ
ん。keybd_event関数は使えるのですが、マイクロソフトを閲覧するとSendinput推奨とあった
ものですから。よいものがありましたらお示しください。
SendInputとはまたマイナーなAPIを。
これって、一連の入力を記録する部分は自分で作らなきゃ駄目ですよね?>どなたか詳しい人

>>76
他のアプリにキー送信をしたいだけなら、sendMessageでWM_KEYDOWN等を送ればいいのでは?
SendInputでは特定のアプリに送るのには甚だしく適していません。any questions?
7876:02/12/30 00:52
>>77
 マイナーなんですか? 検索してもなかなか出てこない理由が分かりました。
keybd_eventを使っていたのはALT+Ctrl+○○もできるためだったのですが、
マイクロソフトのサイトで調べているとSendinput推奨とあったものですから。
sendinputだとキー入力の割り込みが発生しない等のメリットがあるようですね。
引き続きよろしくお願いします。
> 推奨

必須ではない。
80質問:02/12/30 07:41
今、猫さんのホームページを見ながらWin32APIの勉強をしています。
http://www.kumei.ne.jp/c_lang/
開発環境は、WinXP VisualC++6です。

で、話は変わりまして、rebarにメニューをつけようとしていますが、
コンパイルエラーが出ます。

error C2065: 'I_IMAGENONE' : 定義されていない識別子です。
error C2065: 'BTNS_AUTOSIZE' : 定義されていない識別子です。

この問題は猫さんのHPによると、プラットフォームSDKをインストールすれば、解決すると書いてあるのですが、インストールしてもコンパイルエラーがでます。
やはり、VisualC++6では限界があるのでしょうか?VisualC#を買ったほうがいいのでしょうか?

commctrl.h 参照

#if (_WIN32_IE >= 0x0400)
#define TBSTYLE_AUTOSIZE 0x0010
...

#if (_WIN32_IE >= 0x0500)
#define BTNS_AUTOSIZE TBSTYLE_AUTOSIZE
...

#if (_WIN32_IE >= 0x0501)
#define I_IMAGENONE (-2)
#endif
82名無し@沢村:02/12/30 08:16
>>80
C#でやろうとすると、勉強し直しだよ。
83質問:02/12/30 08:42
>>81
なるほど。私のVisualC++6に入っているcommctrl.hには、その2つ「BTNS_AUTOSIZE・I_IMAGENONE 」がないですね。
新しいcommctrl.hを入れないと駄目と言うことですね。

探してみます。
(てか、猫さんのHPの言うとおり、SDKをインストールしたんだけどなぁ・・・)
84質問:02/12/30 08:45
>>82
C++.NETと言う商品があったのですね。
てか、C/C++/C#が同梱されているかと思って。
>>84
Comctl32.dllが5.81以降なら
#define BTNS_AUTOSIZE 0x0010
#define I_IMAGENONE (-2)
を自分で定義する。

ソースの頭の方にでも書いておく。
86質問:02/12/30 08:57
新しいcommctrl.hが見つかりました。

E:\Microsoft SDK\include\CommCtrl.h

自分でコピペをしないと駄目なんですねw
自動的に更新してくれるのかと思ってまして・・・。

初心者ですいませんでした。
87質問:02/12/30 09:04
ははは(笑い)

VC++6の「E:\Microsoft Visual Studio\VC98\Include」フォルダの内容を、新しい2002年バージョンに変えたところ、
見事コンパイルができました。

これで、XPライクなインターフェース開発が進みます。
ありがとうございました。みなさま。
>>87
インクルードファイルの参照先を変更and/or追加するのが、普通だと思われ。
俺はVC6でSDKをインストールしたら自動的にパスが追加されたけどな。
90質問:02/12/30 09:25
>>89
たぶん、VisualStudioのインストール先ディスクパスが「C:\Program Files」でないと駄目なのでは?
私は、Eドライブに重要なアプリを入れているので。
>>90
C ドライブに空き容量が少ないとか、整理のためとか、そういう理由ならわかる
けど、「重要なアプリを」 という分け方に意味はあるのか?
いずれにせよ OS があぼーんしたら再インストールする羽目になるのに。
スクリーンセーバーを以下のようにして起動しています。

SendMessage(GetDesktopWindow( ), WM_SYSCOMMAND, SC_SCREENSAVE, 0);

ただ、これですと、2000/NTでパスワードによる保護にチェックされていても
パスワード入力のダイアログが表示されず、そのまま操作可能な状態に戻ってしまいます。
何か他に良い方法はないでしょうか?
>>90
自動的じゃなくてスタートメニューに追加される
Register PSDK Directories with Visual Studio
を実行したらだった。たぶん。
94デフォルトの名無しさん:02/12/30 21:25
_beginthread使おうと思って、libcmt.libとmsvcrt.libをリンクし
#include <process.h>して、プロジェクトの設定でも
マルチスレッドにしたのですが

error LNK2001: 外部シンボル "_ThreadAccept" は未解決です
fatal error LNK1120: 外部参照 1 が未解決です。

とエラーが出てしまいます。
何か解決法はありませんか?
>>94
プロジェクトの設定が間違っているんだろう。
DebugとRelease両方とも変えた?
>libcmt.libとmsvcrt.libをリンクし
激しく矛盾の悪寒・・・
97質問:02/12/31 11:33
コモンコントロールに関する情報が少なくてこまってます。
本屋にも行ったのですが、まったく関連する本がないですね。

REBARで質問ですが、たとえば、IEを開くとウィンドウの上部にREBARが当然表示されてますよね。
そのREBARというのは、はじめからその配置と言うのが固定化されてますが、
REBARの位置情報を設定するにはどうすればいいのでしょうか?

私も同じくREBARを配置してみましたが、ばらばらに配置されるだけで、順番良く配置されません。

できれば、位置情報の設定、そしてウィンドウを閉じる前にそのREBARの位置情報を保存し、再びウィンドウを開くときには、その保存された位置情報を元に、再現するアプリケーションにしたいです。
どうすればいいのでしょうか?
98デフォルトの名無しさん:02/12/31 18:47
ToolTipを意図的に表示したいのですがどうやればいいのでしょうか?
WindowsXPとか、タスクトレイに表示されたりするから(ハードウェアの取り外しとかのメッセージ)
できるとは思うのですが解りません。
10098:02/12/31 20:22
>>99
みたけどどれだかわかんないです。。
TTM_TRACKACTIVATEあたり???
101デフォルトの名無しさん:02/12/31 20:27
おまえら今日ぐらいはやさしく教えてやれよ
くれよ、だろ プ
103デフォルトの名無しさん:02/12/31 20:33
>>102
あなたのような人でも幸せになる権利を持っています。
来年があなたにとってよい年でありますように。
104デフォルトの名無しさん:02/12/31 20:34
うふっ、なんだも聞いてね。
>>100
あのページを読んで解らないならもうどうしようもない。諦めろ
10698:02/12/31 21:12
表示はされるようになりました。
Tooltipじゃなくて、個々のオブジェクトにTTM_TRACKACTIVATEを送ってしまっていました。
ところが表示されたのはよいのですが自動的に消えてくれないのです。
表示されっぱなし。
自分で消す処理を入れるしかないのでしょうか?
107デフォルトの名無しさん:02/12/31 21:15
◆◇◆◇◆最新情報◆◇◆◇◆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
108デフォルトの名無しさん:02/12/31 21:47
フレームウィンドウの大きさを
クライアント領域があるサイズになるように、
設定したいんだがどうすればいい?
GetClientRectはあるが、SetClientRectはない
109デフォルトの名無しさん:02/12/31 21:57
自分で取得するしかない。
110デフォルトの名無しさん:02/12/31 23:40
>>108
(GetWindowRect - GetClientRect) + (設定したいRect)

で逝ける。
111bloom:02/12/31 23:45
112gn355my0:02/12/31 23:58
AdjustWindowRectEx() じゃダメなんだっけ?
113デフォルトの名無しさん:03/01/01 00:39
メニューが折り返すとだめぽ
>>113
それは110の方法を使っても駄目なんじゃないかな?

まず(GetWindowRect - GetClientRect + 設定したいRect)で設定して、
そこで改めてGetClientRectをして、それが設定したいRectと違った場合は
その差分(必ず縦方向になるはず)を改めてSetWindowRectする、といいはず。

というか110の方法は思いつかなかった。いつもGetSystemMetrics使ってたよ。thx>110
どっかのスレの過去ログでそれぞれの方法の長短について
議論してたような
>>115
GetSystemMetricsと、GetWindowRect-GetClientRectの話?
117斉藤:03/01/01 13:24
質問

rebarを作る際の、並び方を変えたいときはどうすればいいのですか?

作るrebarを一列ごとに表示させる方法。

デフォルトでは、一列に、複数のrebarが表示される形になります。
>>117
書いたソースを簡単にアプしてくれない?
119斉藤:03/01/01 14:19
簡単にUPします。

一つ目rebarの作成。

hWndRebar = CreateWindowEx(
0L,
REBARCLASSNAME,
NULL,
WS_VISIBLE | WS_BORDER | WS_CHILD | WS_CLIPCHILDREN |
WS_CLIPSIBLINGS | CCS_NODIVIDER | CCS_NOPARENTALIGN |
RBS_VARHEIGHT | RBS_BANDBORDERS,
0, 0, r.right, r.bottom,
hWndParent,
(HMENU)ID_REBAR,
hInst,
NULL );

if (!hWndRebar)
return 0;

rbi.cbSize = sizeof(rbi);
rbi.fMask = RBIM_IMAGELIST;
rbi.himl = hIml;
SendMessage(hWndRebar, RB_SETBARINFO, 0L, (LPARAM)&rbi);
120斉藤:03/01/01 14:19
2つ目、rebarにコンボボックスを追加
hWndCombo = CreateWindowEx (
0,
"ComboBoxEx32",
TEXT(""),
WS_VISIBLE | WS_CHILD | WS_TABSTOP |
WS_VSCROLL | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CCS_NORESIZE |
CBS_AUTOHSCROLL | CBS_DROPDOWNLIST,
0,0,
MIN_COMBOCX,
MIN_COMBOCY * NUM_LINKS,
hWndParent,
(HMENU)ID_COMBO,
hInst,
NULL );

SendMessage( hWndCombo, CBEM_SETIMAGELIST, 0L, (LPARAM)hIml);
121斉藤:03/01/01 14:23
3つめ、2つめ追加。

REBARBANDINFO rbBand;

hWndToolBar = CreateToolbarEx(hWndParent,
WS_CHILD | TBSTYLE_LIST | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | WS_CLIPCHILDREN |
WS_CLIPSIBLINGS | CCS_NODIVIDER | CCS_NORESIZE | WS_VISIBLE,
ID_TOOLBAR,
NUM_TBBITMAPS,
(HINSTANCE)hInst,
IDB_TOOLBAR,
(LPCTBBUTTON)&tbButtons,
NUM_TBBUTTONS,
BMP_CX,BMP_CY,
BMP_CX,BMP_CY,
sizeof(TBBUTTON));

rbBand.cbSize = sizeof(REBARBANDINFO);
rbBand.fMask =
RBBIM_CHILD |
RBBIM_CHILDSIZE |
RBBIM_STYLE |
RBBIM_ID ;
rbBand.fStyle = RBBS_NOVERT |
RBBS_CHILDEDGE;
rbBand.hwndChild = hWndToolBar;
rbBand.wID = ID_TOOLBAR;
rbBand.cxMinChild = MIN_TBCX;
rbBand.cyMinChild = MIN_CY;

SendMessage(hWndRebar, RB_INSERTBAND, (UINT) -1, (LPARAM) (LPREBARBANDINFO) &rbBand);
122斉藤:03/01/01 14:25
わからないなー。

たとえば、rebarに3つのツールバーを登録したとして、
その表示を、ウィンドウの上部に上から順番良く、「3列」で表示させたいだけなのに。

今のままでは、一列に、3つのツールバーが重なる形で表示される。
>>122
1. レバーコントロールを作成。
2. ツールバーの親をレバーコントロールにして作成。
3. REBARBANDINFO構造体のfStyleに
RBBS_BREAKを指定してRB_INSERTBANDを送る。
4. 2-3を繰り返す。
124斉藤:03/01/01 20:07
>>123

ありがとうございます!!!
みごと、3列で表示できました。

「RBBS_BREAK 0x00000001 改行」って、ツールバーのエリア自体を「改行」すると言うことだったんですね・・・。
・・・・。
助かりました。すいませんでした。初歩的な質問で・・・・。
タスクバーみたいなウィンドウを作成・表示して
他のウィンドウの最大化領域サイズ
(SystemParametersInfo(SPI_GETWORKAREA・・・)を
設定したいんですが、どんな方法があるでしょうか?
>>125
質問の意味が分からない。具体的には??
127125:03/01/01 22:37
タスクバーのプロパティで「自動的に隠す」に
チェックを入れている状態と入れていない状態では、
ウィンドウを最大化した時のウィンドウサイズが違いますよね。

あれと同じように、さらにもう1本擬似タスクバーみたいな
タスクバーを作成して、最大化時のサイズを制限したいんです。
判りにくいようでしたら申し訳ありません・・・。
128斉藤:03/01/01 22:49
すいません。また質問してもいいでしょうか。

rebarにコンボボックス(combo)を追加したんですが、コンボボックスに表示される文字の大きさが12になります。
このコンボボックスに表示される文字のサイズ・種類を変更できるとおもいますが、やり方を教えていただけませんか?

すいませんが、お願いします。
129名無し@沢村:03/01/01 22:55
>>128
SetFont()
130デフォルトの名無しさん:03/01/01 23:01
LOGFONT lf;
HFONT hFont;
lf.lfHeight = ...
(他のメンバも初期化)
hFont = CreateFontIndirect (&lf);
SendMessage (hComboBox, WM_SETFONT, (WPARAM)hFont, 0);
>>125
AppBarでぐぐれ
132125:03/01/01 23:09
>>131
何とかなりそうです。
ありがとうございました。
133名無し@沢村:03/01/01 23:11
ここは、Win32APIスレだったね。
>>129は間違い。
134名無し@沢村:03/01/01 23:26
>>129>>133
俺の名を語るな。
本物はsageないから騙る奴は覚えとくように
お前がな
名前なんて飾りだよ。
138名無し@沢村:03/01/01 23:45
本物はsageないから騙る奴は覚えとくように
139斉藤:03/01/02 00:06
>>130
ありがとうございます。
その方法で、文字の大きさは変更できましたが・・・、

SendMessageで文字情報を送ったんですが、今度はコンボボックスとしての機能が働かなくなりました。
いわゆる、右端のボタンをクリックしてもコンボの内容がPOPUPされないのです。

・・・・・・、コモンコントロールって、複雑ですよね。ウツ・・・。
140斉藤:03/01/02 00:18
これじゃ、まずいですかね。

hFont = CreateFont(12, //フォント高さ
0, //文字幅
0, //テキストの角度
0, //ベースラインとx軸との角度
FW_REGULAR, //フォントの重さ(太さ)
FALSE, //イタリック体
FALSE, //アンダーライン
FALSE, //打ち消し線
SHIFTJIS_CHARSET, //文字セット
OUT_DEFAULT_PRECIS, //出力精度
CLIP_DEFAULT_PRECIS,//クリッピング精度
DEFAULT_QUALITY, //出力品質
FIXED_PITCH | FF_DONTCARE,//ピッチとファミリー
"MS ゴシック");
141斉藤:03/01/02 00:42
では、みなさん、ありがとうございました。
いろいろ質問に答えてもらって。

後は自分で勉強しようと思います。
では。
142デフォルトの名無しさん:03/01/02 01:04
>>140-141
フォントサイズの指定方法が間違ってる。

http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_createfont.htm
本物はトリップも使わないし
つーか使わなかったからこそ騙られまくってるんだろうが
144斉藤:03/01/02 10:22
わからないことがあるのですが、

rebarでコンボボックスを作るとき、コンボボックスの横幅が、勝手に、rebarの横幅に変わります。

例えば、rebarの横幅を800とし、comboの横幅を300として、SendMessageのRB_INSERTBANDを送った直後、comboの横幅をデバッグで調べたところ、なぜか、comboの横幅800に変わっていました。

rebarが自動的にcomboの横幅をrebarの横幅にあわせるように働いたと思われます。
自分が指定した長さにするには、どのような手続きをすればいいのでしょうか?


・rebarを作成する、横幅は800(CreateWindowExそしてSendMessageでRB_SETBARINFOを送る)。
   ↓
・comboボックスを作成する(CreateWindowEx)。
   ↓
・REBARBANDINFOで横幅の初期値を300(rbBand.cx=300)、横幅の最小値を200(rbBand.cxMinChild = 200)。
   ↓
・rebarにcomboボックスを追加(SendMessageでRB_INSERTBANDを送る。)
   ↓
・直後、デバッグでcomboの横幅を調べると、なぜか、800に変わっていた。
145斉藤:03/01/02 10:54
いやー。rebarはむずかしい。

とくに、関連書物もないし、情報は基本的なことしか書いてないし。
・・・・。

さてと、そろそろ買い物行こうっと・・・。
146名無し@沢村:03/01/02 13:07
俺はビットマップに拡張子.exeを付けて保存しなおし、プログラムとして実行させようとしたが、「これは有効なwindowsプログラムではありません」というエラーが出てしまった。
普通のビットマップをwindowsプログラムとして実行させるには最低限何を付け加えたらいいですか?
教えてくだされ〜♪
147デフォルトの名無しさん:03/01/02 13:11
>>146
最低限も糞もなにがしたいんだ?
148名無し@沢村:03/01/02 13:14
>>147
いや、ビットマップがペイントなどのプログラムを通さずに自力で画像を表示してくれないかなと思って実験したらダメだったのよ…。
>>148
ネタか
>>146 >>148
ワラタ
151CopyPaste:03/01/02 15:58
108 名前:デフォルトの名無しさん :03/01/02 13:38
>>107
沢村は有名な嘘つきなので、信用しないように(笑
ヤツにプログラミングの話しても、「リアルな答え」は返ってきません。
MSX時代からコンピュータに触れてはいるようだけど、
ずっとゲーム(エロゲー含む)しかやってないので、スキルはありません。
おまえらいつになったら沢村へのレスをやめるんだ
153デフォルトの名無しさん:03/01/02 20:37
おれはレスしねえよ。
154デフォルトの名無しさん:03/01/02 22:16
あまり高機能ではないデバッガを作りたいんですが、
プロセスの適切な位置にBreakPointを入れたり、
ほかさまざまなデバッグ関係の動作を行うAPI郡には
どのようなものがありますか?
>>154
もっと沢村風に書け
156名無し@沢村フィルタ:03/01/02 22:34
皆々様方〜、あまり高機能ではないデバッガを作りたいんですが、
プロセスの適切な位置にBreakPointを入れたり、
ほかさまざまなデバッグ関係の動作を行うAPI郡には
どのようなものがありますか?教えてくだされ〜♪
157デフォルトの名無しさん:03/01/02 22:34
>>155
沢村じゃない(怒
具体的には、CPUが今まさに(そのスレッドで)実行している・していた命令を
得たいのだが・・・
159デフォルトの名無しさん:03/01/02 22:37
>>158
情報ありがとう。でもそこは読んだけれど、その項目で行うデバッグは、
基本的にクライアントプロセスが何かのメッセージを投げた場合に
それをキャッチする話しか載っていない。

能動的にメモリにBreakPointをかける等の話は載っていない
160デフォルトの名無しさん:03/01/03 00:34
SDKで印刷プレビューを作るにはどうしたらいいでしょうか?
ネットやVC6についていたサンプルソースなどをあさってみたのですが
よく分かりませんでした。

ここのサンプルを見ろ!とかありましたらお願いします。
ようはハック死体って事か。
162デフォルトの名無しさん:03/01/03 01:09
>>161
純粋にハックしたいだけなら既存のものつかったほうが早い気もするけど

俺もデバッガーがどういう風に動いてんのか知りたいから
ちょっとみて見たけどDebugBreakつかうのかな?
どうやって任意の場所に埋め込むかわかんないけど
クラックしたいのではなく(というかクラックなら普通にVisualStudio使ってできるし)
現在特定のスレッドで動いているコードをリアルタイムに表示するソフトウェアとか
面白そうだなと思い、そのための資料探しに奔走しています。

>>162
DebugBreakは、ブレークポイント例外を発生させるAPIです。
デバッグされるソフトウェアで、強制的にブレークで止めたい場合に使います。
他にも、デバッグされたくない市販ソフトなどの場合に裏技的に使用して
一切デバッグできなくする方法もあります。
164158:03/01/03 08:39
なるほど。そういうことか。

俺はブレークさせたいところに WriteProcessMemory() で int 3h を
書き込む、という適当な方法で書いたことはあるけど、もっと
ストレートな方法があるのかどうかはわからんや。

全命令捕まえる気なら、スレッドをシングルステップ実行モードにしてしまって
EXCEPTION_SINGLE_STEP をキャッチするとか。
>>164
int3hを入れるのは実装可能ですね。スマートではないけど。
シングルステップ実行モードにするのが一番素直そうな気がします。
そちら方面から調べてみよう、ありがとう。

しかしそれにしても、ブレークポイントを設定する命令があるはずですけどね。
XP限定だがDebugBreakProcessでいつでもどこでも
強制的にブレークを発生させることができる。
他のOSだとSuspendThread→GetThreadContextでPCを取得→
WriteProcessMemoryでPCの位置にint 3を埋め込み→
ResumeThreadとか自力でやるしかない。
ただし9xではKERNEL32.DLL内のコードを実行中にこれを
やっても効かなかったり以後のOSの動作が不安定になったりする。
ってWin9xではKERNEL32のコードはもともとWriteProcessMemoryで
書き換え不可だ
SuspendThread→SetThreadContextでPCをDebugBreakの
先頭に移動→ResumeThreadってやった場合の話だった。
168デフォルトの名無しさん:03/01/04 15:45
エディットボックスで、現在エディットボックスに表示されてるテキストの
先頭のセル位置を取得する方法ありませんか?
>>168
先頭のセル位置って?
170168:03/01/04 16:30
>>169
現在エディットボックス内に表示されていて、見える部分の
最初の文字の位置です。
EM_***系のメッセージからめれば可能
適当に探せ
172sage:03/01/04 18:11
フォントについて、ワシにも教えてくんろ。
厨房みたいな質問で恐縮じゃが...

テキストを横書きや縦書きで斜体で表示したいんじゃが、
横書きの斜体はLOGFONTのlfItalicでいいが、縦書きでは
斜体を右肩下がりじゃなく、左肩下がりの斜体にしたい。
どこをどう いじくれば いいんじゃろうか?
回転させればいいんじゃないの
lfEscapementメンバとlfOrientationメンバを調べてみそ
9xとNTで意味が違ってたりするから気をつけて
回転って、どこをどう回転させる? 年寄りにも分かる
ように教えてくんろ。

OUTLINETEXTMETRICにotmItalicAngleってのがあるが、
あれは取得だけで、設定はできないよな...何か
いい方法はないもんか。
escapementとかorientationでぐぐってみろと続けようかと
思ったけど記憶力に自信がないからやめといたら174に
書かれますた
ご返答ありがたし。

あれから、テストプログラムでいろいろやってみた。
縦書き斜体ということで、@の付いたフォント、lfItalicは
true、lfOrientationは2700という前提で、lfEscapementを
100単位で0〜3600までやってみたが、すべて右肩下がりの
斜体だった。まあ、lfEscapementって一文字単位で回転させる
だけだから、当然の結果だが。

もしかして、ワシの前提自体が間違っているのか?

念のためにWordを調べると、縦書き斜体は右肩下がりだった。
日本語の縦書き斜体は右肩下がりが一般的なのか?
でも、やっぱ左肩下がりの斜体を実現したい。

どなた様か、助けると思って、具体的な数値を教えて
くんなまし。
italicは使わないでescapementで回転させろって言ってんだよ
横書きだって左に傾いたイタリックなんか出せないだろ
頭膿んでるのか?
179172:03/01/05 05:54
夜遅くまでご苦労さんです。

> 頭膿んでるのか?
かもしれん。ここんとこ、斜体のことで頭が爆発寸前じゃ。

> italicは使わないでescapementで回転させろって言ってんだよ
なるほど。でも、これって同じ形のまま回転するだけじゃな。

> 横書きだって左に傾いたイタリックなんか出せないだろ
うーむ。バックスラントのことか。縦書きでも反対側に傾斜
させるのは、通常の方法じゃ、無理だってことか...

DTPソフトだと、斜体の角度を指定できたりするが、やっぱ
スプライン曲線データを取得して、自分で変形するのが吉って
ことか。

(字幕合成ツールを作っとるんじゃが、何故に日本語字幕の
縦書き斜体はWindowsとは逆に傾斜してるのか不思議じゃ。
それともWindowsが変則的なのか?)
180デフォルトの名無しさん:03/01/05 06:51
日本語フォントの標準的な「斜体」の概念は知らないけどさ、
イタリックが手書き文字を模したものとすると、日本語
フォントの縦書き斜体は Windows の標準的なイタリック
とは逆方向に傾斜、つまり、右肩上がり斜体であるべき
かなって気もするね。だから縦書きに限ると Windows の
ほうが「変則的」かも。でもさ、漢字とアルファベットの
混在するテキストを合理的に斜体にするにするためには、
縦書きでも、この傾斜方向しか選択の余地がなかったっ
てのも事実だよ。ほんじゃ、がんばって。
ラスタ単位で1ピクセルずつシフト。後に回転でどうか。
>>172
ワールド座標で平行四辺形の変形を指定するのはどうよ

HFONT hFont;
const char text[] = "縦書き逆Italic";
LOGFONT lf;
HDC hDC;
XFORM xf, xo;

xf.eM11 = 0.5f;
xf.eM12 = 1;
xf.eM21 = -1;
xf.eM22 = 0;
xf.eDx = 300;
xf.eDy = 0;

GetObject(GetStockObject(SYSTEM_FONT), sizeof lf, &lf);
lf.lfEscapement = -225;
lf.lfOrientation = 900;
hFont = CreateFontIndirect(&lf);
183182:03/01/05 10:07
hDC = GetDC(hWnd);
SetGraphicsMode(hDC, GM_ADVANCED);
GetWorldTransform(hDC, &xo);
SetWorldTransform(hDC, &xf);
hFont = (HFONT)SelectObject(hDC, hFont);

TextOut(hDC, 300, 200, text, lstrlen(text));

hFont = (HFONT)SelectObject(hDC, hFont);
SetWorldTransform(hDC, &xo);
SetGraphicsMode(hDC, GM_COMPATIBLE);
ReleaseDC(hWnd, hDC);

DeleteObject(hFont);
>>182

コードまで示してくれて多謝。

実は自分でスプラインを操作しても、最終的に
アンチエイリアス処理まで自前でやるはめに
なりそうで困ってたんだが、これはいいな。

テストプログラムで試してみても、XFORMを
変えると、いろんな変形が可能だな。
感謝感謝です。
185デフォルトの名無しさん:03/01/06 14:41
すいません、どなたか、WIN32API.TXTの誤植の少ない物のありか、知りませんか?
今はVB6付属のを使ってるんですが、誤植でハマった…。

#微妙にスレ違いかな?
186デフォルトの名無しさん:03/01/06 15:00
すいません、質問です。
MM_WOM_OPENメッセージはいつ発生するんでしょうか?
>>185
MSDNには加入してるか?
188初心者・マジ質問:03/01/07 00:21
マジ質問です。

このGoogleToolbarのように、Rebar上の最初の「Google」ボタンの後に、「コンボボックス」がきたり・・・、
http://toolbar.google.com/intl/ja/toolbar.gif

「Lunascape」の検索Rebar上で、コンボボックスの後に、またコンボボックスを持ってきたり・・・、
http://www.lunascape.jp/images/screenshot3.gif


このように、ボタンやコンボボックスの後に「コンボボックス」を追加するには、どのような処理をすればいいのでしょうか?
もちろんWin32APIを使用するやり方でお願いします。

Rebar上にBandを追加するやり方や、Band上にボタンやセパレーターや文字列を追加するやり方もわかりますが、
同じBand上に「コンボボックス」を追加するやり方がわかりません。
189デフォルトの名無しさん:03/01/07 00:28
>>188
それはたぶんMFCで言うところのダイアログバーみたいのを使ってると思われ。
Rebarでやるんなら、Rebarにのせるウインドウをモードレスダイアログにすれば
いいかと。
(同じバンド上のボタンをフラットにしたいとかならオーナードローしないといけないと思う)
>>188
コンボボックスをRebarの子として作って、RB_INSERTBANDをSendMessageすればいいだけ
と思うのだが。つーか、MSDNのRebarの最初のページ見た?
The MM_WOM_OPEN message is sent to a window when the given waveform-audio output device is opened.

192名無し@沢村:03/01/07 06:07
>>188
ヌヒよ、ツールバーのセパレータは幅を指定できるから
広い幅のセパレータを作ってその上にコンボボックスを
貼り付けなさい。
IEのツールバーはこの方法でないと無理。
193188 初心者・マジ質問:03/01/07 12:23
みなさん、ご返答ありがとうございます。

>>189
なるほど、rebar上に「モードレスダイアログ」として「載せている」わけですね。
家に帰ったらやってみます。

>>190
そのやり方はすでに知っています。
その説明は、「rebar上にbandを追加するやり方」ですよね。
そのやり方だと、comboboxが単独のbandとして作られてしまうだけなので意味がないです。
そうではなくて、「band上にcomboboxを追加するやり方」を知りたいのです。

>>192
ほほーう。
セパレータというのは、幅が指定できるのですか。
それは知らなかったです。
これも家に帰ってから、実際にやってみようと思います。
194デフォルトの名無しさん:03/01/07 12:54
test
「優先するオーディオデバイス」ってプログラム上で触れないでしょうか
現在レジストリを書き換えることで行っていますが
スマートなやり方があればお教えください
196デフォルトの名無しさん:03/01/07 13:37
DVD-ROM内の全ファイルは、CreateFile() でオープン可能。
だが、いくつかは、ReadFile() するとエラーになる。
(おそらく、コンテンツ保護のたぐいだと思うので、それはOK)

ただ、ReadFile()の代わりに、CreateFileMapping() と MapViewOfFile() を
使うと、エラーにならず、map できたかのように振舞ってしまう。だが、それ
を鵜呑みにして、そこのメモリを読もうとすると、例外が発生し、プロセスが
爆死してしまう。

ReadFile() を使わずに CreateFileMapping() を使った場合に、事前に map
領域が確かに読めるかどうかの検査をしたいのですが、可能でしょうか?
(Virtualなんとか、の類で可能なのかな?)
IsBadReadPtr
または__try〜__exceptで囲む
そのメモリアクセスするところをtry..catchとかで守っておけばええやん。
Win32Api的には、構造化例外が飛んできたら、NGって事で。
VC++なら、catch(...)で捕まえられたはず
IsBadReadPtr・・・なるほど。試してみます。
ただ、MapViewOfFile を MAP_READ指定で呼んで OK が返っているから、
仮想メモリとしてのアクセス属性には、READ権はあるかも。

構造化例外・・・NT系でなくても使えるんですね。
なんか、95系はダメかと勘違いしてました。
これだったら、確実そうですね。
200デフォルトの名無しさん:03/01/07 15:09
>>195
デバイスIDを指定すれば?
>>200
IDを指定してデバイスごとに操作することはできるんですが、
優先デバイスを切り替えることができないのです
202デフォルトの名無しさん:03/01/07 15:39
>>201
それはWAVE_MAPPERで開きたいってコト?
そりゃムリ。少なくともWindowsでは。
>>199
IsBadReadPtrも内部で構造化例外使ってるよ
>>193
沢村が嫌いなことに異議は全くないが
今回に限りその態度はちょっと外れてるぜ
質問に来てるんだろ?
>>201
「サウンドとマルチメディア」コントロールパネルの
代替品を作ってるのでもない限り
プログラムが勝手に優先デバイスを書き換えるなってこった
>>204
沢村はデタラメしか教えないから
回答者として居座られたむしろ迷惑だ
>>203

え?
Win32API(?)のソースって公開されてるの??
>>206
おまえ2chのポリシー知らんのか?
>>208
コテハンで馴れ合う奴は逝ってよし
>>207
解析本がある
>>209
聞く耳持たない者を説得してるほどヒマじゃない
というか、沢村は、マルチで質問して、マルチに応答を
展開して、結局「解決しなかった」とかいいはなった記憶が
強烈すぎる
この沢村の思うがままのスレ展開はどうしたことだ
   【沢村に反応してしまった人】         【沢村を放置、徹底無視を貫き通した人】

    , ・´.......... . .   ...... "" '' - ..,_  .               \ │ /
  ./::::::::::::::::::::::::/ /:::::::::::::::ヘ::::::::::::::ヽ                  ./ ̄\    ∩  ∧∧
. と. ,,i::::::::::::::::::::::/ /::::::::r(::::..ン::::::::::/ .        ∩ ∧ ∧∩ ─( ゚ ∀ ゚ )─  \ ( ゚∀゚ )へ
<´ _;;;::::::::::::::::::::::し:::::::::::`(:::::ヘ::::::::::::\        ヽ( ゚∀゚ )/   .\_/     |    /(ソ
    ''ヽ::::::;;;;;::::::::::::::::::::::::::::..ン:::::::;;;::-'''         |   〈..   / │ \    |   |
    ⊂;;;;;;,.:::::::.--- ー  '''' '    .        / /\_)            / /\」
                               ""                ""
   沢村と一緒に、アクセス規制!            優良コテハンとして、表彰!
でも>>192の回答が最も的確な気がするけど。
>>214
なんで名無しがコテハンとして表彰なんだよ
217デフォルトの名無しさん:03/01/08 07:30
MessageBox()をデスクトップの中央でなく、自分のWindowの中央に
表示したいのですが、どうすればいいのでしょうか?

MFCのAfxMessageBox()では中央にでるので、デバッガでソースを
追っかけてみたのですが親Windowをがりがり捜している?だけのようで
なぜ中央にでるのか分かりませんでした。
フックを使ってるんじゃなかったっけ?
>>217

MFC のは、自前で用意した MessageBox風のウィンドウじゃないの?
>>217
HWNDが貰えないからMoveWindow()もSetWindowLong()もSendMessage()もだめ
だいいちMessageBox()から返ってきた時点でダイアログは存在していない

漏れ的にはあんなの糞

ちょっとでも別の機能が欲しければ独自のダイアログボックスをつくるのが早っしょ
WM_INITDIALOGでGetParent()とMoveWindow()ね
221gn355my0:03/01/08 15:46
MessageBoxIndirect() じゃダメなのか?
>>217
というか
 ::MessageBox( HWND hWnd ,  ...
の hWnd を指定したら、ウィンドウ中央に表示されたんだけど?
223217:03/01/08 17:42
>>218
表示される前にWM_CREATEとかを捕まえて動かしているのでしょうか?
フックはよく知らないのでさっぱりです。
>>219
MFCのソースを見る限り最後に::MessageBox()を呼んではいるのですが。
>>220
やはり自前ですか・・・
>>221
MSGBOXPARAMSに値を設定してやってみましたが変わりませんでした。
>>222
MFCの中で
HWND hWnd = AfxGetMainWnd()->GetSafeHwnd();// テスト
// AfxMessageBox( "やっほー", MB_OK, 0 );
::MessageBox(hWnd, "やっほー", "test",MB_OK );
//::MessageBox(NULL, "やっほー", "test",MB_OK );
とやると自分のWindowの中央に出ました。NULLだと出ませんでした。
SDKのサンプルの中にあるMessageBoxだとデスクトップ中央に出るのですが。

フックとかちょっと特殊なことをしているのでしょうか。
フックを少し調べてみます。ありがとうございました。
224IP記録実験:03/01/08 21:32
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
漢ならあえて晒す。
口びるマロ
>>317-318
来ないと言うやつは又来るが、さようならと言った次のレスにもうコピペする奴は珍しい。
228デフォルトの名無しさん:03/01/09 09:04

マルチバイト文字列をワイド文字列に変換するとき、
C標準関数の mbtowc を使うのと、Win32API の MultiByteToWideChar の
どちらを使うのが一般的でしょう?
APIスレだからMultiByteToWideCharと答えておこう
ウワァーン ( `Д´)=○)3゚)∵
>>229 漏れも。
どうしてもmbtowc使うならsetlocaleを忘れるなよ。
232228:03/01/09 15:22
>>229 >>231
ありがとー。

ところで、MultiByteToWideChar や、WideCharToMultiByte をラップした、

 std::wstring mbstr_to_wstr( const std::string& source );
 std::string  wstr_to_mbstr( const std::wstring& source );

↑のようなヘルパ関数をつくろうと思っているんだけど、
CodePage や、フラグの設定を固定したい場合は、どの設定が一番無難ですか?
経験豊かな人、誰かご教授願います。
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
234231:03/01/09 18:49
>>232
何も考えないならとりあえず
MultiByteToWideChar(CP_ACP, 0, ...)
WideCharToMultiByte(CP_ACP, 0, ...)
でいいんじゃないの?
まずはそれからだ
235228:03/01/09 19:18
VC++.NET の CRT の実装(mbtowc.c とか) を見てみました。
以下レポート

mbtowc は その内部で、MultiByteToWideChar を呼び出しています。
しかも マルチスレッド対応でした。( _MTスイッチで指定 )

問題の CodePage は、 setlocale で指定するようだけど、
"C"ロケールを設定すると、CP_ACP にセットされるみたい。
VCで作成したアプリはデフォで "C"ロケールに設定されるらしいので(未確認)、
結局 mbtowc は、↓とほぼ同じになると。
::MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS ... );

嘘言ってたらゴメンナサイ.

>>231
ありがとう。
でも、とりあえず mbtowc でもいいかなという気になりました。
>>792
はぁ?
おい!おまいら!

ttp://dailynews.yahoo.co.jp/fc/computer/2channel/

のアンケートで5を選びませんか? 目標50%
つまらないね。

トリップだってさ
全然ボツ。
IPとってる板

qb : 2ch批判要望 削除議論 削除要請 削除整理
live2 : ニュース速報
tmp : ニュース極東 ちくり裏事情 政治思想 Download
    厨房! 人権問題 バカニュース 薬・違法
    ゴーマニズム ロビー 最悪 少年犯罪
    違反の潰し方 ペット苦手 なんでもあり 学歴
普通に見れるけど・・・俺が変なのか・・
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
242デフォルトの名無しさん:03/01/10 12:22
全然関係ない書き込みがあちこちに多発してるみたいだけど、
これって、何が原因なの?
根拠があって正しい情報だとしても
当事者が都合悪ければ誹謗中傷だわな

どうなっとんだ
>>904
>壊れやすいって新聞に投書するなり
まず1に、俺はそういうことを自分が主張したいのではなく
そういう情報を集めたいのだ。もちろん自分が書くこともあるだろうけど。

新聞はリアルタイムで会話ができない。
しかも載るか載らないかもわからない。

掲示板だと数多くの人の体験談やらなにやらがたくさん集まり
使っている人のナマの声が聞ける。それを信じるか信じないかはその人しだい。
しかし、途中で誰の手が加えられたわけでもなく
また、誰かによって省かれた部分がない意見というのは貴重だ。
書き込まれた瞬間に、自由な質問ができるのも魅力だ。

そういうのが無くなってしまう、もしくは減ってしまうというのは悲しい
>>242
祭り気取りなんだろ
IP取るのは管理者の勝手だが
スレ違いのレスを垂れ流されるのは邪魔でかなわん。
246OFNトースター:03/01/10 13:51
OPENFILENAMEなら俺に聞け
ってほどOPENFILENAMEに詳しい人いませんか?
>>242
すでに批判要望板の荒らし報告にあがってるな

◆スクリプト&コピペ(乱立)荒らし報告スレ27
http://qb.2ch.net/test/read.cgi/accuse/1041678810/
関係ない話してるとスレが死ぬぞ
249デフォルトの名無しさん:03/01/10 14:02
>>246
何が聞きたいのか、書いてみたら?
250OFNトースター:03/01/10 14:13
待ってました。
コンパイルして実行してほしいです。
起動時に、名前を付けて保存のダイアログが出ます。
そのままマイドキュメントに保存すると、このプログラムでは
何も保存されないけど、エディットに結果が入ります。
その結果を教えてほしいのです。
251OFNトースター:03/01/10 14:14
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, PSTR, int) {
MSG msg;
WNDCLASSEX c;

c.cbSize = sizeof(WNDCLASSEX);
c.style = c.cbClsExtra = c.cbWndExtra = 0;
c.lpfnWndProc = WndProc;
c.hInstance = hInst;
c.hIcon= LoadIcon(NULL, IDI_APPLICATION);
c.hCursor = LoadCursor(NULL, IDC_ARROW);
c.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
c.lpszMenuName = NULL;
c.lpszClassName= "test";
c.hIconSm = NULL;

if (!RegisterClassEx(&c)) return 1;

CreateWindow(
"test", "TEST",WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInst, NULL);

while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
252OFNトースター:03/01/10 14:15
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
OPENFILENAME ofn;
TCHAR strFile[MAX_PATH] = "default";
char buf[MAX_PATH];
static HWND hEdit;
static WORD w = 1234;

switch (msg) {
253OFNトースター:03/01/10 14:16
case WM_CREATE:
hEdit = CreateWindow(
"EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 0, 0, 490, 22, hWnd, 0, ((LPCREATESTRUCT)(lParam))->hInstance, NULL);

memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = 76;
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = "DOC\0*.doc\0HTML\0*.html\0\0";
ofn.nFilterIndex = 0;
ofn.lpstrFile = strFile;
ofn.nMaxFile = MAX_PATH;
ofn.nFileOffset = w;
ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
254OFNトースター:03/01/10 14:16
GetSaveFileName(&ofn);
wsprintf(buf, "strFile = %s, nFileOffset = %d", strFile, w);
SetWindowText(hEdit, buf);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}

ここまで。
255OFNトースター:03/01/10 14:19
僕は、ofn.lStructSize = 76; でしか使えません。
ofn.lStructSize = 88; でofnが使える人の結果も知りたいです。
>>255
msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/CommonDialogBoxLibrary/CommonDialogBoxReference/CommonDialogBoxStructures/OPENFILENAME.asp
荒らしかと思った…

・・・・・・・それが何か?
259231:03/01/10 15:05
>>235
ありゃ。確かにCP_ACPみたいだな。嘘ついてスマソ。
VC6以前ではまった気がしたんだが…。
printf("%S", L'あ');
とかできるようになったのかな??
260256:03/01/10 15:23
>>255
typedef struct tagOFN {
     :
#if (_WIN32_WINNT >= 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
} OPENFILENAME, *LPOPENFILENAME;

なぜ
ofn.lStructSize=sizeof(OPENFILENAME)
としないのか
精神病患者のオナニーサイト
http://www.enjoy.ne.jp/~gokaino1/
262デフォルトの名無しさん:03/01/10 17:21

ちょっと聞きたいんだけど、
Win32API の構造化例外を、C++ でハンドリングするとき、

try{ ::InitializeCriticalSection( &cs ); } // 構造化例外を投げる可能性のあるAPI関数
catch( ※ ){ ... }

※ の部分には何を書けばいいのか教えてください。
DWORD でいいのかな?
素直に __try 〜 __except( エラータイプ ) で囲むべき?
...
うそだと思われるけど、catch( ... ){ 
_set_se_translator()、なんてな。
そういえば、昔、「あー、複数の例外にいちいちcatchかくの面倒やな〜
よし、とりあえずcatch(...)しとこ。」とかやってたら、そのtryのなかで
Access Violationが発生してたことに気づかなかったことがあったなぁ。
なんで、catchに行くのか理解できなかった覚えがあえる
BackupRead()とBackupWrite()でOwner,DACL,SACLを全部コピーできる、
Robocopy + SCopy + α みたいなミラーリングプログラムを作っているのですが、
ハマっています。 ご存じの方いたら教えてください。

SE_RESTORE_NAME特権を有効にすると、BackupWrite()で書込み権を持っていない
ディレクトリにファイルを書き戻せますが、書き込み権の無いディレクトリ中に
サブディレクトリを掘るにはどうしたらいいのでしょうか?

どうも、ディレクトリをBackupWrite()する場合、CreateDirectory()してから
BackupWrite()で属性情報だけ書き戻すしかないみたいですが、
CreateDirectory()はERROR_ACCESS_DENIEDになってしまいます。

CreateDirectory()するときだけACLを変更するのも何か違う気がするし...
>>262
_set_se_translator と、マクロを使ったほうがいいのでは…?

struct structured_exception; // Win32API構造化例外クラス

// 例外送出関数と、初期化関数
void trans_st_except( UINT e, EXCEPTION_POINTERS* pe ){
 throw structured_exception( e, pe );
}
// main か WinMain のアタマで呼び出す
void init_structued_exception_hander(){ _set_se_translate( trans_st_except ); }

// マクロ expr には例外を送るような式とか関数を入れると
#define SE_TEST( expr ) \
 __try{ (expr); } \
 __finally{}

使用例
 try{ SE_TEST( ::InitializeCriticalSection( &cs ) ) }
 catch( structured_exception& se )
 {
  (エラー処理)
 }

なんかわからんもんがすっ飛んでくるよりもいいでしょ。
赤信号、皆で渡れば怖くないってやつじゃないか。
つまらなくなるね。
ネタにマジレス北國新聞
 思ってる事をそのまま言ってしまうと行為=無責任発言
ということ。
 正当性がある意見なら、実社会でも言える。
 内部告発なんかも、実社会でも十分可能。
がんがれ
串設立&串解禁きぼん
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
NYでログ取ってる方、いらっしゃいますか?
なんとなく分かりました。thx

     ま た  ま さ と  か!

ひろゆきツマンネー!!
288 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:56 ID:rLfxQ17l
>厨房板は本当に閉鎖なのか?
初耳。
うそをうそと
600,000,036…
近藤朋(享年15)
今日午前4時前、幸田駅の線路脇の道路でキャッチボールしていた中学3年生4人組がいた。
ところが、ボールが線路に入った。
幸田駅の線路に、ボールを取りに入った、中学3年生の女子1名が、貨物列車に
ばばばばばピィー―  きゃ〜!  ブァプアあああああああー―――――――ン!!!!!!

ご愛嬌・・・
被害の大きさに差がありそうだけども。
誹謗中傷一番垂れ流しってどこかねぇ?
さあゲームの始まりです

愚鈍な警察諸君

ボクを止めてみたまえ

ボクは殺しが愉快でたまらない

人の死が見たくて見たくてしょうがない

汚い野菜共には死の制裁を

積年の大怨に流血の裁きを

SHOOLL KILLER

学校殺死の酒鬼薔薇
286デフォルトの名無しさん:03/01/12 16:19
トラックバーにTBM_SETPOSを毎回送りつづけてスライダーを動かしながら、
他のウィンドウにボタン操作のメッセージを送るようにしたいのですが、
この状態だと他のウィンドウへのWM_COMMANDメッセージが送られず、操作できません。
どうすればできるのでしょうか?お願いです。教えて下さい。
すいません。おかしな操作をしてフォーカスを勝手に変えてたのが原因でした。
ちゃんと操作できました。さようなら。
じゃあなぜ今回になって
俺達を見限ったのだ?
ナイスw
sports3フカーツ?
291デフォルトの名無しさん:03/01/13 01:17
ウィンドウやコントロールのキャプションは SetWindowText で
変更できるけど、メニューのキャプションを変更するには
どうすればいいですか?
(「最近使ったファイル」のようにしたいけど、あれは毎回
メニューを作り直している?)

それとアクティブでなくなると消えてしまうウィンドウ
(メニューやポップアップ)をスパイで捕まえる方法があったら
教えてくらはい
>それとアクティブでなくなると消えてしまうウィンドウ
>(メニューやポップアップ)をスパイで捕まえる方法があったら
>教えてくらはい

えっ?定数でhMenu取るの?勇者だね君は
>291
とりあえずSetMenuInfoとか書いてみる・・・
ほい
hMenu=GetMenu(hWND);
hMenuPlayThru=CreateMenu();
AppendMenu(hMenuPlayThru,MF_ENABLED|MF_STRING,n,sz);
AppendMenu(hMenu,MF_ENABLED|MF_STRING|MF_POPUP,(UINT)hMenuPlayThru,sz);


295291:03/01/13 01:30
ガーン変更でしか?作るのかとオモタユ
296291(本物):03/01/13 01:48
>>292-295
あ、ありがと〜
AppendMenu と ModifyMenu でできました〜
297デフォルトの名無しさん:03/01/13 08:21
SPY++みたいに、実行時に任意のウィンドウの情報を得るにはどうすればいいですか?
298山崎渉:03/01/13 08:29
218.145.25.77:80
218.145.25.14:80
50.51.32.202.ts.2iij.net:80
cache146.156ce.scvmaxonline.com.sg:8080
cache50.156ce.scvmaxonline.com.sg:8080
12.119.64.42:80
ce590-gdl01.terra.net.mx:80
seton03.terra.net.mx:80
218.65.110.14:80
ce590-gdl02.terra.net.mx:80
自己解決
マウスキャプチャして
MapWindowPoints と WindowFromPoint
でなんとかなりそうですね。

しかし今まで色々調べてたのに、質問してすぐ見つかるとは・・・。
板汚しすまそ。
300300get:03/01/13 11:57
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
301山崎渉:03/01/13 18:24
(^^)
302デフォルトの名無しさん:03/01/13 19:43
ツリービューの新スタイルのTVS_FULLROWSELECTって
VisualC++5.0じゃビルドできませんか?
DLLのバージョンは5.81なので大丈夫だと思うんですが
未定義ですってエラーが出てしまいます。
303デフォルトの名無しさん:03/01/13 19:44
簡単な二重起動防止を過去ログ参考にMutexで実装しようと思ってますが
二重起動を防止するときに、先に起動していたプログラムへ任意のイベントなどを
SendMessageなどで送ることはできないでしょうか?
同じプログラムが起動されたら先に起動していたプログラムにある動作をさせたいのですが。
もしかして、ウインドウハンドル捕まえて、それ宛にメッセージ送るだけ?
>>303
Mutexにこだわらないなら、FindWindowで二重起動防止。
ウィンドウクラス名が重複している場合は使えんが・・・

ウィンドウクラス名に依存するのが嫌なら、名前付きイベントを使うのも良いかと
>>303 サンプルコード山のように書かれてるよ。探せ。
DHCぐらいしか知らん
>>303
ウィンドウ持つのが嫌ならスレッドメッセージというのもあるけども。
>>302
できる。
ヘッダファイルだけそろえてやればいい。
もしくはその定数を自分で定義してやってもオケ。
たしかBCC5.5.1とかには入ってるはずなので、落として差し替える!
Win32コンソールアプリでコンソールにCGを表示させることは無理ですか?
いや、AAじゃなくてな。
コンソールにグラフィック表示機能があれば可能だろうけど
聞いたこと無いねえ
コンソールを直訳すれば操作卓だから UI は規定されないのだろうが、
一般にコンソールと言ったら CUI が常じゃないか?
まあ、どうしてもと言うなら GetConsoleWindow() でウィンドウハンドル取って、
あとは煮るなり焼くなり犯すなり。
313デフォルトの名無しさん:03/01/14 01:46
char FindPath[256];
strcpy(FindPath, "c:\\*");
hFind=FindFirstFile(FindPath, &FData);
ここで FindPath[0]=0;としても
この後のFindNextFileに影響無しで良いですか?
GetConsoleWindow()
 Windows NT/2000/XP: Included in Windows 2000 and later.
 Windows 95/98/Me: Unsupported.

とか書いてあるけどナー。
>>313
多分無いと思うけど、何なら試してみたら?
んなもん質問実験してる暇にもうひとつバッファ作ればいいだろ。
317デフォルトの名無しさん:03/01/14 01:51
コンパネの画面でウィンドウのタイトルバーの色や選択色などを設定するけど
あそこで設定したものってどうやってプログラムから取得するの?
現状としては選択色が取得したいんですが。
318313:03/01/14 01:51
>>315
試した。
ちゃんと動くっぽいけど本当に大丈夫か知りたくて・・
>>317
GetSysColor()では不満か?
カーソルがメニューの外に移動したかどうかを知る方法を調べています。
メニューを表示してカーソルをメニューの外に移動させると、
アイテムが一つも選択されていない状態ができます。
このことを教えてくれるメッセージなどありますでしょうか。
御存知の方いらっしゃいましたら、どうかよろしくお願いいたします。
321デフォルトの名無しさん:03/01/14 12:46
関数ImmNotifyIMEが、
WindowsXP環境だけ失敗するのですが、
何かご存知の方居りませんか?
322デフォルトの名無しさん:03/01/14 18:15
Win32の勉強始めたばかりなんですが一般的な学習法ってなんでつか?
Petzold本に出てるようなファンクションをかたっぱしから試してどう動くかを学ぶとか?
ちなみに目標は自家製の本格的なテキストエディタ作成でつ。
・Petzoldのサンプルを少し改造してはその結果を確認
・大学ノートを用意し,憶えたことを必ずメモする
・糞使いづらいMSDNの調べ方に慣れる

以上を繰り返せばテキストエディタは53行で書ける
324デフォルトの名無しさん:03/01/14 21:52
ファイル名
名無しさん.txtが、名無し~1.txt であるとき、
名無しさん.txtを名無し~1.txtにリネームするには、どーやったらできますか?
MoveFile("名無しさん.txt", "名無しさ~1.txt");
ってしても成功して、そのまんまなんですけど。
両方同じファイル名なんじゃないの。ロングとショートの。
>>325
そうなんですけど、ロングをショートにしたいんです。
>>326
意図が不明だけど一回nanasi.txtを中継すれば良いんじゃないの。
>>318
一般にWin32APIはハンドル作った時点で情報のコピーを
作るからユーザー側で用意したバッファは壊してOK
>>321
詳細なテキストサービス…でぐぐってもオフにする方法しか
出てこないな。たぶんその関係だとは思うんだが
>>327
9xだとトンネリングというOSの余計なお世話のせいで
それでもうまくいかない可能性がある
>>327
すみません。それだと、nanasi.txtが既に存在しているかも
チェックしないとならないんですね。それがめんどいのです。
TempFileでも中継することにしますか。
うーん。なんかないものか。
>>329
え?じゃ、>>330もだめか。
332317:03/01/14 23:11
>>319
おお!そうだシステムカラーだ。
ググろうにもキーワードが思いうかばんかった。恥ずかしい。
エクスプローラで >>324 と同じ事をすると成功するな。
何をしているんだ?
隠しAPIを使ってる
>>334
根拠きぼんぬ
GetShortPathName?
>>336
得たいという話じゃなくて、設定したいという話だったと思う。
338324:03/01/15 01:43
renコマンドや、moveコマンドでも出来ませんでした。
ですが、名無しさん.TXTの、
.TXTを小文字にしてやると、成功することが分かりました。
昔、Explorerでもたしか、そんな仕様があったような。。。
全部小文字だと、頭だけ大文字にされたりとか。

> 昔、Explorerでもたしか、そんな仕様があったような。。。
> 全部小文字だと、頭だけ大文字にされたりとか。

そりゃあ表示上だけの話じゃなかったっすか?
windowsx.hってみんな使ってないの?
Cls_OnCreateとかそんなの。
341324:03/01/15 11:23
うーん。また、問題が。。。
cFilename=名無しさん
cAlternateFileName=名無し~1
であるとき、
cFileNameを、名無し~1 に、リネームできないのは、そういう仕様でしょうか?
342デフォルトの名無しさん:03/01/15 13:15
#include<winnt.h>

int main()
{
return 0;
}

というプログラムを実行すると、winnt.hに複数エラーが出るのですが、
他にincludeしなければいけないファイルがあるのでしょうか?

Borland C++ 5.6を使っています。
343デフォルトの名無しさん:03/01/15 13:22
>>342
あなたは Windows.h を持っていますか?
>>341
Windows2000SP1ではエクスプローラのリネームでもそうなるので、仕様と思ふ。
ところで誰かCSPDK使ったことある人います?
XPならSetFileShortNameで短い名前を付け替えればできそうな予感
2000以前でもNtSetInformationFileでコソーリできたりしないかな
う、SetFileShortNameはバックアップ特権が必要なのか
関係ないけど今MSDNみたら
> Requirements
> Server: Included in Windows Windows Server 2003 2003.
になっててワラタ
もう少し落ち着いて直せと
>>346
>> Server: Included in Windows Windows Server 2003 2003.
>になっててワラタ

typoでなくXMLパーサのバグ(動的にそのダブリが表示されてる)
かモナー
>>341 最悪、一旦違うファイル名にすれば...
MSDNライブラリって再配布OKなんだからMSも最新版をWeb閲覧だけでなく
ダウンロード可能にしてくれればいいのに。
>>349
容量どれだけあると思ってんだ?
Suscriber Downloadでダウンロードできるよ
有料だけど
あれ?Platform SDKについてくるやつは?
353デフォルトの名無しさん:03/01/15 17:20
リッチエディットコントロールにチェックボックスを表示する事って
できますか?文字しか駄目なんでしょうか?
悪いことは云わんから、IEコンポーネントにしとけ。
355山崎渉:03/01/15 17:45
(^^)
>>348
それは問題ありと上のほうであったが。
>>330 >>356
「名無しさん」を LFNで「名無し~1」に変える時だって、
LFNで「名無し~1」のファイルがすでにあったら失敗から、
結局存在チェックはしないといけない罠
「名無し~1」は決してLFNにならないのでは
まあ言いたいことはわかるけど
つーかその場合は単にERROR_ALREADY_EXISTSで失敗するから
事前のチェックはいらないのでは
360デフォルトの名無しさん:03/01/15 21:56
メッセージボックスをフックして、時限式に閉じる機能を付けたい
んですが、フックの仕方がわかりません。
平たく言うと、MessageBoxで表示されたダイアログのHWNDを
取得したいんですが、上手いやり方があったら教えてください。

361デフォルトの名無しさん:03/01/15 23:42
Winにはシンボリックリンクやハードリンクってないですか?
ショートカットみたいなインチキなのじゃなくて。
>>360
そんなこと考えるならダイアログ作れよ・・・
>>361
2000以降にはハードリンクはあったはず。
364>>362:03/01/16 03:23
ポップアップで画面外にウィンドウ作って
そいつを親ウィンドウに指定して
時間がきたら親を消すってどうよ?
365360:03/01/16 07:59
>>362
メッセージボックスって、メッセージの内容によって大きさが伸縮する
じゃないですか。あれを自動でやって欲しいという狙いがあったんです。
逆に伸縮ダイアログが簡単に作れればそっちでもいいんですけどね。
メッセージボックスと同じ動作をするダイアログの作り方でもいいです。
>>365
GetTextExtentPoint32() でメッセージのサイズ調べて、それに合わせてリサイズ
すればいいだけでは?
つーか、メッセージボックス捕まえた後に何をするおつもりで?
367360:03/01/16 08:20
それぐらい読み取れませんか?
時限式のMessageBoxならMSDNにサンプルがあったはずだが・・・
369デフォルトの名無しさん:03/01/16 08:29
http://www.boreas.dti.ne.jp/~keitarou/2ch.html
        アプロダワッショイ!!
     \\  動画専用ワッショイ!! //
 +   + \\ 抜けるぞワッショイ!!/+
                            +
.   +   /■\  /■\  /■\  +
      ( ´∀`∩(´∀`∩)( ´ー`)
 +  (( (つ   ノ(つ  丿(つ  つ ))  +
       ヽ  ( ノ ( ノ  ) ) )
       (_)し' し(_) (_)_)
>>363
裏技的だが、実は2000以前でもテープバックアップAPIでNTFS上にハードリンク作れたりする。
ソフトからAPI等を使用して関連付けする方法を教えて下さい。
372デフォルトの名無しさん:03/01/16 10:23
フォルダを選択する、SHBrowseForFolder関数で出てくるダイアログに
「フォルダの新規作成」ボタンがついてるのをよく見かけるのですが、
なんという関数を使えばいいのでしょうか?
>>370
2000 の機能じゃなくて、NTFS の機能だからだろ。
>>367
| GetTextExtentPoint32() でメッセージのサイズ調べて、それに合わせてリサイズ
| すればいいだけでは?

に対する答えが

> それぐらい読み取れませんか?

ですか?
375デフォルトの名無しさん:03/01/16 11:40
>>372
コールバックを使って、自前で作ってるんじゃないの?
>>373
POSIXサブシステムが作ったハードリンクもバックアップ/リストア
できなくちゃならないからな
>>361
シンボリックリンク相当のものとしては
フォルダにジャンクションというものが張れるけど
ファイルには張れない。
>>374
そうですが何か?
>>378
何だと思います?
>>378
何があるでしょうね(^^)
>>379
何があるかな?
>>378
さあ一人で考えよう。
               _∧_∧
            / ̄ ( ´∀`)⌒\
       __    /  _|     |   |                ,,,,,,,,,,,,,
       ヽヽ   /  /  \    |   |           ,,,,,,,iiiiillllll!!!!!!!lllllliiiii,,,,,,,
        \\|  |____|   .|   |           .,llll゙゙゙゙゙        ゙゙゙゙゙lllll,
         \/  \       |   |           .|!!!!,,,,,,,,       ,,,,,,,,,!!!!|
         | ヽ_「\      |   |、         |  ゙゙゙゙!!!!llllliiiiiiiiiilllll!!!!゙゙゙゙ .| 
         |    \ \――、. |   | ヽ         .|     .゙゙゙゙゙゙゙゙゙゙     |
         |   / \ "-、,  `|  |  ヽ       |               |
      _/   /    "-, "' (_  ヽ  ヽ      .|               |
     /    __ノ      "'m__`\ヽ_,,,, ヽ      |               |
     `ー― ̄          ヽ、__`/ー_,,,, ゙゙゙゙!!!!!!!lllllllliii|               |
                        \゙゙゙゙゙゙゙!!!!!lllllllliiiii|               |
                          \   ヽ   |               |
                           ヽ   \  |               |
                            |     \.|               |
                            `ヽ、,,_ノ|               |
                                  ゙゙!!!,,,,,,,,       ,,,,,,,,,!!!゙゙
                                       ゙゙゙゙!!!!llllliiiiiiiiiilllll!!!!゙゙゙゙
                                ブチッ!! /.// ・l|∵ ヽ\  ←>>378-382
384デフォルトの名無しさん:03/01/16 13:25
任意のようなデスクトップアクセサリを作りたいんですが、
BMPの形のウィンドウを作る方法ありませんか?

9x系なのでSetLayeredWindowAttributesは使えないし
CreateDCでデスクトップのHDCを獲得して描画しようものなら死ぬし
SetWindowRgnで無理矢理出来なくもないがかなり強引というか
そもそも移動する時出る四角い枠からして
任意はこの方法は使ってないと思われるし

当方VC6.0、98SEです
>>360
非可視のダイアログをつくる

それを親にしてMessageBox

タイマーで時間経過後、ダイアログを破棄

親のダイアログが破棄されれば、MessageBoxも消える。
ただし、MessageBoxを表示する前に、ダイアログを画面中央にセンタリングしておく。
あれれ?MessageBoxを呼んだ時点で、
ダイアログプロシージャの処理は回らなくなると思うが、
どうやって、タイマーで時間経過をはかって、ダイアログを
破棄するのかナ? マルチスレッド?
387385:03/01/16 14:08
すまん、俺は MFCの CDialog 派生で実装しました(;´Д`)
>>あれれ?MessageBoxを呼んだ時点で、
>>ダイアログプロシージャの処理は回らなくなると思うが、

モーダルループが回ってるので、WM_TIMER は大丈夫
タイマーメッセージで、MessageBox() のウィンドウハンドルを取得する
1)EnumThreadWindows をつかって、このスレッド内のトップレベル
ウィンドウを列挙
2)コールバック関数で GetWindow でオーナーハンドルが設定した
ものと一致したらそれが目的のダイアログのハンドル(テキスト一致
の方がいいかも)

以下の Delphi のコード例では、見つかったら EndDialog() で閉じる

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Interval := 3000;//3秒後
Timer1.Enabled := true;//タイマスタート
MessageBox(Handle,'Test desu','TEST',MB_OK or MB_ICONEXCLAMATION);
end;

function EnumThreadWndProc(hWindow: HWND; lData: LPARAM):BOOL; stdcall;
begin
result := true;
if GetWindow(hWindow,GW_OWNER) = Form1.Handle then begin
EndDialog(hWindow,IDCANCEL);//閉じる
result := false;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;//タイマストップ
EnumThreadWindows(GetCurrentThreadId,@EnumThreadWndProc,0);
end;
>>384
> SetWindowRgnで無理矢理出来なくもないがかなり強引というか
9xではそのかなり強引な方法しかない
伺かもそうやってる
リージョンがメッシュ状になってない限り
CreatePolyPolygonRgnが一番高速
391デフォルトの名無しさん:03/01/16 19:12
GDI でウィンドウにグラフィックを描画するアプリケーションを作っています。
CreateCompatibleBitmap でオフスクリーンバッファを作成して描画しているのですが、
ウィンドウのサイズが変更されたとき、このバッファはどうすべきなのでしょうか。
自分では、例えばウィンドウが拡大されたら新しく作り直す、とか
ウィンドウが小さくなったときは放っておいて必要な部分だけ使う、とか考えたのですが…
こういった処理のセオリーのようなものがありましたらご教授ください。
392360 ◆FeMIy5OMp2 :03/01/16 21:00
>>367は偽者です。お気になさらずに。

>>366
GetTextExtentPoint32は行の降り返しを面倒見てくれるでしょうか?


>>368
ありがとうございます。捜してみます。


>>374 >>378-383
すいません、何か気に障ること言いましたか?
393360 ◆FeMIy5OMp2 :03/01/16 21:04
>>385-389
有難うございます。
難しそうですが、意味は判りました。
試してみます。
394デフォルトの名無しさん:03/01/16 21:33
ツリービューの項目が左クリックされた場合と左ダブルクリックされたのを
知るにはどうしたら良いですか?
右クリックはWM_CONTEXTMENUを捕まえてHitTestで判定すると分かったんですけど
左クリック関係がわかりません。
>>391
作ろうとしているアプリケーションによる

例えば,エロ画像鑑賞用ビットマップブラウザなら
ウインドウを大きくすれば画像拡大ってことで
StretchBlt()かSetMapMode()のMM_ISOTROPICあたり

ドッター仕様のビットマップエディタなら
子ウインドウでクライアント作ってスクロールバーでずらすとか

ウインドウを大きくしたときにビットマップもサイズを大きくするって
ソフトを洩れは知らん
>>394
WM_LBUTTONDOWN
397391:03/01/16 21:46
>>395
ありがとうございます。参考になりました。
いろいろ試して最適なの方法を考えてみることにします。
>>372
BIF_NEWDIALOGSTYLE
>390
そういえばCreatePolyPolygonRgnのことを忘れてました
サンクス
>>395
画面に表示されない分までオフスクリーンに確保するのは
メモリの無駄ってことで実際のウィンドウサイズ分しか
オフスクリーンを用意しないアプリがあるんだよ。
その分リサイズの処理が重くなるわけだが
401デフォルトの名無しさん:03/01/17 16:57
Windows2000の「別のユーザーとして実行」をプログラムから実行するにはどうしたら
よいのでしょうか?
「伺か」のsetup.exeのようなAdminで実行させるようなプログラムを作りたいのです。
>>401
ファイル名をsetup.exeにすれば勝手にやってくれる
403TECH:03/01/17 17:32
>>402
あ、本当だ・・・でもファイル名を変えたくはないのです。

>>403
コマンドプロンプトでrunasではなくて、ダイアログを出すにはどうすれば良いでしょうか?
ユーザーにそのまま実行を続けるかどうかをGUIで選択させたいと思っています。
>>404 RUNAS を実行したらパスを聞いてくると思うが?
>>405
いや、だからそれは404にも書いてますがコマンドプロンプトなんで、GUIでやりたいなと。
Shift+右クリックの「別のユーザーとして実行」で表示されるダイアログを出す方法が
あったら教えていただきたいのです。
407TECH:03/01/17 19:24
>>404
ゴメンナサイ。

自分でダイアログを作るなら
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_createprocesswithlogonw.htm

が使えるけど、 ダメなんだろうなあ
んー、あれ相当のダイアログを自分で作らないとダメみたいですねぇ・・・
>>409
それで「別のユーザーとして実行」ダイアログが表示できるわけじゃないですよね?
だから自分でそれ相当のダイアログを作らなきゃならないようですね、というのが
>>408なわけでして。

>>407>>409で提示されたAPIとrunasあたりを検索すると
http://www.codeguru.com/misc/RunUser.html
のようなGUI Runasのサンプルがでてきましたが、
あのダイアログ自体を出すAPIや方法が見つからなかったので
ダイアログ自作しかないのかなぁと思っています。

ショートカットファイルのプロパティには「別のユーザーとして実行」という
チェックボックスがあって簡単に表示してくれるのに・・・ガクリ
>>409
そっちだといろいろ特権が必要になるからつらい
そんな特権持たせる操作を要求できるなら
はじめからAdministratorでログインしろですむし
NT4ならこれかな
http://pc3.2ch.net/test/read.cgi/win/1024782123/l50
412デフォルトの名無しさん:03/01/18 11:00
タブコントロールで、タブを最後尾に追加するにはどうしたら良いですか?
TabCtrl_InsertItemだと、インデックスを指定しなければなりませんが
今いくつタブがあるか分からない状態で、最後尾(右側)にタブを追加したいのです。
TabCtrl_GetItemCountで数えればいいだろ
414Question:03/01/18 14:33
VC++ ver6内で「WM_THEMECHANGED」を宣言すると、
「error C2065: 'WM_THEMECHANGED' : 定義されていない識別子です。」と表示されます。

WINUSER.H内には
 #if(_WIN32_WINNT >= 0x0501)
 #define WM_THEMECHANGED 0x031A
 #endif /* _WIN32_WINNT >= 0x0501 */
と宣言されてますし、今開発に使用しているOSもXPです。(Ver 5.1.2600 Service Pack 1)

なぜdefineされないのかわかりません。
_WIN32_WINNTマクロの値は、作成するプログラムのターゲットOSの
選択をするためのものであって、ビルド環境には依存しません。

明示的に#defineしましょう。
416Question:03/01/18 14:47
>>415
WINUSER.H内の#if(_WIN32_WINNT >= 0x0501)だと、私のXPでプログラムを作成するとエラーが起こらないと思うのですが。
なぜエラーが起こるのかがわかりません。

ほかの、
 #if(WINVER >= 0x0400)
 #define WM_PRINT 0x0317
 #define WM_PRINTCLIENT 0x0318
 #endif /* WINVER >= 0x0400 */
だと、問題ないですよね。WM_PAINTはエラーなく使えるわけですから。

私のOSが「_WIN32_WINNT < 0x0501」と認識されているのでしょうか?
> 私のXPでプログラムを作成するとエラーが起こらないと思うのですが。

根本的に勘違いしてる。415を読み直せ。
418Question:03/01/18 14:52
自分でdefineするしかないのですね。
419デフォルトの名無しさん:03/01/18 15:38
error LNK2001: 外部シンボル "__imp__OpenThemeData@8" は未解決です
error LNK2001: 外部シンボル "__imp__CloseThemeData@4" は未解決です

このエラーが出た場合、どのファイルをリンクすればいいのでしょうか?
420419:03/01/18 15:39
UxTheme.lib でした。解決。
失礼しました。
421デフォルトの名無しさん:03/01/18 15:48
ウィンドウリージョンの設定についてお聞きします。(BCB5使用)

フォームにデフォルトの領域を設定します。
HRGN default_rgn;
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)
{
default_rgn=CreateRectRgn(0,0,100,100);
SetWindowRgn(Handle,default_rgn,true);
}
次に、あるボタンを押すと領域が広がるので、その部分を追加したいとします。
void __fastcall TForm1::Open1Click(TObject *Sender)
{
HRGN dest_rgn,add_rgn;
add_rgn=CreateRectRgn(0,0,200,50);
CombineRgn(dest_rgn,default_rgn,add_rgn,RGN_OR);
SetWindowRgn(Handle,dest_rgn,true);
}
これでdefault_rgn+add_rgnの領域が表示されると思ったのですが、表示されません。
どのように解決したらいいでしょうか?
422ひょっとこ:03/01/18 15:55
コントロールパネルで画面のプロパティー内でデザインを変更しても、自分の作ったアプリケーションのコモンコントロールの背景色が変わりません。

例えば、配色を「アイスカラー」から「ピクニック」に変更しても、コントロールの背景色がアイスカラーのままなのです。
ここでは、どのような処理をすればいいのでしょうか?
423デフォルトの名無しさん:03/01/18 16:02
>>421
プッ
424デフォルトの名無しさん:03/01/18 16:08
http://www6.ocn.ne.jp/~endou/index2.html
     ★YAHOOOプロフィール★
425デフォルトの名無しさん:03/01/18 17:24
>>422
レバーとかツールバーの色ってことでしょ?
その色ってシステムが自動的に変えてくれるでしょ?
426ひょっとこ:03/01/18 18:23
コンパネの画面内のデザインを変更しますよね。
変更したら当然「文字の大きさ・デザイン・配色」などのスタイルが変わるわけですよね。
そのスタイル情報を取り出すにはどのAPIを使えばいいのでしょうか?

そのスタイル情報を自分のアプリのrebarに反映させたい。
427ひょっとこ:03/01/18 18:26
コンパネ内にあるデザインを変更したら、ということです。

なぜか、自分のアプリケーションに新しく設定したデザインが反映されない。
428421:03/01/18 19:13
>>423
解決しました。ありがとう。
>>426
ウィンドウメッセージで飛んでくるYO
428はどうせ偽者だからいちおうマジレスしとこう。
ここも強制IDにならないかねえ
>>421
SetWindowRgnに渡したリージョン(default_rgn)
は使いまわし不可。SetWindowRgnする前にコピーを作れ。
VB6(SP5) 対象OSはXP or Meでし。

IE(関連付けされたブラウザ)をプログラムからShellExecuteで呼び出して、
インターネット上のウェブページを表示したりする一種のマクロ言語の
インタプリタもどき作ってるんですが、どうしてもそのウィンドウの「表示完了」が
わからないといけないのですが、どのように表示状態を取得すればいいのか、
見当つきません。表示状態をつかみたいIEは自分で起動したウィンドウ、及びそこから派生するウィンドウです。
よろしくなのら!
432名無し@沢村:03/01/18 23:30
>>431
ヌヒよ、DWebBrowserEvents::NavigateComplete()について調べれ。
どうやってVBで使うかは知らんよ。
433602:03/01/18 23:55
>>429
ウィンドウメッセージとして飛んでくるのはわかりますが。
それをrebarに反映する方法がわかりません。

ほかのコントロールは反映されますが、rebarとstatusbarだけが反映されないのです。
何か特殊な処理をしなければならないのでしょうか?
434602:03/01/19 00:34
私だけかな?

「WINXP」+「VC++6」でステータスバーを表示するアプリを作り、表示した後、コンパネの画面のデザインで配色を変えても、その自作アプリのステータスバーだけが配色が変わらないのは。
なぜだろうか?
WM_CTLCOLORか何か
436602:03/01/19 00:42
しかも、実験的に作成したもので、
猫さんのHPにあるソースを丸々コピーして貼り付けてビルドしただけだから、
私のソース記入間違いでもない。

おかしいな?
437602:03/01/19 00:47
WMメッセージ(WM_SYSCOLORCHANGE)は来るのですが、それを反映させる方法がわかりません。
まさか、こんな問題が出るとは思わなかった。

システム側で処理してくれるものだと思いましたから。
438431:03/01/19 00:47
>>432
Javaは一応書けますが、RADをインスコすんのが面倒で鬱
どうしよう・・・
439421:03/01/19 00:51
>>430
煽られたので、だめかと思ってました。ありがとうございました。(表示できました。)
ただ、タスクマネージャを見てて気づいたんですが、ボタンを押すたびにメモリ使用量が増える模様。
一応↓のようにはしてみたんですが・・・何か忘れてるのかな・・・
void __fastcall TForm1::Open1Click(TObject *Sender)
{
HRGN dest_rgn,add_rgn;
add_rgn=CreateRectRgn(0,0,200,50);
dest_rgn=CreateRectRgn(0,0,0,0);
CombineRgn(dest_rgn,default_rgn,add_rgn,RGN_OR);
SetWindowRgn(Handle,dest_rgn,true);
DeleteObject(add_rgn);
DeleteObject(dest_rgn);
}
SetWindowRgnに渡したリージョンは削除しちゃだめ。
つーか少しはMSDN読め。
>>434
WM_SYSCOLORCHANGEか何かをリレーしてやる必要がある。
SetWindowDQN ってなんですか
443名無し@沢村:03/01/19 12:52
>>442
ha ha ha
444602:03/01/19 13:54
>>441
詳細なプログラム記述方法を知ってますか?
ものすごく困ってます。

ほかのコントロールの配色は変わりますが、唯一「RebarとStatusbar」だけが配色が変わらない。

私は、
WM_SYSCOLORCHANGE内でrgb=GetSysColor(COLOR_3DLIGHT );とし、COLORREFを取り出した後、
そのRebar/Statusbarに反映させようとしていますが、その方法がわかりません。

だれかコントロールオブジェクトの配色を変える方法を知っていますか?

たとえば、デフォルト(例・98SE)では「ボタン」の色は「灰色」ですよね。
これを手動で「赤」に変える方法。
445デフォルトの名無しさん:03/01/19 14:46
>>444
XP でmanifest使用の場合はだめみたい。
該当コントロールだけは従来タイプにしないと厳しそう。(カスタムドローすら無視されます)

446602:03/01/19 15:21
>>445
もちろん「XPビジュアルスタイル」を適用させるのでマニフェストを追加していますが・・・。
マニフェストを使用しないでアプリを作成してみましたが(新規に)、やはり同じ現象・問題が出ますね。

というより、手動でコモンコントロールにシステムカラーを描画する方法があれば自作でプログラムします。
あるはずですが、やり方がいまいちわからないですね。
「WM_SYSCOLORCHANGE」をウィンドウ(Rebar/Statusbar)に対して送っても、全くの無反応です。(涙)

オーナードローを使えばいいのでしょうかね。
447602:03/01/19 15:25
私が思うに、RebarとStatusbarにシステムカラーが変わったと言うことが連絡されていないから、こういう現象が起こると思っているのですが・・・。
なぜほかのコントロール(Button/Combo/Menu/Popupなどなど・・・)に対しては送って、「RebarとStatusbar」だけ送らないのかが疑問???
ふぅ、格闘が続く・・・。
448デフォルトの名無しさん:03/01/19 15:45
>>446
なんか間違えていない? *.exe.manifestを消してみると何の処理をしなくても自動的に色が変わりますが…

>>447
そういう問題ではないでしょう。新規にアプリを起動した場合でもレバーやステータスバーの色はおかしいですから。
それにボタンだって、コントロールパネルで設定した色にはならないでしょう。

449602:03/01/19 15:50
>>448
うん、けしましたよ、それを。

私の環境がおかしいのか・・・。
450602:03/01/19 15:54
いろいろな他者作成のアプリを立ち上げてみましたが、やはり私のアプリだけが色が変わらない。
・・・・。
451602:03/01/19 16:01
私のプログラムミスではないですね。
猫さんのHPにあるソースを完全にコピペしてビルドしたら、やはり同じ問題が出ましたね。
・・・・。
VC++を再インストールしたほうがいいのか?
それとも、SPのバージョンが古いからかな?
VC++6とSP5では駄目ですかね。
452デフォルトの名無しさん:03/01/19 16:02
>>450
他者作成のアプリというのはmanifestを使っていないだけでしょう。
エクスプローラだってステータスバーの色は変わりません。
rcにmanifestを入れてません?
453602:03/01/19 17:18
>>452
rcからマニフェストは消してます(涙)

というか、新規にマニフェスト無しで作成しても問題が起こるのです・・・。
俺の環境上だけの問題かよ・・・。(涙)
454デフォルトの名無しさん:03/01/19 17:38
>>453
レバーの握る部分(?)はポチポチ(manifest使用時)になっています?
それともただの線(manifest未使用時)になっています?
455602:03/01/19 18:18
>>454
ただの線です。IE5仕様ですよ。

XP・PROで問題が起こるのは「REBARとSTATUSBAR」だけです。

嗚呼、休みが終わる・・・。問題が解決しないまま・・・。(涙)
456602:03/01/19 20:43
MSDNから提供されるSDKサンプルをビルドして確かめてみたら、
やはり画面の配色を変えても「Toolbar/Statusbar」だけが変わらないですね。

どうやら仕様のようです。それか不具合か。

VC++6とXP・PROではうまくアプリケーションが作られないみたいです。
VC.NETを購入しようと思います。
457デフォルトの名無しさん:03/01/19 21:21
>>456
そんなことはない。うちもXP Pro でVC6使ってます。
458602:03/01/19 21:35
>>457
Rebarを作成した際、画面の配色を変えてもアプリにきちんと反映されますか?
459602:03/01/19 21:42
寝よ・・・。
460デフォルトの名無しさん:03/01/19 21:52
>>458
manifest無効ならば、反映されます。
ところで、アプリを再起動したときはきちんと反映されるの?
461602:03/01/19 22:13
>>460
ええ、再起動したら反映されます。
ただ即反応してくれないから困ってます。

マニフェストも無効です。

というより、MSDNで配布されているサンプルを私の環境でビルドしたら、同じ問題が出ました。
私の環境が問題あるようです。

ちなみに、VC++は別のパーティションに入れています。
Cドライブ→WindowsXP OfficeXP
Eドライブ→VisualC++6 PlatformSDK
462デフォルトの名無しさん:03/01/19 22:24
タスクトレイにあるハードウェアの取り外しなんですが、
これをAPIから呼び出すことってできるのでしょうか?
> タスクトレイにあるハードウェアの取り外しなんですが
ねーよ。
>>444
SendMessage(hwndStatusBar, WM_SYSCOLORCHANGE, 0, 0L);
MSDNのコモンコントロールの章にもこうしろって書いてあるはずだけど
つーかWM_SYSCOLORCHANGEの説明にそのものズバリが書かれてるし。
だから少しはMSDNを読めと。
466462:03/01/20 07:41
え、あるんですけど・・・
PCカードもUSB機器もIEEE1394機器も使ってなきゃないだろ
468462:03/01/20 09:14
まぁ確かにそうですが・・・
469602:03/01/20 12:11
今、会社のPCから書き込んでいます。

今日、会社のPC(Win2000)で、その問題アプリを立ち上げたところ、なんと・・・、Rebar自体が表示されなくなりました。
いわゆる、家のPC(WinXPPRO)ではRebarは表示されるが、会社のPC(Win2000)ではRebar自体が表示されない。

Statusbarはきちんと表示され、「画面の配色更新」にも対応しました。

やはり、私の家のPCでのビルド環境に何か問題がある可能性大ですね。
事実、MSDNから配布されているサンプルソースを、家のPCでビルドしたら、その「画面の配色更新」ができませんでした。
MSDNから配布されているソースにそのような問題があるはずは無いですからね。

今日家に帰ったら、Win2000を別パーティションにインストールしてみます。


あと、SendMessage(hwndStatusBar, WM_SYSCOLORCHANGE, 0, 0L);ですが、
昨日、Rebarに対してメッセージを投げましたところ、無反応でした。(Statusbarには投げてません)

SendMessage(hRebar, WM_SYSCOLORCHANGE, 0, 0L);→無反応
あと、Rebarの各バンドに対しても投げましたが、無反応でした。
470デフォルトの名無しさん:03/01/20 12:18
> MSDNから配布されているソースにそのような問題があるはずは無いですからね。

この認識は改めたほうが良い
>>469
単にお前の環境が腐ってるだけだろ
>>471
まあ自分のミスより先に疑うよりは健全な認識だな
473デフォルトの名無しさん:03/01/20 19:58
現在実行中の、ほかのプロセスに読み込まれている
DLLの名前と開始位置を取得するにはどのAPIを使えばいいですか?

VisualStdioやWinDbgのメニューコマンドにあるModule Listの内容を
自前で取得したいのです。

メモリの内容を直接読み込むだけなら
GetWindowThreadProcessId
OpenProcess
ReadProcessMemory
でできましたが、その先にいけません。
よろしくおねがします。
>>469
>今日家に帰ったら、Win2000を別パーティションにインストールしてみます。
いままでこれをしていなかったとでも?
だったら忠告しておく
別パーティションではなく別PCにすれ
ビルドの度に電源から立ち上げを2回ずつなんて非能率かつ危険だし,
動作確認を開発環境でやっても本番環境と条件が違ったら意味がない
シリアルポート越しのデバッグ手段がせっかくあるのに勿体ない

>>471
御意

>>472
腐ってるのはお前の視野
別PC? 家に二台以上あるの? ははは。オタク。
さすがにInitCommonControlsExのミスではないですよね?

>>473
WinNT系ならPSAPI.DLL
Win95以降orWin2000以降ならTool Help
両方に対応しておくと良いと思います
>>474
あんたと同じことを言ってるつもりなんだが
何が腐ってるんだよ
478デフォルトの名無しさん:03/01/20 20:33
linuxのstrace相当の動作(APIのモニタ)をするソフトを作るには、
どういったAPIを使えばいいのでしょうか?
また、単なるアプリケーションで可能なのか、dll 作成が必須、または、
driver 作成が必須、などもわかりましたらお願いします。
ターゲット環境は、2K、XPですが、98,ME でも使えるとなお有難いです。
>>478
こんなソフト作りたいの? 頑張って。
http://www.rohitab.com/apimonitor/
480デフォルトの名無しさん:03/01/20 21:35
ファイルを作成するときに、その階層までのフォルダが無かったら
フォルダも自動作成するようなAPIありませんか?
CreateFileじゃフォルダは作成されませんでした。
MakeSureDirectoryPathExists
>>480
フォルダ作ってからファイル作れば?
>>481
そのAPIは知ってますけど、ファイルは作成できないですよね?

>>482
CreateDirectory・・・
WriteFile・・・
って事ですか?
これって毎回CreateDirectoryするの無駄じゃないですか?
484デフォルトの名無しさん:03/01/20 21:46

SAPI(Microsoft Speach API)やってる人いる?
ViaVoiceやらLaLaVoiceやら、MSのSDKやら触ったのだけど
いまいちよくわからない。
SAPIってそもそも各ベンダがDLLにして提供するもので、それを
レジストリから調べて使うものなのか?
SDK入れるとコンパネに音声のアイコンが出るけど、MSがこれらの
APIをラッピングするDLLをだしてて、それを使うものなのか?
あと、ActiveXもMSが透過的につかうためのCOMを作ってくれてるのか?
知ってたらおしえてください。 おながいします。
>>483
すでにディレクトリがあれば作成に失敗するんだから同じことじゃん
MakeSureDirectoryPathExistsやってからファイル作れよ。
487名無し@沢村:03/01/20 23:43
ヌヒ等には、SHCreateDirectoryEx()もあるということを教えてやろう。
動作環境には要注意だが。
>>475
アマグラマさん?
他の人たちの家にあるのは貸与マシンかも知れないよw
489デフォルトの名無しさん:03/01/21 01:17
メッセージが何時来るのか、何で取るべきなのかわからないのですが、決まりや定石ってないですか?
エディットボックスはキルフォーカスがいいとかそんなのです。
>>489
お前の日本が理解できないのだが?

それと、メッセージがいつ来るかなんて誰にも分からん。
491602:03/01/21 01:25
今、別PCにWinXPPROとVC++6をクリーンインストールして、Rebarのついたアプリを作成したところ、「画面の配色更新」には対応できませんでしたね。

これで、はっきりしました。
明らかに、XPとVC++6とでは相性が悪いということです。

VC++.NET買ってこ。
相性で済ませてしまうあたりが不安だ
>>490
僕の日本は国旗の丸が紫色です。えへへ。
>>491
VS.NETを買うこと自体は良いのですが、とりあえずPlatformSDKアップデートを先に


496名無し@沢村:03/01/21 02:02
>>475
ヌヒにはリモートデバッガという便利なものの存在を教えてやろう。
497デフォルトの名無しさん:03/01/21 09:52
「別のユーザーとして実行」ダイアログにはデフォルトでAdministratorのアカウント名と
ドメイン名が入力されていますが、これらの文字列はどのように取得すればよいのでしょうか?
自分の環境(Win2000)ではデフォルトがユーザー名はAdministrator(Adminのアカウント名は変更していません)
、ドメイン名はGetComputerNameで取得できる名前(環境はワークグループLANです)に
設定されています。
498602:03/01/21 12:02
>>494
PlatformSDKなら入れてあります。
入れた状態で、ビルドしても同じ現象が起きたのです。

♪なんでだろう??

とりあえず、今週末(金)までには、解決をしよう。
どこに問題点があるのか。

またまたとりあえずVC++6で踏ん張ろう。
>>498
つられ覚悟で。
なんでそこまでこだわるのがわからん。
直接マイクロソフトに家。
500602:03/01/21 12:29
ただ、考えられる原因は、

●VisualC++6内での設定がおかしい。

ということだと思う。
コモンコントロールを作る際、リンクのライブラリを入れる以外に、何かすることがあるでしょうか?

うーん、コモンコントロール関連はなかなか手ごわいな・・・。
(WinSockのほうが簡単だった・・・)
>>500
インクルードファイルのほうも新しいものを参照するようにしてあるのか?
IEでも対応できていないことを無理やりやろうとすると、
逆に互換性が失われるのでは?
これからMSはなにやるかわからんぞ。
503602:03/01/21 12:58
>>601
しています。

というより、自分でインクルードファイルを置き換えたんですけどね(コピペで)

VisualC++6内の「include」フォルダ内を新しいもの(PlatformSDKのinclude)に変えた。
504デフォルトの名無しさん:03/01/21 13:55
カード・ワーズのゲームエディターのようなTABをメニューの下に
つけるしかたを教えてください。
DLできるPlatformSDKとVC++のincludeのディレクトリ構成ってちがくない?
そのまま上書きはまずいんちゃう?
普通はIDEのインクルードパスの設定でPlatform SDKのほうを優先するように変えたり、
環境変数いじったりで対応するよな。

あとWINVERその他のマクロが適切に設定されていない可能性もあるか。
507デフォルトの名無しさん:03/01/21 16:21
バウンダリ文字列を作るAPIなんて公開されているのでしょうか?
↓こんなの
boundary="=_NextPart_000_001A_01C016CF.64AA5620"

IE も Outlook も同じフォーマットなので API であるのかな?と
後ろ8byteは Uuidっぽいが。
509デフォルトの名無しさん:03/01/21 17:11
マシンに一意なIDを取るAPIってありますか?
吹き出しみたいな形のツールチップを作る方法を教えてください。
>>509
完全ではないが、MACアドレス。
>>509
どの範囲で?
時間とか?
513デフォルトの名無しさん:03/01/21 17:58
リストビューのフォーカスの点線を実線にしたり色をつけたりしたいのですが、
どうしたらできるでしょうか。
514デフォルトの名無しさん:03/01/21 18:06
>>511
できれば NIC非装備のマシンでも使用したいんですが

>>512
イメージ的には、UNIXのhostid的なものです。
コントロールパネル→システムに出てくる、ごちゃごちゃした
IDっぽいのは、それとして使えるのかな?
>>514
cpuidとか?
>>514
GetCurrentHwProfile() の HW_PROFILE_INFO.szHwProfileGuid なんかは?

>コントロールパネル→システムに出てくる、ごちゃごちゃしたID
は違法コピーが無い世の中なら使用可
>>476
アリガト!(´▽`)
518497:03/01/21 20:08
あのぉ・・・>>497ですけど放置ですか・・・
>>509
初回だけCoCreateGuid()した値をレジストリにとっといて
2回目以後はそれを再使用ってのは却下か?
520デフォルトの名無しさん:03/01/21 20:58
>>516
いいかもしれないですね。

>>519
hostidの代替としては、ユーザが任意に変更しにくい値がいいんですが...
>>520
任意に変更ってregeditで変更できてはまずいってことか?
522デフォルトの名無しさん:03/01/21 23:25
特定のアプリケーションが送受信しているパケットデータを
横取りして閲覧と改竄をしたいのですが、

Winsockを使いこめばそのようなことはできますか?
それともDDKを手に入れてガシガシガシやらないとできないですか?
はっきりとRagnarokOnlineといいなさい
>>522
libpcap
>>522

改組するなら filter driver あたりを書くのが良いと思うけど>WDM詳しい人フォローしちくり
WDM 以前の環境ならカーネルレベルで TDI Hook ね。
閲覧するだけなら libpcap でも良いかもね。

一時的な hack で良いなら、通信先を hosts ファイルで 127.0.0.1 に
変更しちゃって、本来の接続先との間で proxy として動作するプログラム
書くのが簡単だと思う。
その手のネットワーク系のプログラムを書くなら、Windows 捨てて UNIX に行った
方が早いと思うぞ。

FreeBSD で作ったルータを挟んで、そこで divert (4) 噛ますとか。
BSD厨ここにも発見(・∀・)
528522:03/01/22 00:48
ttttttttttttttttttttttttthx!
明日(今日か)、本屋に行き詳しく調べます。

>>523
自分と他人を重ねないでね☆
図星のようだな
530デフォルトの名無しさん:03/01/22 01:47
厨です。質問していい?
531名無し@沢村:03/01/22 01:49
>>526
ヌヒよ、そういうレスのことを一般的に「的はずれ」って言うんだよ。
532デフォルトの名無しさん:03/01/22 01:51
CreateCompatibleDCで作ったメモリーDCが
不要になったとき、元々あったBITMAPをメモリーDC戻さないで
DeleteDCしても動くのですがやっぱり悪いですか?
>>532

Win98 や Me などで、使うたびにだんだんリソースが減っていっても
構わないなら、それでも別に良い(めったに使わないツールとか)。
534デフォルトの名無しさん:03/01/22 02:00
>>533
厨です。すばやいレスありがとう。
>>527
どうした、何か BSD に恨みでもあるのか?

Win32 で IP パケットを低いレイヤーでいじろうとすると、どうしても kernel mode で
動くトコロに手を入れる必要があって難しい。開発中は、自分の書いたコードのバグ
で OS ごと落ちるしな。

divert (4) は、そのあたりの処理をユーザ層に切り出してるから開発は楽だぞ。
ま、熱くなる前にスレタイ見ろってこった
それを言ったら、標準 API だと無理、で終わりだろう。
538522:03/01/22 02:23
糸口さえつかめればなんでもいいけど。

ただ、いまBSDに手をつける気力は無いので、
今回はスルーしつつ、記憶にはとどめます。
BSDなんかやるくらいならLinuxやるよ(藁
>>539
BSDにはどういったイメージをお持ちで?
>>540
OS X みたいなもの
>>541
ネタレスカコイイ!
543デフォルトの名無しさん:03/01/22 10:31
Windowsで親プロセスの環境変数を変更する方法ってありましたっけ?
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
に環境変数書いて、 WM_SETTINGCHANGE を投げれば、
親プロセスの環境変数「も」変更できるだろう。
>>543
SetWindowsHookExでDLLを侵入させてSetEnvironmentVariable

>543
親がウインドウもってなかったら?
>>546
ハァ?
>>545 544?
PostThreadMessage
って自分も間違っているし
x>>545
o>>547
>>548
相手がメッセージループ回してくれなきゃ
Postしてもキューにたまるだけで意味ない。
WM_SETTINGCHANGE 投げても既に起動しているプロセスの環境変数は変わらんよ。
つーかUSER32.DLLの関数を一度も呼び出していないスレッドは
そもそもキューが存在しないのでPostできない。
レスくれた人ありがと。返事送れてすんまそん。

>>544
残念それ知ってた。今回やりたいのは親プロセスだけでシステム全体じゃないんだよね。
システム全体の設定を変えるわけだから権限の問題も出てきそうだし、
それに既に起動しているプロセスが変更されるかという疑問もあったし。
でその疑問を先に答えてくれた>>551さんありがと。

>>545
ほう。そんな方法があるのか? でも>>548になんか修正するようなこと書いてあるし、
しかも>>550 >>552でさらに修正するようなこと書いてあるし。

えと、結局>>545の方法で出来るのでしょうか?
それともPostThreadMessage単独で出来るのでしょうか、
SetWindowsHookExとPostThreadMessageを組み合わせるのでしょうか。

DLLを侵入させるってのがやったこと無いからよく分からない。
どっかにサンプルないかな〜。
552 のような状態では、フックも通用しないのでは?
555602:03/01/23 06:39
原因がわからないので、ソース・画像をUPします。

↓ソース(http://www.kumei.ne.jp/c_lang/sdk/sdk_57.htm
http://www.geocities.co.jp/SiliconValley-Oakland/6260/statusbar.rtf
↓ビルドした直後
http://www.geocities.co.jp/SiliconValley-Oakland/6260/pict1.JPG
↓コンパネの画面内「デザインの配色をアイスカラーに変更」した直後
http://www.geocities.co.jp/SiliconValley-Oakland/6260/pict2.JPG

ちなみに、VC++6内の設定は、リンクで「Comctl32.lib」を追加しただけです。
ビルド環境は、WinXP・PRO、VC++6(共に何もいじっていないインストールしたままの状態です)
PlatformSDKはインストールしていません。

なぜStatusbarの色が「アイスカラー」に変わらないのでしょうか?
556602:03/01/23 06:40
実験用として今、猫さんのHPのソースを参考しています。
>>555
CreateMyStatus関数の(HMENU)ID_STATUSをNULLにする
> DLLを侵入させるってのがやったこと無いからよく分からない。
> どっかにサンプルないかな〜。
kageのソース
559デフォルトの名無しさん:03/01/23 18:17
タブコントロールで、右クリックでタブを選択できるようにするには
どうしたらいいですか?
>>559
左ボタンが壊れた?
>>559
右クリックした時にその下のタブを選択させる。
562デフォルトの名無しさん:03/01/23 18:48
>>560
いえ、違いますけど・・・。

>>561
カーソルの下にあるタブを判定するにはどうしたら良いですか?
TabCtrl_GetCurSelだと、右クリック時のカーソルの下にあるタブじゃなくて
選択されてるタブしか判別できないのですが・・・。
>>562
TCM_HITTESTを送る
564山崎渉:03/01/23 20:00
(^^)
565602:03/01/23 20:57
やはり、誰も原因がわからないようだ。
私がプログラムミスでないことは確かなようだ。
>>565
>>557でも駄目なのですか?

567602:03/01/23 21:27
>>566
ええ、だめです。

きちんと初期化はしているので、こんなおかしい不具合がでるはずはないのだが・・・。
ic.dwSize = sizeof(INITCOMMONCONTROLSEX);
ic.dwICC = ICC_COOL_CLASSES|ICC_BAR_CLASSES;
InitCommonControlsEx(&ic);

私だけの問題ではなさそうだ。
568602:03/01/23 21:34
ちくしょう・・・ドットネット買うしかないのか・・・。
んー、それがXP以外では問題がでないようならmanifest.xmlかなんかで解決するかもな。
XP持ってないんでどうとも言えんが。
570602:03/01/23 22:01
>>569
マニフェストはすでに確かめてあり、だめでした。

・・・わからん。。。
ほかの人で同じような不具合はないのかな?
> 私がプログラムミスでないことは確かなようだ。

割るれるな?
572デフォルトの名無しさん:03/01/23 23:58
Windows NT4.0/2000以降でASPIを使わずに
SCSIのディスクデバイスを列挙したいのですが、
どうすればいいのでしょうか。
キーワードは「SPTI」らしいのですが、
どんなAPIを使うのか、どんな資料がどこにあるのか、
さっぱり分かりません。

要はこういうソフトの非ASPI版が作りたいのですが。。
http://www.vector.co.jp/soft/win95/hardware/se084939.html

よろしくお願いします。

// SHIORI-0 //
573デフォルトの名無しさん:03/01/24 00:12
WinampのPlug-inはClassで成り立っているのですよね?
あのように、動的にクラスを読み込んで利用するにはどうすればいいのでしょうか?
>>572
ASPIしか使ったことがないから知りませんが、検索したらでてきました
ttp://www.geocities.co.jp/Hollywood/4205/doc/spti.html
DDKが必要らしいです
>>573
どの言語で作るつもりか知らんけど
C++なら仮想クラスを自分のプログラムで定義して、
DLLはそれの派生クラスを作成する
あとはDLL側にそのクラスのインスタンスを作成する関数を作って
LoadLibrary/GetProcAddressでその関数を呼び出す
返って来たインスタンスを通して全ての処理を行えばいい
576572:03/01/24 00:41
>>574さんありがとうございます。

ふと思いついて「wnaspi32.dll spti」でグーゴゥしてみました。

WinASPI32 to SPTI wrapper for WinNT3/4/5
http://f-ts.bias.ne.jp/~azuco/apj/apjf.htm
> SPTIを使ってASPIのファンクションをエミュレート

DLL 関連回答
http://www.snark.co.jp/soft/faq/dll_a.htm
> 単純にNTでSCSIコマンドを発行するだけなら DeviceIoControlでできます。
> DDK の src\storagej\class\spti にサンプルがありますが
> \\.\scsi1: といったデバイスファイルを開いて CDB を送れます。

・・・てか、SPTI以前にASPIのことも分からないので、
むしろ>>572みたいなツール、どこかに転がってないですか?
>>576
その質問はスレ違いですが
>>576のwrapperDLLのファイル名をwnsapi32.dllにすれば
>>572等に既存のASPIソフトが使えるのでは?
578572:03/01/24 01:00
>>577
なるほど! 明日やってみます。

ついでに「wnaspi32.dll spti」に引っかかった英語ページ。
読めないので関係あるのかないのか分からない。。
http://www.experts-exchange.com/Programming/Programming_Platforms/Win_Prog/Q_10351574.html
http://akrip.sourceforge.net/
http://www.onlinepcfix.com/ASPI2.htm
>>567
>>555のソースをビルドして試してみたけど確かに色が変わらないねえ。
でも自作のアプリではちゃんと色が変わった。よって
> 私がプログラムミス
であることは
> 確かなようだ。
申し訳ないが自作アプリとどこが違うのかまではわからない。
となると、あやしいのは
SendMessage(hStatus, SB_SIMPLE, TRUE, 0L);
のあたりでしょうか?
いずれにしろ.NETでは解決しないでしょうね
>>580
自作アプリではCreateWindowEx+SB_SIMPLEの代わりに
CreateStatusWindowを使ってたんでそうしてみたが変わらなかった。
いったい何が違うんだ。まじでわからん…
582602:03/01/24 03:33
>>579
早起きしました。

変わらないですよね(涙)
ステータスバーに関してはいろいろな方法で試したのですが、変わりません。
これでも駄目でした。
switch (msg) {
case WM_CREATE:

INITCOMMONCONTROLSEX sex;

sex.dwICC=ICC_BAR_CLASSES;
sex.dwSize=8;
InitCommonControlsEx(&sex);

CreateMyStatus(hWnd, hInst);
・・・・・

これはREBARでも同じ現象(配色が変わらない)が起こるので、何に問題があるのかがいまだに不明・・。

XPのバグ(というか仕様変更)だったら泣くな.…
WM_KEYDOWNでは、キーを押されたときのshiftキーの状態はわからないですよね。
キーが押されたときのshiftキーの状態を知るにはどうしたらいいんでしょうか。
>>584
WM_KEYDOWN処理中に GetKeyboardState で全仮想キーの状態を取得するとか……
586デフォルトの名無しさん:03/01/24 05:20
>>584
::GetKeyState
>>585-586
それってWM_KEYDOWNを受け取ったタイミングの状態であって、
WM_KEYDOWNが発生する原因となったキーが押されたときの状態じゃないですよね。
>>587
> This function retrieves the state of the key
> when the input message was generated.
と書いてるが。でも
> The key status returned from this function
> changes as a thread reads key messages
> from its message queue.
とも書いてるなあ。どっちが本当だよおい
あー入力メッセージが生成されたときの状態を読み取るから
メッセージを読み出すたびに状態が変化すると考えれば
とくに矛盾しないか。
つーわけでGetKeyStateで問題ないと思うが
590デフォルトの名無しさん:03/01/24 13:57
>>587
キーが押されたときのだよ。ヘルプぐらい読んでくれ。
あとトレースするとかすればわかる。
ハードウエア的な現在の状態を知る方法はまた別の方法だから。
キーボードが2つ以上接続されている環境があったとして、
どちらのキーボードのキーが押されたのか判断する方法はあるのでしょうか? 

 
スプリットウィンドウの右上とかにバッテンで閉じるのを作りたいんですが、
簡単な方法がありましたら是非教えて下さい。お願いします。
>>592
bitblt
印刷関係でちょっと不可解な現象が発生してるんです。

とあるアプリで StartDoc() とかしても印刷がはじまらないんです。
で、印刷ルーチンが二つありまして(出力形態が二種類あるので)、
片方ではちゃんと印刷開始されるのですが、もう片方はうんともすんともいいません。
これだけだと一方のルーチンの不具合じゃないか、と言われるかもしれません。
確かにそれはそうで、現在調査しているのですが、不可解なのは
関数の中で文字列処理のために

 char buf[256];

しているのですが、これを

 char buf[184];

にすると正しく印刷が開始されるのです。
これが逆ならスタックでも壊してるのかなという気にもなるのですが、
小さい方が動く、というのは聞いたことがありません。

何となくドライバ関係のDLLのアロケート関係のような気もするのですが、
どなたかこのあたりに関して情報お持ちでないでしょうか?

ちなみにOSはWinME、コンパイラはVC6です。
さらにちなみにその他のOS(98、98SE、2000、XP)では
問題なく印刷が開始されます。
>>594
>char buf[184];
>にすると正しく印刷が開始されるのです。
たまたま印刷されてるだけだと思われ。"\0"とか抜けてない?
>>594
EndDocまで行わないと、印刷を始めるかどうかはドライバ次第だったような。
>>594
GetLastError()で調べれ。
598594:03/01/24 16:14
ちょっと試してきました。
とりあえず buf がらみの処理は変数宣言も含めて削除してみますた。
すると。確かに印刷される。やっぱりどこかでつぶしてる?
それではと、途中に

 {
  char buf[256];
  *buf = '\0';
  DrawText(pd.hDC, buf, -1, &rc, format);
 }

と入れてみますた。出なくなりました。何で???

>>595
そういうわけで文字列処理部分ではなさそうです。

>>596
あ、ちょっと説明が足りませんでしたが、どの段階で印刷が開始されるかは
よくわかってないまま書きました。まぁ印刷される場合があるということは
処理の流れ自体はあってるだろうということで。

>>597
というかエラーにならないんです。あたかも正常に終わったかのように
印刷されないんです。

何か見落としてるかもしれないので他にもヒントありましたらお願いします。
599594:03/01/24 16:17
すいません。読み返してみてちょっと補足。説明が中途半端な気がしたので。
結論から言えば、

 /* ↓この処理を通らないと印刷される */
 if (0) {
  char buf[256];
  *buf = '\0';
  DrawText(pd.hDC, buf, -1, &rc, format);
 }

 /* ↓通ると印刷されない */
 if (1) {
  char buf[256];
  *buf = '\0';
  DrawText(pd.hDC, buf, -1, &rc, format);
 }

ということです。なんでだろーなんでだろー
age させてもらっていいですか?
余裕で600ゲット
600ゲトー

   ∧∧   (⌒
 ⊂(゚Д゚⊂⌒つ(≡
    ズサー (⌒
それではと、途中に

 {
  char buf[256];
  *buf = '\0';
  DrawText(pd.hDC, buf, -1, &rc, format);
 }

と入れてみますた。出なくなりました。何で???


・・・初期化してないcharの配列をを渡してた?
603594:03/01/24 16:33
さらに突き詰めてみました。先ほどの処理をさらに簡略化して

 if (1) {
  char buf[256];
  *buf = '\0';
 }

○。

 if (1) {
  char buf[256];
  lstrcpy(buf, "hoge");
 }

×。

 if (1) {
  char buf[256];
  strcpy(buf, "hoge");
 }

○。

どうやらよそ様のDLLの関数に buf のアドレスを渡すとダメなようです。
何かどこかで聞いたことあるような。。。
604594:03/01/24 16:38
引っ張ってしまってスマソン。もう少しおつきあいいただければ幸いです。
さらに続けて(if は省略します)

char *buf = GlobalAlloc(GPTR, 256);
lstrcpy(buf, "hoge");
GlobalFree(buf);

○。

お、そゆこと?

と思って元の処理に戻して、先頭で定義してた
char buf[256];

char *buf = GlobalAlloc(GPTR, 256);
にしてみますた。

ダメでした。。。ショボン
605デフォルトの名無しさん:03/01/24 16:38
>>604
HGLOBAL GlobalAlloc(
UINT uFlags, // 割り当ての属性
SIZE_T dwBytes // 割り当てたいバイト数
);

根本的に使い方間違ってる。 
607594:03/01/24 16:47
え?今って GPTR でポインタ返せないの?
返せるよ。
609デフォルトの名無しさん:03/01/24 17:31
子ウィンドウとして作成したリストコントロールを
要らなくなった時点で、DestroyWindow(hList);で破棄しようとしたのですが
サブクラス化したリストコントロールのプロシージャのWM_DESTROYで
PostQuitMessage(0);とすると、親ウインドウも一緒に閉じてしまいます。
PostQuitMessage(0)しなくても、リストコントロールはきちんと破棄されたと
思って良いのでしょうか?
610594:03/01/24 17:33
うーん、謎です。。。
メモリまわりっぽいのは確かだと思うんですけどねぇ。
LintTo() や、即値渡しの TextOut() だけにすると問題なく描画できますので。。。

他のOSではたまたま動くけど、
Meでは注意しないとダメな処理ってありましたっけ?
PostQuitMessageは最後のウィンドウとか
メインウィンドウが閉じたときにだけ呼び出すものだよ
なんでWM_DESTROYのデフォルト処理で自動的に
呼び出されないのか考えれ
612デフォルトの名無しさん:03/01/24 18:36
>575
インスタンスを作成する関数を作って返す
とありますが、どのような形で返せばいいのでしょうか?
>>612
ポインツァー?
614デフォルトの名無しさん:03/01/24 19:22
変数形です。
615594:03/01/24 19:40
ちょっと気付いて試してみたらどうやらOKっぽかったので
それのような気がするんですが、

StartDoc() に渡す DOCINFO 構造体って
やっぱ不要なメンバはゼロクリアしとかないとダメです?

マニュアルにはダメとは書いてないんですけど、そんな感じですよね。。。

巷のサンプルみても、初期化せずに必要なメンバ(lpszDocNameとか)設定してる
だけのものが多いんですが違うのかな?

これだけ↓でとりあえずは動くようになったのですが。

 di.cbSize = sizeof(di);
 ZeroMemory(&di, sizeof(di));  // この行を追加
 di.lpszDocName = lpszDocName;
 di.lpszOutput = NULL;
>>615
しむらcbSize--!書き間違えかも知れんけど。
>>615
静的変数やGlobalAlloc(GPTRの場合は基本的に0初期化されているから必要ない

多少なりともプログラムをやっているならどういう場合に初期化が必要かは推測できるはず
メンバが設定されているかいないかをどうやってシステム側が判別するの?
618594:03/01/24 19:54
>>616
へ?何か間違ってる?気付いてないかも。

>>617
もう少し言い訳さしてください。

実は。。。昔ながらのやり方でやってたので
DOCINFO のメンバが増えてるの知らなかったんです。。。
印刷するプログラム書いたの久しぶりだったもので。。。

大変お騒がせ致しました。
>>618
cbSize==0になってるよ
620594:03/01/24 20:07
>>619
ごめん、まだわかってない。

あれ?

DOCINFO di;

di.cbSize = sizeof(di);

で間違ってる?そこじゃない?
その後ZeroMemoryしている
>>620
いや順番がこうじゃないとだめじゃん?
 ZeroMemory(&di, sizeof(di));  // この行を追加
 di.cbSize = sizeof(di);
 di.lpszDocName = lpszDocName;
 di.lpszOutput = NULL;
623594:03/01/24 20:28
あ。。。あぅ。。。あぅぅ。。。。。

面目ないっ m(_ _)m

みんな、いい香具師だなぁ。好きだぜ、みんな!じゃー逝ってくる!
624デフォルトの名無しさん:03/01/24 20:29
>>575
インスタンスを作成する関数を作って返す
とありますが、どのような形でポインタを返せばいいのでしょうか?
625602:03/01/24 20:46
やはり、誰もわからないみたいですね。
致命的なバグか?
interface IBeeper { virtual void Beep() = 0; ~IBeeper(){} };
IBeeper*CreateBeepInterface();
DeleteBeepInterface(IBeeper*p);
とでもインターフェースを定義しておき、共通とする。

んで、プラグイン側では、インターフェースを実装する。
class CBeeper : public IBeeper { void Beep() { .... } };
IBeeper*CreateBeepInterface() { return new CBeeper; }
DeleteBeepInterface(IBeeper*p){ delete p; }

それだけ。
627デフォルトの名無しさん:03/01/24 21:14
>>626
う〜ん。難し。
interface IBeeper { virtual void Beep() = 0; ~IBeeper(){} };
って、クラスじゃないんですね。。同じですか。
これは、ヘッダーですか?
IBeeper*CreateBeepInterface();
DeleteBeepInterface(IBeeper*p);
これは、何をするかは見当がつくのですが…。

class CBeeper : public IBeeper { void Beep() { .... } };
この*でつながっているのはどういう意味でしょうか?ポインターですか?
IBeeper*CreateBeepInterface() { return new CBeeper; }
DeleteBeepInterface(IBeeper*p){ delete p; }

ほう、何も継承しないのか
629デフォルトの名無しさん:03/01/24 22:02

public ですか?
継承ですね。はぁ。
COMのようでCOMじゃない
631デフォルトの名無しさん:03/01/24 22:19
はぁ。何かつかめた気が。
でも、
IBeeper*CreateBeepInterface() { return new CBeeper; }
DeleteBeepInterface(IBeeper*p){ delete p; }
が解りません。
どういう意味でしょうか?
632572:03/01/24 22:49
>>572-578と、ちょっとスレ違いな質問をしていた者ですが、
要求は解決したのでこのスレでご報告します。

まず、
>WinASPI32 to SPTI wrapper for WinNT3/4/5
http://f-ts.bias.ne.jp/~azuco/apj/apjf.htm
このASPTI.DLLをWnASPI32.dllにリネームして
http://www.vector.co.jp/soft/win95/hardware/se084939.html
を実行したのですが、loadできないとエラーが出て使えませんでした。

で、いろいろ探していたらhttp://www.runser.jp/softlib.htmlの
「Device Benchmark Test Program」というツールが見つかりました。
cmd.exeで「devtest.exe scsi」と実行すると、
すべてのSCSIディスクが表示されました。
これで要求は満たしているので解決としますが、
ソースも付いているので勉強していきたいと思います。

ありがとうございました。 // SHIORI-1 //
CBeeperのクラス名やら実装やらをIBeeper利用者に見えなくするのでは?
626=629=631
(・∀・)ジサクジエーン
自作自演の使い方を激しく間違っている634萌え
636デフォルトの名無しさん:03/01/24 23:48
>>633
そういう意味なんですか。
CreateBeepInterfaceというのはどこから出てきたのですか?
>>636
"COM"だとか"インターフェースと実装の分離"で調べれ。

それから、スレ違いなのでここでやるのはよせ。
ウインドウがGetOpenFileNameやGetSaveFileNameで開かれた
ダイアログかどうかを調べたいのですが、
その方法がわからず困っています。

頼みのウインドウクラスは
他のダイアログと同じ#32700なので使えないし...。

何か良い方法はないでしょうか?
よろしくお願いします。
>>625
誰のバグだよ
どうでもいいがそのハンドル紛らわしいからやめてくれ
>>638
そのウィンドウに属する子ウィンドウの種類やテキストから強引に……w
641575:03/01/25 05:51
なんか、反応が無いもんで昨日は寝ちゃったよ

>>637
COMの話じゃないって

>>636
そんな事聞いてるようじゃどうせ実装できないけど

最初にインスタンスを返すってのはインスタンスのアドレスを返すって意味ね
自分で IBeep って仮想クラスを作って、ソースを公開。
プラグイン作者は IBeep を継承して独自のクラス CBeep を作成。
同時に CreateBeepInterace と言う名前の関数を定義し、その中で CBeep を作成して返す。
君は GetProcAddress 等を使って CreateBeepInterface を呼び出すことでそのオブジェクトのアドレスを受け取る。
型は IBeep* になっているので、 CBeep の実装を知らなくてもその機能を使うことができる。
通常の多態と同じ。
使い終わったら DeleteBeepInterface で削除するのをお忘れなく。

ちなみにここで出てきた名前は全て君が勝手に名前を付けても良い。
> どこから出てきたのですか?
とかそう言うレベルの話じゃない、君が決めていいんだよ。
>>641
解説するだけ無駄な気がしないでもない
>>640
やっぱり、それしかないですかぁ。

コモンコントロールがバージョンアップした時が怖いですが、
判定ミスしたとしても致命的な問題になるようなプログラムではないので
その方法でいこうと思います。

どうもありがとうございました。
>>641
>仮想クラス
C++用語なら抽象クラス
COM用語ではインターフェース

GetProcAddressを使うならCBeepの実装(特定のDLL)に思いっきり依存

>COMの話じゃないって
まあ確かに
COMの話のできそこないだ
645644:03/01/25 06:42
>ソースを公開。
ヘッダな
そういう説明が必要な相手は激しく誤解するぞ
そういう重箱の隅をつつくようなセコい突っ込み、おじさんは嫌いだな
>>644-645
IBeep のように純粋仮想関数だけで形成されてるクラスならヘッダだけで良いけど
実装を含む場合はソースも公開してやるかlibファイルを作って公開してやる必要があると思うんで、
とりあえずヘッダ、とだけ言うとヘッダだけ公開しそうなんで。

ところで GetProcAddress を使っても CBeep の実装には依存しないと思うけど、
どうなの?
実際そういう風にプラグインにしてるけど今のところ問題ないし。
メインプログラムとプラグインのコンパイラやオプション設定が違う場合どうなるかは知ったこっちゃないけど。
648あやや:03/01/25 11:06
なぜステータスバーの色が変わらないのだろうか?

だれか、ソースをください。参考になる。
汎用的な実装についてはCOMを眺めたほうがいいんじゃない
特定用途ならGetProcAddressで充分だと思うけど
650デフォルトの名無しさん:03/01/25 17:09
16進数文字列を数値に変換する関数ってなかったっけか?
普通のCのライブラリにはないようだけど。
あったらスマソ。
>>650
sscanf(a,"%x",&b);

って感じ?
>>650
strtol
653名無し@沢村:03/01/25 17:17
>>650
sscanf()

さあ、謝れ。
>>653
二代目沢村として兄者を恥ずかしく思うよ。
655650:03/01/25 17:30
ぐぇ、そんな関数あったんだ。
scanf()は知ってたけど、標準入力からだしなぁと思って。
10年戦士なのに、意外なところに穴があるもんだ。
なにはともあれサンクスコ(´・∀・`)
656デフォルトの名無しさん:03/01/25 18:09
リストビューで特定の項目のテキストの色を変えたいのですがどうすればよいですか?
ListView_SetTextColorを使ったら全てのテキストの色が変わってしまいました。
OwnerDraw
>>646
>ネタ、板とは関係の無い話題はご遠慮ください。
↑↑
もう一度言う
C++用語なら抽象クラス
COM用語ではインターフェース

アフォは来るなという決まりはない
お前が正当性を主張できるのはそこだけだ


>>647
クラス名のプリフィックスをIとCにしながら
Iで始まるクラスに実装を含めるのはWin32では沢村かお前だけ
659デフォルトの名無しさん:03/01/25 23:12
リストビューで2番目以降の項目にアイコンを表示するにはどうしたら良いですか?
最初のカラムにしかアイコンが表示されないのですが。
カスタムドローするよろし
661646:03/01/25 23:41
>>658
そういう重箱の隅をつつくようなセコい突っ込み、おじさんは嫌いだな
>>661
必死だな(藁
PGにバグを放置する権利はない
664663:03/01/25 23:53
名乗るのを忘れた
洩れは662だ
665デフォルトの名無しさん:03/01/25 23:57
リストビューのフォーカスの点線を実線にしたり色をつけたりしたいのですが、
どうしたらできるでしょうか。
666602:03/01/26 00:14
誰もわからないようだな(汗
>>665
自分で書く
WM_DRAWITEMとか捕まえられなかったっけ

>>666
666ゲットを機に粘着さんは消えてくださいませ。
>>666
つーかてめーは、全スレから延々とRebar関係の質問してるだろ。
いい加減にしろよ。
>>666
誰もわかりません。
ですからもうこないでください。
670デフォルトの名無しさん:03/01/26 01:20
671602:03/01/26 04:34
何で消えなきゃいけないんだよヴォケども
   ∧∧     ┌──────────
  ( ´ー`)   < てりめーだヴァカ
   \ <     └───/|──────
    \.\______//
      \       /
       ∪∪ ̄∪∪
教えて君にあるまじき無礼な発言(ex.>>618)
未定義動作の意味を激しく誤解(ex.>>598)
>>623から>>625への痛すぎる言動の変化
マルチやめろって顰蹙を無視した結果と思われ

おまえ沢村並み
むしろ沢村のほうがマシに思える
なんかこのバカ、ずっと同じ質問繰り返してないか?
コテハン変えて何度も質問したり。
最初はまともな態度だったから許容してたが、最近態度がでかくなってきた。
本当にmanifest確認したのかなぁ
よし6.0.0.0 Ok!とかいってそうだ
>>674
このスレの>>53あたりからずっとこいつだな。
最初から舐めた態度だが。>>55とかな。
677デフォルトの名無しさん:03/01/26 13:12
整数演算関係のAPI関数って

Int32xTo64
Int64ShllMod32
Int64ShraMod32
Int64ShrlMod32
MulDiv
UInt32x32To64

以外に無いですか???
知っていたら教えて欲しいでごわすの東北人。
678名無し@沢村:03/01/26 14:13
>>677
MSDNを見れば分かる話だから、教えてあげないよ。ヌヒよ。
>>677
APIはMulDiv(KERNEL32)のみ
他はマクロ
ドライブ文字の割り当てられていないCD-ROMで
メディアの入れ替えを検出するにはどのように
すればよいのでしょうか?

よろしくお願いします。
681デフォルトの名無しさん:03/01/26 20:30
>>641
typedef CFormat * __stdcall GetData();
HINSTANCE hDllInstance = ::LoadLibrary("dl.dll");
if (hDllInstance != NULL) {
GetData *gsf = (GetData*)::GetProcAddress(hDllInstance, "GetData");
if (gsf != NULL) {
CFormat *cfs;
cfs = gsf();
}
FreeLibrary(hDllInstance);
}
//////////////////
extern "C" __declspec(dllexport) CFormat* __stdcall GetData()
{
return new CApp;
}

このようになったのですが、いざGetProcAddressに入るとエラーが出ます。
どうすればよいのでしょう?
>>681
エラーメッセージくらい書いてください。
>>681
> GetData *gsf = (GetData*)::GetProcAddress(hDllInstance, "GetData");
おいおい…

GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetData gsf = (GetData)::GetProcAddress(hDllInstance, "GetData");

こうじゃないの?
> typedef CFormat * __stdcall GetData();

こんなんだっけ?
>>683
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
GetProcAddress() が返すのは「GetData 関数へのポインタ」だろ。GetData を
実行した結果じゃなくて。
>>683
痛すぎ(激藁
>>685
関数ポインタへの typedef にしたいなら、括弧の位置が違うような。

typedef CFormat (*__stdcall GetData)();
689688:03/01/26 23:17
* 一個抜けてた。

typedef CFormat* (*__stdcall GetData)();
そうだよねえ
こーでねえ?
typedef CFormat * ((__stdcall *)GetData)()
最近 win32api の勉強を始めた者です。
WinMain の中の変数etc.を
ウィンドウプロシジャに引き渡すには
外部変数にするしかないんでしょうか?
消防質問ですみません。

>>692
ヒープ上に領域を確保した上で、その領域へのポインタを SetWindowLong()
するとか。
>>693
ありがとうございます。
SetWindowLong()とか知らないので調べに
逝ってきます。
>>641
昨日の話に反応するけど
> 使い終わったら DeleteBeepInterface で削除するのをお忘れなく。
これ、仮想デストラクタでよろしく済ませるってのは無しなん?
COMを知らない奴はこれだから・・・
>>696
具体的な問題点か、情報へのポインタぷりーず。

俺は COM で Detele* 用意しているのは、単に C からも呼び出せるようにするため
かと思ってた。
>>695
よろしく済ませるならスマートポインタでは?
>>698
いや、そういう話では…
>697
DLL(plugin)のnew,deleteと
本体のnew,deleteが同じという保証がない。
DLLでnewするなら、DLLでdeleteしないと死亡の恐れがある
Create/Deleteを明示的によぶことで、
実装側で実体をnewで確保しようがmallocで確保しようが、
グローバル変数領域に自前で確保していようが、
利用側には影響しない。

もっと具体的にいうと、
実装側と利用側がVC++を使っていたとして、
コンパイルオプションが、片方はLIBC使用、他方はMSVCRT使用
だとしても、問題が起こらない。
通常はこれらをまたいでヒープをやり取りすると、おかしくなる。
702695:03/01/26 23:58
>>700
納得。
684以降のレスはなに?
602氏の方がはるかにマシに見えるのだが
気にせず、サクッと黙殺しとけ。どうせ害はない。
705684=685:03/01/27 00:50
>>703
漏れが何かまずい事を書いたか?
ちょっとお尋ね申し上げますが、
Acrobat SDK を SDK だけで使う例とかを
紹介しているサイトってないでしょうか?

てゆーかスレタイの Win32API って !MFC って意味だよね?
それともやっぱスレ違い?
一応VCとは限らんと言っておく<Win32API
708デフォルトの名無しさん:03/01/27 21:07
SendMessageCallbackって、他のスレッドからだと動かなかったりします?
ドキュメント見ると問題なさげではあるのですが、現に動かない…
Win2kです。
>>707
MFC=VCか。おめでてぇな。と釣り糸を垂らしてみる。
>>708
あなたのクソコードに問題があるのでは?見せてみて。
711579:03/01/27 22:50
自作アプリをいろいろいじってみた結果
ウィンドウからツールバーを外したらなぜかステータスバーの色が
変わらなくなった。ツールバーを付けたらまた変わるようになった。
いくらステータスバーだけのサンプルをいじくっても分からないわけだ
>>711
602か?
XPではCOLOR_BTNFACEではなくCOLOR_MENUBARのほうに影響されるのかも
713579:03/01/27 23:05
>>712
別人。Win95だとWM_SYSCOLORCHANGEを転送してやる
必要があったけどXPでは関係なさげ。確かにバグっぽいなこれ
是非 MS にバグレポート出してくれ。
715デフォルトの名無しさん:03/01/28 00:46
てすと
716708:03/01/28 00:48
procedure Callback(Wnd: HWND; Msg: UINT; Data: Pointer; Result: LRESULT); stdcall;
begin
 //何かする
end;

procedure TXXX.METHOD;
begin
 SendMessageCallback(Handle, WM_APP, 0, 0, @Callback, 0);
end;

こんな感じです。
OutputDebugString入れても、他のスレッドから呼んだ時だけCallbackに来てない。
単に、そのままやりたいことをするとデッドロックするので、PostMessage的に使ってるだけなんですが。
(素直にPostMessage使わない理由はSendMessageCallbackだと相手のウィンドウ関数を書き換えずに済むから)
717デフォルトの名無しさん:03/01/28 00:53
ぎゃっはっははははははははっはあはっはあはっははははははははっはあはっはあ
はっははははははははっはあはっはあはっははははははははっはあはっはあはっははははははははっはあはっは
はははははっはははhはっははははははははっはあはっはあははははっはははははあはh
はははっはっははっははははははははっはあはっはあはははははははあははは
>>716
http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_sendmessagecallback.htm
SendMessageCallback 関数を呼び出したスレッドが、GetMessage、PeekMessage、WaitMessage
のいずれかの関数を呼び出した場合にのみ、このコールバック関数が呼び出されます。

とあるが。
SetTimerしてるのにタイマコールバックが呼ばれません

DispatchMessageしていますか?
系の罠か。
本当にプリエンプトしてほしいなら素直にスレッド作れ。
720708:03/01/28 01:04
がーん…使えねえ…。
718さんありがとう。英語ドキュメントを斜め読みしただけでした。読めてなかった。シクシク。
まぁ、普通に考えて同一スレッドで非同期にコールバック関数が呼ばれるタイミングって
Windows側に制御が渡ってる状況しかないんだから、当然といえば当然なんだが。
ちょっと勉強してみたいんだけど、どっかに
VC++ か BCC 用の ping のソース落ちてないかな?
723名無し@沢村:03/01/28 01:14
>>722
ヌヒよ、たぶん落ちてるんじゃないか。
VCかSDKのサンプルの中にpingなかったけ。
「ICMP.DLL サンプル」とかやるとわらわら出てくるな。
>>722
サンプル: Raw ソケット版 ping
tp://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/rawping.html
727722:03/01/28 01:49
>>725
>>726
大変いいヒントいただきました。どうもありがとうございました。
728602:03/01/28 12:57
皆さん、お久しぶりです。
余り質問をしすぎて、迷惑をおかけしまして、すいませんでした。
というより、Rebar関係は、バージョンアップの激しい部分ですので、何か不具合が多いのですよ。
苦労しています。

では、いろいろと質問をきいてくれて、ありがとうっす。


あと、
「「「671 名前:602 投稿日:2003/01/26(日) 04:34
何で消えなきゃいけないんだよヴォケども」」」

これは、私の書き込みではないですよ。
偽者ですか、ID制を導入してみてはどうですか?
何でてめえなんかの為にID制を導入しなきゃいけないんだよヴォケ
>>728
たのむからもう来ないでくれ。
あと、貴様ごときにID導入するほど価値はない。
731名無し@沢村:03/01/28 19:07
>>728
ヌヒよ、キャップを付けなさい。
732602:03/01/28 20:21
あれ?怒ってるなww

何か悪いことをしたとは思えないが。
荒らしたわけでもない。
ただ質問をしただけなのにこの態度。
だから、プログラム板っていつも人が少ないんだよw。

プログラムをする奴は基本的に閉鎖的な人が多いからね。
自分の世界以外の者が入ると、追い出すんだよ。
内向的、いや内弁慶、いやいやネット弁慶と表現したほうがいいかも。

要するに、
自分のわかる質問→大歓迎
わからない質問→追放

私みたいなプログラム初心者もいるのですから。初めて日が浅いのですよ。
怒ってるのはID導入のことについてだろ。
基本的な読解力ないから嫌われるんだよ。
734602:03/01/28 20:35
ただ、プログラミングは面白いですね。
初めて2ヶ月目なので、これからどんどん勉強していこうと思います。

あと、>>729さんと、>>730さんは、ひどいことを言いますね。
なにも悪いことをしてないのに。
しかも、午後2時前後の書き込みですか。
お仕事はしてないのですか?
>>732
君はプログラミングの勉強の前に、まず質問の仕方から覚えるといい。
736602:03/01/28 20:41
貴様ごときにID導入するほど価値はない。

貴様ごときってw
この発言が、「怒ってるのはID導入のことについてだろ。」だとは思わないな。

うーん、こんなにガラの悪い人が多いとは・・・。
がっかりですね。
まぁ、プログラムをする人でも、性格の悪い人は山ほどいるでしょうけどねw
737602:03/01/28 20:43
ああ、なるほど。
「わかる人がいないみたいだな。」というのが、貴方達のプライドに傷がついたわけですね。

これのほかに、失礼な書き込みはしてないですよ。
これぐらいで怒るようでは、まともな社会生活はできないと思いますが。
738602:03/01/28 20:44
時間がないので寝よ。
どっちにしろ、Win2000で開発を再開したので問題なく進んでいます。
>>728
671 で困ってる人はあんた以外に一人も居ないよ。
あんたの心証だけで何でいきなり ID 導入という話になるの?

>>732
実際に荒れてるんだから、つもりはどうであろうとあんたは荒らしだよ。
ちょっと聞きたいんだけど、そういう発言をすることによって、何を達成したいの?
どういう目的があるの?
ここはグチ垂れるスレじゃないよ。

大体、わからない質問にどう答えろと言うんだ?
みんなで調べろって?
プログラム初心者だから優遇しろって?
初めて日が浅いから多少の無礼は勘弁しろって?

ふざけるな、ここは無料サポートセンターじゃないぞ。
いろんな人の好意と余暇で成り立っているコミュニティだ。
その人達にそっぽを向かせるようなレスを繰り返しておきながら、自分の要求だけは
押しつけるのか?
それが、人にものを頼む態度か?

ここから追い出されようとしてるのは、あんたが 「自分の世界以外の者」 だから
ではなく、あんた自身が人間的に問題あるからだと気付け。


↑ で、自分で言うのもなんだけど、どこを縦読みすればいいんだ?
740デフォルトの名無しさん:03/01/28 20:45


愚民ども、しずまれぇ〜
741602:03/01/28 20:47
>>739
ああ、勘違いしてますね。
ただ、わかる人がいるのかな?と聞いただけです。
わからないのなら、それでもかまわないのですから。

それを、いきなり「自分で調べろ!」だとか、わかっている内容を「MSDNを見ろよ」とか、なにか攻撃的ですね。
まぁ、どうでもいいですけど。
問題は自分で解決しましたので。
602 の中の人も可哀想だな。
743デフォルトの名無しさん:03/01/28 20:50
>>741
あぁあぁ。消えろ。もうここにいる用は無いだろ。
もう二度とくんな。2ちゃんねるから出て行け。
>>741
もう一度聞くけど、そういう発言をすることによって、何を達成したいの?
どういう目的があるの?
745602:03/01/28 20:50
プ
>>744
もうどうでもいいだろ。粘着だな。お前。
何? 祭り? ワショーイ
>>602はまだ寝ていないに全部。
749デフォルトの名無しさん:03/01/28 21:08
>>747
あおるな。はげ。
750デフォルトの名無しさん:03/01/28 21:35
ぶはは
煽られてるよ602が(w
ここにいる奴らはヒッキーの集まりだから気にするな(w
これで安心したろ(w
751602:03/01/28 21:46
安心しますた(プ
752デフォルトの名無しさん:03/01/28 22:23
VB なんですが、

Private Type EVENTLOGRECORD
  (中略)
End Type
Private Declare Function OpenEventLog Lib ...
Private Declare Function ReadEventLog Lib ...
Private Declare Function CloseEventLog Lib ...

Public Sub main()
Dim hwnd As Long
Dim pbuf As EVENTLOGRECORD
Dim bufAddr As Long
Dim BufSize As Long
Dim ReadBytes As Long
Dim NextSize As Long
Dim Ret as Boolean
hwnd = OpenEventLog("PC名", "Application")
BufSize = 1
Ret = ReadEventLog(hwnd, 4, 0, pbuf, BufSize, ReadBytes, NextSize)  ここ!

(中略)

Ret = CloseEventLog(hwnd)
End Sub

(ここ!)の点でエラーが出るんですが
どこがおかしいですか?
753752:03/01/28 22:26
エラーはパラメータエラー(87)です。
GetNumberOfEventLogRecordsを使った場合
イベントの個数は取れていますので
hwndはうまく取れているはずですが...
>>752
VBは使ったことがないけど
最後の二つのパラメータはAddressOfしてやる必要があるかもしれない
755754:03/01/28 22:37
AddressOfではなくByRefか
>>753
ReadEventLogのDeclareを省略しないでちゃんと書け。
>>755 ByValかVarPtrかもよ。
758753:03/01/28 22:55
>>756
宣言部はAPIビューアで作りました。


Private Declare Function OpenEventLog Lib "advapi32.dll" Alias
"OpenEventLogA" (ByVal lpUNCServerName As String, ByVal lpSourceName As String) As Long

Private Declare Function ReadEventLog Lib "advapi32.dll" Alias
"ReadEventLogA" (ByVal hEventLog As Long, ByVal dwReadFlags As Long, ByVal
dwRecordOffset As Long, ByRef lpBuffer As EVENTLOGRECORD, ByVal
nNumberOfBytesToRead As Long, ByRef pnBytesRead As Long, ByRef
pnMinNumberOfBytesNeeded As Long) As Long

Private Declare Function CloseEventLog Lib "advapi32.dll" (ByVal hEventLog As Long) As Long
BufSizeが1では小さすぎる
760デフォルトの名無しさん:03/01/28 23:17
>>759
まずは、バッファサイズ不足エラーを起こして
pnMinNumberOfBytesNeeded
の値をBufSizeにセットしなおして
再度ReadEventLogを行うと思ってるんですが。

それなのにパラメータエラーを起こしちゃって...
761759:03/01/28 23:23
2番目のパラメータが4ではまずいようです
EVENTLOG_SEQUENTIAL_READ (=1)
EVENTLOG_SEEK_READ (=2)
のうち一つを含む事とあります
EVENTLOG_FORWARDS_READ (=4)
だけでは不正です
>>752
本筋とは関係無いけど、何で hwnd?
763753:03/01/28 23:42
>>761
あっ、そういうことでしたか。
読み違えてました。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_ReadEventLog.htm
あす、会社で試してみます。
ありがとうございました。
明日、結果を報告します。(明日の晩までこのスレあるかな...)


>>762
どっかのサンプルをコピペしただけなんで、
理由を聞かれてもちょっと...
とりあえず動くようになれば
社内の標準化に則って書きなおすんで
あまり気にしてなかったです。
やっぱ、ちょっとは気にしたほうがいいですねえ。
764デフォルトの名無しさん:03/01/29 00:11
>>761
そういえば、
EVENTLOG_SEQUENTIAL_READ (=1)
で試したときもダメだったような気がしますが...
自信が無いので明日確認してきます。
765デフォルトの名無しさん:03/01/29 03:54
あるフォルダの中に、ファイルが入ったり、消されたりしたら、そのことを
取得したいのですが、どうしたらできるでしょうか。
エクスプローラは他のプロセスでファイルが変更されると、
すぐに表示を更新(F5ではない)しています。あれと同じことをしたいのです。
どうかよろしくおねがいします。
>>765
FindFirstChangeNotification() のあたり
>>763
とりあえず動く、程度ではいざバグが出たときにどこを直していいか判らなくなる可能性大
768763:03/01/29 06:50
訂正
「とりあえず」→「ちゃんと」
>>768
プログラムをしっかりしろという事ではなく、書いてる人間が自分が何をして
いるか把握せよという事では?
770デフォルトの名無しさん:03/01/29 07:58
>>766
ありがとうございます。\(>▽<)/
助かりました。
771名無し@沢村:03/01/29 08:49
>>766
ヌヒよ、NT系ならReadDirectoryChangesW()のほうが詳細な情報を取れるぞ。
あとWin2k以降ならSHChangeNotifyRegister()というのもある。
772549:03/01/29 10:17
完全無視されてるところを見るとやっぱ単に煽りにきてただけなのね。
773579:03/01/29 10:17
名前間違えた
774デフォルトの名無しさん:03/01/29 11:10
>>771
SHChangeNotifyRegister?
解説をお願いできないでしょうか?
775名無し@沢村:03/01/29 11:13
776774:03/01/29 11:22
>>775
THX!
・・・やはり英語しか無いですか(--;
時間かけて読むしか無いっすね。
777602 ◆hOJBbTlYfs :03/01/29 12:21
こんちはーす。

Rebarの件ですけど、解決しました!(涙)
BYE。
>>777
BYE。
779579:03/01/29 12:47
結局何が問題だったんだろう
言うに言えない単純ミスじゃ
>>779
BYE。
782753:03/01/29 20:26
>>761
イベントログの読み込みの件
うまくいきました。

ただ...メモリ例外が出まくり...
VBでメモリ管理しないといけないのか...
変数宣言とメソッド実行する位置を入れ替えたりすると
収まったりして大変です。
783デフォルトの名無しさん:03/01/29 21:35
あばよReBarでカモフラージュした単なるキリ番ゲッター

>ALL
888をブロックしたらオモロイかもな
784↓の830(not 829):03/01/30 01:22
http://pc2.2ch.net/test/read.cgi/tech/1041879465/829-

spy++のプロセス表示やProcessViewerがいつのまにか
おかしくなっている人います?
俺だけかと思ったらそうでもないみたいだし。
ReBarの不具合対策スレを立てればいいと思う。
786デフォルトの名無しさん:03/01/30 13:12
>>682
デバッグエラーなんです。
return new CWavApp;
でエラーが起こっているみたいで。
Delete以前の部分の問題なんです。


>>786
じゃぁCWavAppでエラーが起こってるんでしょ
GetProcのソースを提示しても意味なくない?
788デフォルトの名無しさん:03/01/31 20:03
>>787
そうだとは思うのですが、
CWavAppは何もないクラスなんです。
コンストラクタにMessageBoxがあるくらいで。
>>788
コンストラクタにMesssageBoxって……それはギャグですか?
何も考えてないんだね。
790デフォルトの名無しさん:03/02/01 09:49
>>789
確かに珍しいケースではあるが
CWavApp::CWavApp()
{
  ::MessageBox(NULL, "アヒャヒャヒャ", "(゚∀゚)", MB_OK);
}
とかじゃねーだろ、いくら何でも

ユーザに起因するエラーならあり得なくもないぜ
791bccのグラフィック:03/02/01 17:29
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int Locate(HANDLE hOut, int x, int y)
{
COORD dwPos;
dwPos.X = (SHORT)x;
dwPos.Y = (SHORT)y;

if (SetConsoleCursorPosition(hOut, dwPos) == 0)
return -1;
else
return 0;
}
int main()
{
HANDLE hStdout;
int i;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
for(i=0;i<=10;i++){
Locate(hStdout, 10, 5+i);
printf(" C program ");
}
return 0;
}
792bccのグラフィック:03/02/01 17:31
791、なんかあっちこっちを、めぐりめぐって
適当に合体させてつくりました。
こういう使い方ってありなんでしょうか(^^;
作った本人が一番理解してないという、、、
コンソールアプリとして動くグラフィックがほしくて
やっています。
>>792
似たようなのN88BASICとかDOS時代によく書いたよ。

\x1b[32mとかで色が変わるぞ。と。
794bccのグラフィック:03/02/01 17:39
いや、エスケープシーケンス使えるんならつかうんですけど
2000以上だと使えなくて、それで、こんな事やってるんです。
bccだとgdiとかないみたいだし、、どうすればいいのか
わかんなくて
>>794
> bccだとgdiとかないみたいだし
そんなことはない。
796bccのグラフィック:03/02/01 17:58
え あるんですか、5.1であるんですか
797bccのグラフィック:03/02/01 17:59
dos/Vなんですけど、初期化とかわからなくて
gdiの初期化って初期化って初期化って初期化って
798bccのグラフィック:03/02/01 18:00
画面消去とカーソル移動だけでも
せめて
    _, ._
  ( ゚ Д゚)
  ( つ旦O
  と_)_)

    _, ._
  ( ゚ Д゚)
  ( つ O
  と_)_) 旧 ガシャ
>>798
ANSI.SYSを入れておいて、ANSIエスケープシーケンスで制御しる!
画面消去は ESC '[' 'K' …だったかな?
カーソル移動は ESC '[' 'A' …とか。
詳しく知りたけりゃあ、ググってみれ。
>>796
5.1 ではなく 5.5.1 じゃねーのか?

>>800
> ANSI.SYSを入れておいて、ANSIエスケープシーケンスで制御しる!
Windows 2000 だと動かんがな。
802名無し@沢村:03/02/01 18:52
ヌヒ等よ、テキストエディターだが、一度に何バイトの文字まで使って大丈夫なの?
一度に5万文字くらい表示したいんだが、大丈夫?
一度に5万文字いっぺんにコピペしたりするときエラー出ない?
803名無し@沢村:03/02/01 18:53
>>802
ヌヒよ、くだらない質問は避けよう。
>>802
たずねるときの沢村はそんなのじゃない。
WS_SIZEBOX や WS_THICKFRAME を指定していない Window で
ユーザによるウィンドウサイズ変更をサポートする方法はありませんか?
WM_NCHITTEST で HTLEFT などを指定しても無効なようです。
>>805
素直に WS_THICKFRAME 指定すりゃいいじゃん……
ANSI.SYS + 2000はちゃんと動きます。
ぐぐりましょう。
808805:03/02/01 19:27
>>806
ウィンドウの境界は自前で描画しているので、
WS_THICKFRAME したくないんです・・・
そういう挙動をしているアプリも割と見かけるとは思うのですが、
どのように実現しているのやら。
>>792
SetConsoleCursorPositionの引数は本当はコンソールスクリーンバッファの
ハンドルが必要なんだが、791のソースで動いてるの?
810bccのグラフィック:03/02/01 20:12
動いております。。>791
bcc5.5 win98
コンソールじゃなくてファイルにリダイレクトさせた場合はコントロールシーケンスとかが
書き込まれてるんだろうが?
812bccのグラフィック:03/02/01 20:27
すいません811は何をいわれているのでしょうか(^^;
813デフォルトの名無しさん:03/02/01 21:17
>>808
WM_LBUTTONDOWNでSetCapture
WM_MOUSEMOVEでSetWindowPos
WM_LBUTTONUPでReleaseCapture
ではだめか?
こっちで動作確認してないが
>>797
Windowsじゃなくて
DOS/VでもGDIってあったの?
ていうかWindowsの方が画像扱うなら楽じゃないの?
>>814
いつのbccよ?
5.5ってWin32以外のバイナリ吐けるの?

って言うかお前の提示したコードは思いっきりWindowsだ。
DOS/V の V は VIDEO の V
>>816
違う
バイリンガル。
>>817
違うの?
Visual? Void? Virtual?
Vector
>>818
DOS/B ワラ
Virgin
DOS/V
ドス/ヴァジャイナ
DOS VGA
でビデオだと思ってたけど
正解はなんなの?
正式な説明はないそうで・・・
http://forum.nifty.com/fpcu/words/dosv.htm
826gn355my0:03/02/01 22:51
あれ?V-TextのVだったんじゃなかったっけ?
>>826
じゃあVってなんだよ。

・・・30行計画?
828ホゲ ◆k2kPA91QO. :03/02/01 23:05
ドスブイのブイは
ビデオモードを使ったドスなんだから
ビデオでいいじゃんよ
830gn355my0:03/02/01 23:15
>>827
うん、variable-text の略だったように思うけど。。。
まぁどっちゃにしてもスレ違いなので話を戻すと

>>813
そりはダメっぽいぞ。
>>805 で近いとこまで行ってると思うけどナー
ピーシードースーV(ファイブ)にー全てをかけてー
ボルテースーVの〜正義を込めて〜
>>831
わかりにくいぞ。
ビデオボードの情報を調べるのってどうするの
ボードの名前とかビデオメモリ容量とか
ボルテスはファイブだろ
ブイならコンバトラー
コンバインするけど納期じゃないぞ
>>835
みんな知らないって。奴隷獸問題で再放送されないから。
>>807
16ビットアプリだけな。
Win32アプリには効果なし。
ハンドルの種類をしらべるAPIがあったと思うんですが、なんでしたっけ?
SetPixelVってなんで
あんなに遅いの?
>>839
APIオーバーヘッドだろうね。
SetPixelVだけで
全ての描画をやろうとしたら
アホみたいに遅くなったよ…
166MHz!の高速CPUなのにさぁ
>>841
最後のエクスクラメーションマークは一体なんだ?
843名無し@沢村:03/02/02 13:17
>>842
ヌヒよ、それはPentium!!!を表しているのだよ。
>>842
階乗? そりゃ速いな。
DIBセクションをオフスクリーンにして直接点打って
適当なタイミングでBitBltしる
846デフォルトの名無しさん:03/02/02 18:32
VFWもWin32だけどサポートされなくなるそうですが
これらで書かれているアプリはなにで書き直すのがいいですか?
>>846
DirectShow
848デフォルトの名無しさん:03/02/02 18:47
>>847
ありがとう。やっぱりそうか。
DirectShowはVFWドライバとWDMドライバの両刀つかいって本当ですか?
Type-IのaviファイルはVFWで扱えないけどDirectShowなら扱えるってあってますか?
> DirectShowなら扱える

そういうフィルタがあれば扱える。
DShowはそういうもの。
>>849
そうでしたか。どうもありがとう。ではでは。
>>849
codecじゃなくて?
VCMのCODECを使って画像をデコードするフィルタ(ラッパ)などがある
DirectShowのコンポーネントの単位はフィルタ。
854デフォルトの名無しさん:03/02/03 00:00
>>846
そうなればDrawDibDraw()なんかも使えなくなるのですか?
ラッパってトランペットの事ですか?
ラッパー1発ぶっぱなせー♪
857デフォルトの名無しさん:03/02/03 07:50
(-_-)?
サランラップの方だよ。とマジレス。

1 2 3〜を待たずに32小説の旅の始まり
Display *OpenDisplay(???);
の引数ってなんだったっけ?
NULLでいいんだっけか?
>>859
Win32か?
Win32だよ
Xだろ?
XならXOpenDisplayでしょ
>>860
Win64 でした。逝ってきます。
Nin64はどうよ?
866846:03/02/03 22:01
>>854
サポートされなくなるらしいというのは私が聞いたハナシで定かではないです。
その後の調べでは「古いアプリケーションの為にVfWは今後もサポートされるが、拡張はない」ということらしいです
ではでは
dllからdllを読み込んでいるexeファイルの名前を取得するには
どうすればいいですか?
GetModuleFileNameはヽゝ゚ -゚νダメナノネ・・・
GetModuleFileName(0)でいけるけど?
869デフォルトの名無しさん:03/02/03 23:26
VC++初心者ですが、VC++の新規作成でプロジェクト選択の時に
「Win32Application」とあって、このスレはこの環境での
プログラミングを考えていると思いますが・・・。
実際にはWin32applicationでは何をやるんですか?
>>869
メッセージループを回す
>>870
この限りではない。
872869:03/02/03 23:30
すいません。
出来れば「人に寄るだろうけど、大体はこういう目的で利用する」
というようなことを書いていただけると有難いです。
>>868
(|| ゜Д゜)ガーン!!
見逃してました。ありがとう〜。
>>869
何するって、それを決めるのはお前だろうが。

今まで見た中でもっともくだらんネタだな。
875869:03/02/03 23:39
>>874
死ね
軽はずみな発言をしたばっかりに死ななくてはならなくなった>>874

次回「本当に死ぬよ?」にエンジェラインジェラ〜♪
877デフォルトの名無しさん:03/02/04 00:11
>>869
VCのバージョンは?
6の場合は
Win32 Application -> GUI用(大抵こっち,Hello worldで100行くらい)
Win32 Console Application -> CUI用(俗にDOS窓)
.NETの場合はウイザードに「どっちだ」と聞かれる
878877:03/02/04 00:17
>>875
教えて君が挑発に乗っててどうする
無礼者は何も教えて貰えなくなるぞ

今回,答えたのはゲロ甘だったが
それは874がものすごいDQNだった
お陰ってことを忘れるな
879869:03/02/04 00:22
>>877
有難うございます。

ハローワールドに100行ですか・・・・・・・・・・・・・・・。
マジでビックリです。。。。。。
880デフォルトの名無しさん:03/02/04 04:50
test
3.3はもう普通に使える。なかなかいいかも。
というわけでネタなしのから揚げスマソ。
IEコンポを使い倒すのに参考になる書籍はありますか?
英語苦手なんで日本語のやつで
http://www.ebarafoods.com/games/games.html
焼き肉ゲーム
かなりシュールだw

市ね、マルチポスト野郎
DirectShow
>>868
おじさんは君の童貞がどうしても欲しい
人生に憑かれますた
888602 ◆hOJBbTlYfs :03/02/04 05:01
♪お久しブリブリ
コモンコントロールの勉強は進んでますよ。
相変わらずRebarは複雑ですね。
てへっ。
BYE!
>>888
BYE。
890デフォルトの名無しさん:03/02/04 15:25
>>788
extern "C" __declspec(dllexport) int GetClassObject(CTst** pOut)
{
CDtestApp* p = new CDtestApp;
*pOut = (CTst*)p;
return 2;
}
DLLの関数をとしてみたのですが、3行目 new -のところでデバッグエラーです。
どうすれば解決するでしょうか?
エラーの内容(ry
892デフォルトの名無しさん:03/02/04 18:38
>>891
いえ、Debug Errorです。
実行中に、メッセージボックスがでてきて…。
LibraryDocumentをみろと。
893デフォルトの名無しさん:03/02/04 20:32
>>892
LibraryDocumentをみろと。
エラーメッセージの指示に従えない香具師が他人の意見を受け容れられるとは思えないな。
>>894
解決方法は知らんが、それはちがうだろ。
CDtestApp::CDtestApp(??)
が有っても
CDtestApp::CDtestApp()
が無いとか。

CDtestApp::CDtestApp()
が有っても public でないとか。
897デフォルトの名無しさん:03/02/04 22:04
スレとあんまり関係ないかもしれませんが
studio.netからの新しいヘルプファイルありますけど
そのファイルを開くソフトがダウンロードできるところありませんか?
ファイルはあるのに開くソフトがないのです
ヘルプだけ使いたくてプラットフォームSDKとかのヘルプファイルだけ使いたいのです
プラットフォームSDKに付いているヘルプを見るファイルを単体だけで使いたいのです
ヘルプだけが読みたいのです
他の物は何もいりません
ハードディスクの残りもあとわずかです
>>897
全く関係ないですね。
899デフォルトの名無しさん:03/02/04 22:17
>>869
コンストラクタはデフォルトですので問題はありませんし、
デフォルトですから、Publicなのです。
>>899
誤爆?
896へのレスなんだろうな。

ちなみにクラスのメンバのデフォルトはprivateなんだが……
なにがデフォルトなんだろう。
class A
{
  A();
};

A は private。
つまり、

class A
{
private:
  A();
};

と書いたものと同じ。

コンパイルでエラーが出てないという事の方に疑問を感じるのだが。
実行時にエラーでるんだから何がしかの例外投げられてるんだと思うが。
デフォルトってのはMFCAppWizardのスケルトンのデフォルトって意味で
(それならpublic)、DLLからMFCアプリを構築しようとかそんなことを
考えてるような気がしないでもない
905602 ◆hOJBbTlYfs :03/02/05 06:34
ご存知なら、・・・・。
Rebarのボタンのサイズ変更はどうのようにすればいいのでしょうか?
標準では、16ピクセルですよね、サイズが。
>>905
BYE
907デフォルトの名無しさん:03/02/05 11:16
  Dim s As SHFILEINFO
  Call SHGetFileInfo(fname, 0, s, Len(s), SMALL_ICON)
  hb = GetStockObject(BLACK_BRUSH)
  Call DrawIconEx(g.hdc, x, y, s.hicon, 0, 0, 0, hb, DI_NORMAL)

版違いだったらすみません。

アイコンを、重ねあわせで表示したいのですが、これだと周りが
塗りつぶされてしまいます。ブラシを適当に変えてみましたが、
普通はどうやっているのでしょうか??
908デフォルトの名無しさん:03/02/05 13:22
キーボード入力を横取りするグローバルフックプロシージャを作っていて、
フックを仕掛ける関数をフックプロシージャのあるDLLに置こうと考えて
います。

で、SetWindowsHookEx() に渡すインスタンスハンドルを DllMain() の
引数から得るわけですが、googleで見つかったサンプルコードをいくつか
見ると、取得したインスタンスハンドルを格納するグローバル変数を
sharedなセグメントに置くものとそうでないものとあります。

インスタンスハンドルを格納する変数はsharedセグメントに置くべきなのか、
別にそこまでする必要はない、一体どっちが正しいんでしょう?
>>908
shareしたほうがいいと思う。
>>907
ブラシはNULLでいいと思うんだけど。
911907:03/02/05 14:02
上のコードは間違いです。
NULL_BRUSH (= 5)
でやっているのですが、重ね合わせにならないのです。
どうしたらいいのでしょう。
912759:03/02/05 14:10
>>907
関係ないかもしれないけどDI_DEFAULTSIZEは?
913907:03/02/05 14:57
NULL_BRUSH (= 5)
ではなくて、0を指定したら、うまくいきました。
DrawIconEx(g.hdc, x, y, s.IconNo, 0, 0, 0, 0, DI_NORMAL)
お騒がせしました。そしてどうもありがとう!!
914デフォルトの名無しさん:03/02/05 16:56
>>900
どういうことですか?
915908:03/02/05 18:31
>>909
どうもです。

で、さらに調べてみたところsharedにしないといけないのはフックハンドルで
あって、DLLインスタンスハンドルは別にsharedでなくても構わないようです。
確かにフックハンドルはsharedにしないと、他プロセスからフックプロシージャが
呼ばれたときに格納したフックハンドルが見えないし・・・

で、もう一つ質問なんですが、グローバルフックプロシージャが他プロセスから
最初に呼ばれる際、フックプロシージャがあるDLLの DllMain() は呼ばれるんでしょうか?
CallNextHookExに使うだけだったら、フックハンドルもsharedにする必要は無し。
DllMainは呼ばれる。
>>914

902 と 904 を読んでおきたまえ。
で、お前は 890 なのかい?
>>916
>CallNextHookExに使うだけだったら、フックハンドルもsharedにする必要は無し。
なぜ?
フックハンドルを渡さなくても一応は動くけど
他のフックが正常動作しなくなるよ
別スレッドに構造化例外をなげるAPIを教えてください。
>>919
SetThreadContextとか駆使してPCをRaiseExceptionのエントリに設定する。
ただしWin9xでは制限あり
>>906
ワラタ
>>906
(・∀・)イイ!!
>>905
バーヤ
924908:03/02/06 23:09
>>916 >>918
遅くなりましたがありがとうございます。

とりあえずまとめると、

・DLL上のフックプロシージャが他プロセスから最初に呼ばれる際は DllMain() が呼ばれる
・フックハンドルはsharedにする必要がある
 (CallNextHookEX() には正しいフックハンドルを渡す必要がある)

ってことでいいんでしょうか?
925厨房教えて糞:03/02/06 23:39
HTTP経由で自作アプリからエクスプローラへドラッグ&ドロップしたいと考えています。
以下にそのものずばり書いてあったのですが、
具体的にどうするのか皆目見当が付きません。

http://forums.belution.com/ja/vc/000/060/08.shtml
> ファイルの場合は、CFSTR_FILEDESCRIPTORを用い、
> CFSTR_FILECONTENTSを遅延レンダリングすることで、
> ドロップ後にサーバよりGETしてくることは可能
(ここで問題として挙がっているフォルダのケースは想定していません)

なにとぞお知恵を拝借いただければ幸いです。
漏れのAPIはすっごく大きんだぞ!
>>925
何を聞きたいのか皆目見当がつきません。
何言ってるのかわからないなら何言ってるのかわかるように勉強してください。
自力で。
>>926
それはすごい。
スクロールバーの隣に配置されるコントロールを作っています。
コントロールの高さはスクロールバー高さに合わせているのですが
いったん表示した後に画面のプロパティでスクロールバーの高さを変更されると、
コントロールとスクロールバーの高さにズレが生じてしまいます。
画面のプロパティが変更されたことを知るにはどうすればよいのでしょうか?
>>929
WM_SETTINGCHANGE
931厨房教えて糞:03/02/07 06:19
>>927
お聞きしたいのは
> CFSTR_FILEDESCRIPTORを用い、 CFSTR_FILECONTENTSを遅延レンダリングする
方法です。
HTTPがどうのという部分は単体では出来るので、とりあえず関係なくて、
ファイルとして存在しないメモリ内のデータを(たとえばBYTE data[256])
エクスプローラに対してドラッグ&ドロップして実体化させたいのです。

CFSTR_FILEDESCRIPTORをExplorerに認識させることはできましたが、
CFSTR_FILECONTENTSをどうやって引き渡すのか分かりません。
ClipSpyで見てもCFSTR_FILECONTENTSは<Data unavailable>になっていて、
どうセットしてやれば良いのか分からない状態です。

色々と探しましたがどうもピンと来る説明が見付かりません。
↓は逆の「エクスプローラ→自作アプリ」の説明しか書いてないです。
http://www.codeproject.com/useritems/explorerdragdrop.asp

↓みたいなものがあれば理想なんですが、もう手に入らないです。
http://web.archive.org/web/20010702184003/http://www2.nkansai.ne.jp/users/yoshiki/vc/DnD.html
932デフォルトの名無しさん:03/02/07 09:11
ウィンドウの移動が画面でのドラッグによるものか、
APIによるものかを区別するいい方法はないでしょうか?

ウィンドウを配置できる位置を制限したいと思っているのですが、
WM_MOVEを受け取った時不正な位置の場合SetWindowPosで
位置修正を行うようにすると、そのSetWindowPosのため、
またWM_MOVEが発生してしまいます。

今のところ、SetWIndowPosを使用する直前にフラグをたてることで
移動がドラッグによるものかAPIによるものか判断してますが、
なんだかすっきりしません。他にいい方法があれば教えてください。

あと、WinampやSCMPXはドラッグしている間もウィンドウの中が
描画されますが、ああいうのはどうすれば実現できるでしょうか?
WM_SIZEのときに位置変更してもダメ?
>>932
「すっきりしない」以外に問題がなければそれでいいんじゃないの?
すっきりしないのは大問題
WM_MOVINGとWM_SIZINGとWM_WINDOWPOSCHANGINGですっきり?
937932:03/02/07 11:48
ウィンドウ移動がドラッグによるものか否かは
WM_EXITSIZEMOVEで判断できることがわかりました
(APIでの移動では発生しない)
ありがとうございました。
938名無し@沢村:03/02/07 19:41
皆々様方〜教えてくださらんか、皆々様方〜♪
それはエディットだが、windowsの改行コードは\r\nのはずだが、
SendmessageのWM_SETTEXTで文字列といっしょに改行コードを送っても改行されんのよ。
どうしてかわかりますか?
またタブの\tはちゃんとタブになるんだが、タブの幅が気にくわんので、もっと短くしたいのだが、どうすればいい?
教えてはくださらんか〜、皆々様方〜♪
おまえ何様のつもりだよ〜♪
沢村様でしょ〜♪
うわ、これは本物の沢村だ・・・(;´Д`)
942デフォルトの名無しさん:03/02/08 01:39
>>938
0x0a,0x0dをちゃんとおくてるのか?
TAB>Edit_SetTabStopマクロ
ES_MULTILINE
>930
ありがとうございます。
ウィンドウサイズが変更された時のステータスバーやツールバーの再調整と同じように
WM_SETTINGCHANGE を受信した親ウィンドウがサイズの調整を指示するメッセージをコントロールへ送るようにしました。
おかげさまで問題が解決しました。
ありがとうございました。
>>950
次スレおねがい
946デフォルトの名無しさん:03/02/08 16:25
Windows95付属のFontView.exeをLoadLibraryした後、FreeLibraryすると
必ずFreeLibraryでページ違反エラーが起きてしまいます。
エラーの詳細にはMFC30.DLLが示されているのですが、これはMFC30.dllの
バグなのでしょうか?
ちなみにWindows2000にWindows95のfontview.exeをコピーして同様の事を
したところ、前述のエラーは起きませんでした。
Windows2000にはMFC30.dllが無いのでやはりこのdllが問題なのかとも思うのですが…
他のOS(98/Me/NT/XP)は無いので他のOSでの動作は確認できないのですが、
これはWindows95だけで起こる問題なのでしょうか?
もしそうならばこのエラーを回避するにはどうすればよいでしょうか?
開発環境はVC6+SP5です。
>>946
FontView.exeをLoadLibraryするとなんか便利なAPIが呼び出せるようになったりするんですか?
>>947
いや、FontViewをロードしても便利なことは無いです。
ユーザが任意のモジュールをLoadLibraryできるソフトを作っているのですが、
このFontViewのようにロードはできても解放でエラーが出てしまうような
ファイルをユーザが指定しまうと困るので、回避方法が知りたいのです。
自分の知らないモジュールのバグは、さすがに回避できねえんでねえの?

無理矢理やるなら、FreeLibraryするとバグってしまうライブラリの
ファイル名を覚えておいて、FreeLibraryを禁止するとか。
やだ。
951名無し@沢村:03/02/08 20:19
>>942
すまん、\r\nを送っても改行されない件だが、解決した。
ちょっとした勘違いで、文字列を送るたびにその文字列の最後に\r\nを入れたつもりが、
全部の文字列の最後にしか入ってなかったわけだ。
これはちょっとしたミステイクというやつよ。
それはそうと、タブの\tはちゃんとタブになるんだが、タブの幅が気にくわんので、もっと短くしたいのだが、どうすればいい?
教えてはくださらんかな、ヌヒよ?
>>951
>>942にも書いてあるがEM_SETTABSTOPS
    ☆ チン  〃  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ヽ ___\(\・∀・) <  MIDIプレーヤーまだー?
          \_/⊂ ⊂_ )   \_____________
>>948
__try〜__exceptで囲むとか。
Win2000でエラーが出ないのは単にロードに失敗してるだけだと思うぞ
(NT系ではexeはリソース取得の目的でしかロードできない)
>>953
>NT系ではexeはリソース取得の目的でしかロードできない
じゃあGetProcAddrを呼び出すまでは合法では?
>>953
例外ハンドラも試してみましたがハンドラが呼ばれませんでした。
__try{
FreeLibrary(hINST); // ここでエラー
}__except(EXCEPTION_EXECUTE_HANDLER){
// 呼ばれない
}

また、Win2000では
HINSTANCE hINST = LoadLibrary("fontview.exe");
if(hINST != NULL){
// デバッグしたところこのブロックに入ることを確認済み
FreeLibrary(hINST);
}
としているのでロードはできていると思います。
用途が限定されるがLoadLibraryExを使うという手もある

【不幸のレス】

このレスを見た人間は十三日以内に死にます。

※あなたに訪れる死を回避する方法が一つだけあります。
それはこのコピペを一時間以内に7つ、別のスレに貼り付ける事です
↓これの TCHAR バージョンは有りますか?
wctomb(char *, wchar_t);
wcstombs(char *, const wchar_t *, size_t);

こういう感じで。
_tctomb(char *, TCHAR);
_tcstombs(char *, const TCHAR *, size_t);

もしも無くて良い代物でしたら代替案を御教授下さい
>>956
それだとGetProcAddressできないんで・・・
>>958
WideCharToMultiByte
>>960
WideCharToMultiByte に TCHAR を渡しても大丈夫なのでしょうか。
wchar_t ではなく char のとき困るような気がします。
(↑もちろんこの時は無変換です)

int WideCharToMultiByte(
UINT CodePage, // コードページ
DWORD dwFlags, // 処理速度とマッピング方法を決定するフラグ
LPCWSTR lpWideCharStr, // ワイド文字列のアドレス
int cchWideChar, // ワイド文字列の文字数
LPSTR lpMultiByteStr, // 新しい文字列を受け取るバッファのアドレス
int cchMultiByte, // 新しい文字列を受け取るバッファのサイズ
LPCSTR lpDefaultChar, // マップできない文字の既定値のアドレス
LPBOOL lpUsedDefaultChar // 既定の文字を使ったときにセットするフラグのアドレス
);


何に使うかといいますと、今回は std::fstream のファイル名指定に
char、wchar_t の両方が渡されても大丈夫という関数なのです。
↓こんな感じです。

void FileOpen( LPCTSTR filename )
{
char buffer[MAX_PATH];
_tcstomb( buffer, filename, MAX_PATH );
std::ofstream ofs( buffer );
.........
}
>>958
TCHAR == char の環境だと、そもそも文字コード変換の意味がないと思うが…
(単なるコピーだよな)
>>962
その単なるコピーになる時と、wide->multi 変換が必要な時で同じコードを共有したいのです。
そもそもTCHAR自体_UNICODEマクロと_MBSマクロでコンパイル時に切り替えているだけなんだが

自分で
_tctomb(char *, TCHAR);
_tcstombs(char *, const TCHAR *, size_t);
を作ってその中でマクロでコードの切り換えするのが普通じゃ?
>>964
_MBCS でコードしたい時と _UNICODE でコードしたい時で
同じ関数を使えたら資源の有効利用になると考えました。
>>963
FileOpen() の内部で #ifdef で切り分ければ?

もちろん _tcstomb() 自体を #ifdef _UNICODE で切り替えることも可能だが、
ムダに文字列コピーが発生するからお奨めはしない。
同じ関数ですか。
>>966
自分で#ifdefとか使って切り替えれば?
その部分だけを別ファイルなりにしておけば、本体のコード自体は見かけ上変わらない。
970デフォルトの名無しさん:03/02/08 23:03
デタッチされないDLLを作るにはどうしたら良いですか?

いま、DLLの中でスレッドを起動しているのですが、

放っておくと「DLLがデタッチされてしまうがスレッドが動いている」という状態になって

ハングしてしまいます。

スレッドは動かしつづけたいのでDLLがデタッチされないようにしたいのですが。
自分をLoadLibraryすればいいんじゃない
>971
ありがとうございます。やってみたら望んだ通りになりました。
973958:03/02/08 23:51
マクロで何とかしようと思います。アドバイスを戴きまして、
まことに有難う御座いました。
mallocとGlobalAllocの違いって何?
>>974
mallocっへ内部的にはHeapAllocだっけ?
>>975
処理系(というかランタイム)依存

mallocは一般的にはVirtualAlloc等で確保した大きなブロックをランタイムライブラリがさらに分割管理している。
HeapAllocはmallocとほぼ同じようなことをシステム側がやってくれる。mallocと比べて速度が少々劣る可能性が高い。
GlobalAllocは大きなブロックをそのままうけとる。Win16との互換性の関係で少々余分な処理が入る。

小さい領域を頻繁に確保、開放したい場合はmalloc
確保領域をグループ化して一気に開放したい場合はHeapCreate->HeapAlloc->HeapDestroy
HGLOBALを要求するAPIを使いたい場合はGlobalAlloc
仮想メモリ空間を厳密に管理したい場合はVirtualAlloc
977デフォルトの名無しさん:03/02/09 16:51
>>931
>CFSTR_FILECONTENTSをどうやって引き渡すのか分かりません。
IStream を使うという話ではないの?

>ClipSpyで見てもCFSTR_FILECONTENTSは<Data unavailable>になっていて、
IStreamを使っている(遅延される)から表示のしようがないだけでしょう。
978デフォルトの名無しさん:03/02/09 16:56
> スレッドは動かしつづけたいのでDLLがデタッチされないようにしたいのですが。
そんなことしてたら、下手するとゾンビるぞ。 >>970



・・・ちゃんと忠告したからな。あとは知らんぞ。
FreeLibraryAndExitThreadだな
976より975の方がわかってるな
だいいちVirtualAllocは「厳密」などという曖昧な理由では使わない
974よ,それは例えばGMEM_MOVEABLEだ
981名無し@沢村:03/02/09 20:20
>>952
タブを設定しようと思い、SendMessage(hEdit,EM_SETTABSTOPS,1,1);としたところプログラム開始エラーが出てしまいました。
SendMessage(hEdit,EM_SETTABSTOPS,1,1);をSendMessage(hEdit,EM_SETTABSTOPS,0,1);に直すとエラーは出ないので、3番目の引数がくせものと思うのだが、
EM_SETTABSTOPSの使い方を教えてはくだされんか〜♪


ヘルプも読まない主義かよ
>>982
読みません。
知りません。
>>983
死のうか。 
985名無し@沢村:03/02/09 21:48
皆々様方〜EM_SETTABSTOPSの使い方がわかったぞよ〜♪
最初SendMessage(hEdit,EM_SETTABSTOPS,1,1);としたところエラーが出たのでビックリしたが、
その後の調べでは、4番目の引数にエラーの原因があったのよ。
4番目の引数をDWORD型にしてその後int型にキャストしなおすとちゃんとなることがわかったのよ。
皆々様方〜これは私にとって1大発見であるのだよ!!!
986名無し@沢村:03/02/09 21:54
皆々様方〜、タブの幅の設定の仕方はわかったが、これはタブキーをうったとき、
その間隔でタブが出るのだが、普通に文字をうって、その列にきたとき自然にタブが挿入されるようにするにはどうすればいい?
皆々様方〜教えてくだされ〜♪
987名無し@沢村:03/02/09 21:57
つまりあらかじめ列にタブを設定しておいて文字がその列になったとき、
自然にタブの間隔があくようにするということだが、どうすればいいですかな?
皆々様方〜教えてくだされ〜♪
いかん. . .
誰だ本物の沢村を召還したのは
意図がイマイチ汲み取れないが、例えばスペース4つをタブに置換したいということか…?
とりあえず放置せよとの命令が下った。
次スレはどこ?
次スレ
Win32 Aplicationプログラミング
http://pc2.2ch.net/test/read.cgi/tech/1044267746/
【MS自ら】APIの正しい使い方教えろ【ガセネタ】
http://pc2.2ch.net/test/read.cgi/tech/1044378059/
993デフォルトの名無しさん:03/02/10 00:29
>沢村
ゲーム製作技術板を荒らすな
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/l50
995デフォルトの名無しさん:03/02/10 12:22
オレも FB1.02 だけど問題ないけど。(Win2000)
エラーが出たときのSQLステートメントは?
とりあえず isql で以下でテストしてみるとか。
 select extract(year from cast('now' as date)) from rdb$database;
996デフォルトの名無しさん:03/02/10 12:23
って前に同じ発言が…… 逝ったきます。

あと、できれば他の言語でも開発できるようにインタフェースを公開して欲しいっす。
997デフォルトの名無しさん:03/02/10 12:24
確率と確立を区別できない坊が多いな。
あと定跡と定石
それと香具師と家具師
998デフォルトの名無しさん:03/02/10 12:26
じゃ「ばばぬき」キボンヌ
999602 ◆hOJBbTlYfs :03/02/10 12:27
RebarRebarリバニタ炒め。
おいちー。

BYE!
999で止まるスレってのもスゴイね。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。