1 :
名無しさん@お腹いっぱい。 :
2000/11/03(金) 02:55 作っときました。 システムいじりたい人、軽いPG作りたい人はどうぞ。 (言語は指定してないんで質問の時にはちゃんと書いてね)
どうぞって、あんたゴルァ…
3 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 03:40
じゃあせっかくだから、相談相手になってくれ。 なんかここ技術板なのに、クソスレしか生まれないんだけど、どうしたらいいと思う?
>3 特に週末はひどいものがあるな。
6 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 03:54
スレッドを立てる時間が悪いと思うんだな。 今いるのはプログラムに興味はあるもののなにも出来ない 引きこもりさんばっかり。
8 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 03:59
なんか1は、なにも書かないし、立て逃げなの?
9 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 04:15
EnumDisplaySettingを使うと、0Hzとかふざけた数値が返ってきます。 どうしたらいいでしょうか?
>>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
14 :
3 :2000/11/03(金) 04:30
>>4 変に勘ぐらないでくれ。
純粋に相談相手になってほしかっただけだよ。
この板の存在意義についてでも話し会おうや。
15 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 04:31
>13 いや、NT系なら正常動作するらしいよWin2000とか・・・。
16 :
3 :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も無いので、模索中。
20 :
12 :2000/11/03(金) 04:48
>>19 暗黙って…、CreateEventやMutexじゃだめなの?(CEにあったっけ?)
カーネルオブジェクトに頼らないで、プロセス間でどうやって同期させるの?
21 :
12 :2000/11/03(金) 04:49
所で、perlで使うディレクトリ排他ロックとかってWindowsでも有効なのかな
22 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 04:52
23 :
12 :2000/11/03(金) 04:57
24 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 05:21
>>20 待ち行列に依存しないでもよい形かたちで、最低限の同期オブジェクトは使う。
まぁキューになってないOSなど存在するとは思えんが、
貧弱な同期処理しかできないOSにも移植できるようにとの
お達しのもとで作業しておる。最悪、OALでなんとかするし。
25 :
12 :2000/11/03(金) 05:29
>>24 >貧弱な同期処理しかできないOS
例えばどんなのがありますか?
あと、OALってなんですか?
質問ばかりですいません。
26 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 05:45
>>25 >貧弱な同期処理しかできないOS
一部のRTOSなんかにありそうだとムダに想定されている(ワラ
OALは、CEのカーネルをビルドするときに、
ハードウェアに依存する部分をベンダーが実装する層。
DirectXのHALみたいなもんだが、カーネルモードで動く。
27 :
12 :2000/11/03(金) 05:53
なるほど、CEの世界も奥が深そうですね。 昔、CEはシングルタスクって聞いたことありますが、それも絡んでそう。
28 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 06:04
>>一部のRTOSなんかにありそう んー、でもセマフォぐらいは簡単(とはいわないけど)に実装できそうな気がする。 スレッド関係の本にもサンプル載ってるぐらいだから…
29 :
名無しさん@お腹いっぱい。 :2000/11/03(金) 06:06
ありゃ、まちがえた。 スライシングの方法によるか。
他のプロセスのスレッドを直接的にいじろうというのがそもそも間違いでは? 双方の合意のうえでやんなきゃ。
31 :
名無しさん@お腹いっぱい。 :2000/11/04(土) 05:22
よく使うAPIリファレンスみたいなサイト知りませんか? 他スレでかいしゅつだったらゴメン。
>>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だとサポートしてないよね確か。
俺だったら素直にセマフォ使って(無いなら実装して)同期取るけどね。
40 :
31 :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のソースを参考にしてみたんですが間違っているかどうか教えてください。
42 :
41 :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を呼ぶのにどうしようかなと
45 :
44 :2000/12/14(木) 16:14
それからコンソールアプリの場合はhInstanceを何にしたらいいの?
>44 あるのかもしれないけど、俺はだいたいDLLの関数を呼ぶときに引数つけて 呼ばせてる。
47 :
44 :2000/12/14(木) 16:58
GetModuleHandle(NULL)かと思っていましたが >このパラメータがNULLの場合、 GetModuleHandle関数は、 呼び出したプロセスを作成するのに使われたファイルのハンドルを返します。 でもコンソールアプリでもGUIアプリでも常に 0x400000が帰って来ます。 そしてhInstanceもどうもいつも0x400000です #解説WebによるとこのhInstanceはアプリ事に違うように書いてあったのに・・・・ という事は実は GetModuleHandle でビンゴなのかな?
48 :
44 :2000/12/14(木) 17:00
49 :
44 :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); }
50 :
SAGE :2000/12/14(木) 18:37
少なくとも VC++ の WinMain の hInstance には必ず GetModuleHandle(NULL) が入ってるようだが。(CRTのソースでは)
51 :
44 :2000/12/14(木) 18:52
Delphiのソースも追いかけたら結構 GetModuleHandleを hInstance代わり に使ってましたね。 なんか日本語ヘルプがダメダメなのかな、-->GetModuleHandle
52 :
SAGE :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.
54 :
44 :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);
で構造体というかオブジェクトを渡して、
必要ならその構造体に関数ポインタ入れとくけどなあ
58 :
44 :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
63 :
44 :2000/12/15(金) 15:00
waveOutOpenで CALLBACK_FUNCTIONて何か問題ありますか? サンプルにあるような感じで、ただサイン波を永遠出す為に HDRをコールバックproc内で回収させるだけの処理を追加したところ CALLBACK_WINDOWでは問題なく動く (ただ当然メッセージ機構は常に動かす必要がある) んだけど、CALLBACK_FUNCTIONは処理そのものは動くのだけど最後の waveInResetのところでwindowsから帰って来てくれません。
64 :
44 :2000/12/15(金) 15:03
ちなみにwaveInResetをコールバックproc内で発行した場合はOKです
65 :
44 :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
70 :
68 :2000/12/17(日) 17:06
ありがと。大変参考になった。
71 :
66 :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の本を眺めても載ってないのですが・・・・
>>73 その手の趣味の方々が集まったクラスです
常にお尻の穴が危険にさらされています
コントロールはコントロール固有のウインドウクラス名を指定して CreateWindowExだろ?
77 :
>73 :2000/12/18(月) 10:24
78 :
名無しさん@お腹いっぱい。 :2000/12/18(月) 16:28
>>73 簡単に言うと、ウインドウのウインドウプロシージャを独自の
関数に置換する事。その関数では、通常一部のメッセージのみを
独自に処理して後は元のウインドウプロシージャ―に渡すんで
「サブクラス化」と言うみたい。このサブクラス化で、ウインド
ウの動作の一部を変更できるんで、結構便利かも。
・創作プログラミングの街
http://www.sm.rim.or.jp/~shishido/ にも実際のソースや解説がある。あと、「プログラミング
Windows」でも取り上げていたはず。
79 :
73 :2000/12/18(月) 18:40
ありがとうざいました。これから見てみます。>78さん
80 :
名無しさん@お腹いっぱい。 :2000/12/19(火) 16:40
メッセージの番号とメッセージの一覧みたいなのありませんか? デバック中にメッセージ番号表示させても意味判らないので 変換関数作りたいんですが
81 :
名無しさん@お腹いっぱい。 :2000/12/19(火) 17:39
82 :
80 :2000/12/19(火) 17:42
あ、馬鹿な事質問してしまいました。 APIヘルプに メッセージ一覧があったので これからテキストを抽出して Cソースに加工して印刷すればいいだけですね。 すみませんでした。
83 :
80 :2000/12/19(火) 17:44
>>81 ありがとうございます。マルチメディア系とか色々散らばっているので・・・
84 :
名無しさん@お腹いっぱい。 :2000/12/19(火) 19:02
85 :
名無しさん@お腹いっぱい。 :2000/12/19(火) 23:29
Borland派ならWinSightだね。
86 :
名無しさん@お腹いっぱい。 :2000/12/20(水) 09:17
「SystemTimeToTzSpecificLocalTime」っていうAPIを使ったら、 Win95/98ではちゃんと動作しないという事が納期の前日に判明。 今修正中... というわけで、95系とNT系で動作が違うAPI情報きぼん。
87 :
73 :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ファイルで やってもやっぱりずれます。どこに問題があるのでしょうか。
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
>ブービーさん どうもありがとう。 今DL中です。
98 :
デフォルトの名無しさん :2000/12/24(日) 02:27
>91 LineToは終点を含まない筈 Rectangleも同じで x終点-x始点ドットの図形が描かれる筈 だけど、実際にはその通りにならない場合も多し。気にするな
99 :
名無しさん@お腹いっぱい。 :2000/12/24(日) 13:29
VC++でSDKプログラミングやりたいんだけどお薦めの本ってないですか? 本屋に行ってもMFC使ったのしか分からなかった。 できれば入門書とリファレンスとお願いしたい。 初心者なんで的はずれな質問だったらスマソ。
100 :
91 :2000/12/24(日) 14:00
>>98 本を読み進んでいくと
Windowsが勝手に値を変更するみたいなことが書いてました。
101 :
名無しさん@お腹いっぱい。 :2000/12/24(日) 14:01
>>99 プログラミングWindows第5版 (上)(下)
マイクロソフトプレス
なんかがおすすめ。
>91 CreateEnhMetaFile は0.01"ミリ"単位で指定 Rectangle は座標だからピクセル この辺の問題じゃなくって?
103 :
名無しさん@お腹いっぱい。 :2000/12/24(日) 18:54
99>101 サンクス、gooで検索したけど合計1400頁、上下巻で1万円か… 鬱だ氏脳 「猫でも分かるプログラミング」でも復習してくるか… VCのヘルプは英語だしさらに鬱だ…
買う金無いなら図書館いけ>103
105 :
101 :2000/12/25(月) 09:52
プログラムをやりたいのならこのくらいの本を買わないとだめだ。 基本的なことをやるのなら上巻の最小の方だけやっても基本は理解できる。 別にメタファイル、スクロール等が必要ないのであれば読み飛ばしても問題ない。 もっとも構造体とポインタがわかってないとまずだめだが・・・
106 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 15:49
ユーティリティソフトのような物を作って、Windowsに標準で付いているメモ帳のキーボード設定をカスタマイズしたいのですが、どんな方法がありますか? メモ帳の.exeファイルには手を加えないで、他の.exeから設定する方法を考えています。
>>106 SetWindowsHookExとか調べてみ。
108 :
名無しさん@お腹いっぱい。 :2000/12/25(月) 18:56
109 :
106 :2000/12/25(月) 21:27
>107 ありがとうございます。 それを手がかりに調べます。
>>94 DOCINFO構造体でファイル名指定できたんだね。
逝ってきます。
111 :
108 :2000/12/26(火) 01:44
>>106 いや、だから俺が、そんなめんどうなことできるか?
って逝ってるんだが...
メモ帳似ソフトを自分で作ってしまったほうが
はやくない?
>>111 それよりはキーバインドをカスタマイズ出来るエディタを使った方が
早い。実用的な意味が皆無なのは、言われなくとも当人が一番良く
分かっているだろうが、修行中のプログラマは、何も実用性のためだけに
プログラムを組む訳じゃないだろう。
自分のものさしだけで物事を考えるのは止せ。
113 :
名無しさん@お腹いっぱい。 :2000/12/29(金) 17:39
age
114 :
デフォルトの名無しさん :2001/01/02(火) 02:07
115 :
デフォルトの名無しさん :2001/01/02(火) 06:18
仕様というのならせめてその理由を説明してほしいよな・・・
116 :
名無しさんi486 :2001/01/02(火) 08:11
>>114 これは仕様だろ。なんで仕様なのかわからないのなら、それは
あなたが厨房。わからないのならわからないっていえば教えたる。
まあMSも、もうほんのちょっと賢くできたとは思うがな。
117 :
デフォルトの名無しさん :2001/01/02(火) 08:56
118 :
116 :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入ってないし。
122 :
119 :2001/01/03(水) 14:05
>>120 ,121
ズバリ、それが理由。
しかし今時IEなしの素のWindows 95を使っている人がどれだけいるやら。
いっそ、割り切ってしまいたいところではある。
124 :
禁断の名無しさん :2001/01/03(水) 21:32
>>116 GetVersionの戻り値が変化する実行ファイルリストって
どうやって手に入るのかな?
125 :
119 :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で検索してみたら説明してるページ見つける事ができました。 何回も答えてもらってほんとにありがとうございました。
いえいえ。がんばってください。>132
>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
を調べてみて。
>>136 ,
>>137 作成・実行環境がWin2kなのでOpenThread()でTHREAD_QUERY_INFORMATIONを割り当ててから
GetExitCodeThread()とスレッド関数の戻値判定で望んでいた動作になりました。
ありがとうございました。
139 :
。> :2001/01/17(水) 17:25
>>138 そもそも、Createした時に取得したハンドルはどうしたんでしょ?
>>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
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
>>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;
}
>>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は同一プロセス別スレッドで使用するなら一番速いんだけど。
159 :
153 :2001/01/20(土) 02:26
>154 レスどうも。 勉強になります。 ありがとうございました。
160 :
デフォルトの名無しさん :2001/01/20(土) 02:37
KeyRemapのようなWindows全体に影響するキー入れ替えソフトを作りたいんだけど、どんな方法がある? 今のところシステムフックを使ってキー操作をフックするぐらいしか思いつかない。
161 :
デフォルトの名無しさん :2001/01/20(土) 02:51
キーボードドライバを書く>160
162 :
156 :2001/01/20(土) 03:43
どうもありがとうございました>157,158 midioutのプログラムを作っていて、 本を買ったらライブラリがついてきて どうもそれを使うとぶつかったりするのは解消できるようなので、 セマフォを使ってスレッドを必要分たてて出力に持っていければいいかと思いました。 Mutexは解らないのですが、 そのライブラリを使えばCriticalSectionはたぶん必要ないみたいです。 midioutで音が鳴るのですが、 場合により音が重なるときがあって、 セマフォをたてようとしていたのですが、 他の方法の方がよいのでしょうか???
163 :
156 :2001/01/20(土) 03:52
自己レスです。 ちょっと読んでいて文章がおかしいとおもったので(^^; スレッドを8つ実行できるようにしたくて、 スレッドを必要分作って、 セフォマで制御してあげればよいのかと思いました。 もしかしたら、CriticalSectionの方がいいかも、、、。(^^;
164 :
デフォルトの名無しさん :2001/01/20(土) 08:39
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ゴシックとか)です。 出来れば、レジストリ直接参照は避けたいです。
169 :
160 :2001/01/22(月) 02:06
>161 レスありがとうございます。 キーボードドライバを自分で書いてみようと思います。 お薦めのツールや書籍があったら教えてください。
170 :
turbo type D :2001/01/22(月) 12:05
>>168 SystemParametersInfo
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です。
175 :
SAGE :2001/01/22(月) 21:16
>>174 俺はよくわからんのだが、とりあえずTClockのソースを見るよろし。
スタートボタンはただのボタンだからタブコントロールのスタイルをセットしても意味はない。
177 :
デフォルトの名無しさん :2001/01/23(火) 15:19
GetVersionEx()をWindows Meで使った場合、dwMajorVersionと dwMinorVersionには何が入ってきますか? (Meのマシンが無いので確認できないのです)
Major = 4, Minor = 90 なり。
>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などで動作させたいので、 やっぱり自分で作るしかないですかね。
>>182 SetProcessWorkingSetSize
187 :
デフォルトの名無しさん :2001/01/30(火) 00:56
プロパティシートで右上にある'?'ボタンを消したいんですが、 どーやってやったらいいのでしょうか? お願いします。
188 :
SAGE :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 ありがとうございます。
しかし、良く分かりませんでした(汗)
このコールバックはどこで指定するものなのでしょうか?
普通のプロパティシートのコールバックではないですよね。
いや普通のプロパティシートのコールバック。 PropertySheet() API に渡す PROPSHEETHEADER 構造体の中の PFNPROPSHEETCALLBACK pfnCallback; ね。
191 :
suzume :2001/01/31(水) 18:53
レジストリの保存と復元について質問したいんですけど。 RegSaveKeyでたとえば、 HKLM\software などをファイルに保存して、 HKLM\software をRegEditとかで全部消して、 RegReplaceKey で復元しようと思っているのですが復元してくれません。 戻り値は、問題なくERROR_SUCCESSが帰ってきています。 どこかのサイトで、保存するファイルは拡張子なしにしなければ行けないとか書いてあったけどいみなししでした。 Microsoftに書いてあるとおりにやってんだけど・・・・ ご存知の方いないでしょうか?
192 :
デフォルトの名無しさん :2001/01/31(水) 19:05
>>191 人のPCのレジストリを
ゴリゴリ書き換えるプログラムは嫌いだわ。
レジストリ使うのやめなさい。
>>191 ShellExecute()で"explore"かなんかで実行とかじゃダメ?
やった事無いから動くか知らんけど。
195 :
suzume :2001/02/01(木) 20:56
>>192 レジストリ壊す人もいるし...
そういうものが必要なときがあるんですよ〜
196 :
168 :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を後から得る関数って有りますか?
>>199 GetWindowLongとかWM_CREATEの時のやつとか。
201 :
名無しさん@お腹いっぱい。 :2001/02/03(土) 01:14
>199 ウインドウハンドルがわかってるなら(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE) ほかにはWinMainでグローバル変数に収納して使うとか。
202 :
名無しさん@お腹いっぱい。 :2001/02/03(土) 01:24
ウィンドウハンドルまたはインスタンスハンドルからアプリケーションを識別したいのですが、どんな方法がありますか? GetClassName()でクラス名を使う方法は思いついたのですが、ほかに有効な方法があったら教えてください。
203 :
199 :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以下略。
209 :
207 :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
厨房な質問です。 「ファイルを開くアプリケーションの選択」ダイアログボックスを 出すにはどうしたらよいですか?
213 :
212 :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にクラスがあるよ。
あれでもこれって単なる「開く」ダイアログじゃありませんか?
さっすが220さん!
222 :
名無しAMD :2001/02/11(日) 11:43
どうしても作りたいプログラムがあるので、質問させていただきます。 実は、インターネットエクスプローラの 「ホーム」URLを書き換える プログラムが作りたいんです。 知ってる人、どうかよろしくお願いします。
>>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に特化してたりするのはパス。
>>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
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では動かない。
スージープラグインを使うのもいいかも。
236 :
232 :2001/02/14(水) 07:57
>234 パレットを持ってる奴を24bitカラーに直して読み込みたいです。 >235 LoadImageの存在をはじめて知ったのであとで調べてみます。 GetDIBitsって、LONG境界で置かれているものを、詰めて置いてくれるんでしょうか?
>>236 >パレットを持ってる奴を24bitカラーに直して読み込みたいです。
1byteずつデータ読んでいってそれに対応するパレット、(RGBQUADからね)
で、出来上がりね。
BITMAPINFOHEADER、BITMAPINFO あたりはすでに読んでるよね。
238 :
236 :2001/02/14(水) 23:20
>237 圧縮されている奴とか自力で解答するってことで? それって結構手間では… どちらにしろ一発では無理ということですか…
239 :
デフォルトの名無しさん :2001/02/14(水) 23:46
>>238 つまり、どんな形式のBitmapでもカンタンに読込みできる
ライブラリを探しているわけね?自作したいんじゃなくて。
最初からそう言ってよ。
240 :
238 :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で言ってるのに、
でも自作したいって... 自己矛盾してないか?
243 :
240 :2001/02/15(木) 07:53
>241 JPEGやGIFまでロードで出来るなんて便利な関数ですね。 さっそく調べてみます!
244 :
240 :2001/02/15(木) 07:53
感謝!
簡単なら自作したいってだけか…。
GIFのローダーは、比較的易しいけど、 特許の問題があるからねぇ・・・
247 :
デフォルトの名無しさん :2001/02/15(木) 16:12
関係ないけど、いつから BITMAPINFOHEADER の biCompression に、 BI_JPEG とか BI_PNG とか付いたんだ? 鬱だ・・・
248 :
デフォルトの名無しさん :2001/02/15(木) 17:04
.exeファイルがコンソールアプリなのかそうでないかを判別する 方法ってあります?PEヘッダーじゃダメそうだし、GetSTDHandleを インポートしているかどうかでもダメだし。
>>274 JpegとかPNGのBMPもあるってこと?
250 :
デフォルトの名無しさん :2001/02/16(金) 01:38
>>248 SHGetFileInfoでどうだろう
251 :
248 :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++に組み込むのはやはりないのか。
アピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアヒアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピv゚アピアピアピ
255 :
デフォルトの名無しさん :2001/02/18(日) 13:11
ForegroundWindowの属するプロセスIDかハンドルを取得するAPIってないですか? もしくはWindowハンドルからプロセスIDかハンドルを取得するAPI。
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){ // ハンドルクローズ時エラー }
>>260 SetCommStateのDCBで信号周りの設定がかなり重要なんだけどな。
まぁ、信号のハンドシェークは通信相手によるからね。
書き込む前にGetCommModemStatus等で
DSRぐらいは見といたほうが良いと思う。
262 :
デフォルトの名無しさん :2001/02/20(火) 00:53
キャプチャーカードから画像をリアルタイムで取り込んでテクスチャとして使いたんですが、 DirectX知らないんで、Win APIでそんなの有りますか?
263 :
K :2001/02/20(火) 02:36
>>260 >>261 付け足すなら、
SetupComm() SetCommTimeouts() PurgeComm()
あたりもやっといたほーがええんとちゃう?
264 :
260 :2001/02/20(火) 16:03
>>261 >>263 情報ありがとうございます。
でもう一つ質問なんですが、
260でやっている事を
Timerを使ってある時間おきに
何回もやりたいのですが、
WriteFile処理が終わらないうちに
次のWriteFileをしようとすると
エラーになってしまいます。
2回目のWriteFileは、1回目のWriteFile
が終わってからやるしか方法が無いのでしょうか?
(SetTimerの方で1回目のWriteFile処理が終わるより
長い時間を設定するしかないのでしょうか?)
教えて下さい。
>>264 CriticalSectionとかどうよ?
266 :
260 :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を送れば表示されるはず。
>>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 使うのが吉と思われ
>>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しただけじゃ、いくらなんでも、やること足らないと思うからね。
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の中身書き換えればいい。
282 :
276 :2001/02/28(水) 01:38
みなさんレスありがとうございます
>>278 こんなのがあるとは!詳しく読んできます。これ使えば安心できそうです。
>>279 そうなんですけどね・・・なんかいやで。一応0x8000以下は避けてたのですが。
>>281 どうもリソースエディタ書き換えると挙動がおかしくなってしまいまして・・・。
また整形の仕方もよく分からず避けてしまってました。力不足、精進します。
283 :
278 :2001/02/28(水) 08:10
あ、ごめん。全然ちがうこといってるわ。 設計時に決定しておくリソースIDのことね。そんなのは、自分で管理しろってことで。 RegisterWindowMessage("ъ( ゚ー^) マターリ!")は、 独自のWindowsメッセージ送るときに重複しないように(WM_USER + 100とかでなく)するやつだった。
>>283 あ、ヤパーリ
ヘルプみててなんか違うかな、と・・・・問題無いです
286 :
デフォルトの名無しさん :2001/03/04(日) 21:33
フルパスから特定の.exeや.dllが使用中かどうかは、どうやって調べるのですか?
書き込み属性でオープンしてみるとか。 いっそ削除してみるというのはどうだ?削除できなかったら使用中
288 :
デフォルトの名無しさん :2001/03/05(月) 02:18
>>286 GetModuleHandleではだめなんけ?
>>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;
}
でどう?
しまったクッキー消し忘れ、説得力ねぇ いや今見たら自分が邪魔しちゃってたみたいだったからさ
291 :
デフォルトの名無しさん :2001/03/05(月) 10:19
ウインドウの右上の×を押してもすぐに終了させずに、 データをSaveするかどうかのダイアログを出すようにし、 キャンセルを押すとスレッドを終了しないようにしたいのですが、 ウインドウが閉じてしまいます。 WM_DESTROYになにか細工をほどこせばよろしいのでしょうか?
292 :
MUTT-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
でいーんじゃないの
294 :
291 :2001/03/05(月) 21:50
ありがとうございます。うまくいきました。 WM_CLOSEハンドラでDestroyWindow(hWnd)を呼ぶか呼ばないか だけでよかったんですね。
295 :
286 :2001/03/06(火) 00:48
>>288 >>GetModuleHandleではだめなんけ?
試してみたのですが、ダメでした。
この関数はプロセスが同じじゃないと使えないようです。
>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を使え。
>>299 一瞬、ToHeartと読み違えたよ・・・。
逝って良し!>オレ
301 :
295 :2001/03/06(火) 22:32
>299 どうもありがとうございます。 解決しそうです。
302 :
デフォルトの名無しさん :2001/03/10(土) 16:17
Dll内のダイアログテンプレートを使うにはどうすればいいんでしょうか? LoadLibrary()→FindResource()→LoadResource()→LockResource() とまではわかってるのですが、どうやってDialogBox()を呼べばいいのですか。
>>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 );
これで動くハズナリ〜
307 :
デフォルトの名無しさん :2001/03/10(土) 19:58
308 :
302 :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 レジストリにリダイレクトするよう特別に指定したものでない限りそんな
ことはない。
316 :
313 :2001/03/15(木) 16:34
>>315 >iniのある場所がすべてのログインユーザから見えるとは限らないとか
というか、そもそも、利用するユーザーの読み書き可能なディレクトリにしか
作れんし、アプリケーションインストール時にでもきちんとアクセス権を
設定するなりしてやりゃいいだけでしょう。
そもそも、アプリケーションディレクトリ内に作ったファイルが読む
アクセス権を持ってないユーザーがそのアプリケーションを利用出来るのだろうか?
実行権だけを設定することは可能だが・・・
>HKEY_CURRENT_USERなら 確実。
前提にレジストリを使わずにと言ってるとこにレジストリ勧めてどうする?
317 :
315 :2001/03/15(木) 16:57
>>316 >利用するユーザーの読み書き可能なディレクトリにしか作れんし、
Win2kだと確実にそれが保証されるディレクトリはプロファイルディレクト
リの下にしかない。ということは他ユーザからは使えないから何も考え
ずにアプリケーションディレクトリの下に作成してユーザ別にインストー
ルしてください、でも問題ないと思う。
>アプリケーションインストール時にでもきちんとアクセス権を
>設定するなりしてやりゃいいだけでしょう。
アクセス権まで設定してやらないと正常に動かせないなら事実上インス
トーラが必要で「再設定が面倒でない」という条件を満たしているか疑問。
そこまでするならレジストリのほうが簡単だと思う。
318 :
313 :2001/03/15(木) 18:05
>>317 >アクセス権まで設定してやらないと正常に動かせないなら事実上インス
>トーラが必要で「再設定が面倒でない」という条件を満たしているか疑問。
インストーラを用意するんで何の問題もないと思うんだが。
つーか、再設定を面倒なく行いたい言う話してるんだから、
インストーラぐらい作れよ。
そもそも、再設定と言う作業を簡便に行いたいって話だろ?
開発の作業で面倒なことをしたくないと言う話なのかい?
まぁ、アプリケーションの最初の起動時にiniファイルのあるディレクトリの
アクセス権を変えるんでもいいんじゃない?
もちろんadmin権限の奴でログインしてさ。
319 :
あ、ついでに :2001/03/15(木) 21:19
NTのアクセス権って、上のフォルダの権利を継承するって ことになってるはず(MLでそう言ってる)んだけど、 実際にクライアントからフォルダを作成すると、 上のフォルダに複雑な権限を設定すると、 設定とは無関係にオーナーだけ 読み書き可能になってしまう。 単純に設定すればOKみたいだけど、 これ、バグなんですか?
320 :
315 :2001/03/15(木) 21:20
俺は
>>304 じゃないから
>>304 が何を意図してたのかは分からんが
インストーラ用意するならなんでレジストリが×なのか謎。
個人的にはやたらにディレクトリやファイルの権限をいじるのはセキュ
リティ上の問題を起こしそうで嫌。
321 :
あ、ついでに :2001/03/15(木) 21:24
320>> ええっと、「答案用紙」というフォルダーを 教師三人だけ読み書き可能、他は書き込みオンリー でディレクトリも見えないなんてサイトがあるんですけど、 いつのまにかアクセス権がぐちゃぐちゃ。 プロパティを表示させると「特殊なアクセス権(RWX)」と 出てきます。
322 :
313 :2001/03/16(金) 00:02
>>320 お前さぁ、もう一度304から読み直してから書き込めよ。
323 :
313 :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ってホント怪しい。
>NTってホント怪しい。 NTよりお前の方が怪しいと思う。
329 :
デフォルトの名無しさん :2001/03/19(月) 00:09
あげ
330 :
デフォルトの名無しさん :2001/03/19(月) 20:31
実行ファイルにドロップしたファイルのパスを取得したいの ですがよくわかりません。 今はWinMainのコマンドライン引数から適当に切り出して使っているのですが いまいちスマートじゃないような・・・・ 何かよい方法はありますか?
>>330 ふつーだと思うけどダメなの!?
Window場にDragならメッセージなりShell-APIなりがあると
思うけど
332 :
デフォルトの名無しさん :2001/03/20(火) 00:06
>>330 シェルの仕様だから、コマンドラインで受け取るしかない。パースの仕方は
いろいろあるだろうけどね。
333 :
デフォルトの名無しさん :2001/03/20(火) 09:51
API関数を使用してiniファイルを操作できるときいたのですが どのようにしたらいいんでしょうか?
>>333 なぜ今iniファイルを使うか?レジストリに白!
335 :
333 :2001/03/20(火) 10:58
レジストリはいじりたくないのもので・・・
336 :
麻衣 :2001/03/20(火) 11:25
WritePrivateProfileString GetPrivateProfileString だけど、今からやるならXMLでやろうよ
サンキュウ
>>334 そのソフトでしか使わない物をレジストリに入れるのは頼むからやめてくれ・・・(x_x
339 :
デフォルトの名無しさん :2001/03/20(火) 13:29
コントロールのクラス名に"msctls_updown32"を指定して、リソース内でアップダウンコントロールを作っています。 コントロールの最大値、最小値もリソース内で指定したいのですが、どのようにすればいいのでしょうか?
340 :
デフォルトの名無しさん :2001/03/20(火) 15:53
341 :
デフォルトの名無しさん :2001/03/20(火) 20:08
>混在してたら文字化けして ダブルクォートで囲めば問題起きないと思うんだが。
343 :
341 :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"
こちら。確か「"」は取れて文字列だけ読めると思ったが。
先頭から囲んじゃったら、セクションごと読まないといかんようになってしまう。
347 :
341 :2001/03/21(水) 19:45
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++で見てみれ。
本体、うにゅう、フキダシ全部別ウィンドウだよん。
352 :
350 :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() で取得できます
>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) はヘルプを直訳しただけ(だったと思う逆だったらすいません)
359 :
357>358 :2001/03/24(土) 16:31
>ヘルプを直訳しただけ(だったと思う あ、そうなんだ。 じゃあ、『Inside OLE2』にするッス。 さんきゅでした。
360 :
デフォルトの名無しさん :2001/03/24(土) 16:35
他のアプリのエディットボックスの内容を取得する方法って知ってます? キャレットの座標などは取得できるんですけど、同じ方法では肝心の内容を 吸い出せない…。 セキュリティ目的でこうなっているのかと思いますが、以前、翻訳ソフトで マウスカーソルの下の単語を訳すというのがあったので不可能では無いと思うのですが。
うぬ?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() ウィンドウハンドルが取得できれば内容にロックがかかることはないです。
絶対座標があれば 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 さんと同じような質問で恐縮ですが。
マウスカーソルなどで現在選択している部分のテキストを取得する
方法はありませんか?(自アプリ/他アプリ)
>>363 「エディットぼっくす」って逝ってるからFindWindowのクラス名
の指定は"edit"でいいんじゃないかな
>>360 あとクラス名が不明ならdesktopのhwndを引数にしてEnumChildWindow
という手もある
けどウィンドウが重なっていてその上にマウスがある時は注意が
必要
(EnumChildWindowは確かZ-order順に探索しなかったと思う)
>>370 GetCursorPosとWindowFromPointとSendMessageで実現できそうです。
ありがとうございました。
EM_GETSELTEXTってRichEdit以外では無理なんかな。
373 :
363 :2001/03/27(火) 00:31
>>368 親ウィンドウなんで(エディットだと特定できない)
374 :
>>372 :2001/03/27(火) 00:34
EditだとEM_GETSELで位置をとって取得することになるのと違いますか。
>>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 なんかで、できるダイアログのボタンの文字列を変えたいのですが、いい方法はないですか?
382 :
デフォルトの名無しさん :2001/04/02(月) 11:31
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が繋がってたらややこしい
ことになるな…
387 :
384 :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と同じような方法でアクセスできるんだろか。
389 :
384 :2001/04/04(水) 17:13
>>388 ASPIはWin2kではデフォルトでないゆえ、使うわけには参らんでござる。
WDMで同様の機能があるものの、これはWin95では使えぬもの。
考えあわせまするに、HDBENCHはレジストリから情報を取得しているのでは
と思われてきた次第。が、ver. 2.61がWin2kで正しく情報を取得する
のを見るに、裏技がありはせぬかという疑いも消えず。
Regmonにてレジストリへのアクセスを監視したところば、HDBENCHは レジストリから情報を取得していると判明いたした。
>>390 そうか。実は反則ってほど反則でもないのかな(藁
俺はファーム屋なので直接ハードから得た情報じゃないとって考えが
先に立っちゃったけど、Windows的にはそれでもいいのかもね。
392 :
デフォルトの名無しさん :2001/04/07(土) 01:52
うん。Windowsだから。 あるがままを受け入れるのです。。。
393 :
デフォルトの名無しさん :2001/04/07(土) 08:14
394 :
デフォルトの名無しさん :2001/04/08(日) 03:58
誰でも良いので「プラットフォーム SDK」の場所を教えてください。
395 :
デフォルトの名無しさん :2001/04/08(日) 05:02
396 :
デフォルトの名無しさん :2001/04/08(日) 18:17
這入れないです>395
ごめん、あったよ。
398 :
デフォルトの名無しさん :2001/04/10(火) 16:16
Fiberとは、どのような時に使うものですか?
399 :
デフォルトの名無しさん :2001/04/10(火) 17:39
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
405 :
デフォルトの名無しさん :2001/04/11(水) 02:58
>>401 相手がTrueTypeフォントなら、GetGlyphOutlineとかでスプラインデータを
取得し、自前でレンダリングする。
メモリDCを用意して、必要な大きさの4倍の大きさでレンダリングしたあと
StretchBltするとか。
ただこれだと、描画結果がハードウェア依存(システムの画面モードにも
依存するか)するので、自分で内挿するとか。
>>401 DrawText とか TextOut
407 :
398 :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 どちてそう思ったの!?その時間帯にスッd出たから!?
ニフで話題になったからそのまま書きこんだだけだろ。
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です。 よろしくお願いします。
testは値が入るところではなくて、値が入るところを指し示す ものだからだよ。
424 :
116 :2001/04/19(木) 15:14
425 :
デフォルトの名無しさん :2001/04/19(木) 15:18
>>423 さん、レスありがとうございます。
しかし意味が分かりません。
もう少し詳しくお願いします。
ちなみに、デバック中にtestを見ても値が入っていなし
rtnも-2147024809なので
私見ではGUIDのクリエイトに失敗しているのだと思うのですが
>>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
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 を返さなければなりません。
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
441 :
デフォルトの名無しさん :2001/04/25(水) 04:59
>>433 ならグローバル変数使わなきゃいいじゃん。
変数は全部関数の引数で渡すとかして。
442 :
デフォルトの名無しさん :2001/04/25(水) 07:20
ドラッグ&ドラップで大量のファイルを落とされる事が予想される プログラムの場合、ファイル名だけ手早く自前のバッファに詰めて さっさとDragFinish出すのが望ましいのでしょうか?
444 :
デフォルトの名無しさん :2001/04/25(水) 16:40
当たり前の割りには大半のソフトが固まるんですが…
>>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等を使う。
450 :
デフォルトの名無しさん :2001/05/07(月) 09:28
>440 ありがとう。 AdvancedWindowsを読んでたところだから助かりました。
451 :
デフォルトの名無しさん :2001/05/09(水) 14:50
Winクライアントで「IPアドレスを自動取得する」設定にすると、DHCPクライアント となり、ネットワーク上のDHCPサーバーを探してくれますね。条件を簡単にして 「同じサブネット内のDHCPサーバーを探す」というプログラムを作りたいんですけ ど、適切な説明書やライブラリがありましたらご紹介ください。よろしくお願い マンモス。
453 :
デフォルトの名無しさん :2001/05/09(水) 16:43
>452 ありがと!やっぱりRFCからだな。 関連するWinAPI調査して楽勝だ!
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までじゃなかったっけ? リッチエディットならたぶん制限は無いと思われ。
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でリッチエディットについて調べようと思ったんですがわからないです……
もし解決方法を知っていましたらどうか教えてください〜……
あ〜、色々やって見たけど全然ダメdeath…… というか、リッチエディットというコントロールが見つからないでふ… おやすみなさい…
>>459 CreateWindowの前にLoadLibrary("RICHED32.DLL")やInitCommonControls()はしてある?
あ、サイズの小さいテキストがちゃんと表示されているんなら忘れて。
自己レス 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()を使ってのボタンのリサイズもクリックすると元の 大きさに戻ってしまいます。うーん。
スタートボタンてWindowsデスクトップの? あれはOwnerDrawだから、サブクラス化するかフックするかしないと いけないんじゃない?
466 :
マルチメディア :2001/05/11(金) 20:33
LoadLibrary("RICHED32.DLL"); を追加したら上手く行きました!ありがとうございます!
467 :
デフォルトの名無しさん :2001/05/12(土) 01:06
Win32APIの日本語版リファレンスの場所を教えてください
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;
>>463 作業途中から見ました。けど「なぜこの関数を使ってるのか?」がわからない
とアタリつけられれないので
>>462 さんの情報には感謝してます。
471 :
デフォルトの名無しさん :2001/05/12(土) 14:33
突然ですが SHGetMalloc() と CoGetMalloc() の違いは何ですが? 内部的な実装も気になります。使い分けとかもあるのでしょうか?
472 :
わからんよ :2001/05/12(土) 19:21
コンソールアプリケーションを作っているのですが、 そこからCreateWindowしたいのですが、出来るものなのでしょうか? 現在、インスタンスハンドルが取得できなくて困っております。 どなたか、ご教示いただけませんか?
GetModuleHandleで取得
>>472 CreateWindowしたらメッセージループ回す事。
ループ用のスレッド作るのが簡単。
メッセージループは必ず作る事。
475 :
デフォルトの名無しさん :2001/05/13(日) 01:23
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 して
なくても使える妙な奴らなのだ、というようなことをどこかで
読んだような読んでないような。
477 :
472 :2001/05/13(日) 20:02
ありがとうございます! でも GetModuleHandle = インスタンスハンドルってなんだかピンときませんね。 メッセージループなのですが、自らのコンソールウィンドウを親ウィンドウとして 作って出来ないものでしょうか・・・、試してみます。
478 :
デフォルトの名無しさん :2001/05/15(火) 14:14
Windowsでsync()ってどうやるの? 自分のプロセスがつかんでるストリームだけじゃなくて、OSのキャッシュを全部 ディスクに吐かせたい。
479 :
デフォルトの名無しさん :2001/05/15(火) 14:35
480 :
478 :2001/05/15(火) 18:43
481 :
479 :2001/05/16(水) 00:58
>>480 ふむぅ、ソースが欲しいわけね。
Native API にも、それらしいの見つからないし...。
いっそ、あのバイナリをハクったほうが手っ取り早いかもよ。
ハクった」なんて初めて聞いた。 ハッカー ハック ハックる ハクる(った) ・・・日本語崩壊の危機を感じたことはありませんか?>481
>>482 むしろあんたがわざわざ取り上げたせいでより波及しそうだな(w
すくなくとも俺の頭にはインプットされてしまったよ
CreateFont()で普通の文字よりも幅の狭いフォントを作って そのフォントで文字を描画したらWin9xとWin2kで 微妙に違う幅の文字が描画されてしまいます。 9x,2kどちらでも同じ幅の文字で描画したいのですが、 どうしたら解決できるでしょうか?
485 :
484 :2001/05/16(水) 02:31
しまった。age忘れた。鬱だ…。
487 :
484 :2001/05/16(水) 02:36
TrueTypeでです。
488 :
デフォルトの名無しさん :2001/05/16(水) 03:06
>>480 DeviceIoControlのFSCTL_DISMOUNT_VOLUMEをみれ。
CreateFile→Lock→Dismount→Unlock→Closeをやる。
Lockできるデバイスなら結果としてフラッシュされる。
Lockできない場合はわからん。
489 :
479 :2001/05/16(水) 10:57
>>482 あれ、おかしいか?
仲間内では「全然通じる」がなぁ。
ハッキングする→ハクる
バグがある、もしくは症状が出る→バグる
プロセスが終了しきれずにいつまでも残る→ゾンビる
待ちゆく人にいきなり話しても通じんだろうが、
ここにきてるヤツは、すぐわかる共通のコンテキストにいると思う。
こういうのも日本語の崩壊と言うか?
漏れはあまり議論続けようとは思わんが、
続けたいなら別にスレ(←これも崩壊か?)立てた方がいいと思うぞ。
490 :
sage :2001/05/16(水) 16:46
>>489 方言って、本人意識しないで使ってたりするんだよね。
僕もそれ通じない。
googleで検索しても50件くらいしか出てこないから、
「ここに来てる奴」に限定しても、たぶん殆ど普及して
いないと思う。
しかもヒットした先のページがどれも頭悪そうで苗苗。
sage損ねてゴメン
492 :
デフォルトの名無しさん :2001/05/16(水) 16:50
WIN.INIでなくて任意のINIファイルをデータベースとして 開いて書き込み&保存する関数って無いでしょうか?
データーベースの意味を本当に理解しているのか わかりませんが、WritePrivateProfileStringなどを 使います。
>>493 初心者なんで理解してないです(笑
ともあれありがとうございます、助かりました〜
495 :
デフォルトの名無しさん :2001/05/17(木) 16:19
「猫でも・・」みながら勉強してる超初心者です。 Windows SDK編 第1部 の18〜20章でスクロールバーの使い方を知りました。 しかし、ダイアログボックスの中に複数のスクロールバーが存在する場合、 1つのスクロールバーを動かした場合はそのポジション値だけを変更させたいんですが、 どうやってスクロールバー別に命令を書けばいいんでしょうか?
496 :
478 :2001/05/17(木) 19:27
>>488 アンマウントするの? 相手がリムーバブルなら手じゃあるが、
固定ディスクだと失敗すると思われ
>>495 ウィンドウハンドルは理解してるか?GetDlgItemで取得する
んだぞ?
>>495 俺16章くらいでめんどくさくなって本買っちゃったよ。
狭い画面でブラウザ見ながらソース書くのって鬱にならん?
498 :
デフォルトの名無しさん :2001/05/17(木) 19:53
>>497 全部(あるいはソース部分のみ)エディタにコピペするといいよ。
>>498 すまん実はホントの理由は300章もやってられんと思ったから。
500 :
デフォルトの名無しさん :2001/05/17(木) 21:22
exe内にファイルを読み込んで、exeを実行したときにそのファイルをハードディスクにコピーしたいのですが。 ファイルをリソースで読み込んで、そのリソースをロードしてファイルにコピーしています。 FindResource() SizeofResource() LoadResource() LockResource() CreateFile() WriteFile() CloseHandle() とやっているんですが、ほかに方法はないでしょうか?
>>500 日本語になってねーぞっ。
exe 内にファイルを読み込んでハードディスクにコピーすりゃあ、
ただのコピーコマンドじゃねえか。
「ファイル」って単語、正確に使え。、
なにがやりたいのか、全っ然、わからんぞ。
>>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変数にセットしてはどうでしょう?
503です。 RGBのBitMaskはWORDだし、biCompressionは24bppと同じでBI_RGBだったのね… どっかで禿げしく勘違いしてた。鬱だ氏のう −−−−−−−−− || Λ||Λ ( / ⌒ヽ | | | ∪ / ノ | || ∪∪
やっぱ駄目か?
HBITMAPはちゃんと戻るけど挙動がおかしい。
ヘルプでBITMAPINFOを調べるとやっぱBI_BITFIELDSって書いてあるしPixelFormatはDWORDだ…。
もちょっと自分で調べます。
>>504 VC++4.0のヘルプのBITMAPINFOに書いてある方法のつもりなんですが…
自己解決してしまいました。 ヘルプ読むと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
ぐあ…途中送信失礼。 下の説明文は無視してくださってけっこうです。
age
age
age
age
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) { 処理; } }
>>515 簡単な方法はないと思う。
キーボードフックを登録するか、
コンソールの窓関数(または窓組)をフックする必要があるのでは?
517 :
デフォルトの名無しさん :2001/05/20(日) 20:54
>>516 返答ありがとうございます。
とりあえずやってみます。
>>515 GetAsyncKeyState、GetKeyboardState、GetKeyStateのどれか好きなの(|目的にあったの)を使え。
519 :
デフォルトの名無しさん :2001/05/22(火) 00:52
FAQだと思うのですが検索しきれませんでした。ここでの質問お許し下さい。 取得したディスプレイのデバイスコンテキスト(DC)と、それと互換のある オフスクリーン用DCを使い、Bitbltしています。教科書通りならそれらの DCは、使用後すぐDeleteDCすべきですが、これをアプリ終了まで保持して 使い続けることは保証されてるのでしょうか? とりあえずWindows2000にて、アプリ起動中に画面解像度やbit深度を 変えたりとテストしてみました。今のところ不具合はないのですが、 さりとて確証も持てないわけでして…。 そりゃマズイよ、みたいなのがあったらぜひ教えて下さい。
DC持ちっぱなしは9xだと良くないことがおきたような……
521 :
519 :2001/05/22(火) 01:02
>>520 レスどもです。とほほ、やはり問題あるんですね。
どういうタイミングで不具合が起こるのでしょうかねぇ。
ディスプレイとオフスクリーンのDC、せめてどちらか一方(できれば
後者)でも保証されてると助かるのですが…駄目っぽいかな。
>>519 そうなの?
オイラは今までOffScreen用にCreateCompatibleDC(NULL)でDCを確保して終了時に削除するようにしてたけど、別に何も不具合はなかったけどなぁ。
APIリファレンスには「不要になったら削除」とは書いてあるけど、即削除せよとは書いてないし。
直接ウインドウハンドラからGetDCしたやつなら直ぐに開放ってのは判るけど。
詳しい方、詳細キボンヌ。
Createしたのはいいけど Getしたのはだめなんじゃなかった?
>>522 私もディスプレイのステータスが変わらないならば、OffScreen分は
いちいち削除しないでも大丈夫だと(勝手に)思ってました。
こうしている間も検索は続けているのですが、否定的なものばかりですね。
525 :
519 :2001/05/22(火) 01:33
>>523 すいませんリロードしてなかったです。
おお!、CreateしたDCは保証されてるのですか。
ようやく安心できました。レスありがとうございました。
>>519 おいおい、あれだけで安心するのは早計すぎるよ。
ちゃんと調べたほうがいい。
とはいえ俺もメモリに確保したDCは持ちっぱなしにして、
それで市販ソフト出したことあるけど、
それについての不具合報告は皆無だった。
527 :
519 :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さん方の保証がなければ英文なんかまず
読まなかったと思います。ご協力ありがとうございました。
というか市販ソフトだして大丈夫だったなら安心ですよー、ヨカタヨカタ
529 :
デフォルトの名無しさん :2001/05/22(火) 04:59
>>528 全然駄目。そんなことしちゃいかんよ君たち。
DCってキャッシュだろ。キャッシュの数は昔5個だっけ?
複数のプログラムが保持しまくって、キャッシュが競合した時
画面が崩れるよ。
これって、Win16の知識だね。
メモリデバイスコンテキストならいいんじゃなかったっけ ダメだっけ?
531 :
519 :2001/05/22(火) 05:30
>>529 ムムム、また分からなくなってきました
確かに5個以上保持可能なWin32ベースであっても、ヒープ食い尽くすとまずいので
なるべくReleaseせよとヘルプにありますが、これは
>>527 の通り、GetDC等で取得
したDC、つまりディスプレイDCのみに適用されるのではないのでしょうか。
うーん、正直ディスプレイDCとCreateCompatibleDCで確保したDCの違いが
分からなくなってきました。これらは同種のものなのでしょうか(^-^;
>>529 さんお詳しそうですし、MSDNお持ちでしたらできれば
>>527 の
Using Rectanglesのソースをちょっと検証してみていただけませんでしょうか。
>>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 だーんな。それはキャッシュの話じゃないぞ。
よく考えてみ。
>>534 519を読み直せ。
>取得したディスプレイのデバイスコンテキスト(DC)と、それと互換のある
>オフスクリーン用DCを使い、Bitbltしています。
hdc = DetDC(hwnd); //hwndはウィンドウハンドラ
tmpDC = CreateCompatibleDC(hdc);
ReleaseDC(hwnd,hdc);
又は
tmpDC = CreateCompatibleDC(NULL);
↑上の例の様に確保したtmpDCの部分、メモリデバイスコンテキストだろ?
共通デバイスコンテキストとプライベートなデバイスコンテキストの区別付いてるか?
×DetDC(hwnd); ○GetDC(hwnd); 鬱死 それで「デバイスコンテキスト==キャッシュ説」は? マジで初耳なんだけど。VCのヘルプが間違ってんの?(藁
だからGetDCで得られたDCは一次的なものって意味だろ。
>>538 519からの流れを読むと538の答えはは意味不明だ。(藁
それじゃ537の答えになってないだろ。キャッシュって言葉の意味知ってるか?
現金!
>539 527を読む限り、「must release the device context」の理由が、 「DCはキャッシュだから」なんだろ。 で、これはGetDCで得たDCにしか当てはまらないだろ、というのが527の大意。 なぜならCreateDCで作られたDCはreleaseされるもんではなくてdeleteされるもんだからだ。
>>541 (538)
論点がズレてるな。
GetDCだろうがCreateDCだろうが"DC"は"DC"。
問題になるのは「GetDCで取ったDCを保持し続けた場合にDCキャッシュの問題がある」って事であって、529の「DCってキャッシュだろ」は日本語になっておらず意味不明。
大体にして519-528までは"ディスプレイ互換の「メモリDC」"の話をしてるんだけどな。
互換DCってGetDCする物なのかい?教えてくれ。>529,538
だからCreateDCしたメモリDCは持ちつづけても大丈夫なんだろ。 ちなみに俺は519に全面的に同意。
529の「DCってキャッシュだろ」に対する537の指摘に対して、538の「だからGetDCで得られたDCは一次的なものって意味だろ。」って回答も意味不明だって言ったんだけどな… もうどうでもいいや、ヤメヤメ。
デザイナーズ・コレクション
コロンビア特別区
547 :
デフォルトの名無しさん :2001/05/22(火) 20:05
NTサービスでタスクトレイにアイコン出すのを作ってるんだが、 ログオンをどうやってつかまえるのか、さっぱりわからん。 VNCのソース嫁ってか?
>>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の趣旨から外れてるし。
だからDISPLAYのDCじゃなきゃいいんだろ?
>>552 おれもそう思うが。となるとDisplayDCと混同したり
プリンタのDCを持ち出してきた529とか534あたりはキティっぽいな。
間違えた、 Display”の”DC だ。
>>552 やっぱそうですよねぇ。安心してCreateCompatibleDC(NULL)使うことにします。
私はこのへんで退散します。
556 :
519(レス感謝) :2001/05/23(水) 02:35
レスもらってるのに登場遅くてすいません、責任持ってまとめさせていただきます
・ディスプレイDCは共通DC、プライベートDC、クラスDCの3種ある
・共通DCは使用後すぐにリリースしなければならない
・メモリDCはアプリ終了時まで保持したままでも構わない(経験的に)
・そして、即リリースすべきか否かは、取得方法ではなく上記の区別によって判断する
ただWin16時代と違い、Win32時代での「即リリースすべし」の理由って、
とり続けるとヒープ食い尽くすからってだけなんですよね?(たぶん)。
ならばきっちり管理しておけば持ち続けても大丈夫っぽいですね。やりませんけど。
というわけで私も
>>555 さんと同じスタンスでいきたいと思います。
(唯一不安なのが互換メモリDCが「オリジナルと互換のカラーフォーマット」
とかいうのを含んでること。これってユーザーが画面のビット深度変えたら
CreateCompatibleDCやりなおすべきということなのかな?やらなくて大丈夫っぽいですが)
動作中に色深度変えるようなユーザは逝っていいからいいです。
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です。
561 :
デフォルトの名無しさん :2001/05/23(水) 13:13
>560 サンキョー。 んじゃ、Win2KPro,WinNT,Win98,Win95すべてで使う場合 はじめからwinsockで作ったほうが楽でしょうか?
562 :
デフォルトの名無しさん :2001/05/23(水) 13:33
GetOpenFileNamePreviewは、AVIのプレビューしかできません
>>561 ていうか、Win95が入ってる時点でWinsockしか選択肢が無い気が。
>>563 正確に言うと、Winsock2 が使えないので、Winsock1 で作る必要が…。
モノによっては、結構、辛いかも。
>564 サンキョー!! Win2K,Win98はAPIで、WinNTはwinsock2で、Win95はwinsockで やってみます。しかし、WinNT、Win95で時間かかりそう・・・。 時間があればいいが。
>>564 Win95でも、 W95ws2setup.exeでアップグレードしたら、
WinSock2.使えるとおもうけど?
>>566 OSの安定と引き替えになりますが、よろしいでしょうか?
>> > サンキョー!! ワラタ
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教えてください。よろしくお願いします
>>571 別に構わないと思いますが。
私はLocalAlloc使ってるし。
>>573 まず、周りを見回すだけの分別を身に付けて下さい。
今のあなたでは、他のサイトに行ってもそちらで同じ事を繰り返すでしょうから。
そんな訳で教える事は出来かねます。
576 :
デフォルトの名無しさん :2001/06/04(月) 17:27
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
579 :
577 :2001/06/06(水) 23:33
申し訳ない。Windows 9xでNET STARTを実現したい。
580 :
デフォルトの名無しさん :2001/06/07(木) 02:25
>>577 そもそも、Win9Xには、Net Startで開始させるべき「サービス」が
無いような気がするが。
NetWareが入ってるのが前提なら、NetBEUIを使うのがいいのかな…
>>579 RegisterServiceProcess のことか?
NT のようなサービスじゃないけど、ログオフ時にも頃されないプロセスを作れる。
583 :
デフォルトの名無しさん :2001/06/07(木) 19:27
VC&GDIでビットマップのデバイスコンテキストにペンを使って直線を 描画したいのですが、CreatePen関数でペンを作成したまではよかったのですが その後、LineTo関数で描画するときに”現在のペン”に 作成したペンを指定する方法がわかりませんでした。 教えてくださいお願いします
SelectObject つーかどんな初心者本にも載ってるし、GDIのサンプル三鷹?
すみません、ネタでなくてマジでした(笑汗 SelectObjectは知ってたのですが、 GDI初心者だったので使い方をよくわかってませんでした。 しばらくリファ眺めてたらわかりました。 どもすんませんです
583ですが、 585は僕じゃないっす(w
GDIを使って、ゲームみたいにマスクを作成したいのですが、 あるRGB値以外の色をすべて塗りつぶすというか指定色に置き換える 関数とかは無いのでしょうか?
>>588 パレットを使うか、DIBで自分で走査した方が速いと思われ。
590 :
デフォルトの名無しさん :2001/06/10(日) 19:35
アンインストーラが再起動なしで自分自身を削除したり置き換えたりする にはどうしたらいいでしょうか? バッチファイルを%temp%に作成するという方法しか思いつかなかったの ですがもっとカコイイ方法があったらご教授ください。
595 :
デフォルトの名無しさん :2001/06/10(日) 22:57
age
596 :
590 :2001/06/11(月) 11:31
ネタじゃないのに…。誰も知らないのかやっぱ…。
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
601 :
590 :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系だとめんどくさそうだけどね。
604 :
598 :2001/06/11(月) 14:54
>>599 そうだよ、漏れはヒント = ネタを提供してあげてんのよ?
もしかしてキミ、そんなことできっこないなんて思ってない?
あまりそんなことばっかり言ってると、「厨房」って言われるよ。
>>602 えっ、そうなの?
じゃ、煽られた漏れはアホウなんだ。(ムッ
[こたえ] って書こうと思ったけど、やめとくか。
>>603 ATコマンド書いちゃえば良いんじゃ?<NT
607 :
590 :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
611 :
デフォルトの名無しさん :2001/06/11(月) 19:06
>>609 FindFirstChangeNotification()
FindNextChangeNotification()
WaitForSingleObject()
たぶん別Threadにしちゃったほうが実装がシンプルかと。
612 :
590 :2001/06/11(月) 19:32
>>608 Win9xやWin2kだと消えてくれないので却下になりました。
で、
>>598 だけどFDならシステムが自動的にやってくれる、CDなら
インストーラを一時的にコピーするか何かだと思いますがどっちにしろ
自分を削除はできない。よってできないと思うのですが何か間違ってま
すか?
613 :
609 :2001/06/11(月) 19:35
615 :
598 :2001/06/12(火) 19:29
>>612 まちがってるよ。
コピー先はどこだと思う? (→ /swaprun 参照)
MSDN 逝ってヨシ。
ただし、これだけだとダメ。もうひと工夫、いるよ。
616 :
590 :2001/06/13(水) 11:47
/swaprun:cd リンカオプションですか? これってNT系じゃないと使えなかっ たような。 もしかして ・動的に確保したメモリにコードをコピーした後、自分自身をFreeLibrary する という方法ですか?
617 :
598 :2001/06/13(水) 12:59
>>616 そ。
/swaprun は :cd にしても :net にしても、ローカルの HD にあるときは
何もしてくれない。だからこれだけではダメ。
もひとつ、リロケーションについて考えておく必要がある。
ここでも工夫が必要。
さらにたぶん、あと、もうひとつ。
.EXE のモジュール(ハンドル)は、FreeLibrary できないんじゃないかと思う。
だからアンインストーラを○×△□から起動するようにする。
あ〜ぁ、結局、(ほとんど)全部バラしちゃったよ。ハッカーの手の内...。
>>602
なるほど。rundllを利用するのか。
619 :
598 :2001/06/13(水) 15:10
>>618 だぁ〜かぁ〜らぁ〜、伏せといたのにぃ…。
クラッカーどもに悪用されたら、どうすんのよぉ。
620 :
デフォルトの名無しさん :2001/06/13(水) 15:22
>>619 クラッカーはこんなとこみてないでしょ
プライド他界から
というか、そういうものは隠すのではなく 公開して早くMSに直して貰うべきだと思う。 MSが直さないとしても。
>>621 話の流れ見えてるか?
何をどう直すと言うんだ?不具合があるようには見えないが。
>>622 クラッカーに利用される
↓
セキュリティホール
↓
M○の不具合
という流れなんじゃねーの?
バカが一人紛れ込んでいるな(藁
>>623 どっからセキュリティホールなんて出てきたんだよ。
お前の脳内のことまではわからんけどよ。
>>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関数を使います。
632 :
デフォルトの名無しさん :2001/06/13(水) 19:26
>>629 void MakeHoney(int resnumber)
{
if (resnumber == 629)
cout << "横着すんな";
return;
}
ところで初心者なんですが、LoadLibraryで読み込んだ
モジュールの関数の使い方がわからないっす。
GetProcAddressとかでアドレスを取得するとこまでは
わかるんですが、その先が・・・・。
どなたか教えてください。かしこ。
>>630 BOOL GetSteadyEx(LPPERSONAL lpstatus)
[パラメータ]
ステイタスを含むPERSONAL構造体へのポインタ
[戻り値]
関数がせいこうした場合はTRUEを返します。
[NOTE]
GetGirlFriendEx関数は過去の互換性を保つために用意されています。新しいアプリケーションではGetSteady関数を使用してください。
634 :
デフォルトの名無しさん :2001/06/13(水) 19:30
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()を呼び出すと、思いもよらぬことが起こるかもしれません。
633さんの関数を使ったところ「不正な割り込みエラー」がでてしまいました。 どうすればいいのでしょうか。
>>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が見つかりません(検索がヘタなのか・・・)。 ご存知の方、よろしくお願いします。キーワードだけでも・・・・。
>>644 PriviledgeとかSIDとかACEとか(ちょーテキトー)
おお、「クラッカー」「MS」「不具合」 の三題噺だったのに・・・
647 :
デフォルトの名無しさん :2001/06/14(木) 12:52
質問です。 ICInstall() APIを利用してcodecをインストールしたいのですが、 どうあがいてもICERR_OKを返してくれません。 GetLastError()でエラーを見ると、モジュールがありません、 みたいなエラーを返してきます。 それでも、レジストリには登録されているみたいなのですが、 どうしたらいいんでしょうか。 また、codecをインストールする正確な情報ってどの変にありますか? 最悪、infでもInstallShieldでもかまわないのですが
codecっていうか、ICMですね。 よろしくお願いします
649 :
デフォルトの名無しさん :2001/06/15(金) 19:33
GDIでビットマップをX軸またはY軸で反転する関数って ないでしょうか?? 自分で走査するしかないんでしょうか。
BitBlt
651 :
649 :2001/06/15(金) 21:09
BitBltは使ってるんですが、対称反転方法が見当たらなかったので 諦めてました(汗 なんかウラワザみたいなやり方があるんでしょうか? すみませんが詳しく教えてください。お願いします
652 :
デフォルトの名無しさん :2001/06/15(金) 21:14
終点を始点より左に持っていくんだっけ?
653 :
649 :2001/06/15(金) 21:30
>>652 さんの書いてる方法でやろうとしたんですが
転送元と転送先の幅を別々にできなかったので、
代わりにStretchBltを使えばできました。
情報ありがとうございます!
ICMに付いて質問です。 ICOpen() APIを使用してcodecのハンドルを得たいのですが、 デフォルトとして未圧縮のハンドルを取得するにはどうしたら良いでしょうか。 mmioFOURCC('D', 'I', 'B', ' ');だと失敗してしまいます。 もちろん、ドライバが無いのだから失敗するのは当然だと思いますが。 ICCompressorChoose()を利用すると、取得できるので、 何とかできないかと思って質問します。 #他BBSにマルチポストしてます
655 :
654 :2001/06/16(土) 16:13
age忘れてました。
失礼しました。勘違いだったようです。 COMPVARS構造体を良く覗いた所、 未圧縮を選択したときのみ、hicメンバーは0になってました。 しかし、普通AVIを処理するアプリケーションは未圧縮を 自前で処理しているのでしょうか?
657 :
デフォルトの名無しさん :2001/06/16(土) 23:36
ボタンとかの上にある文字列は、ウィジェットを無効にすると灰色になりますが、 タブコントロールやツリービュー等は無効にしてもそのままですよね。 そいつも灰色にする簡単な方法ってあるのでしょうか?文字色直接変えるほかに。
ウィジェットってなんですか????
>>657 Winではウィジェットって言わんのね
ツリービューは無効化すると全部灰色になると思うが。。
タブはたぶん無理。
660 :
657 :2001/06/17(日) 01:26
>>658 適当に言葉選んじゃってすいません。えっとコモンコントロールの事です
>>659 またもやすいません。ツリービューではなくリストビューでした。自分最悪
リストビューのcolumの部分の文字も恐らく灰色になりませんよね。
やはりタブは無理ですか。リストビューはまだ良いのですが、
タブの文字が灰色にならないのはどうにも…。無効化したとき
まるでフリーズしたみたいです。みなさん一々DELETEITEMしてるのかな。
レスどうもでした。
確かにタブがグレーになるのは見たこと無いですね…… 中身を全部グレーにして誤魔化すしかないのかも。
>>661 やはりその一手ですよね。タブだけ立体的に文字がへこまなくて悲しい…
わかりやすいGUIスレでグチってきたい気分
663 :
デフォルトの名無しさん :2001/06/17(日) 09:58
windowsでLinuxでいうrootウィンドウに描画する方法ってあるのかな? どうやってもアイコンの上にのっちゃうし。。。 あと、explzhのシェルって("即時解凍"とか)関連づけでやっているんじゃないんだね。 ファイルオプション見たけどopenの設定しかされていなかったよ。 なにやっているんだろう??
665 :
663 :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 全部自前で描画してるのではないでしょうか?
669 :
666 :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にそのまま流すような ドライバって作るの大変でしょうか?
>>671 Win9x系なら簡単。
VxD作るだけ。
その程度ならDDKのサンプルにあるCOMドライバをちょこっといじるだけでできるでしょ。
673 :
671 :2001/06/17(日) 17:48
レスありがとうございます。 MSDNを調べてみます。 ところで、デバッカで調べた所 WriteFileへジャンプしてるアドレスは判りました これを他のアプリにフックしてデータ収集して表示する事は可能でしょうか? 別空間だから無理かな?
>>671 VxDなりユーザモードドライバなり、作るのが大変か…って聞かれても、
あんたのスキルがわからなきゃ、答えようがないだろが。
自分で作ろうというやる気があるんなら、
M$からダウソできるサンプルでなんとかなるはず。
しかしCOMnを覗き見するツールなんて、探せばどっかにありそうなモンだが?
なくても、RS232Cのプロトコルアナライザを買ってくれば、
間違いなく覗ける。
方法はいくらでもあるぞ。
うーむ。デバッカを使うと BCC5.01のデバッカ上では何故かデバイスを
認識しなくなるし、VCのデバッカでは一度ブレークさせると固まってしま
うしで、 デバッカで解析するのは無理みたいです。
>>674 ラインモニタは H''との接続がUSB なんで意味ないんです。
COMを覗けるツールも、あったのはWin9xの シリアルドライバを
書き換えてしまうもので、つまりUSBの仮想ドライバには使えないんです
やっぱりVxDみたいですね。調べてみます。
>>671 USBだとすると話は別。WDMじゃないとできないかも。
678 :
671 :2001/06/17(日) 21:35
WDM について用語だけなぞってみました。 VxDだと USBの仮想シリアルCOM3が呼べないかもしれないので フィルタ型も作れるという WDMを調べた方がいいかもしれませんね ありがとうございます
>>678 それそれ。
PHS程度の速度なら全データロギングしてもほとんど影響ないと思う。
リモートデバッガ使うという手もあるけど、フィルタ型WDM作る方が楽なような気が。
680 :
デフォルトの名無しさん :2001/06/20(水) 14:56
DLL内関数でDLLのリソース文字列をLoadStringするときのハンドルは 何を渡したらいいのでしょうか?
681 :
デフォルトの名無しさん :2001/06/20(水) 15:47
DllMain に渡されてきたハンドル。 どっかに覚えておくこと。
>>681 いや、それだと親インスタンスのハンドルが入っているはず。
親インスタンスって意味不明だけどDllMainに渡されるのはそのDLL自身 のインスタンスハンドルだよ。 どうしても後から取得する必要があるときはVirtualQueryを使うという 方法もないではない。
>>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(が指し示す先)がプロセス間でマーシャリングされない 事が原因だと思うのですが、どうやって解決すればいいのでしょうか。
690 :
686 :2001/06/25(月) 01:38
無事、WH_CALLWNDPROCとFileMappingを使うことによって、
アイテム文字列を引き出す事に成功しました。
>>687 -689のみなさま、ありがとうございました。
691 :
デフォルトの名無しさん :2001/06/25(月) 19:44
質問です!! LoadImage関数と同じような感覚で JPGファイルをファイルから読み込めるクラスないでしょうか? できれば、内部的にHBITMAPとかに変換してくれるのが ベストです。 どうか教えてください
>>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
698 :
デフォルトの名無しさん :2001/06/26(火) 00:43
LoadImageはJPGファイルを読み込めたような…。
699 :
デフォルトの名無しさん :2001/06/26(火) 00:50
700!
701 :
デフォルトの名無しさん :2001/06/26(火) 00:57
>>694 API全般なら
チャールズ・ペトゾロの「プログラミングWindows」
コントロールの使い方なら、
ハーバード・シルトの「Windowsプログラミング」
金があるなら両方買え。
703 :
デフォルトの名無しさん :2001/06/26(火) 01:08
エディットコントロール(1行)のキャレット位置を取得・変更したいんですが、どうすればいいんでしょうか? EM_GETSEL・EM_SETSELでもできそうなんですが、リファレンスには何も書いてないので。 もしかしたら、ほかの関数でもあるんでしょうか。
>>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とかに変換してくれるのが ベストです。 どうか教えてください
>>705 BITMAPINFOHEADERのbiCompressionに設定する
値でBI_JPEGやBI_PNGのことはは調べてみたか?
>>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
>>709 いや、お前ウザイからもう質問すんな。
つーかあっちの回答をコピペしただけじゃん。 質問してること自体がネタだろ? 氏ね。 教えたがりクンも同罪だぞもはや。
712 :
デフォルトの名無しさん :2001/06/26(火) 18:37
というわけで、質疑応答がなりたたなくなったので このスレはsage 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じゃあるまいし。一部のビットを他の目的に使う
なんてことはできないよ。
>>718 たしか、Rubyがポインタ(オブジェクト)か整数値かどうかを、最下位ビットで判断してる。
ポインタの最下位ビットは、アラインメントの関係で0になるだろうって。
>>719 Rubyの発明じゃなくて、一般的に使われてる手法。
下位2bitで判定する。
721 :
デフォルトの名無しさん :2001/07/14(土) 11:01
charのポインタは下位2ビットが0である保証なんかないが。
722 :
デフォルトの名無しさん :2001/07/14(土) 12:02
ビットマップを保存するとき、BITMAPFILEHEADERのbiSizeやbfOffBitsに ビットフィールドのサイズも加えるべきなのでしょうか? ある本のプログラムではサイズを加えていなかったのですがどうなんでしょうか。
MSDNにはなんと書いてありましたか?
724 :
デフォルトの名無しさん :2001/07/14(土) 12:29
>>715 Win32では基本的には0-0x7fffffffまでしか使われることない。のこりは
カーネルモードのアドレスだからね、でもNT4 Enterprise版や
Win2K Advanced Serverなんかだと/3GBスイッチで、0-0xbfffffff
までユーザーモードのアドレススペースが増えるから、0x80000000
以上のポインタが返ってこないことを想定したプログラムはこけるね。
基本的にそんなことを想定するようなアホなプログラムは組むべきでは
ない。64bitOSはすぐそこに来てるし、他のプラットホームで動く保証も
ないからね。
>>724 実際問題、0番地付近は、NULLポインタで例外を捕まえるために
未使用領域にするんじゃないかな。
あとは、Win9Xで、下位1Mが予約されてるとか。
727 :
デフォルトの名無しさん :2001/07/14(土) 13:45
他のウインドウに表示されているデータを 画像として取得するにはどうしたらいいんでしょうか?
>>727 フォーカスを与えた後、key_eventでAlt+PrintScreenを送り込んではどうか。
729 :
デフォルトの名無しさん :2001/07/14(土) 15:32
>>728 お返事ありがとうございます。
それは思いついたんですけど
何かもっと良い方法は無いかと思いまして。
>>729 ウィンドウハンドルとデバイスコンテキストを取得してBitBlt。
>>725 「Rubyでは」値が4の倍数になるようなポインタしか扱ってないというだけ
の話だろ。それが何か?
732 :
デフォルトの名無しさん :2001/07/14(土) 16:15
>>724 そんな特殊な例持ち出さなくてもWin9xの共有メモリは余裕で2G超えるね。
>>726 先頭64KはどのようなWin32環境でも予約領域であることが保証されてい
る(理由は、上位ワードが0かどうかで引数の解釈を変えるAPIがあるため)。
>>732 将来の実装でかわりそうなもんだが。
undocumentedかなにかに書いてあったの?
>>733 CharNextやDialogBoxなどを使っているプログラムのバイナリ互換性が
なくなるからそんな実装の変更はありえない。
先頭64Kが予約というのはAdvanced Windowsで見たけど理由までは書
いてなかった。
age
736 :
デフォルトの名無しさん :2001/07/27(金) 14:05
MP3プレイヤーとかのレベルメーター、スペクトラムアナライザみたいに ほかのプログラムとも共存しながらも、なおかつ、高速で安定した グラフィック描画を行いたいのですが、何かよい方法はありますか?
>>736 共存とは? ソフト名出してもいいからもっと詳しく書いたほうがいいと思われ。
738 :
デフォルトの名無しさん :2001/07/27(金) 15:18
>>736 言葉間違えたかもしれません、
画面や処理をのっとらないで、ほかのアプリをあまり邪魔せずに
動いているということをいいたかったのです
それができているわりに、winampにしても、ビジュアルエフェクト
やメータのFPSが結構安定しているんで、すごいなとおもって。
739 :
デフォルトの名無しさん :2001/07/27(金) 16:17
すいません、一定時間後に指定したメッセージを投げる方法が あるかどうか教えてください。 具体的にいうと、現在複数のコネクションを持つ ネットワークアプリを作っているんですが、 あるソケットがエラーを起こした場合に、モニタウインドウの リストビューに一定時間エラーになったことを表示してから リストビューからそのソケットの情報を削除したいと考えています。 その「一定時間」をどうするかで悩んでいます。 いまはとりあえずタイマーで定期的にチェックするように していますが、できればもっとエレガントな方法で やりたいと考えてます。よろしくお願いします。
>>738 ループに適度にsleep(waitだっけ?まあいいけど)とかを使って、
ガス抜きをするのがいいかと思われ。
>>739 時間監視用のスレッドオブジェクトを作ればいいんじゃないの?
一定時間過ぎたら、メッセージ投げてそのまま消えちゃうようなやつ。
742 :
デフォルトの名無しさん :2001/07/27(金) 22:06
不定形ウィンドウの表示をする際に、 アンチエイリアスをかけた(要するにα合成する) ウィンドウを表示させたいのですが、よい方法ありますか? イメージの合成方法はわかります 問題は、ドラッグする際に、自分自身のウィンドウ(パネル)より 下のデスクトップイメージをどうやって取得すればよいか? というところです・・・ どうかご教授ください
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
続きはコチラです
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
不定形ウィンドウの表示をする際に、 アンチエイリアスをかけた(要するにα合成する) ウィンドウを表示させたいのですが、よい方法ありますか? イメージの合成方法はわかります 問題は、ドラッグする際に、自分自身のウィンドウ(パネル)より 下のデスクトップイメージをどうやって取得すればよいか? というところです・・・ どうかご教授ください
>>748 GetDC(NULL)
でデスクトップのデバイスコンテキストを得られるので、そこからBltすればよい。
あとはWM_NCPAINT(だっけ?使ったこと無いから覚えてない)かなんかで
描画すりゃいいんじゃない?
>749 まぁその結果、下のウィンドウが再描画されたら上のウィンドウも 再描画しないとならないのでウィンドウメッセージのフックとか しないとならないし、そうすると常駐しているとやたらWindowsの パフォーマンスの下がるイヤなプログラムができる。
上にウィンドウがあると下のウィンドウはそもそも更新されないとか いろいろあってWin2kでない限り根本的に不可能だと思われ
753 :
デフォルトの名無しさん :2001/07/28(土) 22:28
ウィンドウにマルチラインのエデッィトコントロールを貼り付けました。 IME経由で文字をエディットコントロールに入力しようとしたのですが、1度に入力しようとする文字の量が大量だと全部の文字が入力されないで文字の最後の方が消えてしまいます。 IMEの種類はATOKとMS−IMEの両方で起きました。 原因の分かる方は教えてください。 お願いします。
>>753 消えてるわけじゃなくて、折り返さないから見えないだけ。
対象となるエディットコントロールにWM_IME__CONTROLを送る。
コマンドはIMC_SETCOMPOSITIONWINDOWだ。
>>754 うわ、うっかり送信しちゃった。
指定するパラメータは、対象となるエディットコントロールと同じ大きさの
ウィンドウサイズを与えればおけー。
756 :
752 :2001/07/29(日) 00:31
>754 レスありがとうございます。 >消えてるわけじゃなくて、折り返さないから見えないだけ。 折り返しはちゃっとできてるので、たぶん754さんの言われてるケースとは違うと思います。 確定前の文字はちゃんと表示されています。 IMEは日本語100文字ぐらいまで1度に入力できるのですが、100文字入力してEnterを押して確定すると、前半60文字ぐらい残って後ろの30文字が消えてしまいます。 どなたか解決法を御存じの方はお願いします。
757 :
デフォルトの名無しさん :2001/07/29(日) 01:06
WIN32でGREPをジソーウするにはどうしたらいいのでしょうか?
grep.dllでも探して恋>757
760 :
757 :2001/07/29(日) 02:02
どーもです。
761 :
デフォルトの名無しさん :2001/07/29(日) 04:04
BITMAPINFOHEADER.biXPelsPerMeterってどう使うんでしょ? 0ばっかりで何に使うのはわかんないんですけど。
>>761 印刷するときとかでは? と言っても大抵は紙に合わせてソフト側でサイズ補正できる
ケースが多いのであまり使わないと思われ。
763 :
デフォルトの名無しさん :2001/07/29(日) 17:04
strcmp と lstrcmp の違いをおしえて
764 :
デフォルトの名無しさん :2001/07/29(日) 17:06
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
768 :
デフォルトの名無しさん :2001/07/29(日) 18:51
嘘。
769 :
763 :2001/07/29(日) 22:19
>>764 みてきました。
DBCSとMBCSの関係がよくわかりませんでした。
いったいどこを見てるんだか
strcmpはlibc提供 lstrcmpはkernel32提供 っていうか全然別物ですよ。
772 :
デフォルトの名無しさん :2001/07/30(月) 23:58
自アプリにファイルがドラッグ&ドロップされたときに マウス右左ボタンのどちらで操作したか判別できませんか?
773 :
デフォルトの名無しさん :2001/07/31(火) 00:19
midやwavを簡単に再生することはできるのでしょうか?
>773 ShellExecute(藁
775 :
デフォルトの名無しさん :2001/07/31(火) 00:22
>>773 wavだったらsndPlaySoundでいいとおもう。
midは複雑だから調べろ。
再生だけならMCI >773
777 :
773 :2001/07/31(火) 00:39
ありがとうございます。調べてみます
778 :
デフォルトの名無しさん :2001/08/02(木) 17:29
比較的大きめの画面で、FPS30くらいのアニメーションを行いたいのですが (DirectXなしで) ただ、画面更新でInvaridateRectを用いると、レスポンスが悪いばかりか 画面がちらつきます。 垂直帰線期間を待つ命令があれば、ちらつきは解消できそうですが、 そもそも、上記命令のレスポンス自体が問題となっています。 何かよい解決法があれば教えてください。 追伸: MFCで開発しているので、イベントループではなく マルチメディアタイマーで処理をしています
779 :
デフォルトの名無しさん :2001/08/02(木) 17:51
InvalidateRectは第三引数をFALSEにすると 再描画が必要な部分のみが処理されるのでチラツキが減ります。
>>778 ウインドウクラスの hbrBackground(ウインドウの背景色)をNULLに
してますか?
782 :
デフォルトの名無しさん :2001/08/03(金) 04:00
パス名で指定したディレクトリが存在するかどうかを確かめる方法(関数)ありますか?
783 :
デフォルトの名無しさん :2001/08/03(金) 05:07
_access() GetFileAttributes() PathIsDirectory()
784 :
dx :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 で、何が訊きたいのかわからん。
もうちょっと日本語勉強してから書いてくれ。
>>787 俺はわかった
定石かはしらないけどそうするしかないだろうな。
別にmutex使ってもいいけどこの場合はCriticalSectionだろ
>>785 7byte確保してそのうち32bit alignが取れた4byte使うとか・・・
>>789 構造体のすべてのメンバに対して整合要求を満たすのが不可能な場合
もあると思うが
>>790 だからlongで良いところを7byte確保するのだと思われ
先頭から3byteまでの内にアドレスが4の倍数になるところが必ずあるはず
age
>>791 いや、だから構造体のメンバを自分で決められるならばいいけど
他人の作ったライブラリの構造体とかすでにハードコーディングされた
やつじゃ駄目でしょ
794 :
デフォルトの名無しさん :2001/08/05(日) 12:34
あるEXEからDOSコマンドを実行して、 実行結果をそのEXEで表示したいのですが、どうすればいいのでしょうか? リダイレクトを使って一時ファイルを作って、それを開くという手もあるのですが、もっといい方法はないでしょうか。
795 :
デフォルトの名無しさん :2001/08/05(日) 12:38
797 :
デフォルトの名無しさん :2001/08/05(日) 16:04
そうだね パイプを作って、SetStdHandleでいいんじゃない?
798 :
デフォルトの名無しさん :2001/08/05(日) 16:33
そうだね。バイプ使うと俺の彼女喜ぶんだよ。
>>793 というか自分で決められるならそんな変なことしなくても最初から整合され
るように構造体を設計すればいい
つーか何も考えずに構造体作ればふつうはそうなるはずだが
801 :
デフォルトの名無しさん :2001/08/05(日) 18:54
これからWin32APIの勉強しようと思うんだけど、 オススメ書籍ありますか? 一応、最終的にはDirectDrawをしようと考えてます。
そんならはじめからDirectXの本買えば?
803 :
デフォルトの名無しさん :2001/08/05(日) 19:03
>>801 つーか、いまはもうDirectDrawはないぞ。
>>803 下位互換のために残ってるから無いこたぁないような気がするが?
805 :
794 :2001/08/05(日) 21:24
>>796 ,797
どうもありがとうございます。
パイプでいろいろ検索してみます。
806 :
803 :2001/08/05(日) 22:14
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著/吉川邦夫:訳/アスキー出版局:版)」
って本が出てる。日本語だったらそれが一番詳しいかと。
自作ソフトのインストーラー(&アンインストーラー)をInstallShieldで 作成したいのですが、わかりやすい書籍やURLを教えてください ちなみにプログラムはEXEとデータファイルのごくシンプルな構成です。 利用規約の表示と確認、スタートメニュー&デスクトップに配置などが できれば大丈夫なレベルです。 よろしくおねがいします
812 :
デフォルトの名無しさん :2001/08/08(水) 21:56
ODBCスレじゃなくてこっちの方がいいのかな? ODBCAPIやODBCに詳しい方いらっしゃいますか?
います
>>810 InstallShield起動→メニューから[ヘルプ]→[ユーザーズガイド]
815 :
loop :2001/08/09(木) 11:32
WinAPI関数でクライアント領域のサイズを返す関数ってありますか?
816 :
:2001/08/09(木) 11:49
>>815 GetClientRect(HWND、 RECT*)じゃダメなの?
817 :
loop :2001/08/09(木) 13:09
>>816 試してみたのですが、x=lpRect->left;とやっても値がとれないのですが。
何か原因があるのでしょうか。
>>817 right と bottom にサイズが入ってるはず。left と top は 0。
819 :
816 :2001/08/09(木) 13:36
leftとtopは常に0になりますよ。 だって左上が基準ですから。 クライアント領域の幅が欲しければright、 高さが欲しければbottomを使うべし。
820 :
loop :2001/08/09(木) 13:37
>>818 そうでした。すみません。値ちゃんととれてました。
821 :
デフォルトの名無しさん :2001/08/10(金) 02:35
>>820 RECTHEIGHT(rc)
RECTWIDTH(rc)
822 :
デフォルトの名無しさん :2001/08/10(金) 10:28
>822 PostQuitMessageを発行してもかまわないです
824 :
822 :2001/08/10(金) 13:00
>>823 ありがとう。
理由はわからないけど、信じますよ。
>>822 別にかまわないだろうけど終了前確認入れたり
リソースの開放したりと後で追加するときに便利だから
WM_CLOSE : DestroyWindow()
↓
WM_DESTROY: PostQuitMessage()
の方が自然な流れだと思われ。
ATL/WTLつー事はC++なわけで
virtual onClose()
として後でオーバーライドできるようにしておくとか
826 :
デフォルトの名無しさん :2001/08/14(火) 11:07
age
基本的なインストーラーを 作成したいのですが、 VCに付属のInstallShieldがよくわからなくて Visual Studio Installerを導入することにしました ファイル・フォルダ類は無事インストールできるのですが デスクトップ・スタートメニューに配置する ショートカットファイルがうまく機能しません。 インストール後に、ショートカットファイルのリンク先をチェック すると、どうもディレクトリ階層が消えていて 実行ファイルのみになってしまいます なにかミスしているのでしょうか ご教授ください
かなりせっぱつまっています なにか原因は考えられないでしょうか? おねがいします
830 :
kouriyu :2001/08/15(水) 15:54
スクロールバーの使い方ですが、画面にあるデータを表示し、画面外の データを見るためにスクロールバーを使ってみたいのですが、一度スクロール させると、前の状態に戻そうとスクロールした時、残像が残ってうまく 表示がされていません。どのように対処するのでしょうか。
ビデオドライバーの更新
現在、メニューのみのアプリ(ランチャ)を作ろうと思ってるんですが、 自前でウィンドウを作らずに、ポップアップメニューを出すには どうするのがBestでしょうか。 とりあえず GetForegroundWindow() でウィンドウを借りる、 という方法を思いついたんですが、メッセージ処理はフックと プロシージャの交換のどちらが良いと思います?
833 :
デフォルトの名無しさん :2001/08/15(水) 23:14
>830 ScrollWindow()使ってる? あと、スクロールの移動中は描画を止めて、スクロール位置が確定したら描画を開始してみれば。 スクロールバーは複雑だから、詳しくはCharles Petzoloの「プログラミングWindows」の読むのがいいぞ。
sage
835 :
デフォルトの名無しさん :2001/08/16(木) 00:02
なぜさげる? age
836 :
830 :2001/08/16(木) 23:06
>833 ScrollWindow()は一応使用していますが。 やはり描画のタイミングが問題ですね。どの様に対処するか困ってるんですが。 ところでCharles Petzoloの「プログラミングWindows」って 出版社どこか分かります?
837 :
833 :2001/08/17(金) 00:34
838 :
デフォルトの名無しさん :2001/08/17(金) 10:06
ポップアップメニューの背景色を変更したいのですが、 オーナードローでアイテムの色は変えられても メニューウインドウ自体(境界線とか)の色がどーもこーもなりません。 DRAWITEMSTRUCT から 拾った DC でウインドウハンドルを所得して サブクラス化したり、色々いじってみてるのですが、うまくいかない… こんなことってできるんでしょうか?
839 :
デフォルトの名無しさん :2001/08/20(月) 19:12
Windows2000/Meで、マイネットワーク内にWebフォルダのアイコンを 作成したいんです。VBのプログラムから。 どのようにしたらよいか教えていただけないすか?
840 :
839 :2001/08/21(火) 02:09
WinAPI相談室に書いてしまったけれど、スレ違い だったかなぁ・・?
841 :
839 :2001/08/21(火) 16:52
いろいろ検索してるんですが、 IShellLink::SetIDList() でむがむが・・であってますかね?? やっぱスレ違いだ。むなしい。
842 :
デフォルトの名無しさん :2001/08/22(水) 19:27
数十個のJPEGなどの画像データファイル(主にボタンなどのパーツ類)を 起動時に読み込むアプリを作成しているのですが、いかんせん起動時間が かかってしまい悩んでいます。 改善するのに何かよいアイディアないでしょうか? P.S.大きめの画像に、複数のパーツを貼り付けた画像ファイルを用意する という手もありますが、デザイナーの負担が増えるのでそれは避けたいです
起動後のインターフェイスを構築するパーツ類なので 省略できないですねー
大きめの画像にまとめるツールを用意すればいい 当然、全自動で行えるべき
各画像パーツのサイズが不定の場合はどうすればよいでしょうか? サイズもばらばらなので、タイル状に敷き詰めて 大き目の画像にまとめる方法が問題になりそうです
>>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 すごい!
なんて的確で正確な回答だ!
あんたすごすぎ!
>>850 VisualStudioというソフトが該当します。フリーではありませんが。
853 :
849 :2001/08/24(金) 14:28
>>850 -852
実行時のシステムから取得したい。将来アイコンが変わっても大丈夫
なように。
レジストリになんかありそうだけど、 SHGetFileInfo("c:\" /*パス*/, 0, fi /*SHFILEINFO*/, SizeOf(SHFILEINFO), SHGFI_ICON); でfi.hIconにアイコンハンドルが入る。(この場合はハードディスクのアイコン)
855 :
849 :2001/08/24(金) 14:53
>>854 C:ドライブがHDDじゃない変態的なシステムが十分ありうると思われ。
あとCD-ROMのアイコンも取得できないと思われ。
sizeofか
>>855 HDDじゃなければHDDじゃないアイコンが入るんだよ
どんな種類のドライブのアイコンかまで分からないと困るの?
くだらないツッコミだけど
>>856 > sizeofか
これは「
>>854 のコードで SizeOf じゃなくて sizeof が正しいと分かった」
という意味? それならそれでいいんだけど、C 知らないで書いてるんですか?
他にも "c:\" じゃなくて "c:\\" だし、fi はアドレスを渡すってこと
分かってる?
それと関係ないけど fi.hIcon に取得されたハンドルは、使い終わったら
ちゃんと DestroyIcon して下さいね。そうしないとリークします。
>>858 突っ込みサンキュー。
>>855 はGetDriveTypeとかGetLogicalDrivesとか
使って何とかしてください。後たぶんレジストリのどっかにあるのではと思います。
(窓の手とか出てくるもんね)
860 :
849 :2001/08/24(金) 19:25
レジストリ潜るの? やだなあ。Shlwapi.hあたりに気の利いたAPIが ありそうな気がするんだけど。
>>860 だから
>>854 の SHGetFileInfo が十分気の利いた API だと思うけど。
SHGFI_DISPLAYNAME 指定すればエクスプローラが表示するドライブ名の文字列
"3.5インチ FD (A:)" とかも取れるし。以前使ったときは CD-ROM のアイコンも
問題なく取得できた。
>>861 SHGetFileInfoは使ってるよ。この場合はそれじゃ間に合わない
わけだ。
いろいろ調べたが、やはりレジストリに潜るしかないらしい。
863 :
デフォルトの名無しさん :2001/08/24(金) 23:58
>>862 レジストリ…って「潜る」ところにあるとは知らなかった。 (藁
>>862 どういう所が間に合わないのかよく分からない。
居れが以前使ったのは「ファイルを開く」ダイアログにあるような
ドライブ選択コンボボックスを自作した時なんだけど、SHGetFileInfo と
GetLogicalDrives 使ってできたけど。
865 :
デフォルトの名無しさん :2001/08/26(日) 02:06
DIBを描画したいのですが、SetDIBitsToDeviceを使ってみたのですが、 どうやらこのSetDIBitsToDeviceがかなり時間を食うらしいのですが、 もっと早くDIBを転送する手続きはありますか?
>>864 「HDD」「CD-ROM」「FDD」等々のアイコンをそれぞれ取得したいわけだ。
それもシステムがエクスプローラで使ってる奴を。
A:がFDDでD:がCD-ROMで、というシステムばかりじゃない。
ノートパソコンならCD-ROMがないシステムもありうる。それでも
CD-ROMのアイコンが必要、というわけだ。
>>863 レジストリから情報を取得するのはリスクが多い。俺的には
「潜る」って感覚になる。
>>865 BitBltで高速化できない状況?
867 :
858 :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 の話だよな?
…あれ以上どうやって引数を減らせというのだ。
>>866 BitBltもSetDIBitsToDeviceも転送する時間にあまり変わりがないようでした。
Bresenhamのアルゴリズムを用いて直線を描くのと、
LineToで直線を描く時間を比べてみたのですが、
明らかにSetDIBitsToDeviceを用いて直線を描画する方が遅いみたいなのです。
SetDIBitsToDeviceだけを、コードから除いてメモリに書き出すだけだと、
かなりの速さになるみたいで、SetDIBitsToDeviceがネックになっている
見たいなのですが・・・。
874 :
デフォルトの名無しさん :01/08/26 16:26
わけ わか らん♪ ∧∧ ∧∧ ∧∧ (=゚ω゚) (=゚ω゚) ヽ (=゚ω゚)ノ ヽ(x ヽ) (ノ x)ノ (∩ x) < < ) ) U
>>872 単に線を引くためだけにBlt系を使う意味ってのがよくわからんのですが。
LineToではなにか問題が?
876 :
869 :01/08/26 18:52 ID:M1FAtnxQ
レスありがとうです。
>>870 -871
char* bufを用意しないといけないのが面倒だと思ったので・・・。
単に char* itoa(int) だったら記述がラクでよかったな、と思っただけです。
877 :
858 :01/08/26 19:05 ID:/iAV1yEw
>>868 > CD-ROMのAutorun.infで設定されているアイコンがあればそれを返すから、
なるほど、確かにそれで不都合なこともあるでしょうね。
関係ないけど
>>867 の typo 訂正
× GetLogicalDevices
○ GetLogicalDrives
878 :
859 :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) です。
879 :
878 :01/08/27 21:24 ID:a4HckhLE
すいません。
>>878 の名前が 859 となっていますが、このスレの 859 さん
とは無関係です。
# 名前を空にしないで書き込んでしまいました。 (汁
880 :
loop :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でも使える必要があるんです。クラスタの読み書きは必要なく、先頭クラスタ
だけわかれば良いのですが。目的は、不正コピーチェックがらみです。
>>883 じゃあ無理。
ActiveDirectoryの仕組みを勉強すれ。
885 :
デフォルトの名無しさん :01/08/28 21:29 ID:iOvUzZpU
DVD-ROM限定でもダメでしょうか。
>>885 なおさら無理。
無理矢理やるにしても各OS固有のコードになる。
887 :
デフォルトの名無しさん :01/08/29 12:09 ID:ltWbYtH2
>>885 DVD-ROM なら、ASPI 経由でデバイス操作できないのですか?
CD-ROM なんかの不正コピーチェックで溝にわざと傷入れてるのを検出して
ってのがあるみたいだけど。
>>887 それにしてもOS固有になるのは避けられない。
OS固有でいいから方法書いてあげなよ。
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
エディットコントロールやリッチエディットコントロールの最後に テキストを挿入するにはどうしたら良いですか?
>>889 クラスタ直読みの方法だけでいいじゃん。それ以上のことなんて誰も
聞いてない。つーかASPI使う必要もないような気がするが。もちろん
OS依存だけど。
>>892 AllowSetForegroundWindowはそういう状況では使えない。
895 :
デフォルトの名無しさん :01/08/29 16:54 ID:zbxmmrnU
>>892 AllowSetForegroundWindowでもだめでした。
でも画面がタスクバー上で点滅してるんでFlashWindowEXが実行されてるらしいです。
マイクロソフトのHPでWindows2000ではSetForeGroundWindowにいろんな条件があっ
てそれを満たさないとSetForeGroundWindowが失敗してFlashWindowEXが実行されて通
知してくれるみたいです
何らかの要因で失敗してるのは確実みたいです。
>894 >881をよく読め。 クラスタ直読みの方法こそ誰も聞いてない。
897 :
デフォルトの名無しさん :01/08/29 20:31 ID:W6Ku5whg
898 :
デフォルトの名無しさん :01/08/29 21:19 ID:R.qc31/Y
ASPI使うってのは、いろいろウザイことあるぞ。RAIDなんか組んでる とアダプタとの相性でアクセスしただけでBlueDeathしたりする(;´Д`) よっぽどのことが無い限りやめとく方が吉。 あと、894のよーに、自分もセクタ読むだけならASPIを使う必要すら無いと思う。 不正コピー防止なら2GぐらいのでかいファイルでもDVD-ROMにしこんで、 それをチェックすれば? 安直だけど。 そういえば、DVDの規格ではレーザーで1枚1枚個別にシリアルをマーキング できるらしいのだけど、Windowsでそれは読めないのかな?
899 :
age :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で切り替える。
903 :
momotaro :01/09/01 22:24 ID:9IMlxPac
Windowsプログラム(C言語)で、スクリーンセーバーを変更する方法を教えて頂けないでしょうか。 例えば、壁紙は、下記のような方法で変更出来ますが、スクリーンセーバーの場合はどうなのでしょうか。 【壁紙の変更】 SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, buf, //変更するファイル名 SPIF_UPDATEINIFILE );
>>900 APIMON …とだけ書いとくから、あとは自分で調べろ。
できなきゃ、タダで協力してくれるハッカーでも探せ。
念のために言っとくが、ハッカーとクラッカーを間違えるなよ。
大変なことになっても知らんからな。
>>900 Advanced WindowsかDebugging on Windows(不確か)をジュンク堂で
立ち読み。
906 :
デフォルトの名無しさん :01/09/04 13:39 ID:rccG4HwI
どなたかドライブレターからそのドライブのデバイス名を取得する方法を知りません? もしくは、AdapterID/TargetID/LunIDを取得でもかまいません。そっちのがかえっていいかも。 CDの再生なんですが、エクスプローラからの*.cdaのD&Dに対応するために、 ドライブレターと物理デバイスの対応を知りたいのです。 複数台ある場合、ドライブレターのつけ方によっては、 対応が食い違って別のCDが再生されてしまう場合があるのですよ。
NT系ならQueryDosDevice。 9x系は知らん。つーか9x系にデバイス名なんてあるの?
908 :
デフォルトの名無しさん :01/09/04 14:20 ID:rccG4HwI
QueryDosDevice() 使ってみたけど、単純にドライブレター順の番号が 振られて返ってくるだけだったので聞いてるのですが?
はぁ?
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の対応を取得する必要があるのですが?
>なのでドライブレターとIDの対応を取得する必要があるのですが? なんで? 返ってきたデバイス名そのまま使うんじゃだめなの?
つーかそもそもなんで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が複数のドライブに入ってたり、 たまたまトラックの再生時間が全部一緒だったりしたら区別つかん。
>>913 >>912 に対する答えはないのか?ASPIから操作できないデバイスをどうやって見分ける?
>今はデバイス名で再生ドライブを選ばせてるけど、 >ドライブレターでも選べるようにしたいの。 だからQueryDosDeviceでドライブレターをデバイス名に変換 すればいいんじゃないの? 何に困ってるのかぜんぜんわからん。
>>914 ASPIから見えないドライブは、
>ちなみにCDの再生は、ASPI経由でのデジタル吸出し再生だよ。
と言っているとおりそもそもサポート外。
>>915 Win9xでどうするのさ。
つーかレジストリをくまなく調べてなんとかなりそうだよ。
各所で実験して法則もつかんだし。
>>916 サポート外かどうかをどうやって見分ける?ってきいてんだけどな…
お前のアプリがサポートしてなくてもExplorerがサポートしてるなら
D&Dはできちまうだろが。
918 :
デフォルトの名無しさん :01/09/04 22:07 ID:8BA3trys
質問なのですが、WinAPIかMFCを使用して DirectXやglutのようなフルスクリーン表示は可能でしょうか?
919 :
loop :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 は *正しく使えば* 全画面モードから復帰しても、
デスクトップアイコンの位置などを乱しません)
923 :
918 :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 という関数の使い方や,そもそもホントにこういう方針でいいのかもわかりません.