WinAPI相談室

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
作っときました。
システムいじりたい人、軽いPG作りたい人はどうぞ。
(言語は指定してないんで質問の時にはちゃんと書いてね)
2名無しさん@お腹いっぱい。:2000/11/03(金) 03:18
どうぞって、あんたゴルァ…
3名無しさん@お腹いっぱい。:2000/11/03(金) 03:40
じゃあせっかくだから、相談相手になってくれ。
なんかここ技術板なのに、クソスレしか生まれないんだけど、どうしたらいいと思う?
4名無しさん@お腹いっぱい。:2000/11/03(金) 03:49
>>3
それは1に対する煽りなのか?
5名無しさん@お腹いっぱい。:2000/11/03(金) 03:53
>3
特に週末はひどいものがあるな。
6名無しさん@お腹いっぱい。:2000/11/03(金) 03:54
スレッドを立てる時間が悪いと思うんだな。
今いるのはプログラムに興味はあるもののなにも出来ない
引きこもりさんばっかり。
7名無しさん@お腹いっぱい。:2000/11/03(金) 03:57
>>6
自暴自棄になるな!!
8名無しさん@お腹いっぱい。:2000/11/03(金) 03:59
なんか1は、なにも書かないし、立て逃げなの?
9名無しさん@お腹いっぱい。:2000/11/03(金) 04:15
EnumDisplaySettingを使うと、0Hzとかふざけた数値が返ってきます。
どうしたらいいでしょうか?
10名無しさん@お腹いっぱい。:2000/11/03(金) 04:17
>>9
DirectX はやめて Java で記述しなさい!
11名無しさん@お腹いっぱい。:2000/11/03(金) 04:19
WindowsCEに、DuplicateHandleが無いのはどうして?
12名無しさん@お腹いっぱい。:2000/11/03(金) 04:22
>>11
必要ないから。
つーか、俺も使ったこと無い。何に使うの?>11
13名無しさん@お腹いっぱい。:2000/11/03(金) 04:24
>>9
良いビデオカードに変えてみよう。
143:2000/11/03(金) 04:30
>>4
変に勘ぐらないでくれ。
純粋に相談相手になってほしかっただけだよ。
この板の存在意義についてでも話し会おうや。
15名無しさん@お腹いっぱい。:2000/11/03(金) 04:31
>13
いや、NT系なら正常動作するらしいよWin2000とか・・・。
163:2000/11/03(金) 04:31
会→合
17名無しさん@お腹いっぱい。:2000/11/03(金) 04:33
>>15
あら、そうなの。無知だった。
やぱNT系列は優秀だね。
18名無しさん@お腹いっぱい。:2000/11/03(金) 04:40
DirectX8では、9x系とNT系、両方で動かないと8対応と
言っちゃ駄目だそうなんですが・・・。
19名無しさん@お腹いっぱい。:2000/11/03(金) 04:40
>>12
Win32同期オブジェクトの暗黙なキューに依存せずに、
確かな待ち行列のもとで同期の仕組みを作りたいので
他のプロセスのスレッドをResumeしたりSuspendしたりしたい。

ThreadIDやハンドルはとれるんだけど、OpenThreadもないし、
DuplicateHandleも無いので、模索中。
2012:2000/11/03(金) 04:48
>>19
暗黙って…、CreateEventやMutexじゃだめなの?(CEにあったっけ?)
カーネルオブジェクトに頼らないで、プロセス間でどうやって同期させるの?
2112:2000/11/03(金) 04:49
所で、perlで使うディレクトリ排他ロックとかってWindowsでも有効なのかな
22名無しさん@お腹いっぱい。:2000/11/03(金) 04:52
>>21
NTならOK
2312:2000/11/03(金) 04:57
>>22
なるほど。勉強になります。
24名無しさん@お腹いっぱい。:2000/11/03(金) 05:21
>>20
待ち行列に依存しないでもよい形かたちで、最低限の同期オブジェクトは使う。
まぁキューになってないOSなど存在するとは思えんが、
貧弱な同期処理しかできないOSにも移植できるようにとの
お達しのもとで作業しておる。最悪、OALでなんとかするし。
2512:2000/11/03(金) 05:29
>>24
>貧弱な同期処理しかできないOS
例えばどんなのがありますか?
あと、OALってなんですか?
質問ばかりですいません。
26名無しさん@お腹いっぱい。:2000/11/03(金) 05:45
>>25 >貧弱な同期処理しかできないOS
一部のRTOSなんかにありそうだとムダに想定されている(ワラ

OALは、CEのカーネルをビルドするときに、
ハードウェアに依存する部分をベンダーが実装する層。
DirectXのHALみたいなもんだが、カーネルモードで動く。
2712:2000/11/03(金) 05:53
なるほど、CEの世界も奥が深そうですね。
昔、CEはシングルタスクって聞いたことありますが、それも絡んでそう。
28名無しさん@お腹いっぱい。:2000/11/03(金) 06:04
>>一部のRTOSなんかにありそう
んー、でもセマフォぐらいは簡単(とはいわないけど)に実装できそうな気がする。
スレッド関係の本にもサンプル載ってるぐらいだから…
29名無しさん@お腹いっぱい。:2000/11/03(金) 06:06
ありゃ、まちがえた。
スライシングの方法によるか。
30母を訪ねて名無しさん千里:2000/11/03(金) 16:11
他のプロセスのスレッドを直接的にいじろうというのがそもそも間違いでは?
双方の合意のうえでやんなきゃ。
31名無しさん@お腹いっぱい。:2000/11/04(土) 05:22
よく使うAPIリファレンスみたいなサイト知りませんか?
他スレでかいしゅつだったらゴメン。

32名無しさん@お腹いっぱい。:2000/11/04(土) 07:13
>>31
あるけど教えない。
つーか、MSDNで十分だろ?
33名無しさん@お腹いっぱい。:2000/11/04(土) 12:16
>>26
>一部のRTOSなんかにありそうだとムダに想定されている(ワラ
そんな想定で車輪の再発明をするのは無意味だと思います。
特に同期処理なんて片手間で開発するのは無謀です。
既に稼動実績のあるモジュール(が存在すればそれ)を使うか、
プロジェクト初期段階で対応させるOSを明確化すべきです。
#仕事じゃなくて、研究課題ならいいですけど。
34名無しさん@お腹いっぱい。:2000/11/05(日) 07:22
>32
31は初心者でもっと解りやすいのが見たいんじゃないのか

っていうかあるけど教えないなどと根性ワルなことかくなよ。
最初から何も言うな。

あ、ちなみにおれは知りませんので・・・。
35名無しさん@お腹いっぱい。:2000/11/05(日) 07:56
36とおりがかりのおばちゃん:2000/11/05(日) 10:13
むむ、上記のサイトよさそうだなぁ。
2chて、たまにとてもよい情報ころがってるよね。
37名無しさん@お腹いっぱい。:2000/11/05(日) 14:12
>>27
CreateProcess()はCE 1.0以降サポート。
CreateThread()はCE 1.01以降サポート。
とAPIヘルプに書いてあるが。
38名無しさん@お腹いっぱい。:2000/11/05(日) 14:32
>>19 >>24
スレッドのsuspend, resumeもplatform限定しそうだけどなぁ。
pthreadだとサポートしてないよね確か。
俺だったら素直にセマフォ使って(無いなら実装して)同期取るけどね。
39名無しさん@お腹いっぱい。:2000/11/05(日) 20:15
>31
サイトじゃないけど、
http://www.cs.virginia.edu/~lcc-win32/
にある「Windows API documentation size: 12.8M」はWindowsAPIのリファレンスです。
ただし英語。
4031:2000/11/08(水) 04:50
>35
お、こりゃいいですね。ありがとう。

>39
ありがとです。しかし俺、英語がわからんのです。
鬱だ、鬱すぎて氏ぬ気力もない。
41名無しさん@お腹いっぱい。:2000/11/12(日) 16:43
ジョイスティックの状態を取得しようと思います。
しかし早速飛びました。他にも原因があるのかもしれませんが思い付くものを潰していこうと思います。
それで
MMRESULT WINAPI joyGetDevCaps(UINT uJoyID, LPJOYCAPS pjc, UINT cbjc);
このAPIに渡すのはジョイスティックのポート番号と、JOYCAPS構造体のアドレスと、
最後はJOYCAPS構造体のサイズでいいんでしょうか。
Webで見つけたVBのソースを参考にしてみたんですが間違っているかどうか教えてください。
4241:2000/11/12(日) 17:49
解決しました。かなりのケアレスミス…宇都だ。
43名無しさん@お腹いっぱい。:2000/11/12(日) 19:12
リソース(ビットマップやサウンドなど)を読むAPIはありますが、
書き込むAPIはないのでしょうか?
44名無しさん@お腹いっぱい。:2000/12/14(木) 16:12
WinMainの最初の引数 HINSTANCE を 後から取得するAPIはありませんか?

たとえば呼ばれたDLLからHINSTANCEの必要なAPIを呼ぶのにどうしようかなと
4544:2000/12/14(木) 16:14
それからコンソールアプリの場合はhInstanceを何にしたらいいの?
46名無しさん@お腹いっぱい。:2000/12/14(木) 16:18
>44
あるのかもしれないけど、俺はだいたいDLLの関数を呼ぶときに引数つけて
呼ばせてる。
4744:2000/12/14(木) 16:58
GetModuleHandle(NULL)かと思っていましたが
>このパラメータがNULLの場合、 GetModuleHandle関数は、 呼び出したプロセスを作成するのに使われたファイルのハンドルを返します。


でもコンソールアプリでもGUIアプリでも常に 0x400000が帰って来ます。
そしてhInstanceもどうもいつも0x400000です
#解説WebによるとこのhInstanceはアプリ事に違うように書いてあったのに・・・・

という事は実は GetModuleHandle でビンゴなのかな?
4844:2000/12/14(木) 17:00
>>46
なるほどなんですが、でも面倒でしょ?
4944:2000/12/14(木) 17:18
試したコードはこんな感じ BCC32 ではそうでした。

#include <stdio.h>
#include <windows.h>
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
char str1[100];
sprintf(str1,"hInstance %8x ModuleHandle %8x",hInstance, GetModuleHandle(NULL));
MessageBox(0 ,str1, " test ", MB_TASKMODAL);
}
50SAGE:2000/12/14(木) 18:37
少なくとも VC++ の WinMain の hInstance には必ず
GetModuleHandle(NULL) が入ってるようだが。(CRTのソースでは)
5144:2000/12/14(木) 18:52
Delphiのソースも追いかけたら結構 GetModuleHandleを hInstance代わり
に使ってましたね。

なんか日本語ヘルプがダメダメなのかな、-->GetModuleHandle
52SAGE:2000/12/14(木) 19:49
よー知らんが、常に 0x400000 ってことはベースアドレスが返ってくるものなんだろうかね。

ちなみに、
The returned handle is not global, inheritable, or duplicative, and it cannot be used by another process.
53名無しさん@お腹いっぱい。:2000/12/14(木) 20:13
英語ヘルプも同じだなあ
If this parameter is NULL, GetModuleHandle returns a handle of the file used to create the calling process.
5444:2000/12/14(木) 21:08
次の疑問です
APIのターゲットにするためのhWndが欲しい時に
ClassNameをどうしようかと悩んでいました。
連番式に区分けしようかと思っていましたが、

Delphiのソースを追いかけると
1回 RegisterClassしたクラスを使いまわして
CreateWindowした後
SetWindowLong(Result, GWL_WNDPROC,関数ポインタ)
していました。

これは学ぶべきでしょうか?
55>44:2000/12/14(木) 21:24
SetWindowLongでやってるのがサブクラスというんだ
サブクラスは普通に使われるテクニック
Windows側で用意されたコントロールもサブクラス可能だよ
56。>55:2000/12/14(木) 21:34
そだね。後スーパークラスってのもある。
既存のコントロールに独自のウインドウクラスを持たせられる。
オーソドックスなコントロールとかの拡張方法だね。
57名無しさん@お腹いっぱい。:2000/12/14(木) 21:35
>>54
それは何か違和感があるなあ 俺なら
SetWindowLong(hWnd,GWL_USERDATA,hoge);
で構造体というかオブジェクトを渡して、
必要ならその構造体に関数ポインタ入れとくけどなあ
5844:2000/12/14(木) 21:42
>>55-56さん
ありがとうございます。さっそく検索して勉強します。

>>57さんの方法もなるほどですというか GWL_USERDATAの意味が見えて来ました。ありがとうございます
59>57:2000/12/14(木) 22:03
中村の里の中村さんがどこかで USERDATAを使うと遅くなるからDelphiでは
サンク方式(動的にメソッド呼び出し中継関数を作り出す)が採用されている
というようなことを書いてたよ
60>59:2000/12/14(木) 22:33
61名無しさん@お腹いっぱい。:2000/12/15(金) 02:31
>35 さんきゅ〜、あ、俺31じゃないけどお礼いわせて。
62名無しさん@お腹いっぱい。:2000/12/15(金) 11:24
たしかに
http://www.komaba.utmc.or.jp/~tamon/winprog/winprog.html
>第1引数が現在のインスタンスのハンドルです。インスタンスとはプログラムの実行単位、プロセスのことで、同じプログラムであっても別々に起動されて別々に実行されている場合、別のインスタンスとなります

とか素直に読んで、インスタンスごとに違う値だと思い込んでた。
なんでも実証が大事なんだなあ
6344:2000/12/15(金) 15:00
waveOutOpenで CALLBACK_FUNCTIONて何か問題ありますか?

サンプルにあるような感じで、ただサイン波を永遠出す為に
HDRをコールバックproc内で回収させるだけの処理を追加したところ
CALLBACK_WINDOWでは問題なく動く
 (ただ当然メッセージ機構は常に動かす必要がある)
んだけど、CALLBACK_FUNCTIONは処理そのものは動くのだけど最後の
waveInResetのところでwindowsから帰って来てくれません。
6444:2000/12/15(金) 15:03
ちなみにwaveInResetをコールバックproc内で発行した場合はOKです
6544:2000/12/15(金) 15:06
あwaveOutResetでした。
66名無しさん@お腹いっぱい。:2000/12/16(土) 21:36
ダイアログでカスタムドローってできないんでしょうか?

NM_CUSTOMDRAW のとき
LPNMLVCUSTOMDRAW.nmcd.dwDrawStage がいつもCDDS_ITEMPREPAINT
で処理が進みません。

CDRF_NOTIFYITEMDRAWをちゃんと返してます。
67>66:2000/12/17(日) 11:22
詳しくないけど
(っていうかその系列の解説がMSDNまだ英語なので逃げてたけど)
>>54-55で解説されてるサブクラスは試してみた?
68名無しさん@お腹いっぱい。:2000/12/17(日) 13:22
スーパークラスってどうやって作るんすか?
詳しいサイトないでしょか?
探したけどもjavaばっかし見つかって、Winのは見つからんかった
69>68:2000/12/17(日) 16:31
7068:2000/12/17(日) 17:06
ありがと。大変参考になった。
7166:2000/12/17(日) 23:14
サブクラス化したらできました。どーもです。
72名無しさん@お腹いっぱい。:2000/12/18(月) 01:36
>>62
Win16では確かにインスタンスごとに違ってたんだけどね
73名無しさん@お腹いっぱい。:2000/12/18(月) 09:45
サブクラス化って良く聞くんですが、いまいち分かりません。
分かりやすく解説している、ホームページ、書籍などがあれば、ご紹介下さい。
74名無しさん@お腹いっぱい。:2000/12/18(月) 09:53
APIを使ってスピンコントロールは作れるんでしょうか?
APIの本を眺めても載ってないのですが・・・・
75名無しさん@お腹いっぱい。:2000/12/18(月) 10:08
>>73
その手の趣味の方々が集まったクラスです
常にお尻の穴が危険にさらされています
76名無しさん@お腹いっぱい。:2000/12/18(月) 10:10
コントロールはコントロール固有のウインドウクラス名を指定して
CreateWindowExだろ?
77>73:2000/12/18(月) 10:24
>>69のページではダメなの? じゃ猫でもは?
78名無しさん@お腹いっぱい。:2000/12/18(月) 16:28
>>73

 簡単に言うと、ウインドウのウインドウプロシージャを独自の
関数に置換する事。その関数では、通常一部のメッセージのみを
独自に処理して後は元のウインドウプロシージャ―に渡すんで
「サブクラス化」と言うみたい。このサブクラス化で、ウインド
ウの動作の一部を変更できるんで、結構便利かも。

・創作プログラミングの街
http://www.sm.rim.or.jp/~shishido/

 にも実際のソースや解説がある。あと、「プログラミング
Windows」でも取り上げていたはず。
7973:2000/12/18(月) 18:40
ありがとうざいました。これから見てみます。>78さん
80名無しさん@お腹いっぱい。:2000/12/19(火) 16:40
メッセージの番号とメッセージの一覧みたいなのありませんか?
デバック中にメッセージ番号表示させても意味判らないので 変換関数作りたいんですが
81名無しさん@お腹いっぱい。:2000/12/19(火) 17:39
>>80
winuser.h見れ。
8280:2000/12/19(火) 17:42
あ、馬鹿な事質問してしまいました。
APIヘルプに メッセージ一覧があったので
これからテキストを抽出して Cソースに加工して印刷すればいいだけですね。
すみませんでした。
8380:2000/12/19(火) 17:44
>>81 ありがとうございます。マルチメディア系とか色々散らばっているので・・・
84名無しさん@お腹いっぱい。:2000/12/19(火) 19:02
>80
spyを使えば、メッセージ名はわかるけど。

http://www02.so-net.ne.jp/~joh/jspy.html
85名無しさん@お腹いっぱい。:2000/12/19(火) 23:29
Borland派ならWinSightだね。
86名無しさん@お腹いっぱい。:2000/12/20(水) 09:17
「SystemTimeToTzSpecificLocalTime」っていうAPIを使ったら、
Win95/98ではちゃんと動作しないという事が納期の前日に判明。
今修正中...

というわけで、95系とNT系で動作が違うAPI情報きぼん。
8773:2000/12/20(水) 09:35
>>86
VC++のヘルプで関数一つずつ調べれれば分かります。
それも大変ですけど。ヘルプの記述に間違いがあることもあるらしい。

納期先のマシン環境と同じ環境を作ってテストすべきだと思います。
88名無しさん@お腹いっぱい。:2000/12/20(水) 18:35
使える場合でも、微妙に動作が違う場合が、過去に何度かあったぞ。
同じ環境でテストせよとの主張は正しい。
89名無しさん@お腹いっぱい。:2000/12/21(木) 16:30
>>86
MSDN見たら
SystemTimeToTzSpecificLocalTime
Windows 95/98:サポートされていません。
あほすぎ
90名無しさん@お腹いっぱい。:2000/12/21(木) 16:56
ホットキーに反応してアクティヴになる市販のプログラムを
別のプログラム(を作る)のボタンを押して
「あたかもホットキーを押したかのように」アクティヴにしたいんですけど
何か手がかりありませんでしょうか。
ホットキーに反応するほうの資料はあるみたいなんですけど。
91名無しさん@お腹いっぱい。:2000/12/23(土) 19:15
CreateEnhMetaFileのハンドルを使って
Rectangleと線で構成した図形を作りました。
□の対角を結んだ(×こんなふうに)図形です。
数値では正確な値を指定したはずなのですが
線が四角からはみ出てしまいます。
調べてみたところ四角形の方がずれてるみたいです。
これはある本の例題を試したのですが、本に付録のexeファイルで
やってもやっぱりずれます。どこに問題があるのでしょうか。
92名無しさん@お腹いっぱい。:2000/12/23(土) 20:17
>>90
keybd_event
93名無しさん@お腹いっぱい。:2000/12/23(土) 20:36
最近ギコってみませんね。

かちゅ〜しゃ作ってるんかな。
94ブービーさん:2000/12/23(土) 23:44
PrintDialogで「ファイルに出力」にチェックを入れたりして印
刷すると「名前を付けて保存」を表示しますが、
これを自前で処理できればいいなと考えています。
(PostScriptファイルの作成などに使うのが目的です)

で、ファイルに出力することはできたのですが、
ファイル名を聞いてくるダイアログをどうしたら消すことができるか
いろいろ試行錯誤していますが、まだ解決していません。
どなたかご存知の方がいましたら、指針かご回答を
お教えください。ちなみに、VC++6 でやっています。
95名無しさん@お腹いっぱい。:2000/12/23(土) 23:48
PrintDialog ってプリンターがないとエラーメッセージがでて使えない。
貧乏学生には使えないAPIの1つです。(泣)
96ブービーさん:2000/12/23(土) 23:52
プリンタがなくても↓のプリンタドライバをインストールすれば
とりあえず大丈夫ですよ。

http://www.adobe.com/support/downloads/pdrvwin.htm
97名無しさん@お腹いっぱい。:2000/12/24(日) 00:13
>ブービーさん
どうもありがとう。
今DL中です。
98デフォルトの名無しさん:2000/12/24(日) 02:27
>91
LineToは終点を含まない筈
Rectangleも同じで x終点-x始点ドットの図形が描かれる筈

だけど、実際にはその通りにならない場合も多し。気にするな
99名無しさん@お腹いっぱい。:2000/12/24(日) 13:29
VC++でSDKプログラミングやりたいんだけどお薦めの本ってないですか?
本屋に行ってもMFC使ったのしか分からなかった。
できれば入門書とリファレンスとお願いしたい。
初心者なんで的はずれな質問だったらスマソ。
10091:2000/12/24(日) 14:00
>>98
本を読み進んでいくと
Windowsが勝手に値を変更するみたいなことが書いてました。
101名無しさん@お腹いっぱい。:2000/12/24(日) 14:01
>>99
プログラミングWindows第5版 (上)(下)
マイクロソフトプレス

なんかがおすすめ。

102バッカーです:2000/12/24(日) 14:08
>91
CreateEnhMetaFile は0.01"ミリ"単位で指定
Rectangle は座標だからピクセル
この辺の問題じゃなくって?
103名無しさん@お腹いっぱい。:2000/12/24(日) 18:54
99>101 サンクス、gooで検索したけど合計1400頁、上下巻で1万円か…
鬱だ氏脳
「猫でも分かるプログラミング」でも復習してくるか…
VCのヘルプは英語だしさらに鬱だ…
104名無しさん@お腹いっぱい。:2000/12/25(月) 02:47
買う金無いなら図書館いけ>103
105101:2000/12/25(月) 09:52
プログラムをやりたいのならこのくらいの本を買わないとだめだ。
基本的なことをやるのなら上巻の最小の方だけやっても基本は理解できる。
別にメタファイル、スクロール等が必要ないのであれば読み飛ばしても問題ない。
もっとも構造体とポインタがわかってないとまずだめだが・・・
106名無しさん@お腹いっぱい。:2000/12/25(月) 15:49
ユーティリティソフトのような物を作って、Windowsに標準で付いているメモ帳のキーボード設定をカスタマイズしたいのですが、どんな方法がありますか?
メモ帳の.exeファイルには手を加えないで、他の.exeから設定する方法を考えています。
107名無しさん@お腹いっぱい。:2000/12/25(月) 16:25
>>106
SetWindowsHookExとか調べてみ。
108名無しさん@お腹いっぱい。:2000/12/25(月) 18:56
>>107
実際やってるやついるの?
109106:2000/12/25(月) 21:27
>107
ありがとうございます。
それを手がかりに調べます。
110ブービーさん:2000/12/25(月) 22:33
>>94
DOCINFO構造体でファイル名指定できたんだね。
逝ってきます。
111108:2000/12/26(火) 01:44
>>106
いや、だから俺が、そんなめんどうなことできるか?
って逝ってるんだが...

メモ帳似ソフトを自分で作ってしまったほうが
はやくない?
112107:2000/12/26(火) 02:08
>>111
それよりはキーバインドをカスタマイズ出来るエディタを使った方が
早い。実用的な意味が皆無なのは、言われなくとも当人が一番良く
分かっているだろうが、修行中のプログラマは、何も実用性のためだけに
プログラムを組む訳じゃないだろう。
自分のものさしだけで物事を考えるのは止せ。
113名無しさん@お腹いっぱい。:2000/12/29(金) 17:39
age
114デフォルトの名無しさん:2001/01/02(火) 02:07
>>86
OSどころかプログラムごとに値が違う物もありますぜ。
http://www.asia.microsoft.com/japan/support/kb/articles/J055/3/73.htm
さらに仕様と言い切るMSにびっくり。
115デフォルトの名無しさん:2001/01/02(火) 06:18
仕様というのならせめてその理由を説明してほしいよな・・・
116名無しさんi486:2001/01/02(火) 08:11
>>114
これは仕様だろ。なんで仕様なのかわからないのなら、それは
あなたが厨房。わからないのならわからないっていえば教えたる。

まあMSも、もうほんのちょっと賢くできたとは思うがな。
117デフォルトの名無しさん:2001/01/02(火) 08:56
>>116
是非教えてもらいたいです。
118116:2001/01/02(火) 09:33
GetVersion()のAPIの戻り値を間違って評価する、製品が山のように
存在するのよ。よくあるのがGetVersionのLOWORDをそのまま大小比較
してしまうもの。GetVersionはMinorVersionが上位にあるからそのまま
大小比較すると当然だめだよね。で、MSがとった方法が、Bugってる
製品の名前をレジストリに記録しておいて、その名前をもつプロセスからの
GetVersionコールに対しては嘘をつくようになっているわけだ。
だから、そのBugってる製品と同じ名前を使った場合はGetVersionの
戻り値は正しい値にならないわけ。Win2000なんかはもうちょっと頭よく
なっていて、ファイルのチェックサムも見て名前とチェックサムが
一致した場合のみ嘘の値を返すようになっている。わしならCallerの
アドレスもチェックするかなあ。
ただ、このOS側の対応に依存したまま何Versionにも渡って、ずーっと
間違いつづけている超有名アプリなどがあるのも事実。
そういう場合はチェックサムなどではじくことはできないからファイル名
のみではじいているだろう。
過去の遺産を無視して、かつBugってる製品も無視できれな、楽なんだろう
けど、OSっていうのはそういうわけにはいかないよね。加えて
これだけ使われてて、数千ものアプリがある場合にはOS側のBugすら
直せない場合がある。
Win2000なんかは、C DeclareされてるDefWindowProcでも動くように
なってるしねえ。こんなの間違う奴いるのかと思ったら、結構あるんだよね。
ちまたのアプリのプログラミングレベルは思ったより低いのよ。
119デフォルトの名無しさん:2001/01/02(火) 11:04
HTTPでファイルをダウンロードしたいんですが、WININET.DLLに
依存したくありません。で、どうするかですが、

- 自前でWinsockを操作する。できれば、やりたくない。
- どっかにフリーの素敵なHTTPライブラリがあったりする。

どなたか良いライブラリ知りませんか?
いっそ、IE 3.x以降必須にした方がいいのかなぁ…
120名無しさん@お腹いっぱい。:2001/01/03(水) 12:13
IE3が入っていない環境なんてありませんよね?
WININETに依存したくない理由ってそれなのか?
121名無しさん@お腹いっぱい。:2001/01/03(水) 12:19
素のWidows 95にはIE入ってないし。
122119:2001/01/03(水) 14:05
>>120,121
ズバリ、それが理由。
しかし今時IEなしの素のWindows 95を使っている人がどれだけいるやら。
いっそ、割り切ってしまいたいところではある。
123名無しさんTurbo:2001/01/03(水) 17:53
>>119
wgetを使いましょう。
Visual C++でそのままコンパイルして使えます。

http://www.gnu.org/gnulist/production/wget.html
124禁断の名無しさん:2001/01/03(水) 21:32
>>116
GetVersionの戻り値が変化する実行ファイルリストって
どうやって手に入るのかな?
125119:2001/01/04(木) 03:55
>>123
ありがとうございます〜。試してみますです。
126デフォルトの名無しさん:2001/01/05(金) 01:23
IMEが送ってくる文字列って
どうやって配列に格納したりするのですか?
127デフォルトの名無しさん:2001/01/05(金) 01:30
メセージでレシーブします。>126
128デフォルトの名無しさん:2001/01/05(金) 01:36
>127
レシーブというのはどうやるのですか?
129デフォルトの名無しさん:2001/01/05(金) 01:43
WM_IME_CHARというメッセージをハンドリングします。>128
130デフォルトの名無しさん:2001/01/05(金) 02:16
>129
つまりWM_IME_CHARメッセージのwParamは2バイト文字になってて、
それを文字の数だけ受け取るって事なんですか?
131デフォルトの名無しさん:2001/01/05(金) 02:23
たしかそうです。>130
あと、WM_IME_COMPOSITIONとかいうのも使った様な?
記憶があやふやですいません。
132デフォルトの名無しさん:2001/01/05(金) 02:30
>131
WM_IME_COMPOSITIONで検索してみたら説明してるページ見つける事ができました。
何回も答えてもらってほんとにありがとうございました。
133デフォルトの名無しさん:2001/01/05(金) 02:32
いえいえ。がんばってください。>132
134デフォルトの名無しさん:2001/01/05(金) 08:49
>133
そんなやりとり2チャンらしくない。却下。
135デフォルトの名無しさん:2001/01/17(水) 16:00
CreateThread()で作成したスレッドが終了したかどうかを確認する方法がわかりません。
教えていただけないでしょうか?
136奥さん、名無しです:2001/01/17(水) 16:20
>>135
WaitForSingleObject()
137。>:2001/01/17(水) 16:22
>>135
GetExitCodeThread
を調べてみて。
138135:2001/01/17(水) 17:08
>>136,>>137
作成・実行環境がWin2kなのでOpenThread()でTHREAD_QUERY_INFORMATIONを割り当ててから
GetExitCodeThread()とスレッド関数の戻値判定で望んでいた動作になりました。
ありがとうございました。
139。>:2001/01/17(水) 17:25
>>138
そもそも、Createした時に取得したハンドルはどうしたんでしょ?
140138:2001/01/17(水) 17:45
>>139
そもそもハンドルを保持してませんでした。
Win2kだとTHREAD_QUERY_INFORMATIONなりSYNCHRONIZEを与えないとだめらしいんで
OpenThread()を使って後付けで取得してやってますが…。

(というわけでWaitForSingleObject()でもできました。)

いまのところ1個しかスレッド使っていません(増やすかもしれない…)。
141。>:2001/01/17(水) 18:00
>>140
>そもそもハンドルを保持してませんでした。
それ、捨てちゃってるの?
保存しといて、CloseHandleしないと、リークになっちゃうよ。
142デフォルトの名無しさん:2001/01/17(水) 21:15
自作で簡単なプログラム作ってるんだけど、
タスクトレイに常駐した状態でマウスホイールの
メッセージって受け取れるでしょうか?

メッセージトレースしたんですが、
マウスホイールのメッセージって
タスクトレイには通知されてないように
見えるのですが......

ご存知の方いたら教えてください。

OS は Win2k / Win98 です。
143デフォルトの名無しさん:2001/01/17(水) 21:58
>>142
使ってるマウスのメーカーは?
ロジテックだとちょっと面倒。
144デフォルトの名無しさん:2001/01/17(水) 22:27
早速レス頂いて、ありがとうございます。

私が基本的なことわかってないみたいで、
恥ずかしいですが、メーカによって違うんですか
ホイールのメッセージって。

マウスはエレコムというメーカーのを使っています。
ドライバーで「Office97」という設定にしています。

自作のプログラムはちゃんとできたらフリーソフトに
したいと思ってるので、出来ればホイールマウスの
メーカごとの差異とかについても知りたいのですが、
よろしければそこら辺もご教授ください。
145デフォルトの名無しさん:2001/01/18(木) 01:18
>「Office97」

「Office97 互換モード」の間違いです。
146デフォルトの名無しさん:2001/01/19(金) 01:52
デスクトップアイコンの文字背景を透明化するにどうすればいいのでしょう?
対象はWin2kだけです。ウィンドウの透明化は簡単だったのですが…。
147デフォルトの名無しさん:2001/01/19(金) 16:54
LVM_SETBKCOLOR
148デフォルトの名無しさん:2001/01/19(金) 18:19
HWND h = FindWindowEx(NULL, NULL, "Progman", "Program Manager");
h = FindWindowEx(h, NULL, "SHELLDLL_DefView", NULL);
h = FindWindowEx(h, NULL, "SysListView32", NULL);
SendMessage(h, LVM_SETBKCOLOR, 0, -1);
149デフォルトの名無しさん:2001/01/19(金) 22:48
>>148
LVM_SETBKCOLORではなくLVM_SETTEXTBKCOLORだろ
150デフォルトの名無しさん:2001/01/19(金) 23:16
VBならモジュール1つのプロジェクトで

Const LVM_FIRST = &H1000
Const LVM_SETTEXTBKCOLOR = LVM_FIRST + 38

Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Any, ByVal bErase As Long) As Long
Public Declare Function UpdateWindow Lib "user32" (ByVal hwnd As Long) As Long

Sub Main()
Dim h As Long
h = FindWindowEx(0, 0, "Progman", vbNullString)
h = FindWindowEx(h, 0, "SHELLDLL_DefView", vbNullString)
h = FindWindowEx(h, 0, "SysListView32", vbNullString)
SendMessage h, LVM_SETTEXTBKCOLOR, 0, ByVal -1&
InvalidateRect h, ByVal 0&, -1
UpdateWindow h
End Sub

おれのおごりだ、取って置け>>146
151148:2001/01/19(金) 23:33
>>149
あーほんとだ。
#include <windows.h>
#include <commctrl.h>
int main(void)
{
 HWND h = FindWindowEx(NULL, NULL, "Progman", "Program Manager");
 h = FindWindowEx(h, NULL, "SHELLDLL_DefView", NULL);
 h = FindWindowEx(h, NULL, "SysListView32", NULL);
 SendMessage(h, LVM_SETTEXTBKCOLOR, 0, -1);
 InvalidateRgn(h, NULL, true);
 return 0;
}
152デフォルトの名無しさん:2001/01/20(土) 00:33
>>150
VBなのにここまでVBらしくないコードも珍しいな
153呼び出し規約について:2001/01/20(土) 00:40
質問です。
BorlandC/C++とWinAPIで書いてるのですが、関数の頭につける呼び出し規約"WINAPI"と"CALLBACK"はどのように使い分けたらいいのでしょうか?
また呼び出し規約はどういうときに付けてどういうときに付けなくてもいいんでしょう?
教えてください。

154デフォルトの名無しさん:2001/01/20(土) 00:59
WINDEF.H(119):#define WINAPI __stdcall
だ、__stdcallというのは、左から右にパラメータを積んで呼ばれた関数でスタックを戻すやつだ。ほとんどのAPIはこの呼び出し規約だ。
例外は可変長引数をとるwsprintfぐらいだ。__stdcallは可変長引数に対応できないからな。

DLLでエクスポートするならこれにしておいたほうが無難だ。
少なくともVBはこの呼び出し規約を前提にしている。

CALLBACKも実は__stdcall
WINDEF.H(118):#define CALLBACK __stdcall
だ。ただ意味合いは、APIからコールバックされる関数という意味で違うぞ。
155デフォルトの名無しさん:2001/01/20(土) 01:33
>145
間あいてごめん。えっと結局フックをかけることになると思うんだけど、
ロジテックとかのドライバは勝手にスクロールさせちゃうことがある。
Office互換なら問題なし。WH_MOUSEかWH_JOURNALRECORDに
フックをかけるんだけど、JOURNALRECORDの場合はWM_MOUSEWHEEL
のデルタ値が保存されないらしいのでほとんどの場合はWH_MOUSE
でやるしかない。
でもうちのロジテックはOffice互換にしてもwindows.hにある
0x020aじゃなくて0x7c02とかいう変なメッセージしかこない。
何でだ?
156デフォルトの名無しさん:2001/01/20(土) 01:44
VC++でSemaphoreオブジェクトを使いたいのですが、
使い方がわからなくて、
どこで宣言して、どこで実行するとよいのでしょうか?
(winmainで実行とか、それともプロシージャの中とか、、、)
あと、名前ありセマフォと名前なしセマフォの違いを教えてください。
157デフォルトの名無しさん:2001/01/20(土) 02:07
>156
作るのはプログラム始まってすぐ WM_CREATE
削除は WM_DESTROY
使うのは関数のなかとかでスレッド同期とりたいとき
名前なしはわからん。
とりあえず付けとけば。
158デフォルトの名無しさん:2001/01/20(土) 02:08
>>156
どこでもいいよ有るべきときに有るようになっていれば。

名前ありSemaphoreはプロセスをまたいで使えます。
名前なしの場合はSemaphoreオブジェクトを何らかの方法で
外部プロセスへ通知する方法を作らないとプロセス間で共有できません。
普通はプロセス間で使う場合は名前ありにするけどね。

ところで、本当にSemaphoreが必要なの?
MutexやCriticalSectionは考えなかった?Eventがぴったりという場面もある。
特にCriticalSectionは同一プロセス別スレッドで使用するなら一番速いんだけど。
159153:2001/01/20(土) 02:26
>154
レスどうも。
勉強になります。
ありがとうございました。
160デフォルトの名無しさん:2001/01/20(土) 02:37
KeyRemapのようなWindows全体に影響するキー入れ替えソフトを作りたいんだけど、どんな方法がある?
今のところシステムフックを使ってキー操作をフックするぐらいしか思いつかない。
161デフォルトの名無しさん:2001/01/20(土) 02:51
キーボードドライバを書く>160
162156:2001/01/20(土) 03:43
どうもありがとうございました>157,158

midioutのプログラムを作っていて、
本を買ったらライブラリがついてきて
どうもそれを使うとぶつかったりするのは解消できるようなので、
セマフォを使ってスレッドを必要分たてて出力に持っていければいいかと思いました。
Mutexは解らないのですが、
そのライブラリを使えばCriticalSectionはたぶん必要ないみたいです。

midioutで音が鳴るのですが、
場合により音が重なるときがあって、
セマフォをたてようとしていたのですが、
他の方法の方がよいのでしょうか???
163156:2001/01/20(土) 03:52
自己レスです。
ちょっと読んでいて文章がおかしいとおもったので(^^;

スレッドを8つ実行できるようにしたくて、
スレッドを必要分作って、
セフォマで制御してあげればよいのかと思いました。
もしかしたら、CriticalSectionの方がいいかも、、、。(^^;
164デフォルトの名無しさん:2001/01/20(土) 08:39
>>162
なんとなくevent向きだぞ。
165デフォルトの名無しさん:2001/01/21(日) 05:25
>>155
WM_MOUSEWHEELが来るのは、WinNT/2000系だけで、Win9X系ではホィールメッセージは
RegisterWindowMessageで取得するんでなかったかなぁ、たぶん。
166特命リサーチ200X:2001/01/21(日) 12:17
Win64 APIの件はどうなった
167デフォルトの名無しさん:2001/01/21(日) 15:38
>>155
ありがとうございます。
WH_MOUSE のグローバルフックでうまくいきました。

ロジテックのホイールマウスも手元にあるので
そちらでも実験してみます。
168デフォルトの名無しさん:2001/01/21(日) 17:21
画面のプロパティのデザインページで指定できる、
メニューを描画するフォント名を取得したいのですが、
どうすればいいのでしょう?
フォント名(MSゴシックとか)です。
出来れば、レジストリ直接参照は避けたいです。
169160:2001/01/22(月) 02:06
>161

レスありがとうございます。
キーボードドライバを自分で書いてみようと思います。
お薦めのツールや書籍があったら教えてください。
170turbo type D:2001/01/22(月) 12:05
171デフォルトの名無しさん:2001/01/22(月) 14:59
>>168
SystemParametersInfo
172146:2001/01/22(月) 17:19
146です。
147,148,149,150さんありがとうございました。

SendMessage(hwnd, LVM_SETTEXTCOLOR, 0, 0x000000);
で文字色を変えるのもできました。
173デフォルトの名無しさん:2001/01/22(月) 18:27
VBみたいに簡単に通常使うプリンタを設定できるAPIありませんか?
174デフォルトの名無しさん:2001/01/22(月) 20:12
// タスクボタンをフラット化
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | TCS_FLATBUTTONS);
// タスクボタンのフラット化をやめる
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~TCS_FLATBUTTONS);

こんな感じでタスクボタンのフラット化(表示がおかしくなるようですが…)
はできたのですが、スタートボタンのフラット化がうまくできません。
試しにスタートボタンのハンドルを使ってもSetWindowLong()ではだめでした。
対象・テスト環境はWin2k・開発はBCC5.5です。
175SAGE:2001/01/22(月) 21:16
>>174

俺はよくわからんのだが、とりあえずTClockのソースを見るよろし。
176デフォルトの名無しさん:2001/01/22(月) 21:30
スタートボタンはただのボタンだからタブコントロールのスタイルをセットしても意味はない。
177デフォルトの名無しさん:2001/01/23(火) 15:19
GetVersionEx()をWindows Meで使った場合、dwMajorVersionと
dwMinorVersionには何が入ってきますか?
(Meのマシンが無いので確認できないのです)
178SAGE:2001/01/23(火) 18:35
Major = 4, Minor = 90 なり。
179177:2001/01/24(水) 08:53
>178
ありがとう。助かりました。
180デフォルトの名無しさん:2001/01/25(木) 01:04
>>171
どうもです。無事にフォント名(&サイズも!)取得できました。
181デフォルトの名無しさん:2001/01/25(木) 02:37
kernel32.dll がエクスポートしている ***ConsoleAlias{A|W}
って、誰か使い方知らない?
182デフォルトの名無しさん:2001/01/28(日) 03:27
プログラム側から物理メモリを制限して、
その制限を越えたら、その分使われてない順に仮想メモリにスワップさせるAPIは無いでしょうか。
他で動いてるプログラムの為に物理メモリをあまり消費したくないんです。
自分でキャッシングを実装しても良いんですが、システム側に比べると圧倒的に遅い気がするので。実装も大変そうだし。
183デフォルトの名無しさん:2001/01/28(日) 03:34
メモリマップドファイルは? 遅いから駄目?
184デフォルトの名無しさん:2001/01/28(日) 03:49
>>183
メモリマップも試しましたが、結局物理メモリにコピーされる様なので、
巨大ファイルを扱うと物理メモリを食いつぶしてスワップしまくってしまいました。
185デフォルトの名無しさん:2001/01/28(日) 03:53
Windows2000のディスクの制限をかけるクオータ機能の様な物が、メモリにもあれば良いと思うんですが。
Windows9x/NT4/2000その他UNIX系-OSなどで動作させたいので、
やっぱり自分で作るしかないですかね。
186171:2001/01/28(日) 18:07
>>182
SetProcessWorkingSetSize
187デフォルトの名無しさん:2001/01/30(火) 00:56
プロパティシートで右上にある'?'ボタンを消したいんですが、
どーやってやったらいいのでしょうか?

お願いします。
188SAGE:2001/01/30(火) 13:36
こんなCALLBACKで。>>187

struct DLGTEMPLATEEX
{
  WORD dlgVer;
  WORD signature;
  DWORD helpID;
  DWORD exStyle;
  DWORD style;
  WORD cDlgItems;
  short x;
  short y;
  short cx;
  short cy;
};

int CALLBACK PropSheetProc( HWND wnd, UINT msg, LPARAM lp )
{
  if( msg == PSCB_PRECREATE )
  {
    DWORD* pst = ( 0xffff==((DLGTEMPLATEEX*)lp)->signature ) ?
      &(((DLGTEMPLATEEX*)lp)->style) : &(((DLGTEMPLATE*)lp)->style);

    (*pst) &= ~DS_CONTEXTHELP;
}
}
189デフォルトの名無しさん:2001/01/30(火) 23:07
>>188
ありがとうございます。
しかし、良く分かりませんでした(汗)

このコールバックはどこで指定するものなのでしょうか?
普通のプロパティシートのコールバックではないですよね。
190SAGE:2001/01/31(水) 00:29
いや普通のプロパティシートのコールバック。
PropertySheet() API に渡す PROPSHEETHEADER 構造体の中の
  PFNPROPSHEETCALLBACK pfnCallback;
ね。
191suzume:2001/01/31(水) 18:53
レジストリの保存と復元について質問したいんですけど。
RegSaveKeyでたとえば、 HKLM\software などをファイルに保存して、
HKLM\software をRegEditとかで全部消して、
RegReplaceKey で復元しようと思っているのですが復元してくれません。
戻り値は、問題なくERROR_SUCCESSが帰ってきています。
どこかのサイトで、保存するファイルは拡張子なしにしなければ行けないとか書いてあったけどいみなししでした。
Microsoftに書いてあるとおりにやってんだけど・・・・
ご存知の方いないでしょうか?
192デフォルトの名無しさん:2001/01/31(水) 19:05
>>191
人のPCのレジストリを
ゴリゴリ書き換えるプログラムは嫌いだわ。
レジストリ使うのやめなさい。
193ボログラマー:2001/01/31(水) 22:12
>>191
ShellExecute()で"explore"かなんかで実行とかじゃダメ?
やった事無いから動くか知らんけど。
194デフォルトの名無しさん:2001/01/31(水) 23:06
>>190
できました。
ありがとうございます
195suzume:2001/02/01(木) 20:56
>>192
レジストリ壊す人もいるし...
そういうものが必要なときがあるんですよ〜

196168:2001/02/02(金) 20:34
画面のプロパティのデザインページで指定できる、
メニューを描画するフォント名を教えてもらった者です。

このフォントの色は取得できないようです。
APIヘルプと睨めっこしたのですが、出てきませんでした。
メニューのフォント色は、どうやって取得出来るのでしょうか?
197>196:2001/02/02(金) 21:18
見当違いだったらごめんね

::GetSysColor(COLOR_MENUTEXT);

じゃなくて?
198デフォルトの名無しさん:2001/02/02(金) 22:00
>>197
ギャ--!忘れてた。
無事取得できました。
どもありがとうございました。
199デフォルトの名無しさん:2001/02/02(金) 23:56
質問です。
WinMainのhInstanceを後から得る関数って有りますか?
200名無しさんi486:2001/02/03(土) 01:13
>>199
GetWindowLongとかWM_CREATEの時のやつとか。
201名無しさん@お腹いっぱい。:2001/02/03(土) 01:14
>199
ウインドウハンドルがわかってるなら(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE)
ほかにはWinMainでグローバル変数に収納して使うとか。
202名無しさん@お腹いっぱい。:2001/02/03(土) 01:24
ウィンドウハンドルまたはインスタンスハンドルからアプリケーションを識別したいのですが、どんな方法がありますか?
GetClassName()でクラス名を使う方法は思いついたのですが、ほかに有効な方法があったら教えてください。
203199:2001/02/03(土) 01:31
ただのmain関数じゃhInstance取れないので、あとから取得する方法は無いかと…。
WinMainじゃなくただのmainの場合はどうやってウインドウ作るんでしょうか?
204デフォルトの名無しさん:2001/02/03(土) 01:39
GetModuleHandle(NULL);
205デフォルトの名無しさん:2001/02/03(土) 01:45
>204
おおぉぉ!
ありがとうございます。みごと解決しました。
206デフォルトの名無しさん:2001/02/03(土) 21:01
遅レスですが
>186
そのAPIは却下です。NT/200でしか使えない様ですので。腐ってますね。
結局自分で作りました。
207名無しさん@お腹いっぱい。:2001/02/04(日) 12:06
子ウィンドウで作ったプッシュボタンやリストボックスのフォントを変更したいのですが、どうしたらいいのですか?
208デフォルトの名無しさん:2001/02/04(日) 17:02
SendMessage(hwndChild, WM_SETFONT以下略。
209207:2001/02/05(月) 00:07
>208
ありがとうございます。
210デフォルトの名無しさん:2001/02/06(火) 19:31
ListView コントロールでアイテムテキストのサイズを得る方法はないでしょうか?

 アイテムテキストを取得したいのですが、LVM_GETITEMTEXTメッセージのインタフェースが
バッファとバッファのサイズを渡して、そのサイズ内でバッファにアイテムテキストを返すとなっています。でもサイズを取得する方法が無いようなので、どれだけの大きさのバッファを渡していいのかわかりません。
 MFCのCString CListCtrl::GetItemText(int nItem, int nSubItem) constのソースを見ると、
・あらかじめ割り当てて、それでアイテムテキストの取得を試みる。
・足らないようならバッファの大きさを倍にして、取得を試みる。

となっているのですが、もうちょっとスマートな方法が無いものでしょうか?
211デフォルトの名無しさん:2001/02/06(火) 23:01
WTLのCListViewCtrlT::GetItemTextも同じなので
この方法がMSの公式見解かもね。

WM_GETTEXT/WM_GETTEXTLENGTH見たいにアイテムのテキストは長さが取れないのね
こりゃインタフェースの欠陥だな >>MS
212名無しさん@お腹いっぱい。:2001/02/08(木) 12:36
厨房な質問です。
「ファイルを開くアプリケーションの選択」ダイアログボックスを
出すにはどうしたらよいですか?
213212:2001/02/08(木) 12:38
しまった。
sageてしまった。
>>212
MFC使うなら
CFileDialog使う。
CFileDialog dlgFile(FALSE "csv", szFile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "csvファイル (*.csv)|*.csv|All Files (*.*)|*.*||", this);
dlgFile.DoModal();
215デフォルトの名無しさん:2001/02/08(木) 19:00
質問:
メニューの文字の横にアイコンを置くのはどうやればいいのでしょう?
(例:エクスプローラーの「ファイル」→「新規作成」)
AppendMenu関数では、文字かBitmapかどちらか一つを選べるようですが、
文字の横にBitmapを置くっていうのは、この関数ではできないようです。
216デフォルトの名無しさん:2001/02/08(木) 22:01
>212
APIならGetOpenFileName()
引数の構造体のメンバが20個ぐらいあるので面倒だけどな。

217名無しさんi486:2001/02/09(金) 00:42
>>215
オーナードローで自分で描く。
MFCなら、codeguruやcodeprojectにクラスがあるよ。
218212:2001/02/09(金) 12:46
>>216
どうもです。
219212:2001/02/09(金) 12:53
あれでもこれって単なる「開く」ダイアログじゃありませんか?
220デフォルトの名無しさん:2001/02/09(金) 19:17
>>219
たぶん >>216 は、ただのバカだ。おつかれ。
正解はこちら。
http://www.microsoft.com/JAPAN/support/kb/articles/J042/7/12.htm
221212:2001/02/09(金) 20:26
さっすが220さん!
222名無しAMD:2001/02/11(日) 11:43
どうしても作りたいプログラムがあるので、質問させていただきます。
実は、インターネットエクスプローラの 「ホーム」URLを書き換える
プログラムが作りたいんです。
知ってる人、どうかよろしくお願いします。
223デフォルトの名無しさん:2001/02/11(日) 12:19
>>222
レジストリキーをチェックしてね♥
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
Start Page
224名無しAMD:2001/02/11(日) 12:28
>>223
あー、早いレス。それに、貴重な情報。
ありがとうございます〜 (≧▽≦)ノ
早速今夜試してみます〜。
225デフォルトの名無しさん:2001/02/13(火) 08:24
>>224
スタートページ変えられるのスゲェ迷惑なんすけど。
226デフォルトのななしさん:2001/02/13(火) 10:24
C++,Cで、winsock以外で、ソケット通信するためのAPIって無いの?
あ、環境はwindows9x or windowsNT系ね。
windows2000に特化してたりするのはパス。
227デフォルトの名無しさん:2001/02/13(火) 10:27
>>226
サードパーティのソケットライブラリを使う。
#有るのか知らん。FTPとかで出してないか?
228デフォルトの名無しさん:2001/02/13(火) 11:38
縦書き用ExtTextOutってない?
229デフォルトの名無しさん:2001/02/13(火) 11:45
>>226
Windows3.1の頃は色々あったけどねぇ。
ま、それでも窓口はWINSOCKだったけど。
230でふぉると名無しサン:2001/02/13(火) 13:29
うーん、winsock同等の物を自作してみたいのですが、
何か参考になるソースないでしょうか?
231ネタ:2001/02/13(火) 13:36
>>227 SetWorldTransform
232デフォルトの名無しさん:2001/02/13(火) 23:37
ビットマップファイル(色数問わず)をRGB形式(詰めて)に簡単に展開する方法はないですね?
233デフォルトの名無しさん:2001/02/13(火) 23:40
234デフォルトの名無しさん:2001/02/14(水) 07:18
Bitmapファイル自体がすでにRGB形式でわ?
256色の場合はインデックスだけど、パレットはRGB形式だし。
そうゆう意味じゃなくて?
235デフォルトの名無しさん:2001/02/14(水) 07:25
>>232
LoadImageでDIB形式で読み込んだものを
GetDIBits でピクセルを読み込む。
ただしLoadImageはNTでは動かない。
スージープラグインを使うのもいいかも。
236232:2001/02/14(水) 07:57
>234
パレットを持ってる奴を24bitカラーに直して読み込みたいです。
>235
LoadImageの存在をはじめて知ったのであとで調べてみます。
GetDIBitsって、LONG境界で置かれているものを、詰めて置いてくれるんでしょうか?

>>236
>パレットを持ってる奴を24bitカラーに直して読み込みたいです。
1byteずつデータ読んでいってそれに対応するパレット、(RGBQUADからね)
で、出来上がりね。
BITMAPINFOHEADER、BITMAPINFO あたりはすでに読んでるよね。

238236:2001/02/14(水) 23:20
>237
圧縮されている奴とか自力で解答するってことで?
それって結構手間では…
どちらにしろ一発では無理ということですか…
239デフォルトの名無しさん:2001/02/14(水) 23:46
>>238
つまり、どんな形式のBitmapでもカンタンに読込みできる
ライブラリを探しているわけね?自作したいんじゃなくて。
最初からそう言ってよ。
240238:2001/02/15(木) 00:56
>239
出来れば自作したいんですが…
画像ファイルをメモリに展開する場合、大抵の人はライブラリ使ってるんですかね?
241デフォルトの名無しさん:2001/02/15(木) 02:59
>>232,236,238,240
BMP/JPEG/GIFならOleLoadPicture()が楽
使い方はGoogleにでも聞いてくれ
242デフォルトの名無しさん:2001/02/15(木) 07:52
>>240
手間かけたくないみたいなこと238で言ってるのに、
でも自作したいって... 自己矛盾してないか?
243240:2001/02/15(木) 07:53
>241
JPEGやGIFまでロードで出来るなんて便利な関数ですね。
さっそく調べてみます!
244240:2001/02/15(木) 07:53
感謝!
245デフォルトの名無しさん:2001/02/15(木) 08:29
簡単なら自作したいってだけか…。
246デフォルトの名無しさん:2001/02/15(木) 09:52
GIFのローダーは、比較的易しいけど、
特許の問題があるからねぇ・・・
247デフォルトの名無しさん:2001/02/15(木) 16:12
関係ないけど、いつから
BITMAPINFOHEADER の biCompression に、
BI_JPEG とか BI_PNG とか付いたんだ?

鬱だ・・・
248デフォルトの名無しさん:2001/02/15(木) 17:04
.exeファイルがコンソールアプリなのかそうでないかを判別する
方法ってあります?PEヘッダーじゃダメそうだし、GetSTDHandleを
インポートしているかどうかでもダメだし。
249デフォルトの名無しさん:2001/02/15(木) 17:06
>>274
JpegとかPNGのBMPもあるってこと?
250デフォルトの名無しさん:2001/02/16(金) 01:38
>>248
SHGetFileInfoでどうだろう
251248:2001/02/16(金) 02:19
>>250
 うまくいきました。ありがとう。
まさかAPI一発とは思ってもみませんでした。

252デフォルトの名無しさん:2001/02/16(金) 13:55
SHGetFileInfoが出たところで便乗質問です。

SHGetFileInfoでExplorerに表示されるICONのファイル名を取得したいのですが
うまくいきません。

int main(int argc, char* argv[])
{
  SHFILEINFO sfi;

  ::CoInitialize(NULL);

  if(0 == ::SHGetFileInfo("C:\\hogehoge.txt", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_ICONLOCATION))
    return -1;
  printf("Icon location file = %s\n", sfi.szDisplayName);
  return 0;
}

SHGFI_TYPENAMEを指定するとsfi.szTypeNameファイルタイプ名が入るのは確認できたのですが、SHGFI_ICONLOCATIONを指定してもsfi.szDisplayNameにアイコンファイル名が入ってくれません。(sfi.szDisplayName[0]='\0'で終わりになっている...)

やっぱりレジストリから判断するしかないかな?

検索しまくりましたが、うまくいく事例なし。
ただ同じようにうまく行かなくて悩んでいる人は見つけましたが。
http://www.kab-studio.com/Programing/KabuU/200011b.html
253デフォルトの名無しさん:2001/02/16(金) 19:13
関係ないが>>252のリンク先
IntelコンパイラというのはVC++のコンパイラになるのだが
BCCをVC++に組み込むのはやはりないのか。
254デフォルトの名無しさん:2001/02/16(金) 19:28
アピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアヒアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピv゚アピアピアピ
255デフォルトの名無しさん:2001/02/18(日) 13:11
ForegroundWindowの属するプロセスIDかハンドルを取得するAPIってないですか?
もしくはWindowハンドルからプロセスIDかハンドルを取得するAPI。
256デフォルトの名無しさん:2001/02/18(日) 13:21
GetWindowThreadProcessId
257デフォルトの名無しさん:2001/02/18(日) 13:26
>>256
モロに2番目のヤツですね。ありがとうございました。
258デフォルトの名無しさん:2001/02/18(日) 15:10
>>235
それは日本語SDKヘルプが間違ってる(あるいは更新されていない)。
NT4以降ならLR_LOADFROMFILEも使えるよ。
259デフォルトの名無しさん:2001/02/18(日) 23:42
MAPIプログラミングについて、何かいい本とかサイトって
ありませんか? 日本語のサイトがいいんですが・・・
探しても見つからないんで、書き込みに来ました。

入力した文字列とアドレス帳に登録されているアドレスデ
ータを比較して、その情報を取得したいんです。
ちなみに、開発はVC++でやってます。
260デフォルトの名無しさん:2001/02/19(月) 11:44
VC++で
COMポートを使ってパソコンから
相手の機器へデータ(整数値)を転送するには、
以下のコードでいいでしょうか?
(常に4バイト送ってくれるか心配なんだけど…。
改良点があれば教えて下さい。)

// 送り先のクリエート
handle = CreateFile("COM1", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(handle == INVALID_HANDLE_VALUE){
// クリエート時エラー
}

// 初期設定の取得
GetCommState(handle, &lpdcb);

// 必要に応じてここでlpdcb構造体のメンバを変更


// COMポートの設定をセット
SetCommState(handle, &lpdcb);

// 送り先へデータの送信
bRetW = WriteFile(handle, &iData, sizeof(iData), &dwNumber, NULL);
if(bRetW == 0){
// データ送信時エラー
}

// ハンドルのクローズ
bRetC = CloseHandle(handle);
if(bRetC == 0){
// ハンドルクローズ時エラー
}
261デフォルトの名無しさん:2001/02/19(月) 15:39
>>260
SetCommStateのDCBで信号周りの設定がかなり重要なんだけどな。
まぁ、信号のハンドシェークは通信相手によるからね。

書き込む前にGetCommModemStatus等で
DSRぐらいは見といたほうが良いと思う。
262デフォルトの名無しさん:2001/02/20(火) 00:53
キャプチャーカードから画像をリアルタイムで取り込んでテクスチャとして使いたんですが、
DirectX知らないんで、Win APIでそんなの有りますか?
263:2001/02/20(火) 02:36
>>260
>>261
付け足すなら、
SetupComm() SetCommTimeouts() PurgeComm()
あたりもやっといたほーがええんとちゃう?
264260:2001/02/20(火) 16:03
>>261
>>263
情報ありがとうございます。
でもう一つ質問なんですが、
260でやっている事を
Timerを使ってある時間おきに
何回もやりたいのですが、
WriteFile処理が終わらないうちに
次のWriteFileをしようとすると
エラーになってしまいます。
2回目のWriteFileは、1回目のWriteFile
が終わってからやるしか方法が無いのでしょうか?
(SetTimerの方で1回目のWriteFile処理が終わるより
長い時間を設定するしかないのでしょうか?)
教えて下さい。
265デフォルトの名無しさん:2001/02/20(火) 17:00
>>264
CriticalSectionとかどうよ?
266260:2001/02/20(火) 17:33
>>265
MSDNライブラリで見たけど
良く分かりません。
教えて下さい。
初心者なので簡単に、
よろしくお願いします。
267デフォルトの名無しさん:2001/02/20(火) 20:11
というか、WriteFile終わってからじゃなきゃ次のWriteFileは
いかんだろう。いったい何をしたいの?>264
送信につかまりたくないなら、送信スレッドおこすか、
オーバーラップドI/O または I/O完了ルーチンを使用するのだがな。
268デフォルトの名無しさん:2001/02/21(水) 07:52
タスクバーの[自動的に隠す(U)]を有効にしている状態で隠れているタスクバー
を表示させたいのですがうまくいきません。
ShowWindow(FindWindow("Shell_TrayWnd", NULL), SW_SHOW);
だけではだめなのでしょうか?
Win2kでやってます。
269デフォルトの名無しさん:2001/02/21(水) 21:14
>>268
WM_ACTIVATE WA_ACTIVEを送れば表示されるはず。
270268:2001/02/21(水) 22:10
>>269
SendMessage(FindWindow("Shell_TrayWnd", NULL),WM_ACTIVATE,WA_ACTIVE,0);
で表示できました。ありがとうございました。
271デフォルトの名無しさん:2001/02/26(月) 00:08
AVIファイルについて質問です。
AVIStreamReadで取ったデータを再生するにはどうすれば良いのでしょうか。
272デフォルトの名無しさん:2001/02/27(火) 19:22
API関数を使ってRS232Cをコントロールしたいのですが
詳細がわかりません。

hCom = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
WriteFile( hCom, "test", 5, &dwBytesWritten, NULL );

これでcom1からデータを送信できないんでしょうか。
また受信も同様の方法でよろしいのでしょうか?
273デフォルトの名無しさん:2001/02/27(火) 20:14
>>272

素直にcomm.drv 使うのが吉と思われ
274シリアルさん:2001/02/27(火) 21:46
>>272
そんなのでやってる。OCXのコントロールは半日使うと
フリーズするやつがあってダメだった。
275デフォルトの名無しさん:2001/02/27(火) 23:58
■プロパティシートで質問

ラジオボタンが選択されたら
case WM_COMMAND:
switch (LOWORD(wp)) {
case IDC_RADIO1:
case IDC_RADIO2:
PropSheet_Changed(GetParent(hDlgWnd), hDlgWnd)
break;
}
って感じでAPI呼んで「更新」ボタンが黒くなるように
したいんだけど、画面が表示された瞬間とかにも拾っちゃって
困るんすけど、なんかスマートな解決方法ってありますかいのう?
276デフォルトの名無しさん:2001/02/28(水) 00:36
えっと、今こんな風にボタンコントロールを作成しているのですが

#define MY_BUTTON 40100

CreateWindowEx(0, "BUTTON", "押してね",
        WS_CHILD, 0,0, 10,10, hWnd,
        (HMENU)MY_BUTTON,
        hInst, NULL);

このMY_BUTTONの値って適当で良いのでしょうか?今はうまくいって
るのですが、後々メーッセージ判定の時、衝突しそうで怖いです
277>272:2001/02/28(水) 00:47
シリアルポートの制御は、物理的な結線とか意識しないといけないから、
ソケットみたいな抽象化したものと考え方変えないと、うまくいかんと思うんだけどねぇ。
多少その辺勉強してから、プログラム組んだ方が良いと思うよ。
CreateFileしただけじゃ、いくらなんでも、やること足らないと思うからね。
278デフォルトの名無しさん:2001/02/28(水) 00:51
RegisterWindowMessage("もげもげぷー")
で、ユニークなのをゲットするってのは駄目?
279デフォルトの名無しさん:2001/02/28(水) 01:06
>276
適当ってどういうこと?
とりあえずメニューとかと被らなければ適当なIDを割りふっていいじゃない?
280>272:2001/02/28(水) 01:07
たぶん

CreateFile(
"\\.\COM1"・・・

でいいんでは?
281>276:2001/02/28(水) 01:21
MY_BUTTONってリソースの名前でしょ。
それってリソースエディタ使ってれば重複しないようになるよ。
自分で付けたければ、resource.hの中身書き換えればいい。
282276:2001/02/28(水) 01:38
みなさんレスありがとうございます
>>278
こんなのがあるとは!詳しく読んできます。これ使えば安心できそうです。
>>279
そうなんですけどね・・・なんかいやで。一応0x8000以下は避けてたのですが。
>>281
どうもリソースエディタ書き換えると挙動がおかしくなってしまいまして・・・。
また整形の仕方もよく分からず避けてしまってました。力不足、精進します。
283278:2001/02/28(水) 08:10
あ、ごめん。全然ちがうこといってるわ。
設計時に決定しておくリソースIDのことね。そんなのは、自分で管理しろってことで。

RegisterWindowMessage("ъ( ゚ー^) マターリ!")は、
独自のWindowsメッセージ送るときに重複しないように(WM_USER + 100とかでなく)するやつだった。
284276:2001/03/01(木) 00:09
>>283
あ、ヤパーリ
ヘルプみててなんか違うかな、と・・・・問題無いです
285275:2001/03/02(金) 01:47
>>275
どなたか知りませんかのう...。
286デフォルトの名無しさん:2001/03/04(日) 21:33
フルパスから特定の.exeや.dllが使用中かどうかは、どうやって調べるのですか?
287いつでもどこでも名無しさん:2001/03/04(日) 22:54
書き込み属性でオープンしてみるとか。

いっそ削除してみるというのはどうだ?削除できなかったら使用中
288デフォルトの名無しさん:2001/03/05(月) 02:18
>>286
GetModuleHandleではだめなんけ?

289276:2001/03/05(月) 08:26
>>275 >>285
今ちょっと試せない上にヘルプなくて、スペルとか違ってるかもしれないんだけど
case WM_COMMAND:
 switch (LOWORD(wp)) {
  case IDC_RADIO1:
  case IDC_RADIO2:
   if( HIWORD(wp) == BN_CLICKED ){
    PropSheet_Changed(GetParent(hDlgWnd), hDlgWnd);
   }
  break;
 }
でどう?
290デフォルトの名無しさん:2001/03/05(月) 08:27
しまったクッキー消し忘れ、説得力ねぇ
いや今見たら自分が邪魔しちゃってたみたいだったからさ
291デフォルトの名無しさん:2001/03/05(月) 10:19
ウインドウの右上の×を押してもすぐに終了させずに、
データをSaveするかどうかのダイアログを出すようにし、
キャンセルを押すとスレッドを終了しないようにしたいのですが、
ウインドウが閉じてしまいます。
WM_DESTROYになにか細工をほどこせばよろしいのでしょうか?
292MUTT-RAY:2001/03/05(月) 10:28
>>291
WM_SYSCOMMANDでSC_CLOSEが来た時に処理する…
だったかな?ここ1年Windowsで開発してないから
忘れた。
293デフォルトの名無しさん:2001/03/05(月) 11:59
>>291
WM_CLOSEハンドラで
.OK: return 0
.CANCEL: DestroyWindow(hwnd)→return 0
でいーんじゃないの
294291:2001/03/05(月) 21:50
ありがとうございます。うまくいきました。
WM_CLOSEハンドラでDestroyWindow(hWnd)を呼ぶか呼ばないか
だけでよかったんですね。
295286:2001/03/06(火) 00:48
>>288


>>GetModuleHandleではだめなんけ?

試してみたのですが、ダメでした。
この関数はプロセスが同じじゃないと使えないようです。
296288:2001/03/06(火) 02:19
>295
ごめん、じゃわからないや。
297デフォルトの名無しさん:2001/03/06(火) 11:08
Windows2KではNICの無効化/有効化を出来るのですが、
これを自前で行うAPIを知っている人いますか?
298デフォルトの名無しさん:2001/03/06(火) 13:59
ドロップダウンするツールバーボタンで、
▼がボタンと一体化してるもの(Explorerの「表示」など)は
どのようにすれば使えますか?
299デフォルトの名無しさん:2001/03/06(火) 14:22
>>295

PSAPIもしくは、ToolHelp系のAPIを使え。
300デフォルトの名無しさん:2001/03/06(火) 22:10
>>299
一瞬、ToHeartと読み違えたよ・・・。

逝って良し!>オレ
301295:2001/03/06(火) 22:32
>299
どうもありがとうございます。
解決しそうです。
302デフォルトの名無しさん:2001/03/10(土) 16:17
Dll内のダイアログテンプレートを使うにはどうすればいいんでしょうか?
LoadLibrary()→FindResource()→LoadResource()→LockResource()
とまではわかってるのですが、どうやってDialogBox()を呼べばいいのですか。


303SAGE:2001/03/10(土) 18:39
>>302
LoadLibrary で返ってきた HINSTANCE を使って
DialogBox() 呼べばいいんじゃない?

# 試してないから自信ないけどネ。
304デフォルトの名無しさん:2001/03/10(土) 18:49
アプリケーションの設定を保存したいのですが、
以下の条件を満たすやり方があったら教えてください。
・再インストール時の再設定が容易(レジストリは×)。
・複数のユーザーで設定を分ける(アプリケーション直下のINIファイルは×)。
・シングルユーザーOSであるWin95(98も?)でも動作するようにする。
305デフォルトの名無しさん:2001/03/10(土) 19:29
>>302
DialogBoxIndirect() 使うナリよ〜

HRSRC hrsrcDlg=FindResource( hinst, lpszName, RT_DIALOG );
HGLOBAL hglbDlg=LoadResource( hinst, hrsrcDlg );
DialogBoxIndirect( hinst, (LPDLGTEMPLATE)LockResource(hglbDlg), hwndOwner, lpfnDlg );

これで動くハズナリ〜
306わはははは:2001/03/10(土) 19:52
>>304
~/.appconfig
とか。
307デフォルトの名無しさん:2001/03/10(土) 19:58
>>306
ъ( ゚ー^) イイネ
308302:2001/03/10(土) 21:08
>303,305
ありがとうございます
どちらの方法でも動きました。

309デフォルトの名無しさん:2001/03/13(火) 00:23
ウィンドウで、y座標の正の方向を上にしたいんです。SetMapMode()でMM_ANISOTROPIC
を指定し、SetWindowExtEx()を使え、との事ですが、この関数の引数nXExtentとnYExtent
は「ウィンドウの範囲を論理単位で指定しろ」と記述してありますが意味がよく分かりません。
良かったら教えてください。言語は⊂です。
310デフォルトの名無しさん:2001/03/13(火) 18:35
あげておこう
311デフォルトの名無しさん:2001/03/15(木) 06:52
>> 309
Y軸の論理範囲を負数で与えてみたら?

確かそうすりゃ論理座標が反転したよーな気がする。適当だけど。
312デフォルトの名無しさん:2001/03/15(木) 08:05
ウィンドウのシステムメニュー(タイトルバーを右クリック、または
タイトルバーのアイコンを左クリックででるメニュー)を
ウィンドウの他の場所でも利用可能にしたいのですがどうすればよいのでしょう?
GetSytemMenuとTrackPopupMenuで表示そのものはできるのですが
これだけですとウィンドウの状態を反映してくれません。
(標準状態なのに「元のサイズに戻す」が選べてしまう、
 最大化の状態で最大化が選べてしまうなど‥)
どのような操作が足りないのでしょうか?
313デフォルトの名無しさん:2001/03/15(木) 11:49
>>304
>・複数のユーザーで設定を分ける(アプリケーション直下のINIファイルは×)。
>・シングルユーザーOSであるWin95(98も?)でも動作するようにする。
レジストリが嫌ならログインユーザー毎にiniファイルを切り替えれば
いいと思うけど、セクションで分けても構わんけど。
314デフォルトの名無しさん:2001/03/15(木) 11:52
iniの書き込みは、WinAPIでやるとNT系の場合、レジストリに書き込まれるので要注意。
だったはず。
Win2000でもそうだっけ?
315デフォルトの名無しさん:2001/03/15(木) 16:12
>>313
iniのある場所がすべてのログインユーザから見えるとは限らないとか
書き込めるとは限らないという問題がある。HKEY_CURRENT_USERなら
確実。
>>314
 レジストリにリダイレクトするよう特別に指定したものでない限りそんな
ことはない。
316313:2001/03/15(木) 16:34
>>315
>iniのある場所がすべてのログインユーザから見えるとは限らないとか
というか、そもそも、利用するユーザーの読み書き可能なディレクトリにしか
作れんし、アプリケーションインストール時にでもきちんとアクセス権を
設定するなりしてやりゃいいだけでしょう。
そもそも、アプリケーションディレクトリ内に作ったファイルが読む
アクセス権を持ってないユーザーがそのアプリケーションを利用出来るのだろうか?
実行権だけを設定することは可能だが・・・

>HKEY_CURRENT_USERなら 確実。
前提にレジストリを使わずにと言ってるとこにレジストリ勧めてどうする?
317315:2001/03/15(木) 16:57
>>316
>利用するユーザーの読み書き可能なディレクトリにしか作れんし、
Win2kだと確実にそれが保証されるディレクトリはプロファイルディレクト
リの下にしかない。ということは他ユーザからは使えないから何も考え
ずにアプリケーションディレクトリの下に作成してユーザ別にインストー
ルしてください、でも問題ないと思う。

>アプリケーションインストール時にでもきちんとアクセス権を
>設定するなりしてやりゃいいだけでしょう。
アクセス権まで設定してやらないと正常に動かせないなら事実上インス
トーラが必要で「再設定が面倒でない」という条件を満たしているか疑問。
そこまでするならレジストリのほうが簡単だと思う。
318313:2001/03/15(木) 18:05
>>317
>アクセス権まで設定してやらないと正常に動かせないなら事実上インス
>トーラが必要で「再設定が面倒でない」という条件を満たしているか疑問。
インストーラを用意するんで何の問題もないと思うんだが。
つーか、再設定を面倒なく行いたい言う話してるんだから、
インストーラぐらい作れよ。
そもそも、再設定と言う作業を簡便に行いたいって話だろ?
開発の作業で面倒なことをしたくないと言う話なのかい?

まぁ、アプリケーションの最初の起動時にiniファイルのあるディレクトリの
アクセス権を変えるんでもいいんじゃない?
もちろんadmin権限の奴でログインしてさ。
319あ、ついでに:2001/03/15(木) 21:19
NTのアクセス権って、上のフォルダの権利を継承するって
ことになってるはず(MLでそう言ってる)んだけど、
実際にクライアントからフォルダを作成すると、
上のフォルダに複雑な権限を設定すると、
設定とは無関係にオーナーだけ
読み書き可能になってしまう。
単純に設定すればOKみたいだけど、
これ、バグなんですか?
320315:2001/03/15(木) 21:20
俺は>>304じゃないから>>304が何を意図してたのかは分からんが
インストーラ用意するならなんでレジストリが×なのか謎。
個人的にはやたらにディレクトリやファイルの権限をいじるのはセキュ
リティ上の問題を起こしそうで嫌。
321あ、ついでに:2001/03/15(木) 21:24
320>>
ええっと、「答案用紙」というフォルダーを
教師三人だけ読み書き可能、他は書き込みオンリー
でディレクトリも見えないなんてサイトがあるんですけど、
いつのまにかアクセス権がぐちゃぐちゃ。
プロパティを表示させると「特殊なアクセス権(RWX)」と
出てきます。
322313:2001/03/16(金) 00:02
>>320
お前さぁ、もう一度304から読み直してから書き込めよ。
323313:2001/03/16(金) 00:25
>>320
付け加えるとだな、レジストリを勧めるのなら、
複数ユーザー毎の設定情報を簡便に別の環境に
復元する方法を提示するのが筋ってもんだぞ。

>>320
何故アクセス権に拘泥するのか理解できないんだが。
なんか、その辺の設定がうまく出来なくって嵌ってる最中なのか?
セキュリティの問題は、利用方法、環境を含めて考えるべき問題で、
ファイルのアクセス権単独でどうこう言える問題じゃないぞ。
324デフォルトの名無しさん:2001/03/16(金) 09:47
>>321
>いつのまにかアクセス権がぐちゃぐちゃ。
>プロパティを表示させると「特殊なアクセス権(RWX)」と
恐らく教師ユーザーのアクセス権だと思うんだけど、
これのどこがぐちゃぐちゃなの?
325名無しさん:2001/03/16(金) 12:13
フルコントロール(RWX) ---> 特殊なアクセス権(RWX)
と変化している。
サブディレクトリにこのアクセス権が引き継がれない、
上のディレクトリにはAdministratorがフルコントロール
なのに、クライアントからサブディレクトリを作ると
その下がAdministratorから見えないのでバックアップも
取れない。相関関係が不明だが、一年ぐらい使っていると
起動時にファイルシステムのエラーが出て、
しばらくすると起動しなくなる。
これを3回繰り返している。

326デフォルトの名無しさん:2001/03/16(金) 15:43
>>325
変更を加えていないディレクトリのアクセス権が、
いつのまにか変化してしまうと言うことなんでしょうか?

もし、ディレクトリ作成した時点から、
期待するアクセス権にならないと言うことで、
且つ、アプリケーションでディレクトリ作ってるなら、
SAをきちんと指定してみてはどうですか?
対策の方法はいくつもあると思うんですけど。
327名無しさん:2001/03/16(金) 19:01
>>326
NTのメーリングリストだと親のディレクトリの
設定を継承するって書いてるのにその通りにならない。
必ず、そのユーザーにしか見えなくなる。
(そしてAdministratorがバックアップを
 やろうとするとアクセス権の壁に当たる)。
ユーザー数千人いるから、ユーザーIDバグってるのか??
アクセストークンはWIN32APIでVisual-Cから操作してるよ。
あと、パスワードの無期限化は
PerlからNET USERコマンドを
通してやってるけど、バグってるのか無視される。
NTってホント怪しい。
328デフォルトの名無しさん:2001/03/17(土) 01:06
>NTってホント怪しい。
NTよりお前の方が怪しいと思う。
329デフォルトの名無しさん:2001/03/19(月) 00:09
あげ
330デフォルトの名無しさん:2001/03/19(月) 20:31
実行ファイルにドロップしたファイルのパスを取得したいの
ですがよくわかりません。

今はWinMainのコマンドライン引数から適当に切り出して使っているのですが
いまいちスマートじゃないような・・・・
何かよい方法はありますか?
331デフォルトの名無しさん:2001/03/19(月) 23:07
>>330
ふつーだと思うけどダメなの!?
Window場にDragならメッセージなりShell-APIなりがあると
思うけど
332デフォルトの名無しさん:2001/03/20(火) 00:06
>>330

シェルの仕様だから、コマンドラインで受け取るしかない。パースの仕方は
いろいろあるだろうけどね。
333デフォルトの名無しさん:2001/03/20(火) 09:51
API関数を使用してiniファイルを操作できるときいたのですが
どのようにしたらいいんでしょうか?
334デフォルトの名無しさん:2001/03/20(火) 10:29
>>333
なぜ今iniファイルを使うか?レジストリに白!
335333:2001/03/20(火) 10:58
レジストリはいじりたくないのもので・・・
336麻衣:2001/03/20(火) 11:25
WritePrivateProfileString
GetPrivateProfileString

だけど、今からやるならXMLでやろうよ
337333:2001/03/20(火) 11:33
サンキュウ
338デフォルトの名無しさん:2001/03/20(火) 12:21
>>334
そのソフトでしか使わない物をレジストリに入れるのは頼むからやめてくれ・・・(x_x
339デフォルトの名無しさん:2001/03/20(火) 13:29
コントロールのクラス名に"msctls_updown32"を指定して、リソース内でアップダウンコントロールを作っています。
コントロールの最大値、最小値もリソース内で指定したいのですが、どのようにすればいいのでしょうか?

340デフォルトの名無しさん:2001/03/20(火) 15:53
>>336
XMLでのやりかたきぼーん。
341デフォルトの名無しさん:2001/03/20(火) 20:08
>333
iniファイル中の文字が半角文字オンリーとか全角文字オンリーなら
いいけど、混在してたら文字化けしてキレそうになるぞ
(経験アリ)

>340
マジレス。ここを見てみそ。
http://msdn.microsoft.com/library/psdk/xmlsdk/xmlp2lt1.htm
英語だけど、このページにはXML DOMの基礎がとても詳しく書いてある。
とりあえずGetDocumentByTagNameからはじめよう。
JavaでやるんならSunのページから適当に探してね(笑)
342デフォルトの名無しさん:2001/03/20(火) 20:54
>混在してたら文字化けして
ダブルクォートで囲めば問題起きないと思うんだが。
343341:2001/03/21(水) 00:06
>341
自己レス。getElementsByTagNameの間違い。

>342
そ、そーなの?

[section1]
key1="value1"
key2="value2"

みたいに書くの?それとも

[section1]
"key1=value1"
"key2=value2"

みたいに?
なんかバカがバレる....鬱だ氏脳....
344デフォルトの名無しさん:2001/03/21(水) 02:09
あるDLLでエクスポートされてる名前の一覧を得るAPIってありますか?
345デフォルトの名無しさん:2001/03/21(水) 06:47
>344
ImageDirectoryEntryToDataEx()

かなり面倒だと思うけど…。他に楽な方法あるかも。


346デフォルトの名無しさん:2001/03/21(水) 17:15
>>343
>key1="value1"
こちら。確か「"」は取れて文字列だけ読めると思ったが。
先頭から囲んじゃったら、セクションごと読まないといかんようになってしまう。
347341:2001/03/21(水) 19:45
>>346

ありがとー (^-^)/
348デフォルトの名無しさん:2001/03/22(木) 00:46
…なんだか知らんが、素直にレジストリにしようっと。
349デフォルトの名無しさん:2001/03/22(木) 00:58
>>345 どうもです。
MSDN online 漁ってみましたが、これって、
じかに読むよりはちょっと楽だったりするかも知れない、くらい?
うーん、めんどくさそう。しかも 95 は不可のようだし。
しおしお…。
350デフォルトの名無しさん:2001/03/22(木) 09:34
不定形ウィンドウについて質問なのですが、
例えば偽春菜っぽいアプリを実現するとしたら
キャラクターを表示している状態と、フキダシが
出ている状態では、リージョンの形が違うと
思うんですが、やはり毎回リージョンを作り直す
という方法なのでしょうか?
それから、うにゅうは別ウィンドウとして作成
されてるのかな?
漠然としていてすみません。
351デフォルトの名無しさん:2001/03/22(木) 10:37
>>350
Spy++で見てみれ。
本体、うにゅう、フキダシ全部別ウィンドウだよん。
352350:2001/03/22(木) 10:51
>>351
その手がありましたね(^^;
確かに別ウィンドウになってるのが確認できました。
感謝!!
353デフォルトの名無しさん:2001/03/23(金) 00:33
日本語入力中に同じところを何回か変換すると、変換候補ウィンドウが出て、変換候補の言葉がリストになって出ますよね。
このウィンドウが出るタイミングはWM_IME_NOTIFYでわかるのですが、この変換候補ウィンドウのウィンドウハンドルを拾うにはどうしたらいいんですか?
ちなみにWin98+ATOK11を使ってます。

354>353:2001/03/24(土) 09:17
現在入力中のウィンドウハンドルから
ImmGetDefaultIMEWnd()
で取得できます
355デフォルトの名無しさん:2001/03/24(土) 10:20
>354

ハンドルは拾えたのですが、それはアプリケーションのIMEのハンドルで、変換候補をリストで表示するウィンドウのハンドルとは別のようです。
356>355:2001/03/24(土) 11:15
なるほど...
ImmGetCandidateWindow()で取得した
CANDIDATEFORM の rcArea にスクリーン座標がはいっていれば
WindowFromPoint() または ChildWindowFromPoint()
で取得できるかましれませんね
357デフォルトの名無しさん:2001/03/24(土) 12:49
『Inside OLE2』(アスキー出版局)
    と
『OLE オートメーション プログラマーズ リファレンス』
             (Microsoft Corporationn)

買うとしたらどっちのがいいっしょ?
358>357:2001/03/24(土) 13:40
『Inside OLE2』(アスキー出版局) 。
『OLE オートメーション プログラマーズ リファレンス』
             (Microsoft Corporationn)
はヘルプを直訳しただけ(だったと思う逆だったらすいません)

359357>358:2001/03/24(土) 16:31
>ヘルプを直訳しただけ(だったと思う

あ、そうなんだ。
じゃあ、『Inside OLE2』にするッス。
さんきゅでした。
360デフォルトの名無しさん:2001/03/24(土) 16:35
他のアプリのエディットボックスの内容を取得する方法って知ってます?
キャレットの座標などは取得できるんですけど、同じ方法では肝心の内容を
吸い出せない…。
セキュリティ目的でこうなっているのかと思いますが、以前、翻訳ソフトで
マウスカーソルの下の単語を訳すというのがあったので不可能では無いと思うのですが。
361SAGE:2001/03/24(土) 17:36
うぬ?Windows標準のエディットコントロールなら、
単に GetWindowText するだけでないの?>>360
362デフォルトの名無しさん:2001/03/24(土) 18:49
自前のコントロールならそれでOKだけど、他のアプリのってのがミソなんだよね。
363>360:2001/03/24(土) 18:58
1.アプリケーションの ウィンドウタイトル名 例:)"2ch BBS .. -
Microsoft Internet Explorer" かウィンドウクラス名(普通知
らない)で FindWindow()でHWND取得<--親ウィンドウ
2.目標のエディットボックスの親ウィンドウ内でのクライアント座標
(メニューを除いた左上からの相対座標)を調べる
3.ChildWindowFromPoint()でエディットボックスのHWND取得
4.それをGetWindowText()
ウィンドウハンドルが取得できれば内容にロックがかかることはないです。
364361:2001/03/24(土) 19:38
絶対座標があれば WindowFromPoint でも可だね。

>>362
つーか自前でも他人のでも変わらんてば。
365デフォルトの名無しさん:2001/03/25(日) 00:10
>>362

WM_GETTEXTで取得できると思われ。
366デフォルトの名無しさん:2001/03/25(日) 00:13
>>360

翻訳ソフトがバビロンであれば、あれはコントロールから取得している
のではなく、画像をOCR処理していると思われ。
367デフォルトの名無しさん:2001/03/26(月) 11:30
なんか>>360さんと同じような質問で恐縮ですが。

マウスカーソルなどで現在選択している部分のテキストを取得する
方法はありませんか?(自アプリ/他アプリ)
368デフォルトの名無しさん:2001/03/26(月) 12:34
>>363
「エディットぼっくす」って逝ってるからFindWindowのクラス名
の指定は"edit"でいいんじゃないかな
369デフォルトの名無しさん:2001/03/26(月) 12:36
>>360
あとクラス名が不明ならdesktopのhwndを引数にしてEnumChildWindow
という手もある
けどウィンドウが重なっていてその上にマウスがある時は注意が
必要
(EnumChildWindowは確かZ-order順に探索しなかったと思う)
370SAGE:2001/03/26(月) 14:00
>>367
EM_GETSELTEXT
なり。
371367:2001/03/26(月) 15:35
>>370
GetCursorPosとWindowFromPointとSendMessageで実現できそうです。
ありがとうございました。
372367:2001/03/26(月) 15:56
EM_GETSELTEXTってRichEdit以外では無理なんかな。
373363:2001/03/27(火) 00:31
>>368
親ウィンドウなんで(エディットだと特定できない)
374>>372:2001/03/27(火) 00:34
EditだとEM_GETSELで位置をとって取得することになるのと違いますか。
375367:2001/03/27(火) 03:33
>>374
Editだと全部取って開始と終了位置を使って抽出、ですね。
Edit,RichEdit以外は無理っぽい。IEだとなんかメッセージが飛んでる
ようだけどどのアプリにも…というわけにはいかないようです。
結局クリップボードを使う方法に変更しました。
376名無しさん:2001/03/30(金) 03:16
Windowsのエラーダイアログのメッセージを変えるソフトがありますよね。
(FDが入ってないのにFDDにアクセスしたときのエラーダイアログとか)
あれはどんなAPIを使って、メッセージ部分を置き換えているのでしょうか?
377デフォルトの名無しさん:2001/03/30(金) 10:40
>>376
HookAPIでウィンドウの生成かなんかを監視して、ウィンドウハンドルやオーナー
をマッチングしてるんじゃないかなー
サブクラス化のタイミングでさ。
378デフォルトの名無しさん:2001/03/30(金) 16:45
FDDアクセスエラーに限った話なら
SetErrorMode(SEM_FAILCRITICALERRORS);
でデフォルトのエラー表示をキャンセルする方法もあったね。
Win3.1時代に使ったことがある。
379デフォルトの名無しさん:2001/03/30(金) 21:26
>>376-377
SetWindowsHookExでWH_MSGFILTERを指定するなり。
サブクラスではないなり。
これで標準メッセージボックスのOKボタンの文字列"OK"を、
別の文字列に変えた事あるなり。
だから、エラーメッセージ本文もこの方法でGo〜なり〜。

でも、、、ちょっと気になるのはエラーメッセージは表示
はどうなっていたのかな!? 確かスタティックコントロ
ールだったような、、、

これは実物をSpy++で調査してみてみて〜なり。
380デフォルトの名無しさん:2001/04/01(日) 19:45
MessageBox,MessageBoxEx,MessageBoxIndirect
なんかで、できるダイアログのボタンの文字列を変えたいのですが、いい方法はないですか?
381376:2001/04/01(日) 20:57
>>377-379
レスありがとうございました。
382デフォルトの名無しさん:2001/04/02(月) 11:31
>>380

だから、フックしてやれ、つーの。
383デフォルトの名無しさん:2001/04/03(火) 11:41
>>380
そのすぐ前の>>379が模範解答なんだが(藁
384デフォルトの名無しさん:2001/04/03(火) 20:33
手助けしてくだされ。
HDBENCHなどを使うと、HDDやCD-ROMの型番を取得できますな。あれはどのように
やるものでござろう。
Dependency Walkerなど使ってみもうしたが、どうにもわかりかねましてな。
385デフォルトの名無しさん:2001/04/03(火) 21:14
>>384

低レベルのBIOSコールとかしてるのか、あるいは、Windowsの持っている
情報を取ってくるか・・・。

面倒なので、WMIでとっちゃえば?
386デフォルトの名無しさん:2001/04/03(火) 21:24
>>384
反則的だけどレジストリのHKEY_LOCAL_MACHINE\Enumをなめるとか。
これだけだとATAPIのCD-ROMとSCSIのCD-ROMが区別できないかもなので、
ASPI32でInquiryコマンド投げてみて一致するデバイスがあれば本当にSCSI、
無ければATAPIとする、とか。
でもATAPIとSCSIに同じデバイス名を返すCD-ROMが繋がってたらややこしい
ことになるな…
387384:2001/04/03(火) 23:17
>>385
Win95ではWMIは使えぬはずにて、HDBENCHは異なる取得方法を
用いている、と思われまする。

>>386
HDBENCHの出力を見るに、IDE/SCSIアダプタ→ストレージデバイスの
階層構造を把握している模様。
おそらくは、たやすくハードウェア情報を取得する方法があるものと
睨んでござるが、さてはて。
388デフォルトの名無しさん:2001/04/03(火) 23:21
>>387
SCSIに限れば、ASPIでホストアダプタを列挙して、各IDに対してInquiryを投げれば容易。
IDEの方はどうだろ。やったこと無いんでなんとも。
ASPIと同じような方法でアクセスできるんだろか。
389384:2001/04/04(水) 17:13
>>388
ASPIはWin2kではデフォルトでないゆえ、使うわけには参らんでござる。
WDMで同様の機能があるものの、これはWin95では使えぬもの。

考えあわせまするに、HDBENCHはレジストリから情報を取得しているのでは
と思われてきた次第。が、ver. 2.61がWin2kで正しく情報を取得する
のを見るに、裏技がありはせぬかという疑いも消えず。
390384:2001/04/04(水) 19:33
Regmonにてレジストリへのアクセスを監視したところば、HDBENCHは
レジストリから情報を取得していると判明いたした。
391386:2001/04/05(木) 04:46
>>390
そうか。実は反則ってほど反則でもないのかな(藁
俺はファーム屋なので直接ハードから得た情報じゃないとって考えが
先に立っちゃったけど、Windows的にはそれでもいいのかもね。
392デフォルトの名無しさん:2001/04/07(土) 01:52
うん。Windowsだから。
あるがままを受け入れるのです。。。
393デフォルトの名無しさん:2001/04/07(土) 08:14
acmStreamXXXX系のAPIの具体的な使い方はどこに行けば落ちてるでしょう?

APIそのものの解説はMSDNで判りました。Webでも
http://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_acmstreamopen.htm
で落ちています

でも具体的な使い方 特にMP3からどうデータを復元すればいいかとかが
判りません みつけたのはこのページだけです
http://www.ish.ic.kanagawa-it.ac.jp/~syugo/mp3.html

よく判りません・・・・
394デフォルトの名無しさん:2001/04/08(日) 03:58
誰でも良いので「プラットフォーム SDK」の場所を教えてください。
395デフォルトの名無しさん:2001/04/08(日) 05:02
>>394
ftp://ftp.micsosoft.com/developr/platformsdk/
feb. 2001もう出てるよ。oct.2000落としたばかりなのに
だれか変更点知らない?
396デフォルトの名無しさん:2001/04/08(日) 18:17
這入れないです>395
397396:2001/04/08(日) 18:56
ごめん、あったよ。
398デフォルトの名無しさん:2001/04/10(火) 16:16
Fiberとは、どのような時に使うものですか?
399デフォルトの名無しさん:2001/04/10(火) 17:39
>>398
センイが足りない時。
400デフォルトの名無しさん:2001/04/10(火) 18:32
コルーチンだよ>>398
401デフォルトの名無しさん:2001/04/10(火) 19:55
WORDみたいにアンチエイリアスのかかった文字を描画するにはどのAPIを使うんでしょうか?
402デフォルトの名無しさん:2001/04/10(火) 21:21
コルーチンなんだけどつかってみたら実際のコルーチンより使いにくいんだよなあ
でも、Winだと任意の領域をスタックには使えないからしょうがない
403デフォルトの名無しさん:2001/04/10(火) 21:35
>>401
WORDがどういう実装してるか知らんけど(使ったことすらない)
ExtTextOutと、あとはCreateCompatibleDC、createImage、BitBltあたりの
GDI関係のを適当に。
404デフォルトの名無しさん:2001/04/10(火) 22:48
>>403
あとパス
405デフォルトの名無しさん:2001/04/11(水) 02:58
>>401
相手がTrueTypeフォントなら、GetGlyphOutlineとかでスプラインデータを
取得し、自前でレンダリングする。
メモリDCを用意して、必要な大きさの4倍の大きさでレンダリングしたあと
StretchBltするとか。
ただこれだと、描画結果がハードウェア依存(システムの画面モードにも
依存するか)するので、自分で内挿するとか。
406デフォルトの名無しさん:2001/04/11(水) 13:59
>>401
DrawText とか TextOut
407398:2001/04/12(木) 10:34
>>400
ありがとう。理解できるようになりました。
408デフォルトの名無しさん:2001/04/15(日) 06:20
CDC::Ellipse()を使うときに、引数にCRectクラスのオブジェクトを使ったんだけど、
値渡しにしても参照渡しにしてもちゃんと動作します。
これって変じゃないですか?あんまり融通がきいてもあとが
こわいのですが…。
409デフォルトの名無しさん:2001/04/15(日) 06:52
>>408
CRect::operator LPCRECT ()
410デフォルトの名無しさん:2001/04/15(日) 07:28
>>409
わかりました。気にする必要はないんですね。
ありがとうございました。
411デフォルトの名無しさん:2001/04/16(月) 22:57
HWNDからそのWINDOWで点滅しているキャレットの長さを取得するにはどうしたらいいでしょうか?
キャレットの点滅している場所を知りたいのですが、GetCaretPosだと上端の座標しかわかりません。
下端の座標が知りたいのです。
412あのKBはGetVersionExだと思う:2001/04/18(水) 00:23
>>118
しかし、これは「Me だけが、GetVersionEx(記述内容からすると、GetVersionではないでしょうね。dwMinorVersion なんて GetVersion の戻り値にはないんだから)の戻り値が変な理由」にはならんよね。
95/98/98SE/Me の全てが同じ動作をするなら分かるけど。

#どのみち obsolute されている GetVersion 使うソフトはもうさすがに少数派だし
413>412:2001/04/18(水) 07:54
かちゅ〜しゃ使い?
414デフォルトの名無しさん:2001/04/18(水) 09:11
>>413
どちてそう思ったの!?その時間帯にスッd出たから!?
415デフォルトの名無しさん:2001/04/18(水) 12:52
ニフで話題になったからそのまま書きこんだだけだろ。
416デフォルトの名無しさん:2001/04/18(水) 21:08
ログファイルの名前を付けたいのですが
YYYYMMDDuuuuuu.Log
みたいな感じでuuuuuuのところだけ変えて何個か作りたいのです。
Win32APIにユニークな値を返す関数があるらしいのですが関数名が分かりません。
ご存知の方、どうか教えて下さい。
417デフォルトの名無しさん:2001/04/18(水) 21:11
>>416
CoCreateGuid()か? そんなのより、GetTempFileName()とかの
方がいいかも。
418デフォルトの名無しさん:2001/04/18(水) 21:11
>416

GetTempFileName()のことか?
419デフォルトの名無しさん:2001/04/18(水) 21:59
>>417さん、>>418さん
早速のレスありがとうございます。
CoCreateGuid()が求めていた関数でした。
本当にありがとうございました。
420デフォルトの名無しさん:2001/04/18(水) 22:12
>>118
 だってこれ、すでに obsolute されている GetVersion についての発言であっ
て、GetVersionEx のことじゃないじゃん(笑)

 つーかこれ、GetVersion が「3.95」を返す、っていう Win95 時代からの対
16bit アプリ向け対策ではなかったっけ?(笑)

 ついでにいえば、この理由を正当化するならば、「なぜ Me だけこの症状にな
るのか」が説明できませんね。Windows 95/98/Me の総てで同じ症状なら一貫し
ているけど(笑)
421デフォルトの名無しさん:2001/04/19(木) 09:21
>>420
3ヶ月半前の書き込みにわざわざレス、しかも丁寧語が変に混じってるわ、
笑いが止まらない様子だわ……。

昨日の夕食のなかに、見慣れないキノコとか混じってませんでした?
422デフォルトの名無しさん:2001/04/19(木) 13:22
こんにちは、419です。
CoCreateGuid()を使いたいのですが
GUID *test;
HRESULT rtn = CoCreateGuid(test);
ではコンパイルは通るのですがtestに値が入りません。
正しい使い方を教えて下さい。
VisualC++6.0でOSはNT4です。
よろしくお願いします。
423デフォルトの名無しさん:2001/04/19(木) 14:02
testは値が入るところではなくて、値が入るところを指し示す
ものだからだよ。
424116:2001/04/19(木) 15:14
>>420
あほ
425デフォルトの名無しさん:2001/04/19(木) 15:18
>>423さん、レスありがとうございます。
しかし意味が分かりません。
もう少し詳しくお願いします。
ちなみに、デバック中にtestを見ても値が入っていなし
rtnも-2147024809なので
私見ではGUIDのクリエイトに失敗しているのだと思うのですが
426デフォルトの名無しさん:2001/04/19(木) 15:43
>>425
ポインタを取得するんじゃなくて、ポインタを指定するんだよ。
427デフォルトの名無しさん:2001/04/19(木) 16:23
>>422
GUID guid;
HRESULT result = CoCreateGuid(&guid);

ポインタの基礎からやりなおした方がいいかも。
428デフォルトの名無しさん:2001/04/19(木) 16:29
>>426さん
GUID test;
HRESULT rtn = CoCreateGuid(&test);
ですね。
ありがとうございました。
429デフォルトの名無しさん:2001/04/19(木) 16:34
>>427さん、ありがとうございます。
確かにポインタは、まだよく理解していません。
お奨めの本があれば教えて下さい。
430デフォルトの名無しさん:2001/04/19(木) 17:17
>>429
うーん。K&R2で学んだんだけど、オススメってのは特にないなぁ。
なんか、ポインタに的を絞った本があるみたいだから、それとかどうでしょ?

感覚をつかんじゃえば、楽なんだけどね。
431デフォルトの名無しさん:2001/04/19(木) 17:54
>>430さん
レスありがとうございます。
>なんか、ポインタに的を絞った本があるみたいだから、
>それとかどうでしょ?
分かりました、とりあえず近所の図書館で探してみます。
>感覚をつかんじゃえば、楽なんだけどね。
うらやましいです。
早くそう言える様にがんばります。
432デフォルトの名無しさん:2001/04/19(木) 19:37
>>431
http://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1142-2
↑かな。

ポインタってのは、あくまでも「実体を指し示すもの」で、実体ではない。

GUID *test

ってのは、GUID構造体を指す(ポイントする)んだけど、これだけでは、
実体が確保されてないわけ。だから、

GUID *test = new GUID

みたいにするか、

GUID testって宣言しておいて、&testを渡すと。こんな感じで理解して
もらえるかなー。
433デフォルトの名無しさん:2001/04/24(火) 05:01
質問1:
 Windows APIのコモンコントロールの勉強をしています。サンプルプログラムを
読むと、ダイアログ関数でメッセージを処理した場合、 return 1; で終わってい
ます。また処理がなかった場合は return 0; で終わっているようです。
 ダイアログ関数の戻り値はBOOLですが、これは関数内で処理をした場合は
true(1)、処理をしなかった場合は false(0) を返すと考えて良いのでしょうか?
また 0/1 の代わりに false/true を使った方がよいですか?
#そういえば大文字のBOOL は int型でしたね。

質問2:
 プロパティシートに関して。プロパティシートに関連付けられたダイアログ関数で
WM_NOTIFYメッセージを処理する際に return 1; の実行の前に
SetWindowLong(hdwnd, DWL_MSGRESULT, 0);
が実行されています。MSDNによれば、この関数はhdwndで指定されたウインドウの属性
を変更するものそうで、DWL_MSGRESULT は「ダイアログボックスプロシージャ内で処
理されたメッセージの戻り値を設定します。」とあります。
 これの必要性がよくわからないのですが、これってどうしても必要なのですか?
コメントアウトしても、動作に変化がないのですが・・。

質問3:
 ウイザードに関して。ウイザードに関連付けられたダイアログ関数で、ビットマップ
を表示させる場合、WM_PAINTメッセージの処理部分で表示させています。ウイザードの
ページがアクティブになった際にも、WM_INITDIALOGでは、特に描画指示はでていません。
ウイザードコントロールの側からWM_PAINTメッセージを出すように指示が自動的に送ら
れていると考えて良いのでしょうか?

 Windowsアプリって、なんでもかんでもグローバル変数になりますね。^-^;
なんか美しくないなぁ。C++ならキレイにいけるのかな。(サンプルがCで書かれているので)
 それにしても、コントロールって複雑・・(-_-;
434デフォルトの名無しさん:2001/04/24(火) 06:10
>>433 Q1
WM_INITDIALOG メッセージに応答したとき、SetFocus 関数を呼び出
してダイアログボックスのコントロールの 1 つにフォーカスを設定し
たのであれば 0 を、フォーカスを設定しなかったのであれば 0 以外
の値を返さなければなりません。

WM_INITDIALOG メッセージ以外のメッセージに応答したとき、メッ
セージを処理したのであれば 0 以外の値を、処理しなかったのであれ
ば 0 を返さなければなりません。
435デフォルトの名無しさん:2001/04/24(火) 07:16
>>434
なるほど。ありがとうございました。
436デフォルトの名無しさん:2001/04/24(火) 16:06
SDKでReBarを使ってIE風メニューを実装しようとしているのですが、メニューの
項目ボタンのセットまで実装したのですが、キーによる制御の方法がわかりません。
ドキュソメント等を探したのですが、TB_SETHOTITEMを使ってどうこうする様なの
ですが・・・。
どなたかSDKでReBar作れるぞゴルァ!! って達人の方、いましたら方法教えてください。

ってかTB_SETHOTITEMは、説明足らんくないですか?(MSDN)
437デフォルトの名無しさん:2001/04/24(火) 22:18
>>433
質問2
通常、ウィンドウプロシージャはさまざまなメッセージを処理し、
メッセージ毎に定められた戻り値を返す必要があります。
ダイアログ関数は、この戻り値とは無関係なBOOL値を返すことに
なっていますので、戻り値の代わりにDWL_MSGRESULTでSetWindowLongして
メッセージに対する戻り値を返します。

質問3
ウィンドウの内容を描画する必要があり、メッセージキューにほかに
さしたるメッセージがないとき、WM_PAINT メッセージが捏造されて
返されてきます。これはすべての可視なウィンドウに共通しています。

蛇足1
いくら腕に覚えがあるのか知りませんが、サンプルを読む前にチュートリアルとか
マニュアルというかオーバービューとか入門書を読んだほうがあなたにとっても
まわりの人にとっても良い、と思います。
438デフォルトの名無しさん:2001/04/24(火) 22:53
すみません。質問させてください。
環境はWindows20000なんですけど、
あるファイルを掴んでいるプロセスを調べる方法って
ありますか?
Unixのfuserコマンドみたいなことをやりたいんですけど。

よろしくお願いします。
439デフォルトの名無しさん:2001/04/25(水) 00:32
>>437
ありがとうございました。
でも、正直言ってよく分かりませんでした。

サンプルというのは入門書のサンプルコードのことです。
(ハーバート・シルト「Windows98プログラミング」)
700ページ中430ページほど読みましたが、関数の戻り値について
詳しく言及した個所はなかったようです。

サンプルコードは豊富に載っているのですが、OS側の動作がいま
いち分からない。

とりあえず、以下の書籍も読んでからもう一度質問したいと思います。
他にも適当なテキストがあれば紹介していただけると幸いです。

プログラミングWindows 第5版(上)
プログラミングWindows 第5版(下)
Charls Petzold 著/株式会社ロングテール 長尾 高弘 訳

440デフォルトの名無しさん:2001/04/25(水) 01:32
>439

http://hp.vector.co.jp/authors/VA010523/index_sdk.html
http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/

自分の場合、Charls Petzoldの本は難しすぎて読むのに苦労したのですが、上のページなんかを参考にしました。
441デフォルトの名無しさん:2001/04/25(水) 04:59
>>433
ならグローバル変数使わなきゃいいじゃん。
変数は全部関数の引数で渡すとかして。
442デフォルトの名無しさん:2001/04/25(水) 07:20
ドラッグ&ドラップで大量のファイルを落とされる事が予想される
プログラムの場合、ファイル名だけ手早く自前のバッファに詰めて
さっさとDragFinish出すのが望ましいのでしょうか?
443デフォルトの名無しさん:2001/04/25(水) 13:03
>>442
それ当たり前…
444デフォルトの名無しさん:2001/04/25(水) 16:40
当たり前の割りには大半のソフトが固まるんですが…
445デフォルトの名無しさん:2001/04/26(木) 17:56
>>444
それは、長く処理を占有する場合は明示的にメッセージキューをポンプする
という基本中の基本ができてないので、>>442以前の問題だ(藁
446デフォルトの名無しさん:2001/04/28(土) 04:43
スクロールバーコントロールの位置や、ボタンの位置などを
プログラム側から操作することはできないのですか?
447デフォルトの名無しさん:2001/04/28(土) 14:26
>>433
それほど、グローバル変数の嵐にはならないけど。具体的に何を
グローバル変数として定義してるの?
448デフォルトの名無しさん:2001/04/28(土) 16:49
>>446
GetDlgItem等でコントロールのHWNDを得てMoveWindow等を使う。
449デフォルトの名無しさん:2001/04/28(土) 19:30
>>448
なるほど。やってみます。
450デフォルトの名無しさん:2001/05/07(月) 09:28
>440
ありがとう。
AdvancedWindowsを読んでたところだから助かりました。
451デフォルトの名無しさん :2001/05/09(水) 14:50
Winクライアントで「IPアドレスを自動取得する」設定にすると、DHCPクライアント
となり、ネットワーク上のDHCPサーバーを探してくれますね。条件を簡単にして
「同じサブネット内のDHCPサーバーを探す」というプログラムを作りたいんですけ
ど、適切な説明書やライブラリがありましたらご紹介ください。よろしくお願い
マンモス。
452デフォルトの名無しさん:2001/05/09(水) 16:05
http://RFC.net/rfc1541.html
これ以上の適切な説明書はないだろ
453デフォルトの名無しさん:2001/05/09(水) 16:43
>452
ありがと!やっぱりRFCからだな。
関連するWinAPI調査して楽勝だ!
454デフォルトの名無しさん:2001/05/10(木) 15:51
hBmpfile = (HBITMAP)LoadImage(NULL, "start.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (hBmpfile != NULL) {
  SendMessage(hStartBtn, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmpfile);
}

上のような感じでスタートボタン(ハンドルはhStartBtn)にビットマップを貼り付け
ようとしてますが、うまくいきません。start.bmpはこのテストEXEと同じディレクトリに
あります。
455マルチメディア:2001/05/11(金) 03:49
最近ウィンドウズ上でプログラミングを始めたものなんですが、
エディットコントロールに70KBぐらいの文字列を表示させようとすると
何故か何にも表示されないんですが何か方法は無いでしょうか…?
誰か教えてください〜………
456デフォルトの名無しさん:2001/05/11(金) 03:51
エディットコントロールって64KBまでじゃなかったっけ?
リッチエディットならたぶん制限は無いと思われ。
457デフォルトの名無しさん:2001/05/11(金) 04:20
NT/2000使え>>455-456
458マルチメディア:2001/05/11(金) 04:35
>>456
レスありがとうございます

リッチエディットなんですが、再び質問で申し訳ないんですが
RE1 = CreateWindow("EDIT", "",ES_MULTILINE | ES_READONLY | WS_CHILD | WS_VISIBLE……
の所を
RE1 = CreateWindow("RICHEDIT", "",ES_MULTILINE | ES_READONLY | WS_CHILD | WS_VISIBLE ……
にしてメインウィンドウに貼りつけたらコンパイルは出来たんですが
ウィンドウ(リッチエディット)が表示されなかったです
MSDNでリッチエディットについて調べようと思ったんですがわからないです……
もし解決方法を知っていましたらどうか教えてください〜……
459マルチメディア:2001/05/11(金) 05:57
あ〜、色々やって見たけど全然ダメdeath……
というか、リッチエディットというコントロールが見つからないでふ…
おやすみなさい…
460デフォルトの名無しさん:2001/05/11(金) 07:04
>>459
CreateWindowの前にLoadLibrary("RICHED32.DLL")やInitCommonControls()はしてある?
あ、サイズの小さいテキストがちゃんと表示されているんなら忘れて。
461454:2001/05/11(金) 08:08
自己レス

hdc = GetDC(hStartBtn);
hdctmp = CreateCompatibleDC(hdc);
hBmpfile = LoadImage(NULL, "start.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
SelectObject(hdctmp, hBmpfile);
BitBlt(hdc, 0, 0, bmpx, bmpy, hdctmp, 0, 0, SRCCOPY);
SendMessage(hStartBtn, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hdc);
ShowWindow(hStartBtn, SW_SHOW);

で「一瞬だけ」表示されました。
これとは別にSetWindowPos()を使ってのボタンのリサイズもクリックすると元の
大きさに戻ってしまいます。うーん。
462デフォルトの名無しさん:2001/05/11(金) 08:54
スタートボタンてWindowsデスクトップの?
あれはOwnerDrawだから、サブクラス化するかフックするかしないと
いけないんじゃない?
463デフォルトの名無しさん:2001/05/11(金) 09:17
>>545
T-Clockのソースでも見れ?
464デフォルトの名無しさん:2001/05/11(金) 17:29
>>463
543 って誰だよ
465463:2001/05/11(金) 20:29
>>464
スマソ >>454 でした。
466マルチメディア:2001/05/11(金) 20:33
LoadLibrary("RICHED32.DLL");
を追加したら上手く行きました!ありがとうございます!
467デフォルトの名無しさん:2001/05/12(土) 01:06
Win32APIの日本語版リファレンスの場所を教えてください
468デフォルトの名無しさん:2001/05/12(土) 01:30
>>467
本屋
469デフォルトの名無しさん:2001/05/12(土) 02:24

//=============================================================
// IID_IEnumIDList
[
uuid(000214F2-0000-0000-C000-000000000046),
helpstring("IEnumIDList Interface"),
odl
]
//=============================================================

interface IEnumIDList : IUnknown
{
// *** IEnumIDList methods ***
long Next(
[in] ULONG celt,
[in,out] LPITEMIDLIST *rgelt,
[in,out] ULONG *pceltFetched);
HRESULT Skip([in] ULONG celt); // E_NOTIMPL
HRESULT Reset(); // E_NOTIMPL
HRESULT Clone([in,out] IEnumIDList **ppenum); // E_NOTIMPL
}

typedef IEnumIDList *LPENUMIDLIST;
470454:2001/05/12(土) 13:38
>>463
作業途中から見ました。けど「なぜこの関数を使ってるのか?」がわからない
とアタリつけられれないので>>462さんの情報には感謝してます。
471デフォルトの名無しさん:2001/05/12(土) 14:33
突然ですが SHGetMalloc() と CoGetMalloc() の違いは何ですが?
内部的な実装も気になります。使い分けとかもあるのでしょうか?
472わからんよ:2001/05/12(土) 19:21
コンソールアプリケーションを作っているのですが、
そこからCreateWindowしたいのですが、出来るものなのでしょうか?
現在、インスタンスハンドルが取得できなくて困っております。
どなたか、ご教示いただけませんか?
473デフォルトの名無しさん:2001/05/12(土) 19:44
GetModuleHandleで取得>>472
CreateWindowしたらメッセージループ回す事。
ループ用のスレッド作るのが簡単。
メッセージループは必ず作る事。
474デフォルトの名無しさん:2001/05/12(土) 21:59
この辺りをみると良いと思ふ
http://mentai.2ch.net/prog/kako/957/957341074.html
475デフォルトの名無しさん:2001/05/13(日) 01:23
http://www.bio100.co.jp/cgi-bin2/directx/flashviw.cgi?no=441&reno=438
このプログラムの間違っている点を挙げよ
って、簡単すぎるか
476デフォルトの名無しさん:2001/05/13(日) 06:48
>>471
SHほげほげ系のAPIが使うアロケータを得るのが SHGetMalloc()。
OLE(COM)系APIの使うアロケータを得るのが CoGetMalloc()。

使い分けはこれに準ずる。SHGetSpecialFolderで得た idlistを
開放するなら SHGetMalloc() で得た IMalloc、という風に。

この2つは実は実装は一緒らしい。
実際、CoGetMalloc() は CoInit 無しで使えちゃったりする。

SH系の API でもアレコレインターフェイスが出てくるけど、
あれは COM じゃないのか、というもっともな疑問に対しては、
あれは COM なのだけれども、呼び出し側スレッドが CoInit して
なくても使える妙な奴らなのだ、というようなことをどこかで
読んだような読んでないような。
477472:2001/05/13(日) 20:02
ありがとうございます!
でも GetModuleHandle = インスタンスハンドルってなんだかピンときませんね。
メッセージループなのですが、自らのコンソールウィンドウを親ウィンドウとして
作って出来ないものでしょうか・・・、試してみます。
478デフォルトの名無しさん:2001/05/15(火) 14:14
Windowsでsync()ってどうやるの?
自分のプロセスがつかんでるストリームだけじゃなくて、OSのキャッシュを全部
ディスクに吐かせたい。
479デフォルトの名無しさん:2001/05/15(火) 14:35
>>478
ユーザモードの API では無理ではなかろうか。

こういうのを使ってみれ。他にもいろいろあるよ。
http://www.sysinternals.com/ntw2k/source/misc.shtml#Sync
480478:2001/05/15(火) 18:43
>>479
それ見たんだが、ソースがなくてなあ。
481479:2001/05/16(水) 00:58
>>480
ふむぅ、ソースが欲しいわけね。
Native API にも、それらしいの見つからないし...。

いっそ、あのバイナリをハクったほうが手っ取り早いかもよ。
482デフォルトの名無しさん:2001/05/16(水) 01:05
ハクった」なんて初めて聞いた。
ハッカー
ハック
ハックる
ハクる(った)
・・・日本語崩壊の危機を感じたことはありませんか?>481
483デフォルトの名無しさん:2001/05/16(水) 01:53
>>482
むしろあんたがわざわざ取り上げたせいでより波及しそうだな(w
すくなくとも俺の頭にはインプットされてしまったよ
484デフォルトの名無しさん:2001/05/16(水) 02:30
CreateFont()で普通の文字よりも幅の狭いフォントを作って
そのフォントで文字を描画したらWin9xとWin2kで
微妙に違う幅の文字が描画されてしまいます。
9x,2kどちらでも同じ幅の文字で描画したいのですが、
どうしたら解決できるでしょうか?
485484:2001/05/16(水) 02:31
しまった。age忘れた。鬱だ…。
486デフォルトの名無しさん:2001/05/16(水) 02:33
>>484
ビットマップフォントを使う。
487484:2001/05/16(水) 02:36
TrueTypeでです。
488デフォルトの名無しさん:2001/05/16(水) 03:06
>>480
DeviceIoControlのFSCTL_DISMOUNT_VOLUMEをみれ。
CreateFile→Lock→Dismount→Unlock→Closeをやる。
Lockできるデバイスなら結果としてフラッシュされる。
Lockできない場合はわからん。
489479:2001/05/16(水) 10:57
>>482
あれ、おかしいか?
仲間内では「全然通じる」がなぁ。

ハッキングする→ハクる
バグがある、もしくは症状が出る→バグる
プロセスが終了しきれずにいつまでも残る→ゾンビる

待ちゆく人にいきなり話しても通じんだろうが、
ここにきてるヤツは、すぐわかる共通のコンテキストにいると思う。
こういうのも日本語の崩壊と言うか?

漏れはあまり議論続けようとは思わんが、
続けたいなら別にスレ(←これも崩壊か?)立てた方がいいと思うぞ。
490sage:2001/05/16(水) 16:46
>>489
方言って、本人意識しないで使ってたりするんだよね。
僕もそれ通じない。

googleで検索しても50件くらいしか出てこないから、
「ここに来てる奴」に限定しても、たぶん殆ど普及して
いないと思う。
しかもヒットした先のページがどれも頭悪そうで苗苗。
491490:2001/05/16(水) 16:46
sage損ねてゴメン
492デフォルトの名無しさん:2001/05/16(水) 16:50
WIN.INIでなくて任意のINIファイルをデータベースとして
開いて書き込み&保存する関数って無いでしょうか?
493デフォルトの名無しさん:2001/05/16(水) 17:19
データーベースの意味を本当に理解しているのか
わかりませんが、WritePrivateProfileStringなどを
使います。
494492:2001/05/16(水) 17:22
>>493
初心者なんで理解してないです(笑
ともあれありがとうございます、助かりました〜
495デフォルトの名無しさん:2001/05/17(木) 16:19
「猫でも・・」みながら勉強してる超初心者です。
Windows SDK編 第1部 の18〜20章でスクロールバーの使い方を知りました。
しかし、ダイアログボックスの中に複数のスクロールバーが存在する場合、
1つのスクロールバーを動かした場合はそのポジション値だけを変更させたいんですが、
どうやってスクロールバー別に命令を書けばいいんでしょうか?
496478:2001/05/17(木) 19:27
>>488
アンマウントするの? 相手がリムーバブルなら手じゃあるが、
固定ディスクだと失敗すると思われ

>>495
ウィンドウハンドルは理解してるか?GetDlgItemで取得する
んだぞ?
497役立たず:2001/05/17(木) 19:30
>>495
俺16章くらいでめんどくさくなって本買っちゃったよ。
狭い画面でブラウザ見ながらソース書くのって鬱にならん?
498デフォルトの名無しさん:2001/05/17(木) 19:53
>>497
全部(あるいはソース部分のみ)エディタにコピペするといいよ。
499497:2001/05/17(木) 21:15
>>498
すまん実はホントの理由は300章もやってられんと思ったから。
500デフォルトの名無しさん:2001/05/17(木) 21:22
exe内にファイルを読み込んで、exeを実行したときにそのファイルをハードディスクにコピーしたいのですが。
ファイルをリソースで読み込んで、そのリソースをロードしてファイルにコピーしています。

FindResource()
SizeofResource()
LoadResource()
LockResource()

CreateFile()
WriteFile()
CloseHandle()

とやっているんですが、ほかに方法はないでしょうか?
501デフォルトの名無しさん:2001/05/17(木) 23:14
>>500
日本語になってねーぞっ。

exe 内にファイルを読み込んでハードディスクにコピーすりゃあ、
ただのコピーコマンドじゃねえか。

「ファイル」って単語、正確に使え。、
なにがやりたいのか、全っ然、わからんぞ。
502488:2001/05/18(金) 00:45
>>496
固定ディスクでも、オープン中のファイルがなければDISMOUNT
するので、キャッシュ中の未処理のデータはフラッシュされます。

後にそのドライブにアクセスがあると自動的にMOUNTされるので、
その分については気にする必要がない。リムーバブルでなくても
事実上リムーバブル扱いになる。

スワップファイルとかシステムの奥深いところで排他的にオープン
されたファイルがあるドライブだとアウト。

オープン中のファイルがあるドライブだと話が厄介になるので、
オールマイティな解決策でないのはご指摘の通り。
503デフォルトの名無しさん:2001/05/18(金) 11:00
CreateDIBSectionで16Bit(5-5-5)のBitmapを生成するラッパーを書いたのですがうまくいきません。
GetLastErrorで見ると87(パラメータ不正)となってしまいます。
#これとは別に書いた24bpp版はちゃんと動いたので、CreateDIBSectionの使い方は間違ってないと思うのですが。

BITMAPINFO構造体へのパラメータのどこかが間違っている筈ですが、自分では判りませんでした。
ココが変だよという部分に突っ込んで下さい。宜しくお願いします。
なお引数の横幅(width)は呼び出し側で4の倍数にしてるので、関数内ではチェックしてません。
/*引数
hBMP:ハンドラの格納先
lpBuff:DIBへのポインタのポインタ
width:幅
height:高さ
*/

BOOL Create16BitDIB(HBITMAP &hBMP,void **lpBuff,LONG width,LONG height)
{
HDC tmpDC;
struct BITMAPINFO16bpp {
BITMAPINFOHEADER bmiHeader;
DWORD bmiColors[3];
};
BITMAPINFO16bpp bmInfo;

ZeroMemory(&bmInfo,sizeof(BITMAPINFO16bpp));
bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth = width;
bmInfo.bmiHeader.biHeight = height;
bmInfo.bmiHeader.biPlanes = 1;
bmInfo.bmiHeader.biBitCount = 16;
bmInfo.bmiHeader.biCompression = BI_BITFIELDS;
bmInfo.bmiHeader.biSizeImage = width * height * 2; //幅 x 高さ x 2Byte(16bit)
bmInfo.bmiColors[0] = 0x001f; //B
bmInfo.bmiColors[1] = 0x03e0; //G
bmInfo.bmiColors[2] = 0x7c00; //R

tmpDC = CreateCompatibleDC(NULL);
hBMP = CreateDIBSection(tmpDC, (BITMAPINFO*)&bmInfo, DIB_RGB_COLORS, lpBuff, NULL, 0);
DeleteDC(tmpDC);

if(hBMP == NULL) return FALSE;
return TRUE;
}

ついでにageます。
504デフォルトの名無しさん:2001/05/18(金) 11:44
>>503
CreateComratibleDCでDCを取っていますが、画面モードは何ビットなんですか?
また、BITMAPINFOHEADERの後ろの配列が気になります。
こういったピクセルフォーマットの渡し方か何かあるのですか?

もし我流であるなら一度、BITMAPINFO変数を別に宣言して、ビットマップを作ってから
ピクセルフォーマットは最後にBITMAPINFO16bpp変数にセットしてはどうでしょう?
505503:2001/05/18(金) 11:46
503です。
RGBのBitMaskはWORDだし、biCompressionは24bppと同じでBI_RGBだったのね…
どっかで禿げしく勘違いしてた。鬱だ氏のう
−−−−−−−−−
       ||
     Λ||Λ
    ( / ⌒ヽ
     | |   |
     ∪ / ノ
      | ||
      ∪∪
506503:2001/05/18(金) 12:07
やっぱ駄目か?
HBITMAPはちゃんと戻るけど挙動がおかしい。
ヘルプでBITMAPINFOを調べるとやっぱBI_BITFIELDSって書いてあるしPixelFormatはDWORDだ…。
もちょっと自分で調べます。

>>504
VC++4.0のヘルプのBITMAPINFOに書いてある方法のつもりなんですが…
507503:2001/05/18(金) 14:25
自己解決してしまいました。
ヘルプ読むとPixelFormatを指定する場合はBI_BITFIELDSみたいな事が書いてあるんだけどなぁ
BI_RGBならPixelFormat指定無し、何も考えずにBitCountを16にしておけば良かったのね…
取り敢えずこれで事足りるのでBI_RGB指定で逝きます。
スレ汚しスマソ。
508デフォルトの名無しさん:2001/05/18(金) 22:45
ドライブレターからドライブのホストアダプタ番号、ID、論理ユニット番号を取得をするには
どうすれば良いのでしょうか?

・ホストアダプタ番号
0:内蔵プライマリIDE/1:内蔵セカンダリIDE/2:SCSI
ID
IDE:0マスター/1:スレーブ
SCSI:0〜7SCSI ID
509508:2001/05/18(金) 22:46
ぐあ…途中送信失礼。

下の説明文は無視してくださってけっこうです。
510名無しさん:2001/05/19(土) 00:17
age
511名無しさん:2001/05/19(土) 00:17
age
512名無しさん:2001/05/19(土) 00:18
age
513名無しさん:2001/05/19(土) 00:18
age
514名無しさん:2001/05/19(土) 00:18
age
515デフォルトの名無しさん:2001/05/20(日) 04:05
コンソールアプリケーションでWM_KEYDOWNメッセージを受け取る方法が
わかりません。
下のような感じで受け取れると思ったんですが、どのキーを押しても無反応で
困っています。DOS窓ではこのメッセージは受け取れないんでしょうか?
わかる方教えてください。

int main()
{
MSG msg;

while(flag=1)
{
GetMessage(&msg,NULL,0,0);
if(msg.message==WM_KEYDOWN)
{
処理;
}
}
516デフォルトの名無しさん:2001/05/20(日) 09:37
>>515
簡単な方法はないと思う。

キーボードフックを登録するか、
コンソールの窓関数(または窓組)をフックする必要があるのでは?
517デフォルトの名無しさん:2001/05/20(日) 20:54
>>516
返答ありがとうございます。
とりあえずやってみます。
518デフォルトの名無しさん:2001/05/21(月) 04:14
>>515
GetAsyncKeyState、GetKeyboardState、GetKeyStateのどれか好きなの(|目的にあったの)を使え。
519デフォルトの名無しさん:2001/05/22(火) 00:52
FAQだと思うのですが検索しきれませんでした。ここでの質問お許し下さい。

取得したディスプレイのデバイスコンテキスト(DC)と、それと互換のある
オフスクリーン用DCを使い、Bitbltしています。教科書通りならそれらの
DCは、使用後すぐDeleteDCすべきですが、これをアプリ終了まで保持して
使い続けることは保証されてるのでしょうか?

とりあえずWindows2000にて、アプリ起動中に画面解像度やbit深度を
変えたりとテストしてみました。今のところ不具合はないのですが、
さりとて確証も持てないわけでして…。
そりゃマズイよ、みたいなのがあったらぜひ教えて下さい。
520デフォルトの名無しさん:2001/05/22(火) 00:55
DC持ちっぱなしは9xだと良くないことがおきたような……
521519:2001/05/22(火) 01:02
>>520
レスどもです。とほほ、やはり問題あるんですね。

どういうタイミングで不具合が起こるのでしょうかねぇ。
ディスプレイとオフスクリーンのDC、せめてどちらか一方(できれば
後者)でも保証されてると助かるのですが…駄目っぽいかな。
522デフォルトの名無しさん:2001/05/22(火) 01:08
>>519

そうなの?
オイラは今までOffScreen用にCreateCompatibleDC(NULL)でDCを確保して終了時に削除するようにしてたけど、別に何も不具合はなかったけどなぁ。
APIリファレンスには「不要になったら削除」とは書いてあるけど、即削除せよとは書いてないし。
直接ウインドウハンドラからGetDCしたやつなら直ぐに開放ってのは判るけど。
詳しい方、詳細キボンヌ。
523デフォルトの名無しさん:2001/05/22(火) 01:24
Createしたのはいいけど
Getしたのはだめなんじゃなかった?
524519:2001/05/22(火) 01:30
>>522
私もディスプレイのステータスが変わらないならば、OffScreen分は
いちいち削除しないでも大丈夫だと(勝手に)思ってました。

こうしている間も検索は続けているのですが、否定的なものばかりですね。
525519:2001/05/22(火) 01:33
>>523
すいませんリロードしてなかったです。

おお!、CreateしたDCは保証されてるのですか。
ようやく安心できました。レスありがとうございました。
526デフォルトの名無しさん:2001/05/22(火) 01:43
>>519
おいおい、あれだけで安心するのは早計すぎるよ。
ちゃんと調べたほうがいい。

とはいえ俺もメモリに確保したDCは持ちっぱなしにして、
それで市販ソフト出したことあるけど、
それについての不具合報告は皆無だった。
527519:2001/05/22(火) 03:09
>>526
忠告ありがとうございます。お察しの通り、今まで裏とってました。
幸い皆様に手がかりをいただけたので、探しやすかったです。

一応報告しておきます。MSDNによるとGetDCやGetDCExを使った場合
「When the application is finished drawing, it must release the device
context」とのことで、理由はDCキャッシュが云々だからだそうです(^-^;

CreateCompatibleDCでのDCの保証については、MSDNのこちらの
ソースが決定打っぽいです
Platform SDK > Graphics and Multimedia Services > GDI > Rectangles > Using Rectangles

正直>>520-526さん方の保証がなければ英文なんかまず
読まなかったと思います。ご協力ありがとうございました。
528519:2001/05/22(火) 03:14
というか市販ソフトだして大丈夫だったなら安心ですよー、ヨカタヨカタ
529デフォルトの名無しさん:2001/05/22(火) 04:59
>>528
全然駄目。そんなことしちゃいかんよ君たち。
DCってキャッシュだろ。キャッシュの数は昔5個だっけ?
複数のプログラムが保持しまくって、キャッシュが競合した時
画面が崩れるよ。

これって、Win16の知識だね。
530デフォルトの名無しさん:2001/05/22(火) 05:19
メモリデバイスコンテキストならいいんじゃなかったっけ
ダメだっけ?
531519:2001/05/22(火) 05:30
>>529
ムムム、また分からなくなってきました

確かに5個以上保持可能なWin32ベースであっても、ヒープ食い尽くすとまずいので
なるべくReleaseせよとヘルプにありますが、これは>>527の通り、GetDC等で取得
したDC、つまりディスプレイDCのみに適用されるのではないのでしょうか。

うーん、正直ディスプレイDCとCreateCompatibleDCで確保したDCの違いが
分からなくなってきました。これらは同種のものなのでしょうか(^-^;

>>529さんお詳しそうですし、MSDNお持ちでしたらできれば>>527
Using Rectanglesのソースをちょっと検証してみていただけませんでしょうか。
532デフォルトの名無しさん:2001/05/22(火) 09:27
>>529

>DCってキャッシュだろ。

以下はVC4のヘルプから抜粋。
------------------
デバイス コンテキストは、ディスプレイやプリンタなどのデバイスの描画属性に関する情報を収容した Windows のデータ構造です。すべての描画はデバイス コンテキスト オブジェクトを使って呼び出されます。デバイス コンテキスト オブジェクトは、線、図形、テキストを描画する Windows API をカプセル化したものです。Windows では、デバイス コンテキストを使って、デバイスに依存しない描画を行えます。デバイス コンテキストはスクリーン、プリンタ、メタファイルへの描画に使われます。
------------------

何処にキャッシュって単語があるのか見つけられん。
"DC = キャッシュ説"と"CreateCompatibleDCからのDC保持がマズイ"説の出典をキボンヌ。
533デフォルトの名無しさん:2001/05/22(火) 12:50
これ、実験したことある。

CreateCompatibleDC(NULL);
を無限ループさせて、NULL返ってきたらエラーを表示させるだけのやつ。

95でもNTでも2000回とか平気で動いたよ。
534デフォルトの名無しさん:2001/05/22(火) 12:59
>>532
DC保持がマズイのは、プリンタデバイスを考えてみろよ。
また、保持するのはいいけど、
デバイスが切り替えられた時のメッセージ処理、これ、PnPも
含むンだけど、それをしっかり処理して保持してるアプリっあるのか?
535デフォルトの名無しさん:2001/05/22(火) 13:01
>>533
だーんな。それはキャッシュの話じゃないぞ。
よく考えてみ。
536デフォルトの名無しさん:2001/05/22(火) 13:47
>>534

519を読み直せ。

>取得したディスプレイのデバイスコンテキスト(DC)と、それと互換のある
>オフスクリーン用DCを使い、Bitbltしています。

hdc = DetDC(hwnd); //hwndはウィンドウハンドラ
tmpDC = CreateCompatibleDC(hdc);
ReleaseDC(hwnd,hdc);
又は
tmpDC = CreateCompatibleDC(NULL);

↑上の例の様に確保したtmpDCの部分、メモリデバイスコンテキストだろ?
共通デバイスコンテキストとプライベートなデバイスコンテキストの区別付いてるか?
537デフォルトの名無しさん:2001/05/22(火) 14:05
×DetDC(hwnd);
○GetDC(hwnd);
鬱死

それで「デバイスコンテキスト==キャッシュ説」は?
マジで初耳なんだけど。VCのヘルプが間違ってんの?(藁
538デフォルトの名無しさん:2001/05/22(火) 14:36
だからGetDCで得られたDCは一次的なものって意味だろ。
539名無しんぼ:2001/05/22(火) 15:18
>>538
519からの流れを読むと538の答えはは意味不明だ。(藁
それじゃ537の答えになってないだろ。キャッシュって言葉の意味知ってるか?
540デフォルトの名無しさん:2001/05/22(火) 15:28
現金!
541538:2001/05/22(火) 16:00
>539
527を読む限り、「must release the device context」の理由が、
「DCはキャッシュだから」なんだろ。

で、これはGetDCで得たDCにしか当てはまらないだろ、というのが527の大意。

なぜならCreateDCで作られたDCはreleaseされるもんではなくてdeleteされるもんだからだ。
542539:2001/05/22(火) 16:59
>>541(538)
論点がズレてるな。

GetDCだろうがCreateDCだろうが"DC"は"DC"。
問題になるのは「GetDCで取ったDCを保持し続けた場合にDCキャッシュの問題がある」って事であって、529の「DCってキャッシュだろ」は日本語になっておらず意味不明。

大体にして519-528までは"ディスプレイ互換の「メモリDC」"の話をしてるんだけどな。
互換DCってGetDCする物なのかい?教えてくれ。>529,538
543538:2001/05/22(火) 17:06
だからCreateDCしたメモリDCは持ちつづけても大丈夫なんだろ。
ちなみに俺は519に全面的に同意。
544539:2001/05/22(火) 17:46
529の「DCってキャッシュだろ」に対する537の指摘に対して、538の「だからGetDCで得られたDCは一次的なものって意味だろ。」って回答も意味不明だって言ったんだけどな…
もうどうでもいいや、ヤメヤメ。
545デフォルトの名無しさん:2001/05/22(火) 18:48
デザイナーズ・コレクション
546デフォルトの名無しさん:2001/05/22(火) 19:09
コロンビア特別区
547デフォルトの名無しさん:2001/05/22(火) 20:05
NTサービスでタスクトレイにアイコン出すのを作ってるんだが、
ログオンをどうやってつかまえるのか、さっぱりわからん。
VNCのソース嫁ってか?
548デフォルトの名無しさん:2001/05/22(火) 21:47
>>547
ログオンシェルの起動を監視するか、
HKLM\Software\Microsoft\Windows\CurrentVersion\Run に
木馬を忍ばせておく…とか。
549デフォルトの名無しさん:2001/05/22(火) 23:46
>>536
共通デバイスコンテキスト?
なにそれ? 共通のデバイスコンテキストなど存在し無い。
つーか、OS2からWINの開発に流れた人間ならわかるはずなんだが…。
550デフォルトの名無しさん:2001/05/22(火) 23:52
>>543
CreateDC( "DISPLAY",NULL, NULL, NULL );
ってやると、GetDC(NULL)と同意さ。ぜんぜんメモリでバイスじゃないんだぜ。

きみたち全然駄目だね。
だんだん519の質問の趣旨とずれてきていると思われ。
取り敢えずCreateCompatibleDC(NULL)で確保したデバイスコンテキストは終了時まで掴んでてもOKって事でいいの?

>>550
つまんねぇ突っ込みやめとけ。519の趣旨から外れてるし。
552デフォルトの名無しさん:2001/05/23(水) 00:06
だからDISPLAYのDCじゃなきゃいいんだろ?
553デフォルトの名無しさん:2001/05/23(水) 00:31
>>552
おれもそう思うが。となるとDisplayDCと混同したり
プリンタのDCを持ち出してきた529とか534あたりはキティっぽいな。
554553だけど:2001/05/23(水) 00:33
間違えた、
Display”の”DC
だ。
>>552
やっぱそうですよねぇ。安心してCreateCompatibleDC(NULL)使うことにします。
私はこのへんで退散します。
556519(レス感謝):2001/05/23(水) 02:35
レスもらってるのに登場遅くてすいません、責任持ってまとめさせていただきます

・ディスプレイDCは共通DC、プライベートDC、クラスDCの3種ある
・共通DCは使用後すぐにリリースしなければならない
・メモリDCはアプリ終了時まで保持したままでも構わない(経験的に)
・そして、即リリースすべきか否かは、取得方法ではなく上記の区別によって判断する

ただWin16時代と違い、Win32時代での「即リリースすべし」の理由って、
とり続けるとヒープ食い尽くすからってだけなんですよね?(たぶん)。
ならばきっちり管理しておけば持ち続けても大丈夫っぽいですね。やりませんけど。

というわけで私も>>555さんと同じスタンスでいきたいと思います。

(唯一不安なのが互換メモリDCが「オリジナルと互換のカラーフォーマット」
とかいうのを含んでること。これってユーザーが画面のビット深度変えたら
CreateCompatibleDCやりなおすべきということなのかな?やらなくて大丈夫っぽいですが)
557デフォルトの名無しさん:2001/05/23(水) 02:44
動作中に色深度変えるようなユーザは逝っていいからいいです。
558デフォルトの名無しさん:2001/05/23(水) 03:02
MFC等ではどうやっているの?
一時的に大量のDCが作成される可能性があるなら、問題無いのでは?
559デフォルトの名無しさん:2001/05/23(水) 12:09
NTクライアント、Win95クライアントがありいずれもDHCPクライント
です。これらのクライアント上でDHCPアドレスを取得させるVBアプ
リを作成しております。GetAdaptersInfo()関数を使えばよいところ
まで調べましたが、この関数はWin2000Pro、Win98上でしか使用でき
ない関数らしいです。NT、Win95の場合はどのようなどのようなAPI関
数使うのでしょうか。よろしくお願いします。使用言語はVB6.0です。
560デフォルトの名無しさん:2001/05/23(水) 12:25
>>559
winsock使え。
561デフォルトの名無しさん:2001/05/23(水) 13:13
>560
サンキョー。
んじゃ、Win2KPro,WinNT,Win98,Win95すべてで使う場合
はじめからwinsockで作ったほうが楽でしょうか?
562デフォルトの名無しさん:2001/05/23(水) 13:33
GetOpenFileNamePreviewは、AVIのプレビューしかできません
563デフォルトの名無しさん:2001/05/23(水) 14:09
>>561
ていうか、Win95が入ってる時点でWinsockしか選択肢が無い気が。
564デフォルトの名無しさん:2001/05/23(水) 14:55
>>563
正確に言うと、Winsock2 が使えないので、Winsock1 で作る必要が…。
モノによっては、結構、辛いかも。
565デフォルトの名無しさん:2001/05/23(水) 16:25
>564
サンキョー!!
Win2K,Win98はAPIで、WinNTはwinsock2で、Win95はwinsockで
やってみます。しかし、WinNT、Win95で時間かかりそう・・・。
時間があればいいが。
566デフォルトの名無しさん:2001/05/23(水) 20:03
>>564
Win95でも、 W95ws2setup.exeでアップグレードしたら、
WinSock2.使えるとおもうけど?
567デフォルトの名無しさん:2001/05/24(木) 10:40
>>566
OSの安定と引き替えになりますが、よろしいでしょうか?
568デフォルトの名無しさん:2001/05/24(木) 16:59
>>
> サンキョー!!
ワラタ
569デフォルトの名無しさん:2001/05/25(金) 16:56
CreateFontで作ったHFONTだけど、
これを30個くらい作ってもちっぱなしにしたいんですが、
問題ってありますかね。
HFONT1個作るとリソースを100KB食うんじゃボケ!とか無いですよね。

いろんなフォントの混じった文章を表示したいんだけど、
その都度CreateFontすべきですかね……オーバーヘッドが嫌だなー……
570バスカード:2001/05/26(土) 11:33
別のスレで聞いたらスレ違いだと言われたのでこちらで伺わせていただきます。
他のアプリケーションのウィンドウをSetParent で 自身の子ウィンドウにした場合の
弊害は何ですか?MSDNには「新しい親ウィンドウと子ウィンドウは、
同じアプリケーションに属していなければなりません。」と
書いてありますが、試してみると一応表示されるですが。
どなたがご存知の方がいましたらお願いします。
(何をしたいとか言うわけではなくふと疑問に思いました)
571デフォルトの名無しさん:2001/05/26(土) 21:28
質問なんですが、グラフィックとかを保存するためメガ単位の大きなメモリを確保したい場合、
どうしたらよいのでしょうか。
現在は、
lpBuffer = (char *)GlobalAlloc(GPTR,dwSize);
というようにGlobalAllocを使っているのですが、
先日、どこかでGlobalAllocを使うのは古いやり方的な記事を見かけたので。
lpBuffer = new char[dwSize];
のようにしたほうが良いのでしょうか。
それとも他に有効なAPIがあるのでしょうか。
572デフォルトの名無しさん:2001/05/27(日) 00:26
>>571
new演算子って普通はmalloc()を呼ぶはず。こいつも確か
HeapAlloc()とVirtualAlloc()を呼んでいた記憶がある。

ある程度大きいサイズの場合はVirtualAlloc()がいいん
じゃないかなぁ。ちまちまと確保するには向かないけど。
あ、メモリプールとか自作するんなら話は別ね。
573石本:2001/05/27(日) 00:28
ここで質問しても教えてくれないこともないんですが、
煽りや初心者を馬鹿にしたレスが多いので、
活動の盛んな普通のVC、VBプログラミングのQ&A掲示板の
URL教えてください。よろしくお願いします
574デフォルトの名無しさん:2001/05/27(日) 01:34
>>571
別に構わないと思いますが。
私はLocalAlloc使ってるし。
575デフォルトの名無しさん:2001/05/27(日) 01:38
>>573
まず、周りを見回すだけの分別を身に付けて下さい。
今のあなたでは、他のサイトに行ってもそちらで同じ事を繰り返すでしょうから。
そんな訳で教える事は出来かねます。
576デフォルトの名無しさん:2001/06/04(月) 17:27
>>573
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991576947&ls=50
ここなら教えてくれるかも。
こっちはWin「32」APIだからね(w
577デフォルトの名無しさん:2001/06/06(水) 21:33
NET STARTと同等のことを実現するにはどうしたらいい?
ShellExecute("NET START")はイヤぁん。
578デフォルトの名無しさん:2001/06/06(水) 21:50
>>577
SDKの
Base Services|DLLs, Processes,...|Services
を見なさるが良いでしょう。
OpenSCManager→EnumServicesStatus→OpenService→StartService
579577:2001/06/06(水) 23:33
申し訳ない。Windows 9xでNET STARTを実現したい。
580デフォルトの名無しさん:2001/06/07(木) 02:25
>>577
そもそも、Win9Xには、Net Startで開始させるべき「サービス」が
無いような気がするが。
581デフォルトの名無しさん:2001/06/07(木) 02:28
NetWareが入ってるのが前提なら、NetBEUIを使うのがいいのかな…
582デフォルトの名無しさん:2001/06/07(木) 13:58
>>579
RegisterServiceProcess のことか?
NT のようなサービスじゃないけど、ログオフ時にも頃されないプロセスを作れる。
583デフォルトの名無しさん:2001/06/07(木) 19:27
VC&GDIでビットマップのデバイスコンテキストにペンを使って直線を
描画したいのですが、CreatePen関数でペンを作成したまではよかったのですが
その後、LineTo関数で描画するときに”現在のペン”に
作成したペンを指定する方法がわかりませんでした。
教えてくださいお願いします
584名無しさん:2001/06/07(木) 19:37
SelectObject
つーかどんな初心者本にも載ってるし、GDIのサンプル三鷹?
585583:2001/06/07(木) 19:47
>>584
ねただよ
バーか
586583:2001/06/07(木) 19:52
すみません、ネタでなくてマジでした(笑汗
SelectObjectは知ってたのですが、
GDI初心者だったので使い方をよくわかってませんでした。
しばらくリファ眺めてたらわかりました。
どもすんませんです
587ちなみに:2001/06/07(木) 19:53
583ですが、
585は僕じゃないっす(w
588デフォルトの名無しさん:2001/06/08(金) 21:15
GDIを使って、ゲームみたいにマスクを作成したいのですが、
あるRGB値以外の色をすべて塗りつぶすというか指定色に置き換える
関数とかは無いのでしょうか?
589デフォルトの名無しさん:2001/06/08(金) 21:32
>>588
パレットを使うか、DIBで自分で走査した方が速いと思われ。
590デフォルトの名無しさん:2001/06/10(日) 19:35
アンインストーラが再起動なしで自分自身を削除したり置き換えたりする
にはどうしたらいいでしょうか?
バッチファイルを%temp%に作成するという方法しか思いつかなかったの
ですがもっとカコイイ方法があったらご教授ください。
591デフォルトの名無しさん:2001/06/10(日) 21:12
>>590
ネタはご遠慮ください
592デフォルトの名無しさん:2001/06/10(日) 21:12
>>590
ネタはご遠慮ください
593デフォルトの名無しさん:2001/06/10(日) 21:12
>>590
ネタはご遠慮ください
594デフォルトの名無しさん:2001/06/10(日) 21:12
>>590
ネタはご遠慮ください
595デフォルトの名無しさん:2001/06/10(日) 22:57
age
596590:2001/06/11(月) 11:31
ネタじゃないのに…。誰も知らないのかやっぱ…。
597デフォルトの名無しさん:2001/06/11(月) 11:40
591-594自体がネタだと思われ。
とりあえず、再起動なしで出来るという方法はしらない。

一応、別のexeを起動してそこから削除するという方法はあるっぽい。
試したことはないけど。
598デフォルトの名無しさん:2001/06/11(月) 11:53
>>590
[ヒント]
CD や FD から起動されたインストーラが「Disk2 を入れてください」で
インストールを続けるヤツがあるだろ?

よく考えりゃ、おかしいと思わないか?

どうしてそんなことができると思う?
599デフォルトの名無しさん:2001/06/11(月) 11:58
どっかにコピーするか、
メモリ上で管理!
メモリで管理したほうがカコイイ。
600デフォルトの名無しさん:2001/06/11(月) 12:34
>>598
そっちこそネタだ
601590:2001/06/11(月) 14:08
コピーすれば置き換えやリムーバブルメディアから起動したときの
インストール続行はできそうですけど、削除はどうしても最後にexeが
1つ残ってしまうような…。
602デフォルトの名無しさん:2001/06/11(月) 14:22
知らないのか……って書くことによって、
無駄にプライド高い人を煽って答えさせようとする人多いね。
煽るほうも煽られるほうもアホウ。

オレは知ってるけど教えてあげないもんね(藁 ←こういうやつも多いか(藁
603デフォルトの名無しさん:2001/06/11(月) 14:36
いいじゃん、再起動時に消してもらうようにしとけば。
tempの中なんて誰も気にせんよ。

とか書いてて変な方法を思いついた。
タスクスケジューラにcommand.comを登録して、delコマンドを記述しておいて消してもらおう(藁
アンインストーラが終了した5分後とかにこっそりcommand.comが起動する。
アツイ!(藁

NT系だとめんどくさそうだけどね。
604598:2001/06/11(月) 14:54
>>599
そうだよ、漏れはヒント = ネタを提供してあげてんのよ?
もしかしてキミ、そんなことできっこないなんて思ってない?
あまりそんなことばっかり言ってると、「厨房」って言われるよ。

>>602
えっ、そうなの?
じゃ、煽られた漏れはアホウなんだ。(ムッ
[こたえ] って書こうと思ったけど、やめとくか。
605デフォルトの名無しさん:2001/06/11(月) 15:08
>>603
ATコマンド書いちゃえば良いんじゃ?<NT
606名無しさん@お腹いっぱい。:2001/06/11(月) 15:16
API-Guideダウンロードしてね
http://www.allapi.net
607590:2001/06/11(月) 16:44
煽るつもりじゃなかったのに…。
Googleとかで検索してみても再起動を必要としない方法は見つからな
かったから本当にできないのかと思ってダメモトで質問したんですが…。
知ってるのに教えてもらえないなんてすごい悲しい…。
608デフォルトの名無しさん:2001/06/11(月) 17:44
>>590
CreateFileで
FILE_FLAG_DELETE_ON_CLOSE
とかつかえねーか?
609デフォルトの名無しさん:2001/06/11(月) 17:45
エクスプローラとか、フォルダの中のファイルに変更があると
表示が更新するのですが、どうやって実現してるのか教えてください。
ReadDirectoryChangesWだとNT系しか使えないので
610デフォルトの名無しさん:2001/06/11(月) 17:58
>>590
http://www.numeric.co.jp/Win32.htm
検索したらこんなのが出てきたぞ。
スマートな方法じゃないけどな
611デフォルトの名無しさん:2001/06/11(月) 19:06
>>609
FindFirstChangeNotification()
FindNextChangeNotification()
WaitForSingleObject()
たぶん別Threadにしちゃったほうが実装がシンプルかと。
612590:2001/06/11(月) 19:32
>>608
Win9xやWin2kだと消えてくれないので却下になりました。
で、>>598だけどFDならシステムが自動的にやってくれる、CDなら
インストーラを一時的にコピーするか何かだと思いますがどっちにしろ
自分を削除はできない。よってできないと思うのですが何か間違ってま
すか?
613609:2001/06/11(月) 19:35
>>611
サンクス。
ばっちりそれです。
614デフォルトの名無しさん:2001/06/11(月) 19:45
API-Guideダウンロードしてね
http://www.allapi.net
615598:2001/06/12(火) 19:29
>>612
まちがってるよ。
コピー先はどこだと思う? (→ /swaprun 参照)

MSDN 逝ってヨシ。

ただし、これだけだとダメ。もうひと工夫、いるよ。
616590:2001/06/13(水) 11:47
/swaprun:cd リンカオプションですか? これってNT系じゃないと使えなかっ
たような。
 もしかして
・動的に確保したメモリにコードをコピーした後、自分自身をFreeLibrary
 する
という方法ですか?
617598:2001/06/13(水) 12:59
>>616
そ。

/swaprun は :cd にしても :net にしても、ローカルの HD にあるときは
何もしてくれない。だからこれだけではダメ。

もひとつ、リロケーションについて考えておく必要がある。
ここでも工夫が必要。

さらにたぶん、あと、もうひとつ。
.EXE のモジュール(ハンドル)は、FreeLibrary できないんじゃないかと思う。
だからアンインストーラを○×△□から起動するようにする。

あ〜ぁ、結局、(ほとんど)全部バラしちゃったよ。ハッカーの手の内...。 >>602
618デフォルトの名無しさん:2001/06/13(水) 13:58
なるほど。rundllを利用するのか。
619598:2001/06/13(水) 15:10
>>618
だぁ〜かぁ〜らぁ〜、伏せといたのにぃ…。
クラッカーどもに悪用されたら、どうすんのよぉ。
620デフォルトの名無しさん:2001/06/13(水) 15:22
>>619
クラッカーはこんなとこみてないでしょ
プライド他界から
621デフォルトの名無しさん:2001/06/13(水) 15:46
というか、そういうものは隠すのではなく
公開して早くMSに直して貰うべきだと思う。

MSが直さないとしても。
622デフォルトの名無しさん:2001/06/13(水) 16:02
>>621
話の流れ見えてるか?
何をどう直すと言うんだ?不具合があるようには見えないが。
623デフォルトの名無しさん:2001/06/13(水) 16:19
>>622
クラッカーに利用される

セキュリティホール

M○の不具合
という流れなんじゃねーの?
624デフォルトの名無しさん:2001/06/13(水) 17:07
バカが一人紛れ込んでいるな(藁
625デフォルトの名無しさん:2001/06/13(水) 17:47
>>623
デムパ君ですか?
626デフォルトの名無しさん:2001/06/13(水) 17:48
>>623
どっからセキュリティホールなんて出てきたんだよ。
お前の脳内のことまではわからんけどよ。
627デフォルトの名無しさん:2001/06/13(水) 18:14
>>623は、format.exeを使ってHDをフォーマットするクラッキングソフトがあったら
(ていうかあるけど)「format.exeにはセキュリティホールがある!」と言い出すんだろか。
628デフォルトの名無しさん:2001/06/13(水) 18:32
>>625-627
623でなくて621に突っ込むべきに思えるのは俺だけか。
629デフォルトの名無しさん:2001/06/13(水) 18:38
彼女ができるAPIおしえれ
630>>629:2001/06/13(水) 19:21
BOOL GetGirlFriendEx(int height, int weight, int salary)

[パラメータ]
int height - 身長
int weight - 体重
int salary - 給料

[戻り値]
関数が正常に終了した場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。
631デフォルトの名無しさん:2001/06/13(水) 19:23
>>628
だって、621==623だろ。
632デフォルトの名無しさん:2001/06/13(水) 19:26
>>629
void MakeHoney(int resnumber)
{
  if (resnumber == 629)
    cout << "横着すんな";
  return;
}

ところで初心者なんですが、LoadLibraryで読み込んだ
モジュールの関数の使い方がわからないっす。
GetProcAddressとかでアドレスを取得するとこまでは
わかるんですが、その先が・・・・。
どなたか教えてください。かしこ。
633デフォルトの名無しさん:2001/06/13(水) 19:27
>>630
BOOL GetSteadyEx(LPPERSONAL lpstatus)

[パラメータ]
ステイタスを含むPERSONAL構造体へのポインタ

[戻り値]
関数がせいこうした場合はTRUEを返します。

[NOTE]
GetGirlFriendEx関数は過去の互換性を保つために用意されています。新しいアプリケーションではGetSteady関数を使用してください。
634デフォルトの名無しさん:2001/06/13(水) 19:30
>>632
(*pfunc)();
635デフォルトの名無しさん:2001/06/13(水) 19:31
struct _tagPersonal {
    BOOL bLives; // 生死
    int height; // 身長
    int weight; // 体重
    int salary; // 年収
    int job; // 職業
    LPPERSONAL lpFarther; // 父親のステイタス
    LPPERSONAL lpMother; // 母親のステイタス
};
typedef struct _tagPersonal PERSONAL;
636デフォルトの名無しさん:2001/06/13(水) 19:32
>>633
BOOL GetWife(LPPERSONAL lpstatus)

[パラメータ]
ステイタスを含むPERSONAL構造体へのポインタ

[戻り値]
関数がせいこうした場合はTRUEを返します。

[NOTE]
この関数呼出し後、GetSteadyEx()を呼び出すと、思いもよらぬことが起こるかもしれません。
637デフォルトの名無しさん:2001/06/13(水) 19:33
633さんの関数を使ったところ「不正な割り込みエラー」がでてしまいました。
どうすればいいのでしょうか。
638デフォルトの名無しさん:2001/06/13(水) 19:44
>>637
そこで「無視」を選択して処理を強行することもできますが、
度重なると予期しない結果となることがあります。
「中止」を選択するとプロセスは中断されます。
根性が続く限り「再試行」を選択するべきです。
639デフォルトの名無しさん:2001/06/13(水) 20:33
ちゃんとした手続きをふまずに
沢山のGirlオブジェクトを挿入ソートしたら
Prisonオブジェクトに入ったまましばらく戻って来れない可能性があります。
640デフォルトの名無しさん:2001/06/13(水) 20:53
構造体は
struct tagDATA {
int i;
} DATA;

みたいにtagつけるのが奨励されているの?
641デフォルトの名無しさん:2001/06/13(水) 20:53
構造体は
struct tagDATA {
int i;
} DATA;

みたいにtagつけるのが奨励されているの?
642デフォルトの名無しさん:2001/06/13(水) 21:03
その部分は構造体タグっていうらしいからなんじゃないの?
省略もできるから、typedefするんだったらそもそも要らないよね。
643デフォルトの名無しさん:2001/06/13(水) 21:27
自己参照するときに必要では?
644デフォルトの名無しさん:2001/06/13(水) 21:28
Windows 2000 Pro クライアント+VB6の環境です。
あるドメインアカウントに、ローカルクライアント(Win2KPro)の
「サービスとしてログオンの権利」を与えたいのですが、そのための
APIが見つかりません(検索がヘタなのか・・・)。
ご存知の方、よろしくお願いします。キーワードだけでも・・・・。
645デフォルトの名無しさん:2001/06/13(水) 21:57
>>644
PriviledgeとかSIDとかACEとか(ちょーテキトー)
646623:2001/06/13(水) 22:02
おお、「クラッカー」「MS」「不具合」
の三題噺だったのに・・・
647デフォルトの名無しさん:2001/06/14(木) 12:52
質問です。
ICInstall() APIを利用してcodecをインストールしたいのですが、
どうあがいてもICERR_OKを返してくれません。
GetLastError()でエラーを見ると、モジュールがありません、
みたいなエラーを返してきます。

それでも、レジストリには登録されているみたいなのですが、
どうしたらいいんでしょうか。

また、codecをインストールする正確な情報ってどの変にありますか?
最悪、infでもInstallShieldでもかまわないのですが
648647:2001/06/14(木) 12:53
codecっていうか、ICMですね。
よろしくお願いします
649デフォルトの名無しさん:2001/06/15(金) 19:33
GDIでビットマップをX軸またはY軸で反転する関数って
ないでしょうか??
自分で走査するしかないんでしょうか。
650デフォルトの名無しさん:2001/06/15(金) 20:44
BitBlt
651649:2001/06/15(金) 21:09
BitBltは使ってるんですが、対称反転方法が見当たらなかったので
諦めてました(汗
なんかウラワザみたいなやり方があるんでしょうか?
すみませんが詳しく教えてください。お願いします
652デフォルトの名無しさん:2001/06/15(金) 21:14
終点を始点より左に持っていくんだっけ?
653649:2001/06/15(金) 21:30
>>652さんの書いてる方法でやろうとしたんですが
転送元と転送先の幅を別々にできなかったので、
代わりにStretchBltを使えばできました。
情報ありがとうございます!
654647:2001/06/16(土) 16:12
ICMに付いて質問です。
ICOpen() APIを使用してcodecのハンドルを得たいのですが、
デフォルトとして未圧縮のハンドルを取得するにはどうしたら良いでしょうか。
mmioFOURCC('D', 'I', 'B', ' ');だと失敗してしまいます。
もちろん、ドライバが無いのだから失敗するのは当然だと思いますが。
ICCompressorChoose()を利用すると、取得できるので、
何とかできないかと思って質問します。

#他BBSにマルチポストしてます
655654:2001/06/16(土) 16:13
age忘れてました。
656654:2001/06/16(土) 16:24
失礼しました。勘違いだったようです。
COMPVARS構造体を良く覗いた所、
未圧縮を選択したときのみ、hicメンバーは0になってました。
しかし、普通AVIを処理するアプリケーションは未圧縮を
自前で処理しているのでしょうか?
657デフォルトの名無しさん:2001/06/16(土) 23:36
ボタンとかの上にある文字列は、ウィジェットを無効にすると灰色になりますが、
タブコントロールやツリービュー等は無効にしてもそのままですよね。
そいつも灰色にする簡単な方法ってあるのでしょうか?文字色直接変えるほかに。
658デフォルトの名無しさん:2001/06/17(日) 00:50
ウィジェットってなんですか????
659デフォルトの名無しさん:2001/06/17(日) 01:05
>>657
Winではウィジェットって言わんのね
ツリービューは無効化すると全部灰色になると思うが。。
タブはたぶん無理。
660657:2001/06/17(日) 01:26
>>658
適当に言葉選んじゃってすいません。えっとコモンコントロールの事です
>>659
またもやすいません。ツリービューではなくリストビューでした。自分最悪
リストビューのcolumの部分の文字も恐らく灰色になりませんよね。

やはりタブは無理ですか。リストビューはまだ良いのですが、
タブの文字が灰色にならないのはどうにも…。無効化したとき
まるでフリーズしたみたいです。みなさん一々DELETEITEMしてるのかな。

レスどうもでした。
661デフォルトの名無しさん:2001/06/17(日) 01:47
確かにタブがグレーになるのは見たこと無いですね……
中身を全部グレーにして誤魔化すしかないのかも。
662657:2001/06/17(日) 01:54
>>661
やはりその一手ですよね。タブだけ立体的に文字がへこまなくて悲しい…
わかりやすいGUIスレでグチってきたい気分
663デフォルトの名無しさん:2001/06/17(日) 09:58
windowsでLinuxでいうrootウィンドウに描画する方法ってあるのかな?
どうやってもアイコンの上にのっちゃうし。。。
あと、explzhのシェルって("即時解凍"とか)関連づけでやっているんじゃないんだね。
ファイルオプション見たけどopenの設定しかされていなかったよ。
なにやっているんだろう??
664デフォルトの名無しさん:2001/06/17(日) 10:14
>>663
getDC(0)はダメなの?
665663:2001/06/17(日) 11:30
>>664
ちょっち重たいよね。勝手に書き直しやがるしw (メッセージキャプってやりますか。。)
その場所にwindow作るって事もしてみたい。。(アクティブデスクトップなものを自分で作るようなw)
666デフォルトの名無しさん:2001/06/17(日) 12:48
VCのように ( でとじると引数などが浮き出るようなエディット
をつくりたいのですが普通はどのように処理しているのでしょうか?
667デフォルトの名無しさん:2001/06/17(日) 13:09
>>663
> ("即時解凍"とか)
「Shell Extension」がキーワードなり。
668デフォルトの名無しさん:2001/06/17(日) 14:24
>>666
全部自前で描画してるのではないでしょうか?
669666:2001/06/17(日) 15:53
>>668
いえ、MFCでeditVeiwを利用しています。
とりあえずWM_CHARで( が入力されたかを調べ、入力されたら
その行を取得して解析しています。
670デフォルトの名無しさん:2001/06/17(日) 16:33
ユーザーモードドライバを書いてるのですが、
DRV_OPENメッセージで他のドライバにアクセスをするAPI(ICOpen等)
を呼ぶと意図したとおりに登録されないのですが、
これは許されていない動作でしょうか?
671デフォルトの名無しさん:2001/06/17(日) 17:12
子プロセスとして立ち上げたアプリが 開こうとしてる COM3 を横取り
したいのです。

 名前無しパイプでもフックでも出来ないようなんですが、
 やっぱりデバイスドライバを作るしかないのでしょうか?

具体的には、エッジ(PHS)のアプリが使い難いのでこいつが
使ってるコマンドを調べたいのです。

使ってない COM5とかをフックして COM1にそのまま流すような
ドライバって作るの大変でしょうか?
672デフォルトの名無しさん:2001/06/17(日) 17:19
>>671
Win9x系なら簡単。
VxD作るだけ。
その程度ならDDKのサンプルにあるCOMドライバをちょこっといじるだけでできるでしょ。
673671:2001/06/17(日) 17:48
レスありがとうございます。 MSDNを調べてみます。

ところで、デバッカで調べた所 WriteFileへジャンプしてるアドレスは判りました
これを他のアプリにフックしてデータ収集して表示する事は可能でしょうか?

別空間だから無理かな? 
674デフォルトの名無しさん:2001/06/17(日) 17:51
>>671
VxDなりユーザモードドライバなり、作るのが大変か…って聞かれても、
あんたのスキルがわからなきゃ、答えようがないだろが。

自分で作ろうというやる気があるんなら、
M$からダウソできるサンプルでなんとかなるはず。

しかしCOMnを覗き見するツールなんて、探せばどっかにありそうなモンだが?

なくても、RS232Cのプロトコルアナライザを買ってくれば、
間違いなく覗ける。

方法はいくらでもあるぞ。
675デフォルトの名無しさん:2001/06/17(日) 18:10
>>666 >>668 >>669 の流れが不自然な気がするの俺だけ?
>>671
_INMMと同じ方法使えばいいんじゃないのかな?
(_INMMって何ですか、とか訊くなよ)
676671:2001/06/17(日) 20:32
うーむ。デバッカを使うと BCC5.01のデバッカ上では何故かデバイスを
認識しなくなるし、VCのデバッカでは一度ブレークさせると固まってしま
うしで、 デバッカで解析するのは無理みたいです。

>>674
ラインモニタは H''との接続がUSB なんで意味ないんです。
COMを覗けるツールも、あったのはWin9xの シリアルドライバを
書き換えてしまうもので、つまりUSBの仮想ドライバには使えないんです

やっぱりVxDみたいですね。調べてみます。
677デフォルトの名無しさん:2001/06/17(日) 21:14
>>671
USBだとすると話は別。WDMじゃないとできないかも。
678671:2001/06/17(日) 21:35
WDM について用語だけなぞってみました。
 VxDだと USBの仮想シリアルCOM3が呼べないかもしれないので
フィルタ型も作れるという WDMを調べた方がいいかもしれませんね
ありがとうございます
679デフォルトの名無しさん:2001/06/18(月) 00:06
>>678
それそれ。
PHS程度の速度なら全データロギングしてもほとんど影響ないと思う。
リモートデバッガ使うという手もあるけど、フィルタ型WDM作る方が楽なような気が。
680デフォルトの名無しさん:2001/06/20(水) 14:56
DLL内関数でDLLのリソース文字列をLoadStringするときのハンドルは
何を渡したらいいのでしょうか?
681デフォルトの名無しさん:2001/06/20(水) 15:47
DllMain に渡されてきたハンドル。
どっかに覚えておくこと。
682デフォルトの名無しさん:2001/06/20(水) 15:55
>>681
いや、それだと親インスタンスのハンドルが入っているはず。
683デフォルトの名無しさん:2001/06/20(水) 15:58
親インスタンスって意味不明だけどDllMainに渡されるのはそのDLL自身
のインスタンスハンドルだよ。
どうしても後から取得する必要があるときはVirtualQueryを使うという
方法もないではない。
684680:2001/06/20(水) 16:14
>>681-683
LoadStringできました。ありがとうございました。
685デフォルトの名無しさん:2001/06/23(土) 11:47
BackOffice Resource Kitを買う金ありません。実は、checkras.exeが欲しいの。
ログインしたときクライアントがRASかLANかをチェックしてくれるやつ。
NT Workstation、Win2000Proの場合、どのレジストリを見るとRASクライアント
だってわかるんでしょうか。
いろいろサーチしましたが、win9xのケースかわからんかったよ。
誰か教えてください。
686デフォルトの名無しさん:2001/06/23(土) 13:33
他のアプリケーションが持ってる、リストビューコントロールから、
アイテム文字列を引き出そう、とおもいました。環境はWin2000です
 無事Windowも探せて、アイテムの数とかは取得できました。
が、肝心の内容の取得に失敗します。たぶん、LVM_GETITEMの
LPARAM(が指し示す先)がプロセス間でマーシャリングされない
事が原因だと思うのですが、どうやって解決すればいいのでしょうか。
687デフォルトの名無しさん:2001/06/23(土) 13:47
>>686
潜り込めばいいだけ。
688デフォルトの名無しさん:2001/06/23(土) 14:21
>>686
フックしちゃえば何でもやり放題。
689デフォルトの名無しさん:2001/06/23(土) 17:50
>>686
共有メモリを使う
690686:2001/06/25(月) 01:38
無事、WH_CALLWNDPROCとFileMappingを使うことによって、
アイテム文字列を引き出す事に成功しました。
>>687-689のみなさま、ありがとうございました。
691デフォルトの名無しさん:2001/06/25(月) 19:44
質問です!!
LoadImage関数と同じような感覚で
JPGファイルをファイルから読み込めるクラスないでしょうか?

できれば、内部的にHBITMAPとかに変換してくれるのが
ベストです。
どうか教えてください
692デフォルトの名無しさん:2001/06/25(月) 19:45
>>691
あっちで回答もらっただろ。
「無いです」って。日本語読めないの?
693デフォルトの名無しさん:2001/06/25(月) 20:29
Susieプラグインでも使っとけ。
694名無しサンプリング@48kHz:2001/06/25(月) 21:30
Win32SDK でのコントロールの使いかたについてのいい解説書ない?
MSDNの英語と猫でもわかる見ながらヒーコラやってますがひどく効率が
悪いきがする。
695デフォルトの名無しさん:2001/06/25(月) 23:15
25歳以下ならひーこらやるべし。
696デフォルトの名無しさん:2001/06/25(月) 23:27
1回覚えれば済むことに、効率求める必要なし、
しっかり勉強しましょう。
697デフォルトの名無しさん:2001/06/26(火) 00:15
あっちってどっち?
>>692
698デフォルトの名無しさん:2001/06/26(火) 00:43
LoadImageはJPGファイルを読み込めたような…。
699デフォルトの名無しさん:2001/06/26(火) 00:50
>>694
APIバイブル2はどう?
700デフォルトの名無しさん:2001/06/26(火) 00:55
700!
701デフォルトの名無しさん:2001/06/26(火) 00:57
>>694

API全般なら
チャールズ・ペトゾロの「プログラミングWindows」

コントロールの使い方なら、
ハーバード・シルトの「Windowsプログラミング」

金があるなら両方買え。
702デフォルトの名無しさん:2001/06/26(火) 01:04
703デフォルトの名無しさん:2001/06/26(火) 01:08
エディットコントロール(1行)のキャレット位置を取得・変更したいんですが、どうすればいいんでしょうか?
EM_GETSEL・EM_SETSELでもできそうなんですが、リファレンスには何も書いてないので。
もしかしたら、ほかの関数でもあるんでしょうか。
704デフォルトの名無しさん:2001/06/26(火) 02:28
>>703
当たってるよ、MSDLにもちゃんと使い方載ってる。一応書いておくと、

HWND hwnd_editctrl; //=GetDlgItem等で取得したものを入れておく
DWORD s; //キャレットの始点位置が格納される
DWORD e; //キャレットの終端…が…
SendMessage(hwnd_editctrl, EM_GETSEL, (WPARAM)&s, (LPARAM)&e);

//キャレットを12番目の文字の位置に移動し、さらに3文字選択させる
SendMessage(hwnd_editctrl, EM_SETSEL, 12, 15);

あるいはエディットコントロールに直接WM_KEYDOWNを送り込むとか > 変更
705デフォルトの名無しさん:2001/06/26(火) 05:29
質問です!!
LoadImage関数と同じような感覚で
PNGファイルをファイルから読み込めるクラスないでしょうか?

できれば、内部的にHBITMAPとかに変換してくれるのが
ベストです。
どうか教えてください
706デフォルトの名無しさん:2001/06/26(火) 07:00
>>705
BITMAPINFOHEADERのbiCompressionに設定する
値でBI_JPEGやBI_PNGのことはは調べてみたか?
707デフォルトの名無しさん:2001/06/26(火) 09:01
>>706
マルチポストコピペキチガイにマジレスしても無駄です。
その上「あっちってどっち?」などとしらばくれるアホは孤独死するまで
放置してください。
708デフォルトの名無しさん:2001/06/26(火) 12:42
252 名前:デフォルトの名無しさん 投稿日:2001/06/26(火) 09:31
jpeg でゆくなら Intel performance library のを使うか、
IJG のソースを使うかすると良いのでは。PNG なら libpng
でも使ってみては?

google ででも検索して入手してね。
もう二度と同じ質問はしないでね。
709デフォルトの名無しさん:2001/06/26(火) 16:00
ありがとうございました、また何かあれば
質問させていただきます!!
>>708
710デフォルトの名無しさん:2001/06/26(火) 16:29
>>709
いや、お前ウザイからもう質問すんな。
711デフォルトの名無しさん:2001/06/26(火) 17:29
つーかあっちの回答をコピペしただけじゃん。
質問してること自体がネタだろ? 氏ね。
教えたがりクンも同罪だぞもはや。
712デフォルトの名無しさん:2001/06/26(火) 18:37
というわけで、質疑応答がなりたたなくなったので
このスレはsage
1番さん削除依頼だしてきてね
713デフォルトの名無しさん:2001/06/26(火) 18:49
>>712
なんで>>1が削除依頼ださなあかんねん。あほ。
714デフォルトの名無しさん:2001/07/13(金) 05:56
役立ちage
715デフォルトの名無しさん:2001/07/13(金) 19:30
32ビットポインタって0〜0xFFFFFFFFですか
それとも0から0x7FFFFFFFですか?
716デフォルトの名無しさん:2001/07/14(土) 02:33
質問箱と、ここって、どう使い分ければいいんじゃボケ!
717デフォルトの名無しさん:2001/07/14(土) 03:20
>>715
ふつーに答えるとすれば、32ビットポインタなんだから
0〜0xffffffffまでだよ。

その情報が知りたいって事は、ポインタの空き数bitを
フラグか何かの他の用途で使いたいとか?
確かにWin32のポインタは数bitは使われて無い様な気がする。
そういう情報はInsideWindowsとかに載ってそうだけど。
718デフォルトの名無しさん:2001/07/14(土) 05:13
>>716
たしかこっちを使い切ってから質問箱を再利用する予定じゃなかったか?
せっかちさんがいたみたいだけど。
>>717
そんなOS9以前のMacじゃあるまいし。一部のビットを他の目的に使う
なんてことはできないよ。
719デフォルトの名無しさん:2001/07/14(土) 07:26
>>718
たしか、Rubyがポインタ(オブジェクト)か整数値かどうかを、最下位ビットで判断してる。
ポインタの最下位ビットは、アラインメントの関係で0になるだろうって。
720デフォルトの名無しさん:2001/07/14(土) 09:34
>>719
Rubyの発明じゃなくて、一般的に使われてる手法。
下位2bitで判定する。
721デフォルトの名無しさん:2001/07/14(土) 11:01
charのポインタは下位2ビットが0である保証なんかないが。
722デフォルトの名無しさん:2001/07/14(土) 12:02
ビットマップを保存するとき、BITMAPFILEHEADERのbiSizeやbfOffBitsに
ビットフィールドのサイズも加えるべきなのでしょうか?
ある本のプログラムではサイズを加えていなかったのですがどうなんでしょうか。
723デフォルトの名無しさん:2001/07/14(土) 12:17
MSDNにはなんと書いてありましたか?
724デフォルトの名無しさん:2001/07/14(土) 12:29
>>715
Win32では基本的には0-0x7fffffffまでしか使われることない。のこりは
カーネルモードのアドレスだからね、でもNT4 Enterprise版や
Win2K Advanced Serverなんかだと/3GBスイッチで、0-0xbfffffff
までユーザーモードのアドレススペースが増えるから、0x80000000
以上のポインタが返ってこないことを想定したプログラムはこけるね。
基本的にそんなことを想定するようなアホなプログラムは組むべきでは
ない。64bitOSはすぐそこに来てるし、他のプラットホームで動く保証も
ないからね。
725デフォルトの名無しさん:2001/07/14(土) 12:38
>>721
理解できないんならいいよ。
726デフォルトの名無しさん:2001/07/14(土) 12:48
>>724
実際問題、0番地付近は、NULLポインタで例外を捕まえるために
未使用領域にするんじゃないかな。
あとは、Win9Xで、下位1Mが予約されてるとか。
727デフォルトの名無しさん:2001/07/14(土) 13:45
他のウインドウに表示されているデータを
画像として取得するにはどうしたらいいんでしょうか?
728デフォルトの名無しさん:2001/07/14(土) 14:39
>>727
フォーカスを与えた後、key_eventでAlt+PrintScreenを送り込んではどうか。
729デフォルトの名無しさん:2001/07/14(土) 15:32
>>728
お返事ありがとうございます。
それは思いついたんですけど
何かもっと良い方法は無いかと思いまして。
730デフォルトの名無しさん:2001/07/14(土) 16:04
>>729
ウィンドウハンドルとデバイスコンテキストを取得してBitBlt。
731デフォルトの名無しさん:2001/07/14(土) 16:11
>>725
「Rubyでは」値が4の倍数になるようなポインタしか扱ってないというだけ
の話だろ。それが何か?
732デフォルトの名無しさん:2001/07/14(土) 16:15
>>724
そんな特殊な例持ち出さなくてもWin9xの共有メモリは余裕で2G超えるね。
>>726
先頭64KはどのようなWin32環境でも予約領域であることが保証されてい
る(理由は、上位ワードが0かどうかで引数の解釈を変えるAPIがあるため)。
733デフォルトの名無しさん:2001/07/14(土) 17:26
>>732
将来の実装でかわりそうなもんだが。
undocumentedかなにかに書いてあったの?
734デフォルトの名無しさん:2001/07/14(土) 20:02
>>733
CharNextやDialogBoxなどを使っているプログラムのバイナリ互換性が
なくなるからそんな実装の変更はありえない。
先頭64Kが予約というのはAdvanced Windowsで見たけど理由までは書
いてなかった。
735デフォルトの名無しさん:2001/07/26(木) 20:51
age
736デフォルトの名無しさん:2001/07/27(金) 14:05
MP3プレイヤーとかのレベルメーター、スペクトラムアナライザみたいに
ほかのプログラムとも共存しながらも、なおかつ、高速で安定した
グラフィック描画を行いたいのですが、何かよい方法はありますか?
737デフォルトの名無しさん:2001/07/27(金) 14:24
>>736
共存とは? ソフト名出してもいいからもっと詳しく書いたほうがいいと思われ。
738デフォルトの名無しさん:2001/07/27(金) 15:18
>>736
言葉間違えたかもしれません、
画面や処理をのっとらないで、ほかのアプリをあまり邪魔せずに
動いているということをいいたかったのです

それができているわりに、winampにしても、ビジュアルエフェクト
やメータのFPSが結構安定しているんで、すごいなとおもって。
739デフォルトの名無しさん:2001/07/27(金) 16:17
すいません、一定時間後に指定したメッセージを投げる方法が
あるかどうか教えてください。

具体的にいうと、現在複数のコネクションを持つ
ネットワークアプリを作っているんですが、
あるソケットがエラーを起こした場合に、モニタウインドウの
リストビューに一定時間エラーになったことを表示してから
リストビューからそのソケットの情報を削除したいと考えています。

その「一定時間」をどうするかで悩んでいます。
いまはとりあえずタイマーで定期的にチェックするように
していますが、できればもっとエレガントな方法で
やりたいと考えてます。よろしくお願いします。
740デフォルトの名無しさん:2001/07/27(金) 16:25
>>738
ループに適度にsleep(waitだっけ?まあいいけど)とかを使って、
ガス抜きをするのがいいかと思われ。
741デフォルトの名無しさん:2001/07/27(金) 16:32
>>739
時間監視用のスレッドオブジェクトを作ればいいんじゃないの?
一定時間過ぎたら、メッセージ投げてそのまま消えちゃうようなやつ。
742デフォルトの名無しさん:2001/07/27(金) 22:06
不定形ウィンドウの表示をする際に、
アンチエイリアスをかけた(要するにα合成する)
ウィンドウを表示させたいのですが、よい方法ありますか?

イメージの合成方法はわかります
問題は、ドラッグする際に、自分自身のウィンドウ(パネル)より
下のデスクトップイメージをどうやって取得すればよいか?
というところです・・・

どうかご教授ください
743デフォルトの名無しさん:2001/07/27(金) 23:26
>>742
マルチポストするなボケ。帰れアホ。
744無能な姦理人@Shiri-Q:2001/07/27(金) 23:56
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□





続きはコチラです
http://www.geocities.com/entry_k/main/main01.html
745デフォルトの名無しさん:2001/07/28(土) 06:10
マルチスレッドのプログラミングで質問なんですが、
メインスレッドのスタック変数のアドレスとかを
他のワーカスレッドに渡しても問題ないでしょうか?
746デフォルトの名無しさん:2001/07/28(土) 07:52
>>745

渡すこと自体:馬鹿だけど別にかまわない
渡された方がそこを読む:ほとんど無意味
渡された方がそこを更新する:ふっとんで不思議は無い
747デフォルトの名無しさん:2001/07/28(土) 09:35
>>745
746が言ってるけど普通やんないです。
その渡したい変数の生存期間を考慮しながらプログラムするのは
困難だと思われます。

もちろん、確実に存在することが保証されているなら話は別ですが、
その保証を得る方法として、"ヒープから確保する"というマットウな
ものがあるので、何か特殊な制限が無い限りこちらをおすすめします。
748デフォルトの名無しさん:2001/07/28(土) 14:29
不定形ウィンドウの表示をする際に、
アンチエイリアスをかけた(要するにα合成する)
ウィンドウを表示させたいのですが、よい方法ありますか?

イメージの合成方法はわかります
問題は、ドラッグする際に、自分自身のウィンドウ(パネル)より
下のデスクトップイメージをどうやって取得すればよいか?
というところです・・・

どうかご教授ください
749デフォルトの名無しさん:2001/07/28(土) 14:36
>>748
GetDC(NULL)
でデスクトップのデバイスコンテキストを得られるので、そこからBltすればよい。
あとはWM_NCPAINT(だっけ?使ったこと無いから覚えてない)かなんかで
描画すりゃいいんじゃない?
750デフォルトの名無しさん:2001/07/28(土) 16:47
>749
まぁその結果、下のウィンドウが再描画されたら上のウィンドウも
再描画しないとならないのでウィンドウメッセージのフックとか
しないとならないし、そうすると常駐しているとやたらWindowsの
パフォーマンスの下がるイヤなプログラムができる。
751デフォルトの名無しさん:2001/07/28(土) 18:29
上にウィンドウがあると下のウィンドウはそもそも更新されないとか
いろいろあってWin2kでない限り根本的に不可能だと思われ
752745:2001/07/28(土) 20:31
>>746 >>747
わかりました。素直にヒープ使って書きます。
753デフォルトの名無しさん:2001/07/28(土) 22:28
ウィンドウにマルチラインのエデッィトコントロールを貼り付けました。
IME経由で文字をエディットコントロールに入力しようとしたのですが、1度に入力しようとする文字の量が大量だと全部の文字が入力されないで文字の最後の方が消えてしまいます。
IMEの種類はATOKとMS−IMEの両方で起きました。
原因の分かる方は教えてください。
お願いします。
754デフォルトの名無しさん:2001/07/28(土) 23:37
>>753
消えてるわけじゃなくて、折り返さないから見えないだけ。
対象となるエディットコントロールにWM_IME__CONTROLを送る。
コマンドはIMC_SETCOMPOSITIONWINDOWだ。
755754:2001/07/28(土) 23:38
>>754
うわ、うっかり送信しちゃった。
指定するパラメータは、対象となるエディットコントロールと同じ大きさの
ウィンドウサイズを与えればおけー。
756752:2001/07/29(日) 00:31
>754
レスありがとうございます。
>消えてるわけじゃなくて、折り返さないから見えないだけ。
折り返しはちゃっとできてるので、たぶん754さんの言われてるケースとは違うと思います。
確定前の文字はちゃんと表示されています。
IMEは日本語100文字ぐらいまで1度に入力できるのですが、100文字入力してEnterを押して確定すると、前半60文字ぐらい残って後ろの30文字が消えてしまいます。
どなたか解決法を御存じの方はお願いします。
757デフォルトの名無しさん:2001/07/29(日) 01:06
WIN32でGREPをジソーウするにはどうしたらいいのでしょうか?
758デフォルトの名無しさん:2001/07/29(日) 01:08
grep.dllでも探して恋>757
759デフォルトの名無しさん:2001/07/29(日) 01:17
760757:2001/07/29(日) 02:02
どーもです。
761デフォルトの名無しさん:2001/07/29(日) 04:04
BITMAPINFOHEADER.biXPelsPerMeterってどう使うんでしょ?
0ばっかりで何に使うのはわかんないんですけど。
762デフォルトの名無しさん:2001/07/29(日) 08:20
>>761
印刷するときとかでは? と言っても大抵は紙に合わせてソフト側でサイズ補正できる
ケースが多いのであまり使わないと思われ。
763デフォルトの名無しさん:2001/07/29(日) 17:04
strcmp と lstrcmp の違いをおしえて
764デフォルトの名無しさん:2001/07/29(日) 17:06
>>763
MSDNみろ!
765デフォルトの名無しさん:2001/07/29(日) 17:15
lstrcmpってVCオリジナルなの?普通のAPI関数なの?
766デフォルトの名無しさん:2001/07/29(日) 17:23
Windowsオリジナル

#define strcmp lstrcmp
767デフォルトの名無しさん:2001/07/29(日) 17:30
>>766
ほんと?
768デフォルトの名無しさん:2001/07/29(日) 18:51
嘘。
769763:2001/07/29(日) 22:19
>>764
みてきました。

DBCSとMBCSの関係がよくわかりませんでした。
770デフォルトの名無しさん:2001/07/30(月) 02:29
いったいどこを見てるんだか
771デフォルトの名無しさん:2001/07/30(月) 02:56
strcmpはlibc提供
lstrcmpはkernel32提供
っていうか全然別物ですよ。
772デフォルトの名無しさん:2001/07/30(月) 23:58
自アプリにファイルがドラッグ&ドロップされたときに
マウス右左ボタンのどちらで操作したか判別できませんか?
773デフォルトの名無しさん:2001/07/31(火) 00:19
midやwavを簡単に再生することはできるのでしょうか?
774デフォルトの名無しさん:2001/07/31(火) 00:22
>773 ShellExecute(藁
775デフォルトの名無しさん:2001/07/31(火) 00:22
>>773
wavだったらsndPlaySoundでいいとおもう。
midは複雑だから調べろ。
776デフォルトの名無しさん:2001/07/31(火) 00:26
再生だけならMCI >773
777773:2001/07/31(火) 00:39
ありがとうございます。調べてみます
778デフォルトの名無しさん:2001/08/02(木) 17:29
比較的大きめの画面で、FPS30くらいのアニメーションを行いたいのですが
(DirectXなしで)
ただ、画面更新でInvaridateRectを用いると、レスポンスが悪いばかりか
画面がちらつきます。

垂直帰線期間を待つ命令があれば、ちらつきは解消できそうですが、
そもそも、上記命令のレスポンス自体が問題となっています。

何かよい解決法があれば教えてください。

追伸:
MFCで開発しているので、イベントループではなく
マルチメディアタイマーで処理をしています
779デフォルトの名無しさん:2001/08/02(木) 17:51
>>778
描画方法に問題があるのでは?
780デフォルトの名無しさん:2001/08/02(木) 17:53
InvalidateRectは第三引数をFALSEにすると
再描画が必要な部分のみが処理されるのでチラツキが減ります。
781デフォルトの名無しさん:2001/08/02(木) 18:02
>>778
ウインドウクラスの hbrBackground(ウインドウの背景色)をNULLに
してますか?
782デフォルトの名無しさん:2001/08/03(金) 04:00
パス名で指定したディレクトリが存在するかどうかを確かめる方法(関数)ありますか?
783デフォルトの名無しさん:2001/08/03(金) 05:07
_access()
GetFileAttributes()
PathIsDirectory()
784dx:2001/08/03(金) 07:27
>>778
DirectX使うだけで解決するとおもうのですが、
なにか理由が?
785デフォルトの名無しさん:2001/08/03(金) 19:54
InterlockedIncrement
等のInterloked......系の関数について質問があります。

MSDNには
>lpAddendパラメータが指す変数は、32ビット境界に整列されていなければなりません。
>整列されていない場合、かつ、マルチプロセッサのx86システム上で実行した場合、
>この関数は失敗します。

とありますが、通常の変数宣言では32ビット境界に配置されるので
気にしなくても良いのではと思うのですが、
構造体内部の変数に対して実行する場合は
#pragma等の影響で位置がずれると思います。

このような場合通常CriticalSectionで保護するのが定石なんでしょうか?
良い方法があれば教えてください。

CriticalSectionの例

struct Hoge HogeStruct;
CRITICAL_SECTION CSObj;

EnterCriticalSection(&CSObj);
HogeStruct.nCount++;
LeaveCriticalSection(&CSObj);
786デフォルトの名無しさん:2001/08/03(金) 20:57
Win16のrc(リソースコンパイラ)のように、exeやdllにリソースを
カキコできるWin32のコマンドラインツールはありますか?
Win9Xで動かしたいのでUpdateResourceは使えません。
787デフォルトの名無しさん:2001/08/03(金) 23:28
>>785
で、何が訊きたいのかわからん。
もうちょっと日本語勉強してから書いてくれ。
788デフォルトの名無しさん:2001/08/04(土) 00:46
>>787
俺はわかった

定石かはしらないけどそうするしかないだろうな。
別にmutex使ってもいいけどこの場合はCriticalSectionだろ
789デフォルトの名無しさん:2001/08/04(土) 05:05
>>785
7byte確保してそのうち32bit alignが取れた4byte使うとか・・・
790デフォルトの名無しさん:2001/08/04(土) 06:26
>>789
構造体のすべてのメンバに対して整合要求を満たすのが不可能な場合
もあると思うが
791デフォルトの名無しさん:2001/08/04(土) 07:19
>>790
だからlongで良いところを7byte確保するのだと思われ
先頭から3byteまでの内にアドレスが4の倍数になるところが必ずあるはず
792デフォルトの名無しさん:2001/08/04(土) 13:23
age
793デフォルトの名無しさん:2001/08/04(土) 13:33
>>791
いや、だから構造体のメンバを自分で決められるならばいいけど
他人の作ったライブラリの構造体とかすでにハードコーディングされた
やつじゃ駄目でしょ
794デフォルトの名無しさん:2001/08/05(日) 12:34
あるEXEからDOSコマンドを実行して、 実行結果をそのEXEで表示したいのですが、どうすればいいのでしょうか?
リダイレクトを使って一時ファイルを作って、それを開くという手もあるのですが、もっといい方法はないでしょうか。
795デフォルトの名無しさん:2001/08/05(日) 12:38
796デフォルトの名無しさん:2001/08/05(日) 13:52
>>794
パイプ使え
797デフォルトの名無しさん:2001/08/05(日) 16:04
そうだね パイプを作って、SetStdHandleでいいんじゃない?
798デフォルトの名無しさん:2001/08/05(日) 16:33
そうだね。バイプ使うと俺の彼女喜ぶんだよ。
799デフォルトの名無しさん:2001/08/05(日) 16:45
>>798 ヘ・タ・ク・ソ・く・ん  でも好きよ
800デフォルトの名無しさん:2001/08/05(日) 18:46
>>793
というか自分で決められるならそんな変なことしなくても最初から整合され
るように構造体を設計すればいい
つーか何も考えずに構造体作ればふつうはそうなるはずだが
801デフォルトの名無しさん:2001/08/05(日) 18:54
これからWin32APIの勉強しようと思うんだけど、
オススメ書籍ありますか?
一応、最終的にはDirectDrawをしようと考えてます。
802名無し:2001/08/05(日) 18:56
そんならはじめからDirectXの本買えば?
803デフォルトの名無しさん:2001/08/05(日) 19:03
>>801
つーか、いまはもうDirectDrawはないぞ。
804デフォルトの名無しさん:2001/08/05(日) 20:56
>>803
下位互換のために残ってるから無いこたぁないような気がするが?
805794:2001/08/05(日) 21:24
>>796,797
どうもありがとうございます。
パイプでいろいろ検索してみます。
806803:2001/08/05(日) 22:14
>>804
あれって速度が遅くなるのでは?
807デフォルトの名無しさん:2001/08/05(日) 22:22
msdn library で調べても HPALETTE とか HBITMAP について
詳しく載っていないようなきがするのですが、
どう調べたらよいのでしょうか?
808デフォルトの名無しさん:2001/08/05(日) 22:29
>>807
プログラミングWindowかMFCによるwindowsプログラミングを
読むべし。
809デフォルトの名無しさん:2001/08/05(日) 22:34
>>807
5年ほど前の本だが、
「Win32アニメーションプログラミング(NigelThompson著/吉川邦夫:訳/アスキー出版局:版)」
って本が出てる。日本語だったらそれが一番詳しいかと。
810デフォルトの名無しさん:2001/08/06(月) 02:33
自作ソフトのインストーラー(&アンインストーラー)をInstallShieldで
作成したいのですが、わかりやすい書籍やURLを教えてください

ちなみにプログラムはEXEとデータファイルのごくシンプルな構成です。
利用規約の表示と確認、スタートメニュー&デスクトップに配置などが
できれば大丈夫なレベルです。

よろしくおねがいします
811807:2001/08/06(月) 02:35
>>808
>>809
どうもありがとうございます。
後日本屋で探してみようと思います。
812デフォルトの名無しさん:2001/08/08(水) 21:56
ODBCスレじゃなくてこっちの方がいいのかな?
ODBCAPIやODBCに詳しい方いらっしゃいますか?
813デフォルトの名無しさん:2001/08/08(水) 23:22
います
814デフォルトの名無しさん:2001/08/09(木) 09:30
>>810
InstallShield起動→メニューから[ヘルプ]→[ユーザーズガイド]
815loop:2001/08/09(木) 11:32
WinAPI関数でクライアント領域のサイズを返す関数ってありますか?
816 :2001/08/09(木) 11:49
>>815

GetClientRect(HWND、 RECT*)じゃダメなの?
817loop:2001/08/09(木) 13:09
>>816
試してみたのですが、x=lpRect->left;とやっても値がとれないのですが。
何か原因があるのでしょうか。
818デフォルトの名無しさん:2001/08/09(木) 13:35
>>817
right と bottom にサイズが入ってるはず。left と top は 0。
819 816:2001/08/09(木) 13:36
leftとtopは常に0になりますよ。
だって左上が基準ですから。

クライアント領域の幅が欲しければright、
高さが欲しければbottomを使うべし。
820loop:2001/08/09(木) 13:37
>>818
そうでした。すみません。値ちゃんととれてました。
821デフォルトの名無しさん:2001/08/10(金) 02:35
>>820
RECTHEIGHT(rc)
RECTWIDTH(rc)
822デフォルトの名無しさん:2001/08/10(金) 10:28
ATL/WTL AppWizardでダイアログアプリを作ると、雛型では

void CloseDialog(int nVal)
{
  DestroyWindow();
  ::PostQuitMessage(nVal);
}
で終了しているのですが、
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/hh/winui/windows_33xz.asp
をみると、

case WM_CLOSE:
DestroyWindow(hwndMain);

case WM_DESTROY:
PostQuitMessage(0);

と2段階になっています。
WM_DESTROYの前にPostQuitMessageを発行してもかまわないのでしょうか?
823デフォルトの名無しさん:2001/08/10(金) 11:07
>822 PostQuitMessageを発行してもかまわないです
824822:2001/08/10(金) 13:00
>>823
ありがとう。
理由はわからないけど、信じますよ。
825デフォルトの名無しさん:2001/08/10(金) 19:06
>>822
別にかまわないだろうけど終了前確認入れたり
リソースの開放したりと後で追加するときに便利だから

WM_CLOSE : DestroyWindow()

WM_DESTROY: PostQuitMessage()
の方が自然な流れだと思われ。

ATL/WTLつー事はC++なわけで
virtual onClose()
として後でオーバーライドできるようにしておくとか
826デフォルトの名無しさん:2001/08/14(火) 11:07
age
827デフォルトの名無しさん:2001/08/14(火) 23:10
基本的なインストーラーを
作成したいのですが、
VCに付属のInstallShieldがよくわからなくて
Visual Studio Installerを導入することにしました

ファイル・フォルダ類は無事インストールできるのですが
デスクトップ・スタートメニューに配置する
ショートカットファイルがうまく機能しません。

インストール後に、ショートカットファイルのリンク先をチェック
すると、どうもディレクトリ階層が消えていて
実行ファイルのみになってしまいます

なにかミスしているのでしょうか
ご教授ください
828デフォルトの名無しさん:2001/08/14(火) 23:19
>>827
俺は出来てるんだが?
829827:2001/08/15(水) 08:26
かなりせっぱつまっています
なにか原因は考えられないでしょうか?
おねがいします
830kouriyu:2001/08/15(水) 15:54
スクロールバーの使い方ですが、画面にあるデータを表示し、画面外の
データを見るためにスクロールバーを使ってみたいのですが、一度スクロール
させると、前の状態に戻そうとスクロールした時、残像が残ってうまく
表示がされていません。どのように対処するのでしょうか。
831デフォルトの名無しさん:2001/08/15(水) 16:54
ビデオドライバーの更新
832◆age/DQqk:2001/08/15(水) 20:43
現在、メニューのみのアプリ(ランチャ)を作ろうと思ってるんですが、
自前でウィンドウを作らずに、ポップアップメニューを出すには
どうするのがBestでしょうか。
とりあえず GetForegroundWindow() でウィンドウを借りる、
という方法を思いついたんですが、メッセージ処理はフックと
プロシージャの交換のどちらが良いと思います?
833デフォルトの名無しさん:2001/08/15(水) 23:14
>830
ScrollWindow()使ってる?
あと、スクロールの移動中は描画を止めて、スクロール位置が確定したら描画を開始してみれば。
スクロールバーは複雑だから、詳しくはCharles Petzoloの「プログラミングWindows」の読むのがいいぞ。
834sage:2001/08/15(水) 23:16
sage
835デフォルトの名無しさん:2001/08/16(木) 00:02
なぜさげる?
age
836830:2001/08/16(木) 23:06
>833
ScrollWindow()は一応使用していますが。
やはり描画のタイミングが問題ですね。どの様に対処するか困ってるんですが。
ところでCharles Petzoloの「プログラミングWindows」って
出版社どこか分かります?
837833:2001/08/17(金) 00:34
悪い、スペルミスだ。正しくは"Petzold"です。

古い版
http://www.microsoft.com/japan/info/press/17171/17171.htm
新しい版
http://www.ascii.co.jp/pb/msp/36001/36001.htm
838デフォルトの名無しさん:2001/08/17(金) 10:06
ポップアップメニューの背景色を変更したいのですが、
オーナードローでアイテムの色は変えられても
メニューウインドウ自体(境界線とか)の色がどーもこーもなりません。

DRAWITEMSTRUCT から 拾った DC でウインドウハンドルを所得して
サブクラス化したり、色々いじってみてるのですが、うまくいかない…
こんなことってできるんでしょうか?
839デフォルトの名無しさん:2001/08/20(月) 19:12
Windows2000/Meで、マイネットワーク内にWebフォルダのアイコンを
作成したいんです。VBのプログラムから。
どのようにしたらよいか教えていただけないすか?
840839:2001/08/21(火) 02:09
WinAPI相談室に書いてしまったけれど、スレ違い
だったかなぁ・・?
841839:2001/08/21(火) 16:52
いろいろ検索してるんですが、
IShellLink::SetIDList() でむがむが・・であってますかね??
やっぱスレ違いだ。むなしい。
842デフォルトの名無しさん:2001/08/22(水) 19:27
数十個のJPEGなどの画像データファイル(主にボタンなどのパーツ類)を
起動時に読み込むアプリを作成しているのですが、いかんせん起動時間が
かかってしまい悩んでいます。
改善するのに何かよいアイディアないでしょうか?

P.S.大きめの画像に、複数のパーツを貼り付けた画像ファイルを用意する
という手もありますが、デザイナーの負担が増えるのでそれは避けたいです
843デフォルトの名無しさん:2001/08/22(水) 22:11
>>842
オンデマンドローディング。
844842:2001/08/23(木) 00:21
起動後のインターフェイスを構築するパーツ類なので
省略できないですねー
845デフォルトの名無しさん:2001/08/23(木) 00:34
大きめの画像にまとめるツールを用意すればいい
当然、全自動で行えるべき
846842:2001/08/23(木) 03:28
各画像パーツのサイズが不定の場合はどうすればよいでしょうか?
サイズもばらばらなので、タイル状に敷き詰めて
大き目の画像にまとめる方法が問題になりそうです
847デフォルトの名無しさん:2001/08/23(木) 03:58
>>846
何がボトルネックになっているのか分からないけど、もしファイル
入出力が問題なら、自前で簡単なアーカイバを作れば良いと思う。
ファイル名とファイルサイズだけヘッダに書いておいて、あとは画
像ファイルをつなげて一つのファイルに。

アプリケーションは起動時にファイルを一つだけ読んで、メモリ中
でバラす、と。

展開の部分がボトルネックだと、ファイルを一つにまとめるか、高
速に展開できるフォーマットに変更する、ですかね。
848デフォルトの名無しさん:2001/08/24(金) 13:20
age
てみる
849デフォルトの名無しさん:2001/08/24(金) 13:39
FDDやらCD-ROMドライブやらのアイコン(エクスプローラで表示される奴)を
取得したいんだけど、どうすればいい?
850デフォルトの名無しさん:2001/08/24(金) 13:54
DLLからアイコンを.icoとして抽出するフリーソフトウェアを
使えば?具体的なソフト名は忘れたが3分で見つかると思われ。
851デフォルトの名無しさん:2001/08/24(金) 14:08
>>850
すごい!
なんて的確で正確な回答だ!
あんたすごすぎ!
852デフォルトの名無しさん:2001/08/24(金) 14:19
>>850
VisualStudioというソフトが該当します。フリーではありませんが。
853849:2001/08/24(金) 14:28
>>850-852
実行時のシステムから取得したい。将来アイコンが変わっても大丈夫
なように。
854デフォルトの名無しさん:2001/08/24(金) 14:48
レジストリになんかありそうだけど、
SHGetFileInfo("c:\" /*パス*/, 0, fi /*SHFILEINFO*/, SizeOf(SHFILEINFO), SHGFI_ICON);
でfi.hIconにアイコンハンドルが入る。(この場合はハードディスクのアイコン)
855849:2001/08/24(金) 14:53
>>854
C:ドライブがHDDじゃない変態的なシステムが十分ありうると思われ。
あとCD-ROMのアイコンも取得できないと思われ。
856デフォルトの名無しさん:2001/08/24(金) 14:53
sizeofか
857デフォルトの名無しさん:2001/08/24(金) 16:29
>>855
HDDじゃなければHDDじゃないアイコンが入るんだよ
どんな種類のドライブのアイコンかまで分からないと困るの?
858デフォルトの名無しさん:2001/08/24(金) 16:47
くだらないツッコミだけど

>>856
> sizeofか
これは「>>854 のコードで SizeOf じゃなくて sizeof が正しいと分かった」
という意味? それならそれでいいんだけど、C 知らないで書いてるんですか?
他にも "c:\" じゃなくて "c:\\" だし、fi はアドレスを渡すってこと
分かってる?

それと関係ないけど fi.hIcon に取得されたハンドルは、使い終わったら
ちゃんと DestroyIcon して下さいね。そうしないとリークします。
859856:2001/08/24(金) 16:56
>>858
突っ込みサンキュー。>>855はGetDriveTypeとかGetLogicalDrivesとか
使って何とかしてください。後たぶんレジストリのどっかにあるのではと思います。
(窓の手とか出てくるもんね)
860849:2001/08/24(金) 19:25
レジストリ潜るの? やだなあ。Shlwapi.hあたりに気の利いたAPIが
ありそうな気がするんだけど。
861858:2001/08/24(金) 20:43
>>860
だから >>854 の SHGetFileInfo が十分気の利いた API だと思うけど。
SHGFI_DISPLAYNAME 指定すればエクスプローラが表示するドライブ名の文字列
"3.5インチ FD (A:)" とかも取れるし。以前使ったときは CD-ROM のアイコンも
問題なく取得できた。
862849:2001/08/24(金) 22:55
>>861
SHGetFileInfoは使ってるよ。この場合はそれじゃ間に合わない
わけだ。
いろいろ調べたが、やはりレジストリに潜るしかないらしい。
863デフォルトの名無しさん:2001/08/24(金) 23:58
>>862
レジストリ…って「潜る」ところにあるとは知らなかった。 (藁
864858:2001/08/25(土) 00:56
>>862
どういう所が間に合わないのかよく分からない。
居れが以前使ったのは「ファイルを開く」ダイアログにあるような
ドライブ選択コンボボックスを自作した時なんだけど、SHGetFileInfo と
GetLogicalDrives 使ってできたけど。
865デフォルトの名無しさん:2001/08/26(日) 02:06
DIBを描画したいのですが、SetDIBitsToDeviceを使ってみたのですが、
どうやらこのSetDIBitsToDeviceがかなり時間を食うらしいのですが、
もっと早くDIBを転送する手続きはありますか?
866849:2001/08/26(日) 03:10
>>864
「HDD」「CD-ROM」「FDD」等々のアイコンをそれぞれ取得したいわけだ。
それもシステムがエクスプローラで使ってる奴を。
A:がFDDでD:がCD-ROMで、というシステムばかりじゃない。
ノートパソコンならCD-ROMがないシステムもありうる。それでも
CD-ROMのアイコンが必要、というわけだ。

>>863
レジストリから情報を取得するのはリスクが多い。俺的には
「潜る」って感覚になる。

>>865
BitBltで高速化できない状況?
867858:2001/08/26 06:21
>>866
> A:がFDDでD:がCD-ROMで、というシステムばかりじゃない。

だからそれは >>859 が言ってるように GetLogicalDevices で有効な
ドライブを列挙して、GetDriveType で CD-ROM かどうか判定すれば
よいわけでしょ。

> ノートパソコンならCD-ROMがないシステムもありうる。それでも
> CD-ROMのアイコンが必要、というわけだ。

確かに実行マシンで存在しないドライブはムリだけど、存在しない
ドライブのアイコン取得してもしょうがない気もするけど。

まぁついでだから ちょっと見てみたんだけど、レジストリじゃなくて
shell32.dll の内部リソースに入ってる感じ。ExtractIconEx とかで
取れると思われ。Win98 でしか調べてないので他の Win でも同じか
どうかはわからないけど。
868デフォルトの名無しさん:01/08/26 10:27
CD-ROMのアイコンをSHGetFileInfo使ってとると、挿入されている
CD-ROMのAutorun.infで設定されているアイコンがあればそれを返すから、
常にCD-ROMドライブのアイコンが返るとは限らない。
869デフォルトの名無しさん:01/08/26 10:30
整数を文字列に変換するのにatoi以外関数はありませんか?
atoiは引数が多くてあまり使いたくないのですが・・・。
>>869
atoi じゃなくて itoa の話だよな?
…あれ以上どうやって引数を減らせというのだ。
>>869
sprintf()でも使えば?
872865:01/08/26 14:30
>>866
BitBltもSetDIBitsToDeviceも転送する時間にあまり変わりがないようでした。
Bresenhamのアルゴリズムを用いて直線を描くのと、
LineToで直線を描く時間を比べてみたのですが、
明らかにSetDIBitsToDeviceを用いて直線を描画する方が遅いみたいなのです。
SetDIBitsToDeviceだけを、コードから除いてメモリに書き出すだけだと、
かなりの速さになるみたいで、SetDIBitsToDeviceがネックになっている
見たいなのですが・・・。
>>872
わけわからん。
874デフォルトの名無しさん:01/08/26 16:26
   わけ    わか     らん♪
   ∧∧    ∧∧     ∧∧
   (=゚ω゚)    (=゚ω゚)   ヽ (=゚ω゚)ノ
  ヽ(x ヽ)    (ノ x)ノ    (∩ x)
   < <       ) )       U
>>872
単に線を引くためだけにBlt系を使う意味ってのがよくわからんのですが。
LineToではなにか問題が?
876869:01/08/26 18:52 ID:M1FAtnxQ
レスありがとうです。>>870-871
char* bufを用意しないといけないのが面倒だと思ったので・・・。
単に char* itoa(int) だったら記述がラクでよかったな、と思っただけです。
877858:01/08/26 19:05 ID:/iAV1yEw
>>868
> CD-ROMのAutorun.infで設定されているアイコンがあればそれを返すから、

なるほど、確かにそれで不都合なこともあるでしょうね。

関係ないけど >>867 の typo 訂正
× GetLogicalDevices
○ GetLogicalDrives
878859:01/08/27 21:21 ID:a4HckhLE
SHBrowseForFolder でデフォルトで選択されているフォルダを UNC で指定
したいのですが、方法がよく解りません。

コールバック関数で BFFM_SETSELECTION を WPARAM に FALSE を指定して
LPARAM に選択するフォルダの pidl (LPITEMIDLIST) を渡しても、
「ネットワークコンピュータ」が選択されてしまい、意図するフォルダが選択
されません。

UNC の pidl の取得には Shell32.dll.#162 を使っています。

どなたか SHBrowseForFolder でデフォルトフォルダを UNC で指定する方法
をご教授ください。

開発環境は WindowsNT Workstation 4.0 (SP6) + VC++ (SP4) です。
879878 :01/08/27 21:24 ID:a4HckhLE
すいません。 >>878 の名前が 859 となっていますが、このスレの 859 さん
とは無関係です。
# 名前を空にしないで書き込んでしまいました。 (汁
880loop:01/08/28 10:53 ID:MWpDaN5M
menuで項目の横にチェックをつけられますが、これをつけたり
はずしたりするのって、どうすればいいのでしょうか?
881デフォルトの名無しさん:01/08/28 17:23 ID:iOvUzZpU
Win32上で(Win95/98/Me/2000Pro)で、特定ファイルの開始クラスタ番号を得る方法
ってないでしょうか。
882デフォルトの名無しさん:01/08/28 19:51 ID:HEWceQCw
>>881
ファイルシステムによる。
FAT12/16/32でWin9x系でしか使えなくても良ければDOSの25H/26H互換コール。
883デフォルトの名無しさん:01/08/28 20:29 ID:iOvUzZpU
>>882
Win2000でも使える必要があるんです。クラスタの読み書きは必要なく、先頭クラスタ
だけわかれば良いのですが。目的は、不正コピーチェックがらみです。
884デフォルトの名無しさん:01/08/28 20:53 ID:HEWceQCw
>>883
じゃあ無理。
ActiveDirectoryの仕組みを勉強すれ。
885デフォルトの名無しさん:01/08/28 21:29 ID:iOvUzZpU
DVD-ROM限定でもダメでしょうか。
886デフォルトの名無しさん:01/08/28 22:03 ID:HEWceQCw
>>885
なおさら無理。
無理矢理やるにしても各OS固有のコードになる。
887デフォルトの名無しさん:01/08/29 12:09 ID:ltWbYtH2
>>885
DVD-ROM なら、ASPI 経由でデバイス操作できないのですか?
CD-ROM なんかの不正コピーチェックで溝にわざと傷入れてるのを検出して
ってのがあるみたいだけど。
888デフォルトの名無しさん:01/08/29 15:00 ID:IAoA4cFg
>>887
それにしてもOS固有になるのは避けられない。
889デフォルトの名無しさん:01/08/29 15:09 ID:iIYcB4L.
OS固有でいいから方法書いてあげなよ。
890デフォルトの名無しさん:01/08/29 15:17 ID:IAoA4cFg
ASPI使ってクラスタの直読みはできるけど、あるファイルがどの
クラスタにマップされてるかってのはファイルシステム依存。
どのOSで使うのか書いてないんで書きようがない。
すべてのOSに対応した方法を書いてやるほど暇でもお人好しでもない。
891 :01/08/29 15:24 ID:zbxmmrnU
WINNTで動いていたプログラムで悩んでいます。
今回WIN2000でvisual studio6.0のVBとVCを使ってバージョンアップ試験をしているのですが
VBで作成したプログラムからVC++で作成したプログラムをコールする際にVCで作成したほうの
画面がVBの画面の上に出ず後ろに隠れてしまいます。
プログラムは何も変更していません。
VCのほうに画面を最上位に出す処理(SetForeGround)を入れてみましたが変化ありません。
これはWIN2000のバグでしょうか?
同じ現象になった方いたら教えてください
892デフォルトの名無しさん:01/08/29 15:46 ID:ltWbYtH2
>>891
AllowSetForegroundWindow とか、調べた?
893デフォルトの名無しさん:01/08/29 15:52 ID:iHuBdZXU
エディットコントロールやリッチエディットコントロールの最後に
テキストを挿入するにはどうしたら良いですか?
894デフォルトの名無しさん:01/08/29 16:19 ID:iIYcB4L.
>>889
クラスタ直読みの方法だけでいいじゃん。それ以上のことなんて誰も
聞いてない。つーかASPI使う必要もないような気がするが。もちろん
OS依存だけど。
>>892
AllowSetForegroundWindowはそういう状況では使えない。
895デフォルトの名無しさん:01/08/29 16:54 ID:zbxmmrnU
>>892
AllowSetForegroundWindowでもだめでした。
でも画面がタスクバー上で点滅してるんでFlashWindowEXが実行されてるらしいです。
マイクロソフトのHPでWindows2000ではSetForeGroundWindowにいろんな条件があっ
てそれを満たさないとSetForeGroundWindowが失敗してFlashWindowEXが実行されて通
知してくれるみたいです
何らかの要因で失敗してるのは確実みたいです。
896デフォルトの名無しさん:01/08/29 17:39 ID:IAoA4cFg
>894
>881をよく読め。
クラスタ直読みの方法こそ誰も聞いてない。
897デフォルトの名無しさん:01/08/29 20:31 ID:W6Ku5whg
>>895
http://www.nt.sakura.ne.jp/~miwaki/
ここのTipsとか。
あとWin98でしか確認してないけど、
Win.iniの[Compatible95](だったと思う)にアプリのパスを入れておくと、
SetForegroundWindowがいつでも有効になったような。
898デフォルトの名無しさん:01/08/29 21:19 ID:R.qc31/Y
ASPI使うってのは、いろいろウザイことあるぞ。RAIDなんか組んでる
とアダプタとの相性でアクセスしただけでBlueDeathしたりする(;´Д`)
よっぽどのことが無い限りやめとく方が吉。
あと、894のよーに、自分もセクタ読むだけならASPIを使う必要すら無いと思う。


不正コピー防止なら2GぐらいのでかいファイルでもDVD-ROMにしこんで、
それをチェックすれば? 安直だけど。
そういえば、DVDの規格ではレーザーで1枚1枚個別にシリアルをマーキング
できるらしいのだけど、Windowsでそれは読めないのかな?
899age:01/09/01 05:54 ID:bwMxnaac
age
900デフォルトの名無しさん:01/09/01 12:35 ID:jSo1Ykw6
リバースエンジニアリングしようと考えたいます。
クローズドソースのアプリのDLLの呼出しをトレースしたいのですが、
どのようにしたらよろしいですか?
お金はかけずに行いたいです。
901デフォルトの名無しさん:01/09/01 12:43 ID:LX5I2Bgs
ドライブに挿入されたメディアがDVD-R for Generalであることを判別するにはどうすれば
よいのでしょう。Generalには、DVD-R for Authoringにはない、読み出し専用領域があり、
そこを判別すれば良いと言われていますが、具体的にどうすればよいのか。
ずばり、コピー対策で、DVD-R for Generalでは動作しないようにしたいのですが。
902デフォルトの名無しさん:01/09/01 20:23 ID:jNF.zKm2
>>880
SetMenuItemInfo()
で、MENUITEMINFO::miifStateにMFS_CHECKEDまたはMFS_UNCHECKEDで切り替える。
903momotaro:01/09/01 22:24 ID:9IMlxPac
Windowsプログラム(C言語)で、スクリーンセーバーを変更する方法を教えて頂けないでしょうか。
例えば、壁紙は、下記のような方法で変更出来ますが、スクリーンセーバーの場合はどうなのでしょうか。

【壁紙の変更】
SystemParametersInfo(
 SPI_SETDESKWALLPAPER,
 0,
 buf, //変更するファイル名
 SPIF_UPDATEINIFILE
);
904デフォルトの名無しさん:01/09/01 22:43 ID:gLx4Rd02
>>900
APIMON …とだけ書いとくから、あとは自分で調べろ。
できなきゃ、タダで協力してくれるハッカーでも探せ。
念のために言っとくが、ハッカーとクラッカーを間違えるなよ。
大変なことになっても知らんからな。
905デフォルトの名無しさん:01/09/01 22:54 ID:baJQonXA
>>900
Advanced WindowsかDebugging on Windows(不確か)をジュンク堂で
立ち読み。
906デフォルトの名無しさん:01/09/04 13:39 ID:rccG4HwI
どなたかドライブレターからそのドライブのデバイス名を取得する方法を知りません?
もしくは、AdapterID/TargetID/LunIDを取得でもかまいません。そっちのがかえっていいかも。

CDの再生なんですが、エクスプローラからの*.cdaのD&Dに対応するために、
ドライブレターと物理デバイスの対応を知りたいのです。
複数台ある場合、ドライブレターのつけ方によっては、
対応が食い違って別のCDが再生されてしまう場合があるのですよ。
907デフォルトの名無しさん:01/09/04 14:09 ID:s4.H7M7U
NT系ならQueryDosDevice。
9x系は知らん。つーか9x系にデバイス名なんてあるの?
908デフォルトの名無しさん:01/09/04 14:20 ID:rccG4HwI
QueryDosDevice()
使ってみたけど、単純にドライブレター順の番号が
振られて返ってくるだけだったので聞いてるのですが?
909デフォルトの名無しさん:01/09/04 14:35 ID:s4.H7M7U
はぁ?
910デフォルトの名無しさん:01/09/04 14:43 ID:rccG4HwI
P: -> \Device\CdRom0
Q: -> \Device\CdRom1
R: -> \Device\CdRom2
S: -> \Device\CdRom3

のように返ってくる。
ちなみにバス上の配置は
Adapter/Target/Lunがそれぞれ
P:4/3/0
Q:1/0/1
R:5/1/0
S:5/0/0
なので接続順とあわない。
なのでドライブレターとIDの対応を取得する必要があるのですが?
911デフォルトの名無しさん:01/09/04 15:22 ID:s4.H7M7U
>なのでドライブレターとIDの対応を取得する必要があるのですが?
なんで? 返ってきたデバイス名そのまま使うんじゃだめなの?
912デフォルトの名無しさん:01/09/04 15:41 ID:s4.H7M7U
つーかそもそもなんでAdapter/Target/Lunが必要なの?
どうやってCDを再生しようとしてる?
SCSI/ATAPI接続でないCDは再生できないの?
913デフォルトの名無しさん:01/09/04 15:53 ID:rccG4HwI
だから、エクスプローラからCDドライブを開いて
*.cdaをD&Dとかでも再生できるようにしたいんだってば。
その場合、*.cdaからは、フルパスでのドライブレターしか、
どのドライブからD&Dされたのか確認できないでしょ?

今はデバイス名で再生ドライブを選ばせてるけど、
ドライブレターでも選べるようにしたいの。

ユーザによっては同じ型版のドライブを複数使ってる人もいるわけで、
その場合ドライブのデバイス名+連番とかで選ばせたって、
どっちがどっちだかわからんぢゃないか。

ちなみにCDの再生は、ASPI経由でのデジタル吸出し再生だよ。
MCIだったら、mciSendString("open cdaudio!q: mycd", 以下略)
とかでドライブレターから目的のドライブをオープンできるから問題ないけど。

もうあと考え付くのはMCIとあわせ技で、いったんMCIでオープンして
各トラックの再生時間を取得して、ASPI経由で得たTOC情報と比較して
一致するドライブを使うとか、CDDB用のIDを計算して(MCIでもGETできる)
それでマッチングするぐらいしか思いつかん。
でもこれだと不完全。同じCDが複数のドライブに入ってたり、
たまたまトラックの再生時間が全部一緒だったりしたら区別つかん。
914デフォルトの名無しさん:01/09/04 16:24 ID:DASKlEA.
>>913
>>912に対する答えはないのか?ASPIから操作できないデバイスをどうやって見分ける?
915デフォルトの名無しさん:01/09/04 16:35 ID:s4.H7M7U
>今はデバイス名で再生ドライブを選ばせてるけど、
>ドライブレターでも選べるようにしたいの。

だからQueryDosDeviceでドライブレターをデバイス名に変換
すればいいんじゃないの? 何に困ってるのかぜんぜんわからん。
916デフォルトの名無しさん:01/09/04 20:54 ID:rccG4HwI
>>914
ASPIから見えないドライブは、
>ちなみにCDの再生は、ASPI経由でのデジタル吸出し再生だよ。
と言っているとおりそもそもサポート外。

>>915
Win9xでどうするのさ。

つーかレジストリをくまなく調べてなんとかなりそうだよ。
各所で実験して法則もつかんだし。
917デフォルトの名無しさん:01/09/04 21:52 ID:DASKlEA.
>>916
サポート外かどうかをどうやって見分ける?ってきいてんだけどな…
お前のアプリがサポートしてなくてもExplorerがサポートしてるなら
D&Dはできちまうだろが。
918デフォルトの名無しさん:01/09/04 22:07 ID:8BA3trys
質問なのですが、WinAPIかMFCを使用して
DirectXやglutのようなフルスクリーン表示は可能でしょうか?
919loop:01/09/05 14:58 ID:o9TQFFtQ
質問です。アイコンの変更についてですが、エクスプローラ表示時の
アプリケーションのファイル名の左につく小さなアイコンを変更したいのですが、
どうすればいいのでしょうか。
hIconSmやhIconはちゃんと設定しているのですがエクスプローラ表示時だけ
表示されません。
920デフォルトの名無しさん:01/09/05 17:46 ID:y2XHDEbw
system( … )



CreateProcess して WaitForSingleObject( …, INFINITE ) は

同じような動作と思っていいのでしょうかね?
921デフォルトの名無しさん:01/09/05 18:04 ID:Z95/O0wg
>>918
GetDC(NULL) でプライマリモニタのデバイスコンテキストを取得すれば、
ウィンドウの枠に制約を受けずに描画できます。

また、解像度の変更は ChangeDisplaySettings() を使えば可能ですが、
これはデスクトップアイコンや開いているウィンドウの位置を変更する
副作用があります。ユーザの怒りを買いたくなければ、使わない方が無
難です。(DirectX は *正しく使えば* 全画面モードから復帰しても、
デスクトップアイコンの位置などを乱しません)
922デフォルトの名無しさん:01/09/05 19:53 ID:q2XAomPA
>>920
おおまかなところそんな感じ。
923918:01/09/05 21:53 ID:1ucYoHgc
>>921さん
早速試してみます。どうもありがとうございました
924デフォルトの名無しさん :01/09/06 05:18 ID:JvjB7IHc
手始めにMFCじゃなくてC言語だけでつくる(SDK?)というのをVCで始めました.
そこで,ウィンドウにテキストボックスとボタンを2つ作って,ボタンを押すとメモ
帳が起動して,テキストボックスに文字列を書いて,さらにもう一個のボタンを押
すとテキストボックの文字をメモ帳に転送する,というのをやってみたいのですが
どうしたらよいでしょうか?
MSDNで調べた限りでは,SPY++というのでクラス名を調べて・・・
FindWindowEx()というやつの引数にそれを代入して帰ってきたハンドル当てに
SendMessage()でうまい具合に・・・という風にすればいいかな?
と思うのですが,こういったサンプルが載せてあるサイト等,どなたか教えてくれませんか?

ほかのアプリケーションを起動するのはサンプルで見つけたのですが,FindWindow
という関数の使い方や,そもそもホントにこういう方針でいいのかもわかりません.
925デフォルトの名無しさん