■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
WinAPI相談室
1 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 02:55
作っときました。
システムいじりたい人、軽いPG作りたい人はどうぞ。
(言語は指定してないんで質問の時にはちゃんと書いてね)


2 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 03:18
どうぞって、あんたゴルァ…


3 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 03:40
じゃあせっかくだから、相談相手になってくれ。
なんかここ技術板なのに、クソスレしか生まれないんだけど、どうしたらいいと思う?



4 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 03:49
>>3
それは1に対する煽りなのか?


5 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 03:53
>3
特に週末はひどいものがあるな。



6 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 03:54
スレッドを立てる時間が悪いと思うんだな。
今いるのはプログラムに興味はあるもののなにも出来ない
引きこもりさんばっかり。


7 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 03:57
>>6
自暴自棄になるな!!


8 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 03:59
なんか1は、なにも書かないし、立て逃げなの?


9 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 04:15
EnumDisplaySettingを使うと、0Hzとかふざけた数値が返ってきます。
どうしたらいいでしょうか?



10 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 04:17
>>9
DirectX はやめて Java で記述しなさい!


11 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 04:19
WindowsCEに、DuplicateHandleが無いのはどうして?


12 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 04:22
>>11
必要ないから。
つーか、俺も使ったこと無い。何に使うの?>11



13 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/03(金) 04:24
>>9
良いビデオカードに変えてみよう。



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
>>21
NTならOK


23 名前: 12 投稿日: 2000/11/03(金) 04:57
>>22
なるほど。勉強になります。



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
ありゃ、まちがえた。
スライシングの方法によるか。



30 名前: 母を訪ねて名無しさん千里 投稿日: 2000/11/03(金) 16:11
他のプロセスのスレッドを直接的にいじろうというのがそもそも間違いでは?
双方の合意のうえでやんなきゃ。



31 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/04(土) 05:22
よく使うAPIリファレンスみたいなサイト知りませんか?
他スレでかいしゅつだったらゴメン。




32 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/04(土) 07:13
>>31
あるけど教えない。
つーか、MSDNで十分だろ?



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


34 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/05(日) 07:22
>32
31は初心者でもっと解りやすいのが見たいんじゃないのか

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

あ、ちなみにおれは知りませんので・・・。



35 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/05(日) 07:56
http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/api_index.html



36 名前: とおりがかりのおばちゃん 投稿日: 2000/11/05(日) 10:13
むむ、上記のサイトよさそうだなぁ。
2chて、たまにとてもよい情報ころがってるよね。


37 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/05(日) 14:12
>>27
CreateProcess()はCE 1.0以降サポート。
CreateThread()はCE 1.01以降サポート。
とAPIヘルプに書いてあるが。


38 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/05(日) 14:32
>>19 >>24
スレッドのsuspend, resumeもplatform限定しそうだけどなぁ。
pthreadだとサポートしてないよね確か。
俺だったら素直にセマフォ使って(無いなら実装して)同期取るけどね。



39 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/11/05(日) 20:15
>31
サイトじゃないけど、
http://www.cs.virginia.edu/~lcc-win32/
にある「Windows API documentation size: 12.8M」はWindowsAPIのリファレンスです。
ただし英語。



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を何にしたらいいの?


46 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/14(木) 16:18
>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
>>46
なるほどなんですが、でも面倒でしょ?


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
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=957341074&st=79&ed=79
を書いた人?


61 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/15(金) 02:31
>35 さんきゅ〜、あ、俺31じゃないけどお礼いわせて。


62 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/15(金) 11:24
たしかに
http://www.komaba.utmc.or.jp/~tamon/winprog/winprog.html
>第1引数が現在のインスタンスのハンドルです。インスタンスとはプログラムの実行単位、プロセスのことで、同じプログラムであっても別々に起動されて別々に実行されている場合、別のインスタンスとなります

とか素直に読んで、インスタンスごとに違う値だと思い込んでた。
なんでも実証が大事なんだなあ


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
ATLを使うなら
http://microsoft.com/Japan/developer/visualc/techmat/feature/ATLwindowing/

Delphiを使うなら 中村の里
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm

APIベースなら
http://www.topposystem.co.jp/DL/Win32API/
ここの
http://www.topposystem.co.jp/DL/Win32API/GUI/コンボボックスの概要.html




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の本を眺めても載ってないのですが・・・・



75 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/18(月) 10:08
>>73
その手の趣味の方々が集まったクラスです
常にお尻の穴が危険にさらされています


76 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/18(月) 10:10
コントロールはコントロール固有のウインドウクラス名を指定して
CreateWindowExだろ?


77 名前: >73 投稿日: 2000/12/18(月) 10:24
>>69のページではダメなの? じゃ猫でもは?


78 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/18(月) 16:28
>>73

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

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

 にも実際のソースや解説がある。あと、「プログラミング
Windows」でも取り上げていたはず。



79 名前: 73 投稿日: 2000/12/18(月) 18:40
ありがとうざいました。これから見てみます。>78さん



80 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/19(火) 16:40
メッセージの番号とメッセージの一覧みたいなのありませんか?
デバック中にメッセージ番号表示させても意味判らないので 変換関数作りたいんですが


81 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/19(火) 17:39
>>80
winuser.h見れ。



82 名前: 80 投稿日: 2000/12/19(火) 17:42
あ、馬鹿な事質問してしまいました。
APIヘルプに メッセージ一覧があったので
これからテキストを抽出して Cソースに加工して印刷すればいいだけですね。
すみませんでした。


83 名前: 80 投稿日: 2000/12/19(火) 17:44
>>81 ありがとうございます。マルチメディア系とか色々散らばっているので・・・


84 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/19(火) 19:02
>80
spyを使えば、メッセージ名はわかるけど。

http://www02.so-net.ne.jp/~joh/jspy.html


85 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/19(火) 23:29
Borland派ならWinSightだね。



86 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/20(水) 09:17
「SystemTimeToTzSpecificLocalTime」っていうAPIを使ったら、
Win95/98ではちゃんと動作しないという事が納期の前日に判明。
今修正中...

というわけで、95系とNT系で動作が違うAPI情報きぼん。



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ファイルで
やってもやっぱりずれます。どこに問題があるのでしょうか。


92 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/23(土) 20:17
>>90
keybd_event


93 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/23(土) 20:36
最近ギコってみませんね。

かちゅ〜しゃ作ってるんかな。


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

で、ファイルに出力することはできたのですが、
ファイル名を聞いてくるダイアログをどうしたら消すことができるか
いろいろ試行錯誤していますが、まだ解決していません。
どなたかご存知の方がいましたら、指針かご回答を
お教えください。ちなみに、VC++6 でやっています。



95 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/23(土) 23:48
PrintDialog ってプリンターがないとエラーメッセージがでて使えない。
貧乏学生には使えないAPIの1つです。(泣)


96 名前: ブービーさん 投稿日: 2000/12/23(土) 23:52
プリンタがなくても↓のプリンタドライバをインストールすれば
とりあえず大丈夫ですよ。

http://www.adobe.com/support/downloads/pdrvwin.htm


97 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/24(日) 00:13
>ブービーさん
どうもありがとう。
今DL中です。


98 名前: デフォルトの名無しさん 投稿日: 2000/12/24(日) 02:27
>91
LineToは終点を含まない筈
Rectangleも同じで x終点-x始点ドットの図形が描かれる筈

だけど、実際にはその通りにならない場合も多し。気にするな


99 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/24(日) 13:29
VC++でSDKプログラミングやりたいんだけどお薦めの本ってないですか?
本屋に行ってもMFC使ったのしか分からなかった。
できれば入門書とリファレンスとお願いしたい。
初心者なんで的はずれな質問だったらスマソ。


100 名前: 91 投稿日: 2000/12/24(日) 14:00
>>98
本を読み進んでいくと
Windowsが勝手に値を変更するみたいなことが書いてました。


101 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/24(日) 14:01
>>99
プログラミングWindows第5版 (上)(下)
マイクロソフトプレス

なんかがおすすめ。




102 名前: バッカーです 投稿日: 2000/12/24(日) 14:08
>91
CreateEnhMetaFile は0.01"ミリ"単位で指定
Rectangle は座標だからピクセル
この辺の問題じゃなくって?


103 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/24(日) 18:54
99>101 サンクス、gooで検索したけど合計1400頁、上下巻で1万円か…
鬱だ氏脳
「猫でも分かるプログラミング」でも復習してくるか…
VCのヘルプは英語だしさらに鬱だ…


104 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/25(月) 02:47
買う金無いなら図書館いけ>103


105 名前: 101 投稿日: 2000/12/25(月) 09:52
プログラムをやりたいのならこのくらいの本を買わないとだめだ。
基本的なことをやるのなら上巻の最小の方だけやっても基本は理解できる。
別にメタファイル、スクロール等が必要ないのであれば読み飛ばしても問題ない。
もっとも構造体とポインタがわかってないとまずだめだが・・・


106 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/25(月) 15:49
ユーティリティソフトのような物を作って、Windowsに標準で付いているメモ帳のキーボード設定をカスタマイズしたいのですが、どんな方法がありますか?
メモ帳の.exeファイルには手を加えないで、他の.exeから設定する方法を考えています。



107 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/25(月) 16:25
>>106
SetWindowsHookExとか調べてみ。



108 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/25(月) 18:56
>>107
実際やってるやついるの?


109 名前: 106 投稿日: 2000/12/25(月) 21:27
>107
ありがとうございます。
それを手がかりに調べます。



110 名前: ブービーさん 投稿日: 2000/12/25(月) 22:33
>>94
DOCINFO構造体でファイル名指定できたんだね。
逝ってきます。



111 名前: 108 投稿日: 2000/12/26(火) 01:44
>>106
いや、だから俺が、そんなめんどうなことできるか?
って逝ってるんだが...

メモ帳似ソフトを自分で作ってしまったほうが
はやくない?



112 名前: 107 投稿日: 2000/12/26(火) 02:08
>>111
それよりはキーバインドをカスタマイズ出来るエディタを使った方が
早い。実用的な意味が皆無なのは、言われなくとも当人が一番良く
分かっているだろうが、修行中のプログラマは、何も実用性のためだけに
プログラムを組む訳じゃないだろう。
自分のものさしだけで物事を考えるのは止せ。



113 名前: 名無しさん@お腹いっぱい。 投稿日: 2000/12/29(金) 17:39
age


114 名前: デフォルトの名無しさん 投稿日: 2001/01/02(火) 02:07
>>86
OSどころかプログラムごとに値が違う物もありますぜ。
http://www.asia.microsoft.com/japan/support/kb/articles/J055/3/73.htm
さらに仕様と言い切るMSにびっくり。


115 名前: デフォルトの名無しさん 投稿日: 2001/01/02(火) 06:18
仕様というのならせめてその理由を説明してほしいよな・・・


116 名前: 名無しさんi486 投稿日: 2001/01/02(火) 08:11
>>114
これは仕様だろ。なんで仕様なのかわからないのなら、それは
あなたが厨房。わからないのならわからないっていえば教えたる。

まあMSも、もうほんのちょっと賢くできたとは思うがな。


117 名前: デフォルトの名無しさん 投稿日: 2001/01/02(火) 08:56
>>116
是非教えてもらいたいです。


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を使っている人がどれだけいるやら。
いっそ、割り切ってしまいたいところではある。


123 名前: 名無しさんTurbo 投稿日: 2001/01/03(水) 17:53
>>119
wgetを使いましょう。
Visual C++でそのままコンパイルして使えます。

http://www.gnu.org/gnulist/production/wget.html



124 名前: 禁断の名無しさん 投稿日: 2001/01/03(水) 21:32
>>116
GetVersionの戻り値が変化する実行ファイルリストって
どうやって手に入るのかな?



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で検索してみたら説明してるページ見つける事ができました。
何回も答えてもらってほんとにありがとうございました。


133 名前: デフォルトの名無しさん 投稿日: 2001/01/05(金) 02:32
いえいえ。がんばってください。>132


134 名前: デフォルトの名無しさん 投稿日: 2001/01/05(金) 08:49
>133
そんなやりとり2チャンらしくない。却下。



135 名前: デフォルトの名無しさん 投稿日: 2001/01/17(水) 16:00
CreateThread()で作成したスレッドが終了したかどうかを確認する方法がわかりません。
教えていただけないでしょうか?


136 名前: 奥さん、名無しです 投稿日: 2001/01/17(水) 16:20
>>135
WaitForSingleObject()


137 名前: 。> 投稿日: 2001/01/17(水) 16:22
>>135
GetExitCodeThread
を調べてみて。


138 名前: 135 投稿日: 2001/01/17(水) 17:08
>>136,>>137
作成・実行環境がWin2kなのでOpenThread()でTHREAD_QUERY_INFORMATIONを割り当ててから
GetExitCodeThread()とスレッド関数の戻値判定で望んでいた動作になりました。
ありがとうございました。


139 名前: 。> 投稿日: 2001/01/17(水) 17:25
>>138
そもそも、Createした時に取得したハンドルはどうしたんでしょ?


140 名前: 138 投稿日: 2001/01/17(水) 17:45
>>139
そもそもハンドルを保持してませんでした。
Win2kだとTHREAD_QUERY_INFORMATIONなりSYNCHRONIZEを与えないとだめらしいんで
OpenThread()を使って後付けで取得してやってますが…。

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

いまのところ1個しかスレッド使っていません(増やすかもしれない…)。


141 名前: 。> 投稿日: 2001/01/17(水) 18:00
>>140
>そもそもハンドルを保持してませんでした。
それ、捨てちゃってるの?
保存しといて、CloseHandleしないと、リークになっちゃうよ。


142 名前: デフォルトの名無しさん 投稿日: 2001/01/17(水) 21:15
自作で簡単なプログラム作ってるんだけど、
タスクトレイに常駐した状態でマウスホイールの
メッセージって受け取れるでしょうか?

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

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

OS は Win2k / Win98 です。


143 名前: デフォルトの名無しさん 投稿日: 2001/01/17(水) 21:58
>>142
使ってるマウスのメーカーは?
ロジテックだとちょっと面倒。


144 名前: デフォルトの名無しさん 投稿日: 2001/01/17(水) 22:27
早速レス頂いて、ありがとうございます。

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

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

自作のプログラムはちゃんとできたらフリーソフトに
したいと思ってるので、出来ればホイールマウスの
メーカごとの差異とかについても知りたいのですが、
よろしければそこら辺もご教授ください。



145 名前: デフォルトの名無しさん 投稿日: 2001/01/18(木) 01:18
>「Office97」

「Office97 互換モード」の間違いです。


146 名前: デフォルトの名無しさん 投稿日: 2001/01/19(金) 01:52
デスクトップアイコンの文字背景を透明化するにどうすればいいのでしょう?
対象はWin2kだけです。ウィンドウの透明化は簡単だったのですが…。


147 名前: デフォルトの名無しさん 投稿日: 2001/01/19(金) 16:54
LVM_SETBKCOLOR


148 名前: デフォルトの名無しさん 投稿日: 2001/01/19(金) 18:19
HWND h = FindWindowEx(NULL, NULL, "Progman", "Program Manager");
h = FindWindowEx(h, NULL, "SHELLDLL_DefView", NULL);
h = FindWindowEx(h, NULL, "SysListView32", NULL);
SendMessage(h, LVM_SETBKCOLOR, 0, -1);



149 名前: デフォルトの名無しさん 投稿日: 2001/01/19(金) 22:48
>>148
LVM_SETBKCOLORではなくLVM_SETTEXTBKCOLORだろ


150 名前: デフォルトの名無しさん 投稿日: 2001/01/19(金) 23:16
VBならモジュール1つのプロジェクトで

Const LVM_FIRST = &H1000
Const LVM_SETTEXTBKCOLOR = LVM_FIRST + 38

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

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

おれのおごりだ、取って置け>>146


151 名前: 148 投稿日: 2001/01/19(金) 23:33
>>149
あーほんとだ。
#include <windows.h>
#include <commctrl.h>
int main(void)
{
 HWND h = FindWindowEx(NULL, NULL, "Progman", "Program Manager");
 h = FindWindowEx(h, NULL, "SHELLDLL_DefView", NULL);
 h = FindWindowEx(h, NULL, "SysListView32", NULL);
 SendMessage(h, LVM_SETTEXTBKCOLOR, 0, -1);
 InvalidateRgn(h, NULL, true);
 return 0;
}


152 名前: デフォルトの名無しさん 投稿日: 2001/01/20(土) 00:33
>>150
VBなのにここまでVBらしくないコードも珍しいな


153 名前: 呼び出し規約について 投稿日: 2001/01/20(土) 00:40
質問です。
BorlandC/C++とWinAPIで書いてるのですが、関数の頭につける呼び出し規約"WINAPI"と"CALLBACK"はどのように使い分けたらいいのでしょうか?
また呼び出し規約はどういうときに付けてどういうときに付けなくてもいいんでしょう?
教えてください。




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

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

CALLBACKも実は__stdcall
WINDEF.H(118):#define CALLBACK __stdcall
だ。ただ意味合いは、APIからコールバックされる関数という意味で違うぞ。



155 名前: デフォルトの名無しさん 投稿日: 2001/01/20(土) 01:33
>145
間あいてごめん。えっと結局フックをかけることになると思うんだけど、
ロジテックとかのドライバは勝手にスクロールさせちゃうことがある。
Office互換なら問題なし。WH_MOUSEかWH_JOURNALRECORDに
フックをかけるんだけど、JOURNALRECORDの場合はWM_MOUSEWHEEL
のデルタ値が保存されないらしいのでほとんどの場合はWH_MOUSE
でやるしかない。
でもうちのロジテックはOffice互換にしてもwindows.hにある
0x020aじゃなくて0x7c02とかいう変なメッセージしかこない。
何でだ?


156 名前: デフォルトの名無しさん 投稿日: 2001/01/20(土) 01:44
VC++でSemaphoreオブジェクトを使いたいのですが、
使い方がわからなくて、
どこで宣言して、どこで実行するとよいのでしょうか?
(winmainで実行とか、それともプロシージャの中とか、、、)
あと、名前ありセマフォと名前なしセマフォの違いを教えてください。



157 名前: デフォルトの名無しさん 投稿日: 2001/01/20(土) 02:07
>156
作るのはプログラム始まってすぐ WM_CREATE
削除は WM_DESTROY
使うのは関数のなかとかでスレッド同期とりたいとき
名前なしはわからん。
とりあえず付けとけば。


158 名前: デフォルトの名無しさん 投稿日: 2001/01/20(土) 02:08
>>156
どこでもいいよ有るべきときに有るようになっていれば。

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

ところで、本当にSemaphoreが必要なの?
MutexやCriticalSectionは考えなかった?Eventがぴったりという場面もある。
特にCriticalSectionは同一プロセス別スレッドで使用するなら一番速いんだけど。


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
>>162
なんとなくevent向きだぞ。


165 名前: デフォルトの名無しさん 投稿日: 2001/01/21(日) 05:25
>>155
WM_MOUSEWHEELが来るのは、WinNT/2000系だけで、Win9X系ではホィールメッセージは
RegisterWindowMessageで取得するんでなかったかなぁ、たぶん。



166 名前: 特命リサーチ200X 投稿日: 2001/01/21(日) 12:17
Win64 APIの件はどうなった



167 名前: デフォルトの名無しさん 投稿日: 2001/01/21(日) 15:38
>>155
ありがとうございます。
WH_MOUSE のグローバルフックでうまくいきました。

ロジテックのホイールマウスも手元にあるので
そちらでも実験してみます。



168 名前: デフォルトの名無しさん 投稿日: 2001/01/21(日) 17:21
画面のプロパティのデザインページで指定できる、
メニューを描画するフォント名を取得したいのですが、
どうすればいいのでしょう?
フォント名(MSゴシックとか)です。
出来れば、レジストリ直接参照は避けたいです。



169 名前: 160 投稿日: 2001/01/22(月) 02:06
>161

レスありがとうございます。
キーボードドライバを自分で書いてみようと思います。
お薦めのツールや書籍があったら教えてください。



170 名前: turbo type D 投稿日: 2001/01/22(月) 12:05
>>168
http://www.ceres.dti.ne.jp/~goto-ta/windows/ownerdrw1.html

http://www.kab-studio.com/Programing/Codian/MFCTips/09.html


171 名前: デフォルトの名無しさん 投稿日: 2001/01/22(月) 14:59
>>168
SystemParametersInfo


172 名前: 146 投稿日: 2001/01/22(月) 17:19
146です。
147,148,149,150さんありがとうございました。

SendMessage(hwnd, LVM_SETTEXTCOLOR, 0, 0x000000);
で文字色を変えるのもできました。


173 名前: デフォルトの名無しさん 投稿日: 2001/01/22(月) 18:27
VBみたいに簡単に通常使うプリンタを設定できるAPIありませんか?


174 名前: デフォルトの名無しさん 投稿日: 2001/01/22(月) 20:12
// タスクボタンをフラット化
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | TCS_FLATBUTTONS);
// タスクボタンのフラット化をやめる
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~TCS_FLATBUTTONS);

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


175 名前: SAGE 投稿日: 2001/01/22(月) 21:16
>>174

俺はよくわからんのだが、とりあえずTClockのソースを見るよろし。


176 名前: デフォルトの名無しさん 投稿日: 2001/01/22(月) 21:30
スタートボタンはただのボタンだからタブコントロールのスタイルをセットしても意味はない。


177 名前: デフォルトの名無しさん 投稿日: 2001/01/23(火) 15:19
GetVersionEx()をWindows Meで使った場合、dwMajorVersionと
dwMinorVersionには何が入ってきますか?
(Meのマシンが無いので確認できないのです)


178 名前: SAGE 投稿日: 2001/01/23(火) 18:35
Major = 4, Minor = 90 なり。


179 名前: 177 投稿日: 2001/01/24(水) 08:53
>178
ありがとう。助かりました。


180 名前: デフォルトの名無しさん 投稿日: 2001/01/25(木) 01:04
>>171
どうもです。無事にフォント名(&サイズも!)取得できました。



181 名前: デフォルトの名無しさん 投稿日: 2001/01/25(木) 02:37
kernel32.dll がエクスポートしている ***ConsoleAlias{A|W}
って、誰か使い方知らない?


182 名前: デフォルトの名無しさん 投稿日: 2001/01/28(日) 03:27
プログラム側から物理メモリを制限して、
その制限を越えたら、その分使われてない順に仮想メモリにスワップさせるAPIは無いでしょうか。
他で動いてるプログラムの為に物理メモリをあまり消費したくないんです。
自分でキャッシングを実装しても良いんですが、システム側に比べると圧倒的に遅い気がするので。実装も大変そうだし。


183 名前: デフォルトの名無しさん 投稿日: 2001/01/28(日) 03:34
メモリマップドファイルは? 遅いから駄目?


184 名前: デフォルトの名無しさん 投稿日: 2001/01/28(日) 03:49
>>183
メモリマップも試しましたが、結局物理メモリにコピーされる様なので、
巨大ファイルを扱うと物理メモリを食いつぶしてスワップしまくってしまいました。


185 名前: デフォルトの名無しさん 投稿日: 2001/01/28(日) 03:53
Windows2000のディスクの制限をかけるクオータ機能の様な物が、メモリにもあれば良いと思うんですが。
Windows9x/NT4/2000その他UNIX系-OSなどで動作させたいので、
やっぱり自分で作るしかないですかね。


186 名前: 171 投稿日: 2001/01/28(日) 18:07
>>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
ありがとうございます。
しかし、良く分かりませんでした(汗)

このコールバックはどこで指定するものなのでしょうか?
普通のプロパティシートのコールバックではないですよね。


190 名前: SAGE 投稿日: 2001/01/31(水) 00:29
いや普通のプロパティシートのコールバック。
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のレジストリを
ゴリゴリ書き換えるプログラムは嫌いだわ。
レジストリ使うのやめなさい。


193 名前: ボログラマー 投稿日: 2001/01/31(水) 22:12
>>191
ShellExecute()で"explore"かなんかで実行とかじゃダメ?
やった事無いから動くか知らんけど。


194 名前: デフォルトの名無しさん 投稿日: 2001/01/31(水) 23:06
>>190
できました。
ありがとうございます


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を後から得る関数って有りますか?


200 名前: 名無しさんi486 投稿日: 2001/02/03(土) 01:13
>>199
GetWindowLongとかWM_CREATEの時のやつとか。


201 名前: 名無しさん@お腹いっぱい。 投稿日: 2001/02/03(土) 01:14
>199
ウインドウハンドルがわかってるなら(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE)
ほかにはWinMainでグローバル変数に収納して使うとか。



202 名前: 名無しさん@お腹いっぱい。 投稿日: 2001/02/03(土) 01:24
ウィンドウハンドルまたはインスタンスハンドルからアプリケーションを識別したいのですが、どんな方法がありますか?
GetClassName()でクラス名を使う方法は思いついたのですが、ほかに有効な方法があったら教えてください。



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


212 名前: 名無しさん@お腹いっぱい。 投稿日: 2001/02/08(木) 12:36
厨房な質問です。
「ファイルを開くアプリケーションの選択」ダイアログボックスを
出すにはどうしたらよいですか?


213 名前: 212 投稿日: 2001/02/08(木) 12:38
しまった。
sageてしまった。


214 名前: デフォルトの名無しさんだもん 投稿日: 2001/02/08(木) 12:45
>>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にクラスがあるよ。


218 名前: 212 投稿日: 2001/02/09(金) 12:46
>>216
どうもです。


219 名前: 212 投稿日: 2001/02/09(金) 12:53
あれでもこれって単なる「開く」ダイアログじゃありませんか?


220 名前: デフォルトの名無しさん 投稿日: 2001/02/09(金) 19:17
>>219
たぶん >>216 は、ただのバカだ。おつかれ。
正解はこちら。
http://www.microsoft.com/JAPAN/support/kb/articles/J042/7/12.htm


221 名前: 212 投稿日: 2001/02/09(金) 20:26
さっすが220さん!


222 名前: 名無しAMD 投稿日: 2001/02/11(日) 11:43
どうしても作りたいプログラムがあるので、質問させていただきます。
実は、インターネットエクスプローラの 「ホーム」URLを書き換える
プログラムが作りたいんです。
知ってる人、どうかよろしくお願いします。


223 名前: デフォルトの名無しさん 投稿日: 2001/02/11(日) 12:19
>>222
レジストリキーをチェックしてね♥
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
Start Page


224 名前: 名無しAMD 投稿日: 2001/02/11(日) 12:28
>>223
あー、早いレス。それに、貴重な情報。
ありがとうございます〜 (≧▽≦)ノ
早速今夜試してみます〜。



225 名前: デフォルトの名無しさん 投稿日: 2001/02/13(火) 08:24
>>224
スタートページ変えられるのスゲェ迷惑なんすけど。



226 名前: デフォルトのななしさん 投稿日: 2001/02/13(火) 10:24
C++,Cで、winsock以外で、ソケット通信するためのAPIって無いの?
あ、環境はwindows9x or windowsNT系ね。
windows2000に特化してたりするのはパス。


227 名前: デフォルトの名無しさん 投稿日: 2001/02/13(火) 10:27
>>226
サードパーティのソケットライブラリを使う。
#有るのか知らん。FTPとかで出してないか?


228 名前: デフォルトの名無しさん 投稿日: 2001/02/13(火) 11:38
縦書き用ExtTextOutってない?


229 名前: デフォルトの名無しさん 投稿日: 2001/02/13(火) 11:45
>>226
Windows3.1の頃は色々あったけどねぇ。
ま、それでも窓口はWINSOCKだったけど。


230 名前: でふぉると名無しサン 投稿日: 2001/02/13(火) 13:29
うーん、winsock同等の物を自作してみたいのですが、
何か参考になるソースないでしょうか?


231 名前: ネタ 投稿日: 2001/02/13(火) 13:36
>>227 SetWorldTransform


232 名前: デフォルトの名無しさん 投稿日: 2001/02/13(火) 23:37
ビットマップファイル(色数問わず)をRGB形式(詰めて)に簡単に展開する方法はないですね?


233 名前: デフォルトの名無しさん 投稿日: 2001/02/13(火) 23:40



234 名前: デフォルトの名無しさん 投稿日: 2001/02/14(水) 07:18
Bitmapファイル自体がすでにRGB形式でわ?
256色の場合はインデックスだけど、パレットはRGB形式だし。
そうゆう意味じゃなくて?



235 名前: デフォルトの名無しさん 投稿日: 2001/02/14(水) 07:25
>>232
LoadImageでDIB形式で読み込んだものを
GetDIBits でピクセルを読み込む。
ただしLoadImageはNTでは動かない。
スージープラグインを使うのもいいかも。


236 名前: 232 投稿日: 2001/02/14(水) 07:57
>234
パレットを持ってる奴を24bitカラーに直して読み込みたいです。
>235
LoadImageの存在をはじめて知ったのであとで調べてみます。
GetDIBitsって、LONG境界で置かれているものを、詰めて置いてくれるんでしょうか?




237 名前: デフォルトの名無しさんだもん 投稿日: 2001/02/14(水) 11:50
>>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
感謝!


245 名前: デフォルトの名無しさん 投稿日: 2001/02/15(木) 08:29
簡単なら自作したいってだけか…。


246 名前: デフォルトの名無しさん 投稿日: 2001/02/15(木) 09:52
GIFのローダーは、比較的易しいけど、
特許の問題があるからねぇ・・・


247 名前: デフォルトの名無しさん 投稿日: 2001/02/15(木) 16:12
関係ないけど、いつから
BITMAPINFOHEADER の biCompression に、
BI_JPEG とか BI_PNG とか付いたんだ?

鬱だ・・・


248 名前: デフォルトの名無しさん 投稿日: 2001/02/15(木) 17:04
.exeファイルがコンソールアプリなのかそうでないかを判別する
方法ってあります?PEヘッダーじゃダメそうだし、GetSTDHandleを
インポートしているかどうかでもダメだし。



249 名前: デフォルトの名無しさん 投稿日: 2001/02/15(木) 17:06
>>274
JpegとかPNGのBMPもあるってこと?


250 名前: デフォルトの名無しさん 投稿日: 2001/02/16(金) 01:38
>>248
SHGetFileInfoでどうだろう


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++に組み込むのはやはりないのか。


254 名前: デフォルトの名無しさん 投稿日: 2001/02/16(金) 19:28
アピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアヒアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピv゚アピアピアピ


255 名前: デフォルトの名無しさん 投稿日: 2001/02/18(日) 13:11
ForegroundWindowの属するプロセスIDかハンドルを取得するAPIってないですか?
もしくはWindowハンドルからプロセスIDかハンドルを取得するAPI。


256 名前: デフォルトの名無しさん 投稿日: 2001/02/18(日) 13:21
GetWindowThreadProcessId


257 名前: デフォルトの名無しさん 投稿日: 2001/02/18(日) 13:26
>>256
モロに2番目のヤツですね。ありがとうございました。


258 名前: デフォルトの名無しさん 投稿日: 2001/02/18(日) 15:10
>>235
それは日本語SDKヘルプが間違ってる(あるいは更新されていない)。
NT4以降ならLR_LOADFROMFILEも使えるよ。


259 名前: デフォルトの名無しさん 投稿日: 2001/02/18(日) 23:42
MAPIプログラミングについて、何かいい本とかサイトって
ありませんか? 日本語のサイトがいいんですが・・・
探しても見つからないんで、書き込みに来ました。

入力した文字列とアドレス帳に登録されているアドレスデ
ータを比較して、その情報を取得したいんです。
ちなみに、開発はVC++でやってます。


260 名前: デフォルトの名無しさん 投稿日: 2001/02/19(月) 11:44
VC++で
COMポートを使ってパソコンから
相手の機器へデータ(整数値)を転送するには、
以下のコードでいいでしょうか?
(常に4バイト送ってくれるか心配なんだけど…。
改良点があれば教えて下さい。)

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

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

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


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

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

// ハンドルのクローズ
bRetC = CloseHandle(handle);
if(bRetC == 0){
// ハンドルクローズ時エラー
}


261 名前: デフォルトの名無しさん 投稿日: 2001/02/19(月) 15:39
>>260
SetCommStateのDCBで信号周りの設定がかなり重要なんだけどな。
まぁ、信号のハンドシェークは通信相手によるからね。

書き込む前にGetCommModemStatus等で
DSRぐらいは見といたほうが良いと思う。


262 名前: デフォルトの名無しさん 投稿日: 2001/02/20(火) 00:53
キャプチャーカードから画像をリアルタイムで取り込んでテクスチャとして使いたんですが、
DirectX知らないんで、Win APIでそんなの有りますか?


263 名前: 投稿日: 2001/02/20(火) 02:36
>>260
>>261
付け足すなら、
SetupComm() SetCommTimeouts() PurgeComm()
あたりもやっといたほーがええんとちゃう?



264 名前: 260 投稿日: 2001/02/20(火) 16:03
>>261
>>263
情報ありがとうございます。
でもう一つ質問なんですが、
260でやっている事を
Timerを使ってある時間おきに
何回もやりたいのですが、
WriteFile処理が終わらないうちに
次のWriteFileをしようとすると
エラーになってしまいます。
2回目のWriteFileは、1回目のWriteFile
が終わってからやるしか方法が無いのでしょうか?
(SetTimerの方で1回目のWriteFile処理が終わるより
長い時間を設定するしかないのでしょうか?)
教えて下さい。


265 名前: デフォルトの名無しさん 投稿日: 2001/02/20(火) 17:00
>>264
CriticalSectionとかどうよ?



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を送れば表示されるはず。


270 名前: 268 投稿日: 2001/02/21(水) 22:10
>>269
SendMessage(FindWindow("Shell_TrayWnd", NULL),WM_ACTIVATE,WA_ACTIVE,0);
で表示できました。ありがとうございました。



271 名前: デフォルトの名無しさん 投稿日: 2001/02/26(月) 00:08
AVIファイルについて質問です。
AVIStreamReadで取ったデータを再生するにはどうすれば良いのでしょうか。



272 名前: デフォルトの名無しさん 投稿日: 2001/02/27(火) 19:22
API関数を使ってRS232Cをコントロールしたいのですが
詳細がわかりません。

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

これでcom1からデータを送信できないんでしょうか。
また受信も同様の方法でよろしいのでしょうか?



273 名前: デフォルトの名無しさん 投稿日: 2001/02/27(火) 20:14
>>272

素直にcomm.drv 使うのが吉と思われ


274 名前: シリアルさん 投稿日: 2001/02/27(火) 21:46
>>272
そんなのでやってる。OCXのコントロールは半日使うと
フリーズするやつがあってダメだった。



275 名前: デフォルトの名無しさん 投稿日: 2001/02/27(火) 23:58
■プロパティシートで質問

ラジオボタンが選択されたら
case WM_COMMAND:
switch (LOWORD(wp)) {
case IDC_RADIO1:
case IDC_RADIO2:
PropSheet_Changed(GetParent(hDlgWnd), hDlgWnd)
break;
}
って感じでAPI呼んで「更新」ボタンが黒くなるように
したいんだけど、画面が表示された瞬間とかにも拾っちゃって
困るんすけど、なんかスマートな解決方法ってありますかいのう?


276 名前: デフォルトの名無しさん 投稿日: 2001/02/28(水) 00:36
えっと、今こんな風にボタンコントロールを作成しているのですが

#define MY_BUTTON 40100

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

このMY_BUTTONの値って適当で良いのでしょうか?今はうまくいって
るのですが、後々メーッセージ判定の時、衝突しそうで怖いです


277 名前: >272 投稿日: 2001/02/28(水) 00:47
シリアルポートの制御は、物理的な結線とか意識しないといけないから、
ソケットみたいな抽象化したものと考え方変えないと、うまくいかんと思うんだけどねぇ。
多少その辺勉強してから、プログラム組んだ方が良いと思うよ。
CreateFileしただけじゃ、いくらなんでも、やること足らないと思うからね。


278 名前: デフォルトの名無しさん 投稿日: 2001/02/28(水) 00:51
RegisterWindowMessage("もげもげぷー")
で、ユニークなのをゲットするってのは駄目?


279 名前: デフォルトの名無しさん 投稿日: 2001/02/28(水) 01:06
>276
適当ってどういうこと?
とりあえずメニューとかと被らなければ適当なIDを割りふっていいじゃない?


280 名前: >272 投稿日: 2001/02/28(水) 01:07
たぶん

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

でいいんでは?



281 名前: >276 投稿日: 2001/02/28(水) 01:21
MY_BUTTONってリソースの名前でしょ。
それってリソースエディタ使ってれば重複しないようになるよ。
自分で付けたければ、resource.hの中身書き換えればいい。


282 名前: 276 投稿日: 2001/02/28(水) 01:38
みなさんレスありがとうございます
>>278
こんなのがあるとは!詳しく読んできます。これ使えば安心できそうです。
>>279
そうなんですけどね・・・なんかいやで。一応0x8000以下は避けてたのですが。
>>281
どうもリソースエディタ書き換えると挙動がおかしくなってしまいまして・・・。
また整形の仕方もよく分からず避けてしまってました。力不足、精進します。


283 名前: 278 投稿日: 2001/02/28(水) 08:10
あ、ごめん。全然ちがうこといってるわ。
設計時に決定しておくリソースIDのことね。そんなのは、自分で管理しろってことで。

RegisterWindowMessage("ъ( ゚ー^) マターリ!")は、
独自のWindowsメッセージ送るときに重複しないように(WM_USER + 100とかでなく)するやつだった。



284 名前: 276 投稿日: 2001/03/01(木) 00:09
>>283
あ、ヤパーリ
ヘルプみててなんか違うかな、と・・・・問題無いです


285 名前: 275 投稿日: 2001/03/02(金) 01:47
>>275
どなたか知りませんかのう...。



286 名前: デフォルトの名無しさん 投稿日: 2001/03/04(日) 21:33
フルパスから特定の.exeや.dllが使用中かどうかは、どうやって調べるのですか?



287 名前: いつでもどこでも名無しさん 投稿日: 2001/03/04(日) 22:54
書き込み属性でオープンしてみるとか。

いっそ削除してみるというのはどうだ?削除できなかったら使用中


288 名前: デフォルトの名無しさん 投稿日: 2001/03/05(月) 02:18
>>286
GetModuleHandleではだめなんけ?




289 名前: 276 投稿日: 2001/03/05(月) 08:26
>>275 >>285
今ちょっと試せない上にヘルプなくて、スペルとか違ってるかもしれないんだけど
case WM_COMMAND:
 switch (LOWORD(wp)) {
  case IDC_RADIO1:
  case IDC_RADIO2:
   if( HIWORD(wp) == BN_CLICKED ){
    PropSheet_Changed(GetParent(hDlgWnd), hDlgWnd);
   }
  break;
 }
でどう?


290 名前: デフォルトの名無しさん 投稿日: 2001/03/05(月) 08:27
しまったクッキー消し忘れ、説得力ねぇ
いや今見たら自分が邪魔しちゃってたみたいだったからさ


291 名前: デフォルトの名無しさん 投稿日: 2001/03/05(月) 10:19
ウインドウの右上の×を押してもすぐに終了させずに、
データをSaveするかどうかのダイアログを出すようにし、
キャンセルを押すとスレッドを終了しないようにしたいのですが、
ウインドウが閉じてしまいます。
WM_DESTROYになにか細工をほどこせばよろしいのでしょうか?


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ではだめなんけ?

試してみたのですが、ダメでした。
この関数はプロセスが同じじゃないと使えないようです。



296 名前: 288 投稿日: 2001/03/06(火) 02:19
>295
ごめん、じゃわからないや。



297 名前: デフォルトの名無しさん 投稿日: 2001/03/06(火) 11:08
Windows2KではNICの無効化/有効化を出来るのですが、
これを自前で行うAPIを知っている人いますか?


298 名前: デフォルトの名無しさん 投稿日: 2001/03/06(火) 13:59
ドロップダウンするツールバーボタンで、
▼がボタンと一体化してるもの(Explorerの「表示」など)は
どのようにすれば使えますか?


299 名前: デフォルトの名無しさん 投稿日: 2001/03/06(火) 14:22
>>295

PSAPIもしくは、ToolHelp系のAPIを使え。


300 名前: デフォルトの名無しさん 投稿日: 2001/03/06(火) 22:10
>>299
一瞬、ToHeartと読み違えたよ・・・。

逝って良し!>オレ


301 名前: 295 投稿日: 2001/03/06(火) 22:32
>299
どうもありがとうございます。
解決しそうです。


302 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 16:17
Dll内のダイアログテンプレートを使うにはどうすればいいんでしょうか?
LoadLibrary()→FindResource()→LoadResource()→LockResource()
とまではわかってるのですが、どうやってDialogBox()を呼べばいいのですか。





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

# 試してないから自信ないけどネ。


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



305 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 19:29
>>302
DialogBoxIndirect() 使うナリよ〜

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

これで動くハズナリ〜


306 名前: わはははは 投稿日: 2001/03/10(土) 19:52
>>304
~/.appconfig
とか。



307 名前: デフォルトの名無しさん 投稿日: 2001/03/10(土) 19:58
>>306
ъ( ゚ー^) イイネ


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ってホント怪しい。



328 名前: デフォルトの名無しさん 投稿日: 2001/03/17(土) 01:06
>NTってホント怪しい。
NTよりお前の方が怪しいと思う。


329 名前: デフォルトの名無しさん 投稿日: 2001/03/19(月) 00:09
あげ


330 名前: デフォルトの名無しさん 投稿日: 2001/03/19(月) 20:31
実行ファイルにドロップしたファイルのパスを取得したいの
ですがよくわかりません。

今はWinMainのコマンドライン引数から適当に切り出して使っているのですが
いまいちスマートじゃないような・・・・
何かよい方法はありますか?


331 名前: デフォルトの名無しさん 投稿日: 2001/03/19(月) 23:07
>>330
ふつーだと思うけどダメなの!?
Window場にDragならメッセージなりShell-APIなりがあると
思うけど



332 名前: デフォルトの名無しさん 投稿日: 2001/03/20(火) 00:06
>>330

シェルの仕様だから、コマンドラインで受け取るしかない。パースの仕方は
いろいろあるだろうけどね。



333 名前: デフォルトの名無しさん 投稿日: 2001/03/20(火) 09:51
API関数を使用してiniファイルを操作できるときいたのですが
どのようにしたらいいんでしょうか?


334 名前: デフォルトの名無しさん 投稿日: 2001/03/20(火) 10:29
>>333
なぜ今iniファイルを使うか?レジストリに白!


335 名前: 333 投稿日: 2001/03/20(火) 10:58
レジストリはいじりたくないのもので・・・


336 名前: 麻衣 投稿日: 2001/03/20(火) 11:25
WritePrivateProfileString
GetPrivateProfileString

だけど、今からやるならXMLでやろうよ


337 名前: 333 投稿日: 2001/03/20(火) 11:33
サンキュウ


338 名前: デフォルトの名無しさん 投稿日: 2001/03/20(火) 12:21
>>334
そのソフトでしか使わない物をレジストリに入れるのは頼むからやめてくれ・・・(x_x


339 名前: デフォルトの名無しさん 投稿日: 2001/03/20(火) 13:29
コントロールのクラス名に"msctls_updown32"を指定して、リソース内でアップダウンコントロールを作っています。
コントロールの最大値、最小値もリソース内で指定したいのですが、どのようにすればいいのでしょうか?




340 名前: デフォルトの名無しさん 投稿日: 2001/03/20(火) 15:53
>>336
XMLでのやりかたきぼーん。



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

>340
マジレス。ここを見てみそ。
http://msdn.microsoft.com/library/psdk/xmlsdk/xmlp2lt1.htm
英語だけど、このページにはXML DOMの基礎がとても詳しく書いてある。
とりあえずGetDocumentByTagNameからはじめよう。
JavaでやるんならSunのページから適当に探してね(笑)



342 名前: デフォルトの名無しさん 投稿日: 2001/03/20(火) 20:54
>混在してたら文字化けして
ダブルクォートで囲めば問題起きないと思うんだが。


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
>>346

ありがとー (^-^)/


348 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 00:46
…なんだか知らんが、素直にレジストリにしようっと。


349 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 00:58
>>345 どうもです。
MSDN online 漁ってみましたが、これって、
じかに読むよりはちょっと楽だったりするかも知れない、くらい?
うーん、めんどくさそう。しかも 95 は不可のようだし。
しおしお…。


350 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 09:34
不定形ウィンドウについて質問なのですが、
例えば偽春菜っぽいアプリを実現するとしたら
キャラクターを表示している状態と、フキダシが
出ている状態では、リージョンの形が違うと
思うんですが、やはり毎回リージョンを作り直す
という方法なのでしょうか?
それから、うにゅうは別ウィンドウとして作成
されてるのかな?
漠然としていてすみません。


351 名前: デフォルトの名無しさん 投稿日: 2001/03/22(木) 10:37
>>350
Spy++で見てみれ。
本体、うにゅう、フキダシ全部別ウィンドウだよん。



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()
で取得できます



355 名前: デフォルトの名無しさん 投稿日: 2001/03/24(土) 10:20
>354

ハンドルは拾えたのですが、それはアプリケーションのIMEのハンドルで、変換候補をリストで表示するウィンドウのハンドルとは別のようです。


356 名前: >355 投稿日: 2001/03/24(土) 11:15
なるほど...
ImmGetCandidateWindow()で取得した
CANDIDATEFORM の rcArea にスクリーン座標がはいっていれば
WindowFromPoint() または ChildWindowFromPoint()
で取得できるかましれませんね



357 名前: デフォルトの名無しさん 投稿日: 2001/03/24(土) 12:49
『Inside OLE2』(アスキー出版局)
    と
『OLE オートメーション プログラマーズ リファレンス』
             (Microsoft Corporationn)

買うとしたらどっちのがいいっしょ?


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




359 名前: 357>358 投稿日: 2001/03/24(土) 16:31
>ヘルプを直訳しただけ(だったと思う

あ、そうなんだ。
じゃあ、『Inside OLE2』にするッス。
さんきゅでした。


360 名前: デフォルトの名無しさん 投稿日: 2001/03/24(土) 16:35
他のアプリのエディットボックスの内容を取得する方法って知ってます?
キャレットの座標などは取得できるんですけど、同じ方法では肝心の内容を
吸い出せない…。
セキュリティ目的でこうなっているのかと思いますが、以前、翻訳ソフトで
マウスカーソルの下の単語を訳すというのがあったので不可能では無いと思うのですが。


361 名前: SAGE 投稿日: 2001/03/24(土) 17:36
うぬ?Windows標準のエディットコントロールなら、
単に GetWindowText するだけでないの?>>360


362 名前: デフォルトの名無しさん 投稿日: 2001/03/24(土) 18:49
自前のコントロールならそれでOKだけど、他のアプリのってのがミソなんだよね。


363 名前: >360 投稿日: 2001/03/24(土) 18:58
1.アプリケーションの ウィンドウタイトル名 例:)"2ch BBS .. -
Microsoft Internet Explorer" かウィンドウクラス名(普通知
らない)で FindWindow()でHWND取得<--親ウィンドウ
2.目標のエディットボックスの親ウィンドウ内でのクライアント座標
(メニューを除いた左上からの相対座標)を調べる
3.ChildWindowFromPoint()でエディットボックスのHWND取得
4.それをGetWindowText()
ウィンドウハンドルが取得できれば内容にロックがかかることはないです。


364 名前: 361 投稿日: 2001/03/24(土) 19:38
絶対座標があれば WindowFromPoint でも可だね。

>>362
つーか自前でも他人のでも変わらんてば。


365 名前: デフォルトの名無しさん 投稿日: 2001/03/25(日) 00:10
>>362

WM_GETTEXTで取得できると思われ。


366 名前: デフォルトの名無しさん 投稿日: 2001/03/25(日) 00:13
>>360

翻訳ソフトがバビロンであれば、あれはコントロールから取得している
のではなく、画像をOCR処理していると思われ。


367 名前: デフォルトの名無しさん 投稿日: 2001/03/26(月) 11:30
なんか>>360さんと同じような質問で恐縮ですが。

マウスカーソルなどで現在選択している部分のテキストを取得する
方法はありませんか?(自アプリ/他アプリ)


368 名前: デフォルトの名無しさん 投稿日: 2001/03/26(月) 12:34
>>363
「エディットぼっくす」って逝ってるからFindWindowのクラス名
の指定は"edit"でいいんじゃないかな


369 名前: デフォルトの名無しさん 投稿日: 2001/03/26(月) 12:36
>>360
あとクラス名が不明ならdesktopのhwndを引数にしてEnumChildWindow
という手もある
けどウィンドウが重なっていてその上にマウスがある時は注意が
必要
(EnumChildWindowは確かZ-order順に探索しなかったと思う)


370 名前: SAGE 投稿日: 2001/03/26(月) 14:00
>>367
EM_GETSELTEXT
なり。


371 名前: 367 投稿日: 2001/03/26(月) 15:35
>>370
GetCursorPosとWindowFromPointとSendMessageで実現できそうです。
ありがとうございました。


372 名前: 367 投稿日: 2001/03/26(月) 15:56
EM_GETSELTEXTってRichEdit以外では無理なんかな。


373 名前: 363 投稿日: 2001/03/27(火) 00:31
>>368
親ウィンドウなんで(エディットだと特定できない)



374 名前: >>372 投稿日: 2001/03/27(火) 00:34
EditだとEM_GETSELで位置をとって取得することになるのと違いますか。


375 名前: 367 投稿日: 2001/03/27(火) 03:33
>>374
Editだと全部取って開始と終了位置を使って抽出、ですね。
Edit,RichEdit以外は無理っぽい。IEだとなんかメッセージが飛んでる
ようだけどどのアプリにも…というわけにはいかないようです。
結局クリップボードを使う方法に変更しました。


376 名前: 名無しさん 投稿日: 2001/03/30(金) 03:16
Windowsのエラーダイアログのメッセージを変えるソフトがありますよね。
(FDが入ってないのにFDDにアクセスしたときのエラーダイアログとか)
あれはどんなAPIを使って、メッセージ部分を置き換えているのでしょうか?


377 名前: デフォルトの名無しさん 投稿日: 2001/03/30(金) 10:40
>>376
HookAPIでウィンドウの生成かなんかを監視して、ウィンドウハンドルやオーナー
をマッチングしてるんじゃないかなー
サブクラス化のタイミングでさ。


378 名前: デフォルトの名無しさん 投稿日: 2001/03/30(金) 16:45
FDDアクセスエラーに限った話なら
SetErrorMode(SEM_FAILCRITICALERRORS);
でデフォルトのエラー表示をキャンセルする方法もあったね。
Win3.1時代に使ったことがある。


379 名前: デフォルトの名無しさん 投稿日: 2001/03/30(金) 21:26
>>376-377
SetWindowsHookExでWH_MSGFILTERを指定するなり。
サブクラスではないなり。
これで標準メッセージボックスのOKボタンの文字列"OK"を、
別の文字列に変えた事あるなり。
だから、エラーメッセージ本文もこの方法でGo〜なり〜。

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

これは実物をSpy++で調査してみてみて〜なり。


380 名前: デフォルトの名無しさん 投稿日: 2001/04/01(日) 19:45
MessageBox,MessageBoxEx,MessageBoxIndirect
なんかで、できるダイアログのボタンの文字列を変えたいのですが、いい方法はないですか?



381 名前: 376 投稿日: 2001/04/01(日) 20:57
>>377-379
レスありがとうございました。


382 名前: デフォルトの名無しさん 投稿日: 2001/04/02(月) 11:31
>>380

だから、フックしてやれ、つーの。



383 名前: デフォルトの名無しさん 投稿日: 2001/04/03(火) 11:41