5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Win32API質問箱 Build21

1 :デフォルトの名無しさん:04/07/22 00:05
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
ただし、最新スレくらいは質問する前に検索してくれ。というかしろ。

過去スレなどのリンクはたぶん>>2-5くらい

2 :デフォルトの名無しさん:04/07/22 00:06
- 過去スレ
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやー ごめんなさい。」に巻き込まれた模様


3 :デフォルトの名無しさん:04/07/22 00:06
- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com

Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html
WIN32 Programming
http://www7.plala.or.jp/keny01/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/index.html
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm


4 :デフォルトの名無しさん:04/07/22 00:06
>>2-5
(ノ∀`)アチャー

5 :デフォルトの名無しさん:04/07/22 01:03
>>1
おつ

6 :前991:04/07/22 02:24
>>前994
ありがとうございました。
しかし2のウィンドウシェードについてはできたのですが、ウィンドウを
移動不可にする方法についてもう少し詳しくお教え頂けないでしょうか。
WM_WINDOWPOSCHANGINGをアプリケーションが処理するならば
0を返すようにとPlatformSDKのドキュメントには書かれていたのですが

case WM_WiNDOWPOSCHANGING:
 return 0;

では移動してしまいました。


7 :デフォルトの名無しさん:04/07/22 02:29
>>6
それ、処理してない。

8 :前991:04/07/22 02:32
すいません、とんでもない勘違いでした(汗
送られてくるWINDOWPOS* lParamに対して処理を加えてbreakですね。
申し訳ないです。


9 :デフォルトの名無しさん:04/07/22 04:49
>>前スレ974
>WM_NCHITTESTかな?
できました!感謝

Q:
システムボタンをdisableやgrayedにして機能しなくしても、
これだとボタンの上でクリック(ドラッグ)すると、放すまで制御が
WINMAINに戻ってこないんですよね。
ボタンを押されてもMAINのコードが止まらないようにしたい。

A:
WM_NCHITTESTをトラップすればOK

10 :デフォルトの名無しさん:04/07/22 10:57
DrawEscape()って、使い道ある?
何のために使うの?


11 :デフォルトの名無しさん:04/07/22 11:23
test test


12 :デフォルトの名無しさん:04/07/22 12:10
エディットボックスに入力されたキーのうち
特定のキーの入力を無効にしたいと思っています。

エディットボックスをサブクラス化して、WM_KEYDOWNで
例えば 'A' を捕まえた時に、0を返してみました。
しかし上手くいかず、エディットボックスにAがそのまま入力されてしまいます。

キー入力を無効化するには、どうすれば良いのでしょうか。

13 :デフォルトの名無しさん:04/07/22 12:23
('A')

14 :デフォルトの名無しさん:04/07/22 12:29
>>12
WM_CHAR

15 :12:04/07/22 12:45
>>13
書いたとき少し思いました。

>>14
やった、できました!
謎ですが、WM_KEYDOWNを殺しても、WM_CHARは発生してしまい、
そしてエディットボックス内部で処理されているのはWM_CHARということなのでしょうか。

いずれにせよレスありがとうございました。助かりました。

16 :デフォルトの名無しさん:04/07/22 16:24
windowsx.h
ってのは、標準と思っていいのですか?
GetStockBrush()とか、便利なんだけど。


17 :デフォルトの名無しさん:04/07/22 16:30
むしろ使用を推奨されてた気がするが > windowsx.h
メッセージクラッカーとか。

18 :デフォルトの名無しさん:04/07/22 18:56
デバッグビルドの時には何も起きないのに、リリースビルドにして
引数付きのDLLの関数を、GetProcAddressで呼び出して使うと
「問題が発生したため、XXX.exe を終了します。 ご不便をおかけして申し訳ありません。」
がでてエラーになります
どうしたらいいですか?

19 :デフォルトの名無しさん:04/07/22 18:57
>>18
そういう場合、http://www.cmagazine.jp/src/kinjite/c/variable.html←このへんのどれかをやっちゃってる事が多い。

20 :デフォルトの名無しさん:04/07/22 19:00
ダイアログベースのプログラムの欠点って何ですか?
欠点がないならGUIが簡単に作れるから全部ダイアログベースで書いちゃえばいいと思うんですが。

21 :デフォルトの名無しさん:04/07/22 19:09
>>19
そのページみてvolatileを付けまくってみたらできました
ありがとうございました

22 :デフォルトの名無しさん:04/07/22 19:23
と思ったらデバッグビルドになっていて出来ていませんでした

23 :デフォルトの名無しさん:04/07/22 19:26
>>20
そうですね。
その通りになさればよろしいと思いますよ。


24 :デフォルトの名無しさん:04/07/22 19:35
ダイアログだって、ウィンドウの面倒な部分をかなりラッピングしただけなんだから本質的な違いは無いでしょ

25 :デフォルトの名無しさん:04/07/22 20:12
>>20 そういう話はこっちでどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1049790146/

26 :デフォルトの名無しさん:04/07/22 22:03
>18 >19 >21 のやり取りを見て疑問に思ったんだけど、
Winだとスレッドやプロセスが切り替わってもレジスタの値は
保存して保護されるんじゃないの?
じゃないと全ての変数にvolatileつけなきゃならないと思うんだが。

27 :デフォルトの名無しさん:04/07/22 22:13
>>26
そんなことは当然だがお前はナニを勘違いしてんだ?

28 :デフォルトの名無しさん:04/07/22 22:34
>>26
スレッド・プロセスの切替時にレジスタの内容が保存される先は
元の変数のあった場所ではなく、全く無関係な場所。

29 :デフォルトの名無しさん:04/07/22 23:00
>>28
レジスタ自体関係ねえよ
馬鹿に馬鹿な回答するなよ

30 :26:04/07/22 23:19
あぁ確かにかんちがいしてたわ、すまん

31 :デフォルトの名無しさん:04/07/22 23:21
そもそも、なんでvolatileで解決しようと思ったんだろ…

32 :デフォルトの名無しさん:04/07/22 23:21
SHGetFileInfo()のSHGFI_ICONLOCATIONフラグって正常に機能してます?
関数自体は成功してるみたいなんですけど、
szDisplayNameには何も格納されないし・・・。

この現象について知識をお持ちの方、教えて下さい。

33 :デフォルトの名無しさん:04/07/23 00:49
>>31
スレッドでも使ってたんじゃないか。

volatile付いたせいでコードが変化しただけで、潜在バグは残ってると思うけどね、俺は。

34 :デフォルトの名無しさん:04/07/23 00:55
いや、21と22は連続してると思うんで、潜在どころかこれっぽっちも解決していないと思われ。

35 :デフォルトの名無しさん:04/07/23 09:26
バックグラウンドで動くホットキー型のランチャー作りたいんですけど、
普通にシステムトレイに常駐させるつつ、WM_KEYDOWNで入力を待つだけでいいんですか?


36 :デフォルトの名無しさん:04/07/23 09:30
WM_KEYDOWN来ない

37 :デフォルトの名無しさん:04/07/23 09:32
WM_KEYDOWNだけだと
ウィンドウがアクティブになってないとメッセージを届けてくれないから
別の方法を探すといいかも

これはオープンソースだから参考にしてみるといいかも
ttp://www.nakka.com/soft/nlaunch/

38 :デフォルトの名無しさん:04/07/23 10:00
>>35
RegisterHotKey使えや。

39 :デフォルトの名無しさん:04/07/23 10:02
ウィンドウを最前面にしたくて、
SetForegroundWindow(Handle);
SetWindowPos(Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
してますが、
これらの処理中に他画面をクリックすると無効になってしまいます。
どうしたら良いでつか?

40 :デフォルトの名無しさん:04/07/23 10:03
C のランタイムライブラリに記録されている関数を使うスレッドは、
CreateThread 関数と ExitThread 関数ではなく、
C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、
ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。

C のランタイムライブラリはC++のランタイムライブラリも入りますか?

41 :デフォルトの名無しさん:04/07/23 10:06
                |
                |
                |
                |
     /V\        ,J
    /◎;;;,;,,,,ヽ
 _ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'

42 :デフォルトの名無しさん:04/07/23 10:10
>>39
WM_CREATEの部分で

SetWindowPos (hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

を入れてみ、できるから

43 :デフォルトの名無しさん:04/07/23 10:11
>>39
素でワラタ

>SetForegroundWindow(Handle);
でアクティブにしてるのに
>SetWindowPos(Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
                                                        ↑
                                      アクティブにしないように設定してるとはな

44 :デフォルトの名無しさん:04/07/23 10:35
>>43
あ、ホンとだ。SWP_NOACTIVATE消しますた(恥

でも何故か現象は同じでつ。

45 :デフォルトの名無しさん:04/07/23 10:46
MSDN のサンプルにある、ntddcdrm.h を見たくて、
Windows NT DDK に含まれていそうなので、MS のサイトへ行ったのですが、
見つかりません。Windows NT DDK は、CD-ROM 購入なのでしょうか。

46 :デフォルトの名無しさん:04/07/23 10:51
>>44
>これらの処理中に他画面をクリックすると無効になってしまいます。
>どうしたら良いでつか?

waht do you mean?

47 :デフォルトの名無しさん:04/07/23 10:54
SetForegroundWindowが他のウインドーになるとフラッシュになる仕様に変わったのが原因だろ
40の質問もおねがいしますね

48 :デフォルトの名無しさん:04/07/23 11:21
>>45
DDKスレにリンクがあるロシアサイトから全部落とせるよ

49 :デフォルトの名無しさん:04/07/23 13:14
>>47
C++のランタイムライブラリとは何か、ということを考えれば、自ずと答えは出るだろう。

50 :デフォルトの名無しさん:04/07/23 13:49
考えても分かりません
おしえてください

51 :デフォルトの名無しさん:04/07/23 14:01
自己解決しました

52 :デフォルトの名無しさん:04/07/23 14:11
>>51
何番か言えよ

53 :デフォルトの名無しさん:04/07/23 14:14
自己解決しました。ありがとうございました。

54 :デフォルトの名無しさん:04/07/23 14:23
勝手に解決しないでください

55 :デフォルトの名無しさん:04/07/23 14:29
自己解脱しました。
ありがとうございました。


56 :デフォルトの名無しさん:04/07/23 14:30
勝手に解脱しないでください

57 :デフォルトの名無しさん:04/07/23 14:31
自己フェラしました。
ありがとうございました。


58 :デフォルトの名無しさん:04/07/23 14:52
勝手にセルフェラしないでください

59 :デフォルトの名無しさん:04/07/23 15:05
自己マンコしました.
ありがとうございました.

60 :デフォルトの名無しさん:04/07/23 15:07
勝手にドリアンしないでください

61 :デフォルトの名無しさん:04/07/23 15:09
テレビを昨日家族で見ていた。すると南国の果物特集が始まった。
「マンゴー」が写っていた。で、親父が「これってくさいやつだろ?」
と言った。俺は「それはマンコだろ!」と突っ込んだ。
すると母が「それはドリアンだよ」と一言だけ残し、台所へ去っていった。

62 :45:04/07/23 16:57
>>48
ロシアかどうか分からないままですが、nt4ddk.zip を落として来ました。
ありがとうございました。
中に、ntddcdrm.h があり、欲しい情報は得られましたが、プログラムは
次のエラーが出て、頓挫です。今後とも、よろしく。

63 :デフォルトの名無しさん:04/07/23 18:43
流されてしまったのでもう一度お願いします_| ̄|○
C のランタイムライブラリに記録されている関数を使うスレッドは、
CreateThread 関数と ExitThread 関数ではなく、
C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、
ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。

C のランタイムライブラリはC++のランタイムライブラリも入りますか?


64 :デフォルトの名無しさん:04/07/23 18:49
うん

65 :デフォルトの名無しさん:04/07/23 18:50
stringもstudio.hもiostreamも全部ランタイムCライブラリーなんですかー
C++なのにどうしてですか、理由を教えてください

66 :デフォルトの名無しさん:04/07/23 18:51
>63
>C のランタイムライブラリはC++のランタイムライブラリも入りますか?
意味が解りません。とりあえず日本語の勉強をしてから出直してください。

67 :デフォルトの名無しさん:04/07/23 19:03
言い方がまちがってました 分かりやすく説明するとC++ランタイムライブラリのiostreamを使って
CreateTHReadをコールしても僅かなメモリーリークは発生しませんか?

68 :デフォルトの名無しさん:04/07/23 19:17
発生する

69 :デフォルトの名無しさん:04/07/23 19:49
親ウィンドウでWM_MOUSEMOVEとWM_MOUSELEAVEを使って
ウィンドウの背景色を変えているのですが、子ウィンドウ上にマウス
ポインタが移動した場合もWM_MOUSELEAVEが発生してしまいます。
子ウィンドウ上に移動してもWM_MOUSELEAVEを発生させないよう
にするにはどうすればいいのでしょうか?

親ウィンドウ上にマウスがある→白背景
親ウィンドウからマウスが外れた→黒背景
親ウィンドウ上でかつ子ウィンドウ上にマウスがある→白背景
といったことがしたいのですが…。

70 :デフォルトの名無しさん:04/07/23 19:59
子ウィンドウに入ると親ウィンドウの外にあるってなるん?

子ウィンドウのハンドルを取得してるんだし
マウスポインタが子ウィンドウの中にあればTRUEを返す関数とか作ってみたら?

71 :デフォルトの名無しさん:04/07/23 21:03
子ウィンドウが右クリックされた時
親ウィンドウが子ウィンドウが右クリックされたと知るにはどうすればいいでしょうか?

72 :デフォルトの名無しさん:04/07/23 21:11
子ウインドウが右クリックされたときに適当なメッセージを発するように
すればいいんじゃね。親はそのメッセージを捕まえる。

73 :デフォルトの名無しさん:04/07/23 21:15
>>72
書き忘れてすみません
子ウィンドウはListViewですが
COMMONコントロールでは
右クリックが押されたなどの場合に親に何かメッセージを送ってくれるのでしょうか?

「〜の仕方を教えてください」系の質問ではなく
「〜はありますか?」系の質問ですみません。

もし何かメッセージがあるようならば、その名前を教えてください

74 :デフォルトの名無しさん:04/07/23 21:26
メッセージはWM_NOTIFY。
CODEはNM_RCLICK。

75 :デフォルトの名無しさん:04/07/23 21:47
>>74
出来ました
ありがとうございます

76 :69:04/07/23 21:57
>>70
親ウィンドウ→子ウィンドウに移動したときにどうもWM_MOUSELEAVE
が出てしまうようで、背景が白黒白黒と点滅してしまうのですよ。

> マウスポインタが子ウィンドウの中にあればTRUEを返す関数とか作ってみたら?
とりあえずこの方向で考えてみます…。
ありがとうございました。


77 :デフォルトの名無しさん:04/07/23 21:59
>>63
軽く調べてみたらだんだ興味が出てきたので、いろいろ試してみた。

まず事実として、C/C++のランタイムは数種類存在する。MT=マルチスレッドな。
       StaticLink DynamicLink
C      libc.lib   msvcrt.lib
C(MT)   libcmt.lib   ↑
C++    libcp.lib   msvcprt.lib
C++(MT) libcpmt.lib  ↑

要するに、Cランタイムのlibc、C++ランタイムのlibcpがあり、
それぞれにMT対応の「mt」が存在する。msvc系は最初からMT対応なので2種しかない。
なので、「CのランタイムにはC++のランタイムは含まない」。

ただし、これは「C++ランタイムを使う場合に_beginthreadは不要」ということを意味しない。
というのは、C++ランタイムは内部的にCランタイムを使用しているためだ。
(libcp.libのみリンクしてみるれば一目瞭然。関係ないが、Cランタイムはkernel32.libを使用している)
そのため、「C++ランタイムを使用する場合も_beginthreadを使用するべきである」。

ただしこれは手元のVC++6の場合で、他のバージョンでどうなのかは不明だ。
少なくともVC++4.2以前はiostreamはlibcに含まれていたらしいので、環境依存なのは確かだが。
(なお、その古いバージョンのiostreamは、libci.libとしてVC++6にも残っている)

78 :デフォルトの名無しさん:04/07/23 23:25
マニュアル持ってないのか?

79 :デフォルトの名無しさん:04/07/24 00:14
一つのHWNDに対して
いくつまでHDCを使うことができるんですか?
限界とかありますか?

80 :デフォルトの名無しさん:04/07/24 01:06
16bitの頃はあったらしいが

81 :デフォルトの名無しさん:04/07/24 01:16
ちょっとスレ違いかもしれませんが、
NT系をシャットダウンさせようと思ったので、その方法について調べていました。


AdjustTokenPrivileges()の引数の、
TOKEN_PRIVILEGES構造体なんですが

#define ANYSIZE_ARRAY 1
/*略*/
typedef struct _TOKEN_PRIVILEGES {
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;

こんな風にwinnt.hに書かれているんです。

このPrivilegesという配列をいくつ使用しても問題が無かったのですが、なぜでしょうか?

82 :デフォルトの名無しさん:04/07/24 04:16
PrivilegeCount で指定された値に応じてその先のデータを読むってこと。
配列へのポインタはそれだけだと配列のサイズを渡せないでしょ。

83 :デフォルトの名無しさん:04/07/24 11:15
それって、malloc( sizeof( TOKEN_PRIVILEGES) +
PrivilegeCount*sizeof( LUID_AND_ATTRIBUTES ) )とかで
確保する、Cのお約束パターンでないの?自動変数で確保
して、Privileges[2]=...とかやったら、データ破壊だよ。

84 :デフォルトの名無しさん:04/07/24 12:34
>>83
MSDNのサンプルでも、Privileges[0]としてしか使っていませんでした。

85 :81:04/07/24 12:35
>>81 == >>84です。

86 :デフォルトの名無しさん:04/07/24 13:12
>>84
Privileges[0]は、もともとTOKEN_PRIVILEGESに含まれてるでしょ。

87 :デフォルトの名無しさん:04/07/24 13:56
大量のあらかじめフルパスが分かっているファイルのサイズと最終書込日時の取得をしたいのですが、
for(int i=0; i<30000; ++i)
{
WIN32_FIND_DATA fd
HANDLE hf = FindFirstFile(filePath[i].c_str(), &fd);
//fdの中のデータを利用
FindClose(hf);
}
とやると30000ファイルで20秒くらいかかってしまいます。
FindFirstFileを使わずにCreateFile,GetFileSize,GetFileTimeを併用すると
更に1割ほど遅くなってしまうようです。

もっと速い方法は無いでしょうか?

88 :デフォルトの名無しさん:04/07/24 14:01
しかし、こんな所でたずねるほうが馬鹿だね。だったら、MSに行け

89 :デフォルトの名無しさん:04/07/24 14:03
GetFileAttributesEx だとどうだ?

90 :デフォルトの名無しさん:04/07/24 14:07
GetFileAttributesEx使ってみたら?


91 :90:04/07/24 14:08
リロードすれば良かったorz

92 :デフォルトの名無しさん:04/07/24 14:09
しかし、Win32APIもいいかげん。もちっと、プロセス、タスクレベルの仕事しっかりしろよ

93 :デフォルトの名無しさん:04/07/24 14:15
>>92
(゚Д゚)ハァ?

94 :デフォルトの名無しさん:04/07/24 14:19
Direct Input でキー入力とってるアプリに
実際にキーを押さないでキーを押したエミュレートするには
どうしたらいいんでしょうか?
keybd_eventでは駄目でした

95 :デフォルトの名無しさん:04/07/24 14:20
>>89-90
FindFirstFile>(5%)>GetFileAttributesEx>(5%)>CreateFileの順でした。
うーん…

96 :デフォルトの名無しさん:04/07/24 14:24
Backupオプション使ってディレクトリを開き、読み、自前で解析するとか。

97 :デフォルトの名無しさん:04/07/24 14:27
>>87
マルチスレッドにしてみたら?

98 :デフォルトの名無しさん:04/07/24 14:28
>>95
ファインドファーストファイル中に、ファイル作っているのはおもしろい、

99 :デフォルトの名無しさん:04/07/24 14:33
>>98
それどういう意味??

100 :デフォルトの名無しさん:04/07/24 14:34
>>98
無知をさらした瞬間、と取ってよろしいか?


101 :デフォルトの名無しさん:04/07/24 14:45
98晒しage

102 :デフォルトの名無しさん:04/07/24 14:47
ERROR_NOT_ENOUGH_QUOTAについて質問です

FormatMessageすると、
「このコマンドを実行するのに十分なクォータがありません」
と表示されます。

クォータ(QUOTA)とはどんな資源なんでしょうか?

103 :デフォルトの名無しさん:04/07/24 15:10
お帰りください。
http://www.google.com/search?num=50&hl=ja&ie=UTF-8&q=%E3%82%AF%E3%82%A9%E3%83%BC%E3%82%BF+windows&lr=lang_ja

104 :デフォルトの名無しさん:04/07/24 15:27
>>103
このエラーの指すところのクォータの意味が知りたかったのですが・・・

グーグルで、このエラーを検索したところ
以下がヒットしました
ttp://www02.so-net.ne.jp/~handa/win32api/ProcessAndThread.html

クォータで一般的にヒットするディスク クォータとは、まるで関係ないように思えます。

105 :デフォルトの名無しさん:04/07/24 16:09
>>104
ERROR_NOT_ENOUGH_QUOTAとは何か? とだけ聞かれれば、
何らかの資源不足だ、としか答え様がない。QUOTAは資源ではなく、資源の制限だからだ。
何が不足してるかは俺らにはわからん。お前が何をしてるのか知らんしな。

関係ないと断言するのは勝手だが、関係あるかないかは、お前さんが何をやってるか次第であって、
お前さんが何をしたいかどうかとは、それこそ全く関係がない。

つまり、お前の聞き方が悪い。

106 :102:04/07/24 16:50
順を追って、説明しますと
作成したアプリを実行中に、IEを立ち上げたところ、
IEがこのエラーを出したそうです。

作成したアプリが何らかの資源をリークしてるのか、
それとも、まるで関係ないのかさえ、糸口が掴めない状態です。

そこで、このエラーを発生しうる資源の不足あるいはAPIを調べ、
それらを扱っているコードをチェックしようと思ったのです。

107 :デフォルトの名無しさん:04/07/24 17:55
資格も無い奴に原因教えるわけにいかんだろう。このすれ、馬鹿すぎ。

108 :デフォルトの名無しさん:04/07/24 18:00
でも、一番の馬鹿は107だと、僕はそう思うよ。

109 :デフォルトの名無しさん:04/07/24 18:05
プ、おまえの言ってることは、堂々とセキュリティー破りを聞いていることだろう
市ねよ。おまえを、訴えるかw

110 :デフォルトの名無しさん:04/07/24 18:08
また変なのが湧いてきた

111 :デフォルトの名無しさん:04/07/24 18:19
馬鹿には絶対教えないことが、セキュリティの向上につながります。
それが結局、お客様の利益を守ることになります。7

112 :デフォルトの名無しさん:04/07/24 18:35
QUATAもわからない奴が未だにいるんだ。最悪だな。
外国に頼むのも仕方が無いかも。

113 :デフォルトの名無しさん:04/07/24 18:57
やっべ俺も最悪

114 :デフォルトの名無しさん:04/07/24 18:59
>>106
ふーん。がんばれよ。

115 :デフォルトの名無しさん:04/07/24 19:19
>>102 が知りたいのはQUATAではなくてQUOTA

116 :デフォルトの名無しさん:04/07/24 19:27
ログインできないから何でて聞かれても、おまえが馬鹿としか言いようが無い。
まあ、そんなもんだ

117 :デフォルトの名無しさん:04/07/24 19:39
コンストラクタでBeginPaint()を行い、デストラクタでEndPaint()をするクラス
を作りました、このクラスをWM_PAINTメッセージを受けたときに定義し、再描画
を行っています、ウィンドウプロシージャ内でこのクラスを使ったときにはうま
く行くのですが、定義したオブジェクトを自作の再描画関数に渡すとうまく行き
ません、(コピーコンストラクタは定義しています)、、理由がわかりません、
どなたか助けてください。

118 :デフォルトの名無しさん:04/07/24 19:42
ソース見せろ

119 :デフォルトの名無しさん:04/07/24 20:02
すごい。へー、そんなことできるんかいなw、大馬鹿が増えた。
マニュアルよく嫁。

120 :デフォルトの名無しさん:04/07/24 20:04
XWindowで勉強しろ

121 :デフォルトの名無しさん:04/07/24 20:05
>>117
場合によって動くのなら、APIの問題ではなくクラス設計の問題。C++方面のスレで聞け。

122 :デフォルトの名無しさん:04/07/24 20:24
>>117
BeginPaintの説明を穴があくまでよく嫁。

123 :デフォルトの名無しさん:04/07/24 21:09
また、自称上級者が調子こいてますな w

124 :デフォルトの名無しさん:04/07/24 21:22
うん、馬鹿をからかうのが楽しいが、今回は、重症だな。こりゃ。
>>117
おまえプログラマ向いてないからやめろ。そのほうが日本のためになる。

125 :デフォルトの名無しさん:04/07/24 21:27
文字列を検索するにはCあるいはC++ランタイムライブラリを使わないでやるには
自分で作るしかないのですか?

126 :デフォルトの名無しさん:04/07/24 21:39
CあるいはC++ランタイムライブラリを使っていない、
他人が作った検索ルーチンを使う

127 :デフォルトの名無しさん:04/07/24 21:47
その程度ならその場で書けよ
それすらできんならプログラムングなんてとっとと辞めちまいな


128 :デフォルトの名無しさん:04/07/24 22:12
>>125

APIで検索汁


129 :デフォルトの名無しさん:04/07/24 22:33
なんだ。無知を指摘されたやつが切れて暴走してるのか。

130 :デフォルトの名無しさん:04/07/24 22:58
>>125
このスレでそんなこと聞いてどうするつもりだ?

131 :デフォルトの名無しさん:04/07/24 23:17
未経験者可、時給700円とかの仕事をやっていて、仕事って簡単じゃなんて、
思っているのが、増えているんでないかと思う昨今。

132 :デフォルトの名無しさん:04/07/24 23:20
>>131
難しい仕事ってどんなことするの?

133 :デフォルトの名無しさん:04/07/24 23:21
とみながさんみたいな仕事

134 :デフォルトの名無しさん:04/07/24 23:23
>>133
みーな?

135 :デフォルトの名無しさん:04/07/24 23:27
いちろうだろう。

136 :デフォルトの名無しさん:04/07/24 23:34
中将閣下だろ。

137 :デフォルトの名無しさん:04/07/25 00:09
プロセスハンドルからそのプロセスが起動された時の引数を知るにはどうしたら良いのでしょうか?

138 :デフォルトの名無しさん:04/07/25 00:30
GetCommandLine()

139 :117:04/07/25 00:40
参照渡しにすることにより解決しました。

140 :デフォルトの名無しさん:04/07/25 00:42
>>138
現在のプロセスのコマンドラインしかとれないようです

141 :デフォルトの名無しさん:04/07/25 00:42
考えろ

142 :デフォルトの名無しさん:04/07/25 01:03
最終手段はフックでターゲットプロセスに入り込んで実行だーね

143 :デフォルトの名無しさん:04/07/25 01:15
GetLastErrorのエラーコードからFormatMessageで文字列にすることについてですが
エラーコードによって%1のように文字列を埋め込むところがありますよね。(例えばERROR_WRONG_DISKとか)
この埋め込む文字列はファイル名だったりドライブ名だったりいろいろあるようですが
どんな文字列を渡したらいいのかは、エラーコード毎に調べてやるしかないんでしょうか?

144 :デフォルトの名無しさん:04/07/25 01:17
そういう予めエラー種別が予測されるものは通常、エラーコードでswitchさせるなりして
それぞれエラー処理書くでしょ。それに付随させてエラーメッセージフォーマットもしてやれば良いだけ。
質問への答えとしては、yes

145 :143:04/07/25 01:38
>>144
そうなんですか…
APIでエラーが起きたらGetLastError()を例外クラスに突っ込んでthrowして
一箇所でまとめてフォーマット→メッセージ表示させようと思ってたのですが…
エラーコードでswitchさせても、予定外のコードがきたらとか考えると
自分でエラーメッセージ書いたほうがいいような気がしてきました。

146 :デフォルトの名無しさん:04/07/25 09:04
エラーなんて気にすんな。
死ぬわけじゃなし。


147 :117:04/07/25 09:40
参照渡しを使わずにオブジェクトを関数に渡すことができるようにすることが
できました。

148 :デフォルトの名無しさん:04/07/25 10:43
>>147 が日本語をまともに使えるようになることができるようにしたい。


149 :デフォルトの名無しさん:04/07/25 10:50
>>148
スーパークラスかコンストラクタのデバッグが必要と思われ

150 :デフォルトの名無しさん:04/07/25 11:03
SDKプログラミングでFlexGridみたいなActiveXコントロールを使ってみたいんですが
それに関する資料のあるサイトとかありませんか?

151 :デフォルトの名無しさん:04/07/25 11:38
ランタイムロードのDLLについて質問です。
DLL内部でnewやmallocを使って動的に確保したメモリ領域は、
呼び出し側がFreeLibrary()した時に自動的に解放されるんでしょうか。
それとも明示的な解放が必要ですか?

152 :デフォルトの名無しさん:04/07/25 11:40
不必要

153 :デフォルトの名無しさん:04/07/25 11:51
>>151
どういうことを言ってるんだ?普通メモリを割り当ててそのポインタを返す場合はポインタもらったほうが開放するもんだし、
DLL内部の関数でメモリ確保して内部で始末するようなのはそこで自己完結してるものだし。



154 :151:04/07/25 12:13
では、FreeLibraryを使っても、LoadLibraryする以前のメモリ使用量に戻らないときは、
どのような原因が考えられますか?

155 :デフォルトの名無しさん:04/07/25 12:51
>>148
それは君の知識不足だろ

156 :デフォルトの名無しさん:04/07/25 14:13
セマフォやクリティカルセクションとかのスレッド間でのアクセス管理オブジェクトを
使わなくても、DWORDまでの読み書きなら安全か?

157 :デフォルトの名無しさん:04/07/25 14:18
グローバルフックをクラスにするときオブジェクトを何個作っても
DLLのグローバルフックが別々になるようにするにはどうしたらよいですか?

158 :デフォルトの名無しさん:04/07/25 14:19
>>154
1.DLL内部のメモリ開放のし忘れ
2.メインプログラム内でのメモリ開放し忘れ
3.DLLの外と中でのメモリ割り当て/開放関数使用の不一致
4.君がタスクマネージャの見方を知らない

漏れは4が怪しいと思う。仮想メモリ使用量の表示は見たか?

159 :デフォルトの名無しさん:04/07/25 15:16
AlwaysUnloadDLLっていうレジストリ値使っている人いるのかな。

160 :デフォルトの名無しさん:04/07/25 15:53
>>156
1CPUなら平気だが2CPU以上の場合は駄目
だったような気がする。

161 :デフォルトの名無しさん:04/07/25 15:59
>>160
2CPUでもアクセス管理してるから同一メモリアドレスに同時にアクセスはできなくない?

162 :デフォルトの名無しさん:04/07/25 16:42
APIスレなんだから、Interlocked*を使う話じゃないのか?

163 :デフォルトの名無しさん:04/07/25 16:47
1CPUでも安全な保証はないだろ。

164 :デフォルトの名無しさん:04/07/25 18:09
>>156
処理によってはたまたま安全な場合もあるが、基本的には危険と思っておくべき。

165 :デフォルトの名無しさん:04/07/25 18:21
なんか156みたいな質問って定期的に出てくるけど何なんだろうね?

>>156
よかったら、その疑問をもった経緯をおしえてくれないか?

166 :デフォルトの名無しさん:04/07/25 18:58
>>165
毎回イベントやらクリティカルセクションやらを仕掛けるのが面倒だったんで、
CPUのバス長未満の読み書きなら安全かな?と。安全なら省けるなと思ったもので。
効率的にも仕掛けなくて済むなら、向上しそうですし。

167 :デフォルトの名無しさん:04/07/25 19:49
C のランタイムライブラリに記録されている関数を使うスレッドは、
CreateThread 関数と ExitThread 関数ではなく、
C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、
ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。

ウィンドーズのアプリケーションを作る場合
CランタイムライブラリのLIBC.LIB LIBCMT.LIB MSVCRT.LIB LIBCD.LIB LIBCMTD.LIB MSVCRTD.LIB
のどれかが絶対リンクされるということは、Cのランタイムライブラリに記録されている関数を使う事にはなりませんか?

168 :デフォルトの名無しさん:04/07/25 19:58
>>167
>>77

どっかの宿題か?

169 :デフォルトの名無しさん:04/07/25 20:04
>>167
VC++を使った場合はね

170 :デフォルトの名無しさん:04/07/25 21:57
SHGetFileInfoで取得したアイコンは削除する必要がありますか?
それともシステムのアイコンハンドルだから削除してはいけないのでしょうか?


171 :デフォルトの名無しさん:04/07/25 22:15
自己解決しますた。


172 :デフォルトの名無しさん:04/07/25 22:21
>>171
結局どっちでしたか?

173 :デフォルトの名無しさん:04/07/25 22:22
>>156
シングルプロセサでかつアライメントが適切 (例: DWORD なら 32bit 境界に整合している) なら、大丈夫。
ちなみに、Pentium プロセサなら 64bit まで大丈夫。

ただし、>>160 が言うようにマルチプロセサなら駄目。
その時は、LOCK プリフィックスとか XCHG 命令とかでバスをロックする必要がある。

>>161
例えば、inc 命令は、メモリからデータを読み込んで +1 してメモリに書き込むから、その間に他のプロセサが割り込んでしまうことがありえる。
割り込まれないようにするために、バスロック機能がついている。

>>163
保証がないわけではない、インテルのマニュアルを読むべし。

インテル・アーキテクチャ ソフトウェア・ディベロッパーズ・マニュアル
下巻:システム・プログラミング・ガイド
7.1. ロックされたアトミック操作

このマニュアルを読んでよくわからないなら、>>164 の言うように考えておくべし。⇒ >>156=>>166

>>166
上に書いたのは、あくまでも1命令内での話だから、C なんかで書く場合は気をつけてね。 

174 :デフォルトの名無しさん:04/07/25 22:23
>>170
GetStockObjectで入手したハンドルを削除するかどうか考えれば解る。
答えは否

175 :デフォルトの名無しさん:04/07/25 22:32
削除すんでしょ?
http://forums.belution.com/ja/vc/000/215/21.shtml

176 :デフォルトの名無しさん:04/07/25 22:43
知ったかすみませんでした

177 :デフォルトの名無しさん:04/07/25 22:56
>>173
とても詳しい説明をありがとうございました

178 :デフォルトの名無しさん:04/07/26 02:05
GetKeyboardStateってCreateThreadで作ったスレッド内で動作しないの?

179 :デフォルトの名無しさん:04/07/26 07:13
キーボードの入力状態はスレッド別
共有したいならAttachThreadInputすればいいんじゃない

180 :デフォルトの名無しさん:04/07/26 10:33
>>178
GetKeyboardStateの情報は、メッセージキューからメッセージを取得したときに更新されたような気がする。
つかMSDNに書いてあるじゃん。


181 :デフォルトの名無しさん:04/07/26 11:29
フォルダの情報、例えばファイルが増えたとか減ったとかいうのが変更されたとき
リアルタイムでそれを知るにはどうすればいいでしょうか?

182 :デフォルトの名無しさん:04/07/26 12:26
>>181
FindFirstChangeNotification

183 :デフォルトの名無しさん:04/07/26 16:50
>>178
ありがとうございます。自由になりましたら早速試して見ます。
>>179
そのようなことが書いてあったので、とりあえずウインドウプロシージャで
GetKeyboardStateを使ってみると正常に動きました。
なので、別スレッド(メッセージを取得しないスレッド)では動作しないのかなと思ったわけです。

184 :デフォルトの名無しさん:04/07/27 00:14
Windowsプログラムの初心者です。
標準Cとほとんど(全く?)同じ関数とか型とかありますよね?
strcmp()とlstrcmp()やintとINTみたいに。

Windowsの関数や型を使うと何かいいことがあるのでしょうか?
特に違いがないのであれば、慣れている方を使いたいのですが。

後、malloc()とかを使うとまずいんですかね?

185 :デフォルトの名無しさん:04/07/27 00:17
コンパイラやWindowsのバージョンなどに依存しないコードがかけます。

186 :デフォルトの名無しさん:04/07/27 00:33
TCHAR対応のとき、strlenは_tcslenとかになって鬱陶しい。
lstrlenはそのままなので安心、とか。

187 :デフォルトの名無しさん:04/07/27 00:35
lstr〜はstr〜に比べて全然少ないので、一貫性をとるためにはCライブラリで統一せざるを得ないとか。

188 :デフォルトの名無しさん:04/07/27 00:46
>>184程度質問する奴に
コンパイラやWindowsのバージョンなどに依存しないコードがかけてなになる?

189 :デフォルトの名無しさん:04/07/27 01:05
なになる?と訊かれても困っちゃいます。

190 :デフォルトの名無しさん:04/07/27 01:07
なったーなったーなになった
当家の婿どのなになった

191 :デフォルトの名無しさん:04/07/27 03:11
Windows2000でATAPIのDVD-Rにアクセスしたい。
が、DeviceIoControlを発行するところで、アクセスを拒否されてしまう。
http://support.microsoft.com/?kbid=241374
↑によると管理者特権を取れというのだが、どの特権を取ればいいのかわからない。
教えてエロい人。


192 :デフォルトの名無しさん:04/07/27 08:00
>>191
アドミニストレータで実行すればいい。

193 :191:04/07/27 09:07
>>192
すでにAdministratorです。
じゃあほかのエラーでしょうか?


194 :デフォルトの名無しさん:04/07/27 09:23
>>184
INTだけは他との一貫性のためだけにあるみたい。
MSDN読むとわかるけどLONGとSHORTは使うけど、UINTも使うけど、INTはどこにもでてこない。
いつも小文字のint。

195 :デフォルトの名無しさん:04/07/27 09:36
Alt キーが離されたことを通知してもらうためのよい方法はないでしょうか。
例えば

Alt 押す / Alt 離す
と入力された場合は「Alt 離す」のところで WM_SYSKEYUP が送られてくるのですが、

Alt 押す / X 押す / X 離す / Alt 離す
と入力された場合、
「X 離す」のところで WM_SYSKEYUP が送られてきますが、
「Alt 離す」のところでは送られてきません。

後者の方の「Alt 離す」を知るにはどうすればよいでしょうか。

フック (WH_KEYBOARD_LL) を使えばできると思うのですが、9x 系では使えません。
何か他に方法がないでしょうか。
無理ならおとなしくフック使います。

196 :195:04/07/27 09:40
_no

後者の方の入力例ですが、
「Alt 離す」のところで WM_KEYUP が送られてくるので、これで判断できますね。

197 :デフォルトの名無しさん:04/07/27 12:40
>>184
mallocの代わりにAPIのGlobalAlloc系を使えば、キャッシュへの退避をコントロールできる。
別にmalloc使っても問題はないし、ほかの人もいってるけどそのほうが環境に依存しない
ので、用途で使い分けるよろし。

Winと心中する覚悟があるなら可能な限りWin32APIで書くのもありかもね。

198 :デフォルトの名無しさん:04/07/27 12:43
どうせWin32用に書いたアプリを移植するには物凄い苦痛が伴うんだから、別にいいじゃんHeapAllocで

199 :デフォルトの名無しさん:04/07/27 15:04
>>184
ANSI 関数使わないと、その関係のライブラリがリンクされなかった気がする。
wsprintf() は sprintf() より機能が狭いなど制約はある。
細かい話だが、stdio.h を入れると、4098 のバッファが付いて来る。
今は問題にすることはなくなったが、フロッピーに入れたいがため、4K 程度
のサイズでも気にするときは、使わないとかしていたな。
なんせ、cp/m 上がりなもんで。

200 :デフォルトの名無しさん:04/07/27 16:08
パフォーマンスあげようとして malloc の代わりに
GlobalAlloc や HeapAlloc を使うのは本末転倒。
小さいブロックを大量に確保/開放するときは
malloc/free の方が大抵早いよ。

GlobalAlloc や HeapAlloc を使うなら
自前でメモリマネージャを用意して
大きいブロックを確保した中から
小さいブロックを allocate しないと
APIのオーバーヘッドがでかいので性能上がらんよ。
ってかそこまでしたら malloc/free じゃん?(w

とマジレス。

201 :デフォルトの名無しさん:04/07/27 16:34
malloc()/free()だってWindows上では・・・

void* malloc(size_t _size)
{
 return HeapAlloc(hHeap, HEAP_ZERO_MEMORY, _size);
}


ReactOSの例だけどね。

202 :デフォルトの名無しさん:04/07/27 16:36
>>201
VC++.NET2003で、
mallocの中見ても最終的にはHeapAlloc呼んでる

203 :デフォルトの名無しさん:04/07/27 16:40
>>201
バグみっけ。malloc()で確保されたメモリは0クリアされないから、HEAP_ZERO_MEMORYを指定するのはおかしい。
void* malloc(size_t _size)
{
 return HeapAlloc(hHeap, 0, _size);
}
が正しい実装のはず。誰かパッチ投げといて

204 :デフォルトの名無しさん:04/07/27 16:42
HeapAlloc呼んでるのは確かだけどいつもHeapAlloc呼んでる訳じゃなくて、
自前で管理してるメモリブロックの空きが足りない時に呼んでるだけ。

205 :デフォルトの名無しさん:04/07/27 16:43
>>203
別にゼロクリアしてもいいじゃん。

206 :デフォルトの名無しさん:04/07/27 16:46
>>205
K&Rにも、manにもその他の文献(Web上)にも「初期化されていないメモリへのポインタを返す」とある以上、
それに従わない実装はまずいだろう。ゼロフィルを行わない事を前提にシビアなタイミングで動くプログラムが
あるかもしれないし。

207 :デフォルトの名無しさん:04/07/27 16:55
>>206
ゼロクリアすることで動かなくなったら、それは間違いなく呼出し側の
バグだってば…

ちなみに、HeapAlloc() そのものはカーネルモードに入る必要はないの
でさほどオーバヘッドはないと思う。たまに VirtualAlloc() は呼ぶだ
ろうけど。



208 :デフォルトの名無しさん:04/07/27 17:02
>>207
「ゼロで埋める時間ですらもったいない」ということでは?

209 :デフォルトの名無しさん:04/07/27 17:10
>ゼロフィルを行わない事を前提にシビアなタイミングで動くプログラムが あるかもしれないし。
そんなコードは間違いなくWinじゃ動かないだろうな。

210 :デフォルトの名無しさん:04/07/27 17:13
>>206
未定義の場合はそれがどうなっていても構わない。
ランダムなバイト列だろうが、
0でクリアされようがVC++のデバッグモードのように特定のビット列で初期化されようが、
"逝ってよし"でfillされようが問題無い。

同様に未定義の操作をした場合HDDが初期化されようが、PCが火を噴こうが構わない。

211 :デフォルトの名無しさん:04/07/27 17:16
deadbeef!

212 :デフォルトの名無しさん:04/07/27 17:18
>206
それは単に、メモリの内容は保証されない程度の意味だと思うのだが。
あとシビアなタイミングが必要なら、
mallocを使わずに自前でメモリを管理するべきだし。

213 :デフォルトの名無しさん:04/07/27 17:20
つーかmallocはスレ違い

214 :デフォルトの名無しさん:04/07/27 17:23
mallocか、HeapAllocかって話だからあながちスレ違いでもない

215 :デフォルトの名無しさん:04/07/27 17:26
alloca最強

216 :デフォルトの名無しさん:04/07/27 18:00
「初期化されていないメモリへのポインタを返す」という仕様だから
ゼロクリアするのはバグって、
凄いなおい。

217 :デフォルトの名無しさん:04/07/27 18:02
ReactOSの方針からすると、Windowsと違う実装はバグ
問題は、WindowsがmallocからHeapAllocにどんな引数を渡してるか、だな

218 :デフォルトの名無しさん:04/07/27 18:05
それはCRTの仕事でないの?

219 :デフォルトの名無しさん:04/07/27 18:08
WindowsにmallocなんてAPIあるのか?

220 :デフォルトの名無しさん:04/07/27 18:08
ん?MSVCRT内のmalloc実装の話をしてるんでしょ。
MinGWを使った場合も結局それが呼ばれるんだし。

221 :デフォルトの名無しさん:04/07/27 18:17
LARGE_INTEGER同士で四則演算をするAPIってありませんか?

222 :デフォルトの名無しさん:04/07/27 18:33
>>221
テケトーにマクロで書いとけ。

223 :デフォルトの名無しさん:04/07/27 19:47
>>221
__int64 にキャストして普通の演算式を書いて、後はコンパイラに任せる。


224 :デフォルトの名無しさん:04/07/27 19:50
>>221
メンバのQuadPartに対して演算しろ

225 :デフォルトの名無しさん:04/07/27 21:05
mallocつかうとCreateThreadをつかった時にメモリーリーク起こすから使わないほうがいい

226 :デフォルトの名無しさん:04/07/27 21:17
>>__int64 にキャストして普通の演算式を書いて、後はコンパイラに任せる。

VC6.X の頃はこれで盛大にバグった結果が出てたから注意。
.Net 2003 では未確認。
心配なら単なる加減算でも llMulDiv とか使ったほうがいいよ。

227 :デフォルトの名無しさん:04/07/27 21:37
ローカルフック使えばウインドプロシジャー使わなくてもどんなプログラムでもつくれますよね?

228 :184:04/07/27 22:09
みなさん、レスありがとうございます。


>>185
つまり、特に困らないのであればANSI Cで問題ないということでしょうか?

malloc()についてはみなさん使用されているのでしょうか?
オーバーヘッドが少なくてむしろ早いなんて意見もありますが、>>225みたいな
意見もありますし。。

229 :デフォルトの名無しさん:04/07/27 22:23
_beginthread使えばいいじゃn

230 :デフォルトの名無しさん:04/07/28 01:00
>>225
CreateThreadなんか使うなよ

231 :デフォルトの名無しさん:04/07/28 01:14
>>230
なんかまずいの?

232 :200:04/07/28 01:35
>>231
CRTを一つも使わんというなら使ってもいいが
libc*.lib とか msvcrt*.lib とかリンクするなら
CreatThread は使わんのが身のため。

_beginthread 系が面倒見てくれる。
っていうかお前ら VS.NET とかの crt\src 見てないの?

233 :デフォルトの名無しさん:04/07/28 01:57
ここはVS等の特定の開発プラットフォームを対象とした環境依存スレではありません。


234 :デフォルトの名無しさん:04/07/28 02:34
「とか」
どのコンパイラにもたいていランタイムのソースくらいついてるだろ

235 :デフォルトの名無しさん:04/07/28 03:12
BC++にはないけどな

236 :デフォルトの名無しさん:04/07/28 03:14
C++Builderにはついてるよ(Pro以上)

237 :デフォルトの名無しさん:04/07/28 09:18
CreateThread で作成したスレッドの中で処理が完結していて、かつ
そのスレッドで CRT を一切使用していなければ、
_beginthread 系 API を使う必要もないと思うのだけれども、間違っている?

238 :デフォルトの名無しさん:04/07/28 10:03
>>237
そもそもマルチスレッドだよね?

239 :デフォルトの名無しさん:04/07/28 10:30
>>237
そうだけど
静的インスタンスのコンストラクタ・デストラクタなどもCRTがらみなので要注意

240 :デフォルトの名無しさん:04/07/28 10:41
>ランタイムライブラリに記録されている関数を使うスレッドは

記録されているクラスはいいけど関数を使ってはいけないのではないのですか?
ところでNEWはつかってもメモリーリークおきませんか?

241 :デフォルトの名無しさん:04/07/28 11:14
>>239
ローカルインスタンスのコンストラクタ・デストラクタはOK?

242 :デフォルトの名無しさん:04/07/28 13:15
225が言ってるのは、スレッド使うならマルチスレッド用のライブラリを使えということ。
同じスレッドでfree()するか、プロセス終了までfree()しなければ良いという考え方もある。

243 :デフォルトの名無しさん:04/07/28 16:12
夏来ぬと目にはさやかに見えねども厨のレスにぞ驚かれぬる

244 :200:04/07/28 17:17
>>242
っていうか CreateThread 使うと
マルチスレッド用のライブラリの malloc を使おうが使わなおうが
メモリリークのもとなんだがなー。


245 :デフォルトの名無しさん:04/07/28 18:28
原理の分かってない奴はゴタク並べてないで素直に_beginthread使えっての。
議論・討論したきゃ↓へ行け。いくらでも相手してやる。
http://pc5.2ch.net/test/read.cgi/tech/1049790146/

246 :デフォルトの名無しさん:04/07/28 21:07
 ↑
あそこは初心者しか居ないよ。
MFCかSDKかとか、ダイアログベースかクライアント領域に描くかとか、
そういう議論ばっかw

247 :デフォルトの名無しさん:04/07/28 21:52
>244-245
CreateThread()でメモリがリークするとお悩みの皆さんは、
他のリソースもがんがん洩らして、さぞお困りでしょう。

スレッドの状態はメッセージで把握しましょう。
ハンドルはちゃんと閉じましょう。
リンクすべきライブラリはマニュアルで確認しましょう。

248 :デフォルトの名無しさん:04/07/28 22:36
CreateThreadを使おうと考えてる香具師は逆に何で_beginthreadがいやなんだ?
だいたい_beginthreadexならCreateThreadとほぼ同じ動作をしてくれるやん。

249 :デフォルトの名無しさん:04/07/28 22:40
>>246
まるでここなら玄人がいるかのようだな

250 :デフォルトの名無しさん:04/07/28 23:04
>>248
小文字やアンダースコアで始まる関数呼ぶと死んじゃうやつがいるんだよ。

251 :デフォルトの名無しさん:04/07/28 23:07
TLS使われるのが嫌とか?

252 :デフォルトの名無しさん:04/07/28 23:24
errno なんか使わないし、なんとか一つ API だけで許してもらえまいか、
というようなことでは。

253 :デフォルトの名無しさん:04/07/28 23:28
msvcrt.lib や libcmt.lib をリンクせずに
全て自前でやってるなら許す。


254 :デフォルトの名無しさん:04/07/28 23:30
やった。そのときはCreateThread使った。

255 :デフォルトの名無しさん:04/07/28 23:49
作成したワーカスレッドでは CoTaskMemAlloc で頑張るので、許しては貰えまいか。

256 :デフォルトの名無しさん:04/07/29 00:36
ランタイムライブラリ使わないのが俺のポリシー。
システムコール直叩き最高。

257 :デフォルトの名無しさん:04/07/29 00:44
APIをランタイムライブラリだと勘違いしてる馬鹿がいるスレはここですか?

258 :デフォルトの名無しさん:04/07/29 00:44
ランタイムライブラリを呼び出すインターフェイスと考えて差し支えなかろう

259 :デフォルトの名無しさん:04/07/29 00:45
CreateThread()は、マルチスレド用ライブラリとシングルスレド用ライブラリの両方に入ってますか?


260 :デフォルトの名無しさん:04/07/29 00:53
>>259
どちらにも入っていません。

261 :デフォルトの名無しさん:04/07/29 02:29
なんかどうでもいい話になっているな

262 :デフォルトの名無しさん:04/07/29 02:49
あたぼうよ

263 :デフォルトの名無しさん:04/07/29 07:23
CreateDesktopとは何の為にあるんでしょうか?
どのように使うのか教えてください

264 :デフォルトの名無しさん:04/07/29 08:17
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_CreateDesktop.asp
http://www.google.com/search?num=50&lr=lang_ja&q=CreateDesktop

265 :デフォルトの名無しさん:04/07/29 08:37
>>264
両方見ましたが
どういう風に使うのか書いてる物を探すのが困難なので訊きました。
一つの関数内でささっと終わらせるサンプルばかりで
関数をまたがって処理するサンプルがありません。
なので、どういう風な事をどういう風にするかサンプルだけでもください

266 :デフォルトの名無しさん:04/07/29 08:42
おい、お前。死ねよ

267 :デフォルトの名無しさん:04/07/29 10:15
Shell32.dll内の-31751番目の文字列らしき物を取得しようと思い
 hModule = LoadLibrary("C:\\Windows\\system32\\Shell32.dll");
とやり
 LoadString (hModule, -31751, Buffer, 64);
とやったのですが
何も返ってきません

このShell32.dllの-31751番目はどうやって得たかと云うと
レジストリをinfotextと検索して(既定)がマイ コンピュータのinfotextに入ってる数字です。
どうしたらこの文字列らしきものを取得できますか?

268 :デフォルトの名無しさん:04/07/29 11:13
>>267
hModuleはちゃんと有効な値を示しているのか?
っていうかロードタイムリンクしてあるからNULLが帰ってるんじゃないのか?

269 :デフォルトの名無しさん:04/07/29 11:51
>>267
NT系だとdllのパスが違うが大丈夫か?
LoadLibrary, LoadStringの戻り値確認はしたんだろうな?

270 :デフォルトの名無しさん:04/07/29 12:02
>>268-269
LoadLibraryはhModuleに格納してるので
if (NULL == hModule)〜と確認してましたが
LoadStringは確認してませんでした。

今やってみたら、LoadStringの戻り値もNULLでした

271 :デフォルトの名無しさん:04/07/29 12:15
>>270
Shell32.dll 開いてみたけど、そんな ID の文字列無いよ・・・?

272 :デフォルトの名無しさん:04/07/29 12:19
>>271
文字列じゃないみたいですね…
レジストリの名前がinfotextだったから文字列かと思ったんですが違うようですね。
失礼しました

273 :デフォルトの名無しさん:04/07/29 12:22
つうか、
> このShell32.dllの-31751番目はどうやって得たかと云うと
> レジストリをinfotextと検索して(既定)がマイ コンピュータのinfotextに入ってる数字です。
> どうしたらこの文字列らしきものを取得できますか?
ここの意味がまったくわからん。
LoadString以前の問題じゃないのか?


274 :デフォルトの名無しさん:04/07/29 19:03
CreateDialogで4つ目の引数にはダイアログボックスプロシージャへのポインタですよね?
LRESULT CALLBACK DlgProc(HWND , UINT , WPARAM , LPARAM );
こう宣言してるものだと、
CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG1),0,DlgProc);
こういう感じで呼び出せばよいのですよね?

error C2664: 'CreateDialogParamA' : 4 番目の引数を 'long (struct HWND__ *,unsigned int,unsigned int,long)' から
'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換できません。 (新しい機能 ; ヘルプを参照)
スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません。

と、エラーが出てしまいます。どうすればよいのですか?

275 :デフォルトの名無しさん:04/07/29 19:18
ダイアログの場合は
LRESULTでなくてBOOLです。

宣言の部分を
LRESULT CALLBACK DlgProc(HWND , UINT , WPARAM , LPARAM );

BOOL CALLBACK DlgProc(HWND , UINT , WPARAM , LPARAM );
と直してみてください

276 :デフォルトの名無しさん:04/07/29 19:22
自己解決しました

277 :デフォルトの名無しさん:04/07/29 19:33
>>275
だめでした。
というか、サンプル落としてきて、それはコンパイルできるのに、
それ真似て一から作るとエラーがでるんです。
落としてきたサンプルはwin工作部屋のダイアログベースアプリのとこです。

278 :デフォルトの名無しさん:04/07/29 19:37
>>277
プロトタイプの方を実際に関数の方の両方の宣言を変更してみた?

279 :デフォルトの名無しさん:04/07/29 20:30
もしやと思って、拡張子cppだったのをcにしたら動きました。
というか、これじゃ解決になってないですよね…。

280 :デフォルトの名無しさん:04/07/29 20:33
なってる。

281 :デフォルトの名無しさん:04/07/29 20:39
書き込んで気づいたんですが、型変換ですね。
探したら(DLGPROC)というのがありました。

282 :デフォルトの名無しさん:04/07/29 22:28
Windowsの電源を切るにはどうしたらいいですか?
普通にやるとPCの電源まで切れてしまいます。


283 :デフォルトの名無しさん:04/07/29 22:31
ログオフってこと?

284 :デフォルトの名無しさん:04/07/29 22:32
原理の分かってない奴はゴタク並べてないで素直に(DLGPROC)使えっての。
議論・討論したきゃ↓へ行け。いくらでも相手してやる。
http://pc5.2ch.net/test/read.cgi/tech/1049790146/

285 :デフォルトの名無しさん:04/07/29 22:32
まずはWindowsに電源サブシステムを実装しろ

286 :デフォルトの名無しさん:04/07/29 22:48
>>282
Windowsの電源OFF と PCの電源OFF
何がどう違のか、どうしたいのかを述べてくれ。

287 :デフォルトの名無しさん:04/07/29 22:52
>PCの電源を切らずにWindowsの電源を切る
while(true{
 GetDC((HWND)1);
}

288 :デフォルトの名無しさん:04/07/29 23:02
Windows 3.1までのDOSだけ状態へ戻るとかを想像した。

289 :デフォルトの名無しさん:04/07/29 23:17
>>282
SetSystemPowerState

290 :デフォルトの名無しさん:04/07/30 00:21
>>288
解読キボン

291 :デフォルトの名無しさん:04/07/30 00:22
昔はWindowsを終了してDOSに降りるコマンドがあったんだよ

292 :デフォルトの名無しさん:04/07/30 00:43
A:\>win

293 :デフォルトの名無しさん:04/07/30 02:17
ウインドウを作成した後でオーナーを変更する事は出来ますか?

294 :デフォルトの名無しさん:04/07/30 02:47
ふぁっきゅー

295 :デフォルトの名無しさん:04/07/30 02:52
>>293
SetWindowLong(GWL_HWNDPARENT)で一応できることはできるが
MSDNにはするなと書かれているのでどうなっても知らん

296 :デフォルトの名無しさん:04/07/30 02:52
SetConsoleCtrlHandler関数で設定したシグナルハンドラがCTRL_C_EVENTを受信する場合と、
signal関数で設定したシグナルハンドラがSIGINTを受信するのは
同じ意味でしょうか?両方設定した場合はどちらが有効でしょうか?

297 :デフォルトの名無しさん:04/07/30 02:56
>>295
Zオーダーとかがめちゃくちゃになるらしい

298 :デフォルトの名無しさん:04/07/30 07:01
>>295
ぬー,微妙ですね.
変更は初めの一度だけなんで作り直す事にします.

299 :デフォルトの名無しさん:04/07/30 07:47
>>293
SetParent

300 :デフォルトの名無しさん:04/07/30 10:58
画像編集ツールを作っているのですが、
どうもグリッドライン表示するのにてこずってます。(デバイスコンテキストがいまいち理解出来てない)
HDCを二つ取得するんだろうけれど、実際にどういう流れになるかがよく分かりません。
それと、背景となる画像についてはデバイスコンテキストハンドルを開いてる間はずっと開放しないのでしょうか。
概略でもいいので、助言していただけると助かります。。

301 :デフォルトの名無しさん:04/07/30 11:02
勉強しろとしか言いようが無い。

302 :デフォルトの名無しさん:04/07/30 11:38
>>300
301のとおり。「猫でも分かる」サイトでも見て自分でやれ。
それだけでもあんまりなのでひとつだけ言っておくと、DCは画面描画を行うときに一時的に借りてくるものだから
使い終わったらすぐ返すのが基本。


303 :300:04/07/30 12:03
分かりました。。
一応これでも猫でも〜や他のSDK系のサイトを見てやってみたんですが。。
もう何度か読み直してみます。失礼しました。

304 :デフォルトの名無しさん:04/07/30 12:17
>>303
まあがんがれ。ほとんどはDC取得->コンパチDC取得->描画->選択->Bitbltって感じだろ。


305 :デフォルトの名無しさん:04/07/30 12:18
お前は猫未満だ

306 :デフォルトの名無しさん:04/07/30 14:22
PathFindExtensionを使うとリンカエラーになるのですが
なにをリンクすればいいですか?

307 :デフォルトの名無しさん:04/07/30 14:23
お前の脳

308 :デフォルトの名無しさん:04/07/30 14:26
shlwapi.lib

とお前の脳

309 :デフォルトの名無しさん:04/07/30 14:37
お前の悩

310 :デフォルトの名無しさん:04/07/30 15:02
C++でクラスを作りたいんですけど
クラスを作るごとにクラスごとにクラスの中の変数の値を違うものにしたいのです
俺がやりたいのは、クラスのインスタンスを作るときに、引数にキーの引数を入れると、
クラスの中のRegisterHotKeyの第二引数のIDをクラスごとに自動で別々のものに割り振るには
どうやりるのがプロのやりかたですか、教えてください

311 :デフォルトの名無しさん:04/07/30 15:11
>>310
実にプロっぽくないコードだけど、コレで十分な場合っぽいのでこうする。
ついでに map にいれとく。
class hoge {
 static int _CookieBase;
 static std::map<int, hoge*> _Instances;
 int _Cookie;
 hoge() { _Cookie; = _CookieBase;++; _Instances[_Cookie] = this; };
 ~hoge() { _Instances.erase(_Cookie); };
};

32bit 環境だけで動けばいいとするなら、(int) this を ID にしてもいいし。

312 :311:04/07/30 15:12
>>32bit 環境だけで動けばいいとするなら、(int) this を ID にしてもいいし。
あ、RegisterHotKeyの場合使っていい範囲が限定されてるからこれはダメか。

313 :デフォルトの名無しさん:04/07/30 15:14
>>307-309
知らないならレスするなよ厨房はゲームでもしてろ

314 :デフォルトの名無しさん:04/07/30 15:25
>>312
thisをIDにするのはいい考えなのでそうさせてもらいます

315 :デフォルトの名無しさん:04/07/30 15:32
>>313
分からないなら、口出すなよ

316 :デフォルトの名無しさん:04/07/30 15:40
class hoge {
 static int _CookieBase;
 static std::map<int, hoge*> _Instances;
 int _Cookie;
 hoge() { _Cookie; = _CookieBase;++; _Instances[_Cookie] = this; };
 ~hoge() { _Instances.erase(_Cookie); };
};
意味が分からないので僕にもわかるようにコメント付けてください

317 :デフォルトの名無しさん:04/07/30 15:51
当方、WindowsXPです。
外字エディタを使うことなく、外字ファイル(EUDC.TTE)に外字登録
したいのですが、方法がわかりません。

外字データはベクタデータです。
外字データは数が多いので、外字エディタを使っての登録は現実的
ではありません。

なにか、便利なツールとか、プログラミングの方法とか(VC++の開発
環境はあります。)ご存知の方、ご教示ください。




318 :デフォルトの名無しさん:04/07/30 15:58
>>316
C++ スレで聞いてみてはどうでしょう?

319 :デフォルトの名無しさん:04/07/30 16:42
I am Windows XP.


320 :デフォルトの名無しさん:04/07/30 16:44
I have a dream.

321 :デフォルトの名無しさん:04/07/30 16:45
GetWindowTextなどのテキストを格納するバッファを受け取る様な関数に
ATL、WTLのCStringや、std::stringを直接引数として渡すのは無理でしょうか

322 :デフォルトの名無しさん:04/07/30 16:45
>>320はキング牧師

323 :デフォルトの名無しさん:04/07/30 16:58
>>321
CStirngならGetBufferとReleaseBuffer

324 :デフォルトの名無しさん:04/07/30 17:06
>>317
>現実的ではありません。

あなたの技術でツールの製作を行う方が現実的ではありません。

>便利なツールとか

板違いです

325 :321:04/07/30 17:16
>>323
無事にできました、必ずReleaseBufferも必要なんですね
レスありがとうございました

326 :デフォルトの名無しさん:04/07/30 18:35
VB6で作成したアプリのウィンドウが非アクティブ状態になっても、
キー入力を取得したいと思い、キーボードフックを使うべく
C言語でdllを作成しました。

VB側からこのdllを呼んで、他のアプリがアクティブになっても、
dll内でキー入力を捕まえることはできたのですが、
これをdllからVBアプリの方へ通知する方法がわかりません。

SendMessageなんかも、他のアプリのウィンドウがアクティブになった
状態だと通らないようです。

何か方法をご存知の方、お教えください。

327 :デフォルトの名無しさん:04/07/30 21:49
>>299
オーナーと親は違う。SetParentでは親しか変更できない

328 :デフォルトの名無しさん:04/07/30 22:23
>>327
どう違うの?
EnumChildWindowsで列挙できないとか?

329 :デフォルトの名無しさん:04/07/30 22:27
>>326
SendMessage自体は通ると思うけど。
ダメならCOM経由とかコールバック関数は?

330 :デフォルトの名無しさん:04/07/30 22:55
>>326
PostMessage

331 :デフォルトの名無しさん:04/07/30 23:03
自分の作ったメッセージループのウインドーがGetAncestor(hwnd, GA_ROOT)で得られるウインドーですか?
デスクトップウインドーだったらヤバいので教えてください

332 :デフォルトの名無しさん:04/07/30 23:42
>>328
MSDN嫁

333 :デフォルトの名無しさん:04/07/31 01:25
>>332
MSDNのどのカテゴリでしょうか?
あの膨大な量のドキュメントから探し出す事は無理っぽいです

SetParent/SetWindowLong/GetWindow
Window Relationships>Owned Windows

あたりを読んでみましたが、ParentとOwnerの違いはかかれてませんでした

334 :デフォルトの名無しさん:04/07/31 01:42
>>333
あるウィンドウに所有されているが、そのウィンドウの子ウィンドウでないウィンドウのこと。


335 :デフォルトの名無しさん:04/07/31 02:40
>>333
SetWindowPos で HWND_TOPMOST を指定するとよさげな感じ。

Parent は一つ上の親、Owner は一番上の親。
子→親 と 子→親→親→....→親の違いですね。

336 :デフォルトの名無しさん:04/07/31 02:47
違う

337 :デフォルトの名無しさん:04/07/31 04:11
>>333
CreateWindowでhwndParentを指定して、WS_CHILDなら子、ちがうならオウンド

338 :326:04/07/31 08:41
>>329-330
ごめんなさい。
SendMessage通りました。
ウィンドウハンドルの正常な値が渡されていなかったようです。
VBのフォームの表示後、すぐにハンドルを渡していたのを、
DoEventsを実行後に渡すようにするとちゃんと動きました。

339 :デフォルトの名無しさん:04/07/31 12:56
一般的には、child windowはowned windowでもあるからややこしく思われてるのかな。

340 :デフォルトの名無しさん:04/07/31 14:36
>>335
大嘘。

初心者には、書籍「APIで学ぶWindows徹底理解」の、
「ウィンドウについて詳しく学ぼう」の項がお勧め。

341 :デフォルトの名無しさん:04/07/31 17:03
BMPを左右反転して表示する関数ありますか?

342 :デフォルトの名無しさん:04/07/31 17:25
>>341
ある。それが何かは自分で探せボケ

343 :デフォルトの名無しさん:04/07/31 17:31
自力で反転させても大した手間じゃないと思うが

344 :デフォルトの名無しさん:04/07/31 17:44
>>341
あるらしいのでガンバレ

>>342
「ある/ない」を答えるだけのスレではないので
それが理解できるおつむを持ってないならこないでください

345 :デフォルトの名無しさん:04/07/31 18:03
左右反転ってBitBltに負数を与えることか?
実行できないバージョンもあるんでない?

346 :デフォルトの名無しさん:04/07/31 18:10
PlgBltでネーの?

347 :デフォルトの名無しさん:04/07/31 18:14
>>333
Child Windowsの説明も読んで自分でdiffを取れ

348 :デフォルトの名無しさん:04/07/31 18:25
>>344
(1) "「ある/ない」を答えるだけのスレではない" などとはどこにも書かれていない。
 勝手な妄想で断定するな。
(2) 341が求めているのが実際に関数の有無だけかもしれない。
 たとえば、各種ウインドウシステムのビットマップ関数の機能調査をしているかもしれないのだ。
 何を調べたいのかも述べていない以上それに対する最も適切な回答は有無を答えることだけである。
(3) だいたい、341には必要なことが何も書いていない。

以上。

349 :デフォルトの名無しさん:04/07/31 18:28
StretchBlt なら確実。


350 :デフォルトの名無しさん:04/07/31 18:57
WindowsXP付属のサウンドレコーダーの起動中に、それが再生中・録音中のどちらか、
外部のアプリケーションからAPIで調べる方法はないですか?
ボタンのEnable状態を調べようかと思ったのですが、再生も録音もボタンの状態が
同じなので、区別できませんでした。

351 :デフォルトの名無しさん:04/07/31 19:00
そういうことするアプリ、嫌いです。


352 :デフォルトの名無しさん:04/07/31 19:22
>>351
ゴミレス (゚听)イラネ

353 :デフォルトの名無しさん:04/07/31 19:23
>>352
ゴミレスに対するゴミレス (゚听)イラネ


354 :デフォルトの名無しさん:04/07/31 19:30
>>1-1000
ゴミスレ (゚听)イラネ

355 :デフォルトの名無しさん:04/07/31 20:38
URLDownloadToFileでcgiファイルはダウンロードできますか?

356 :デフォルトの名無しさん:04/07/31 20:39
うん

357 :355:04/07/31 20:47
では可能と言う回答の元質問いたしますが、
cgiファイル(URLはhttp://192.168.1.200/cgi-bin/test.cgiと設定)をダウンロードしようとすると戻り値0は返されるのですが、
指定したダウンロード先にファイルがありません。何度実行しても同様の症状が出ます。

ちなみにtest.cgiをブラウザ上で開いた場合はちゃんと表示され、HTMLファイルやZIPファイルのダウンロードには成功します。(ファイルもあります)

URLDownloadToFileは以下のように記述しました。
URLDownloadToFile(0, sUrl, sFileName, 0, 0)

358 :355:04/07/31 21:05
微妙な手段ですが自己解決いたしました。

ありがとうございました。

359 :デフォルトの名無しさん:04/07/31 21:40
>>355
報告だけじゃなくて、その方法も記載しような。

360 :デフォルトの名無しさん:04/07/31 22:01
>>359
教えて君キタワァ━━━━━━(n‘∀‘)η━━━━━━ !!!!!

361 :デフォルトの名無しさん:04/07/31 22:02
夏全開だな

362 :デフォルトの名無しさん:04/07/31 22:02
>>360が?
まったくだ。

363 :デフォルトの名無しさん:04/07/31 22:09
>>361-362

364 :355:04/07/31 23:07
>>359
cgiファイルを格納しているサーバの設定弄ってたらダウンロードできるようになりました。

だから微妙な解決orz

365 :デフォルトの名無しさん:04/07/31 23:35
cgiが一般人に読まれたら困るんでないかい



366 :デフォルトの名無しさん:04/07/31 23:50
>>365
まさかcgiファイルそのものをダウンロードするなんて思ってないよね?

367 :デフォルトの名無しさん:04/08/01 01:43
妙に気になる解決方法だな

368 :デフォルトの名無しさん:04/08/01 02:05
このスレはレベルが高そうなので教えてください。
IEの右クリックのメニューに自アプリを登録して
リンク先のURLを渡したいのですがやりかたがわかりません。
とりあえず、レジストリに登録してIEのメニューに.htmを
追加するところはわかったのですが、その.htmから
exeを呼ぶことができません。IriaなどはActiveXDLLを
作って対応しているようなのですが詳しくはわからず困っています。
もしご存知の方がおられましたら教えてください。
よろしくお願いいたします。

369 :デフォルトの名無しさん:04/08/01 02:27
>>368
WScript.Shell の Run メソッド

370 :デフォルトの名無しさん:04/08/01 02:28
オートメーション。

371 :デフォルトの名無しさん:04/08/01 11:54
>>396
そのメソッドは.vbsだと実行できるのですが
IEのメニューから実行するとHTMLとして実行されるらしく
エラーになってしまいます。


372 :デフォルトの名無しさん:04/08/01 12:03
>>368
.htm から任意の .exe なんか呼び出せたら危険でしょうがいないと思うが。

373 :デフォルトの名無しさん:04/08/01 12:10
>>372
やっぱりそうですよねー。そうだとは思ったんですけど
何かないかなーと。残念です。

374 :デフォルトの名無しさん:04/08/01 12:17
自アプリをActiveX Exe対応にしたらええやん。

375 :デフォルトの名無しさん:04/08/01 12:23
ActiveXの作れる開発ツールを持ってないんです。。・゚・(ノ∀`)・゚・。

376 :デフォルトの名無しさん:04/08/01 12:25
MinGWでも作れるべさ

377 :デフォルトの名無しさん:04/08/01 12:26
てか何で開発してるのさ?

378 :デフォルトの名無しさん:04/08/01 12:26
hsp

379 :デフォルトの名無しさん:04/08/01 12:26
fuck off

380 :デフォルトの名無しさん:04/08/01 12:28
Delスレにいる奴だろう

381 :デフォルトの名無しさん:04/08/01 12:30
Delスレの奴です。

382 :デフォルトの名無しさん:04/08/01 14:03
Delスレの奴でしたか。

383 :デフォルトの名無しさん:04/08/01 14:07
はい

384 :デフォルトの名無しさん:04/08/01 17:53
CreateCompatibleBitmapしたHBITMAPはDeleteObjectしますが、
(HBITMAP)LoadImageしたHBITMAPはDeleteObjectする必要は無いのでしょうか。

385 :デフォルトの名無しさん:04/08/01 18:00
必要だす。古いマニュアルには載ってないんだけど
(おかげでずっと未解放のままだった。ちゃんと書いといてくれよ)
MSDN には DeleteObject しろと書いてある。
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/introductiontoresources/resourcereference/resourcefunctions/loadimage.asp


386 :385:04/08/01 18:04
でもよく読んだら、"不要になったらDeleteObject してもよい"
"プロセス終了時に自動で解放する" か。一応解放はされていたのか。

387 :384:04/08/01 18:10
>>385
(こことか)ttp://www.users.yun.co.jp/~studiowing/win32api/win-04.htm
DeleteObjectを1回はしているけど、
それはSelectObjectで関連付けたものを離す為の物で、
HBITMAPを消す為にもう一度必要なのに、なぜしないのだろうと思っていました。

Win32APIを研究したわけではなく、ネットのいろんな講座を見ただけだったので、
正しいか正しくないかずっと引っかかっていたのですが、
やっとすっきりしました。ありがとうございました。

388 :384:04/08/01 18:13
>>386
リロードしていませんでした。
なるほど、例え消していなくても、危険というわけではないのですね。
でも、HDCと一緒でなんかすっきりしないので
(HDCは遅くなることもあったっけ?)、消していくやり方で行きます。

389 :デフォルトの名無しさん:04/08/01 18:31
Windowsのプロセス間通信てどんなものがありますか?
おしえて!

少量の情報をやりとりするだけで、軽いものがあれば
それがいいのですが。

390 :デフォルトの名無しさん:04/08/01 18:33
>>389
COM最高!

391 :デフォルトの名無しさん:04/08/01 18:37
>>390

COMてなんですか?googleで検索したら・・・・

"COM" は一般すぎる言葉のため、 検索には使用されていません。

(´・ω・`)

392 :デフォルトの名無しさん:04/08/01 18:38
Common Object Modelでぐぐろう

393 :デフォルトの名無しさん:04/08/01 18:42
PlaySound()とmciSendCommand()で同じWAVEファイルを再生しようとしたんですが、
PlaySound()のほうは普通に再生できたんですけどmciSendCommand()だと
パスがみつからないというメッセージがでます。これはファイルがみつからないってこと
ですよね?前者なら再生できるのに。どういう原因が考えられますか?

394 :デフォルトの名無しさん:04/08/01 18:49
>>392
サンクス。Component Object Modelの略だったのは、ギャグだったと
想像します。:−)

395 :デフォルトの名無しさん:04/08/01 18:51
あー、すまん。素で書き間違ったよ

396 :デフォルトの名無しさん:04/08/01 19:55
COM
socket
WM_COPYDATA
FileMappingObject

あたりだな。
軽いならWM_COPYDATAがよさげ

397 :デフォルトの名無しさん:04/08/01 20:02
Pipe,MailSlot,Clipboardもあるでよ

398 :デフォルトの名無しさん:04/08/01 20:12
>387
待ってくれ (;´Д`) DeleteObject って、SelectObject の関連付けを
離す事が出来たっけ?

漏れなんか、むしろ SelectObject で明示的に関連付けを離さないと
DeleteObject してもオブジェクトは解放されないつー話を
ずっと信じてるわけだが

399 :デフォルトの名無しさん:04/08/01 20:15
別に軽く無いよ。
楽なのはWM_COPYDATAだけど、
FileMappingObjectの方が軽い

400 :デフォルトの名無しさん:04/08/01 20:19
TCP/IPでプロセス間通信を実装するよりはCOMコンポーネントにしたほうが良い・・・のかな

401 :デフォルトの名無しさん:04/08/01 20:20
TCP/IPなんて一番重いよ

402 :デフォルトの名無しさん:04/08/01 20:26
CでCOMコンポーネント書いてる人居ますか?

403 :デフォルトの名無しさん:04/08/01 20:29
C++で書いて下さい

404 :デフォルトの名無しさん:04/08/01 20:38
普通はやりませんかね?<Cで

405 :デフォルトの名無しさん:04/08/01 20:52
>>399
軽いなら=軽いオブジェクトなら、だなスマソ
WM_COPYDATAなら、通知も気にせずできてお手軽だから、楽だよと。

406 :デフォルトの名無しさん:04/08/01 21:28
>>398
DCに選択されたHGDIOBJをDeleteObjectしても当然失敗する
Win9xだと悲惨なことになるだろうな

407 :384:04/08/01 22:28
あれ、かなり間違えてますかね。
自分のやり方はこんな感じです。
間違えている所があったら教えてください。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&res=4&fi=no

408 :デフォルトの名無しさん:04/08/01 23:24
普通 src dest
日本原理主義 moto saki


409 :デフォルトの名無しさん:04/08/02 01:12
>>398
私もそう思ってましたが、それであってるんじゃないですか?
SelectObject の戻り値は大切に保存して、描き終わったら必ず
元に戻すようにしてますが。

410 :384:04/08/02 06:05
かなり勘違いして覚えていたようです。
もう一度勉強しなおします。

411 :デフォルトの名無しさん:04/08/02 06:14
資料はまとなものを使ってください

412 :384:04/08/02 09:06
分かりました。

413 :デフォルトの名無しさん:04/08/02 19:23
ファイルのバックアップをするツールを作っていまして
サイズと更新日時を調べて重複コピーを避けようとしています。

CopyFile() でコピーした同じファイルの更新日時が、一秒前後ずれています。
いろいろ試したところどうやらNTFS(Cドライブ)からFAT32(Dドライブ)にコピーしたときにのみ
起こっているような感じですが、仕様上の問題でしょうか?
比較にはGetFileTime()→FileTimeToSystemTime()として各要素を比較しています。

・更新日時が違うので上書きしたときの出力例↓
Directoryコピー C:\Documents and Settings\Administrator\デスクトップ\
       memo.txt
       overwrite src 2004/07/30 09:24:03.010 size 1242436
              dst 2004/07/30 09:24:04.000 size 1242436



414 ::04/08/02 19:25
あげさせていただきます

415 :デフォルトの名無しさん:04/08/02 19:26
FATは偶数秒単位でしか時刻を管理できないから。

416 :デフォルトの名無しさん:04/08/02 19:28
NTFS delays updates to the last access time for a file by up to one hour after the last access.

417 :デフォルトの名無しさん:04/08/02 19:29
>>413
FAT ファイルシステムの更新時刻の分解能は2秒。参照時刻にいたっては1日。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getfiletime.asp
"Remark" のところ参照。

418 :デフォルトの名無しさん:04/08/02 19:31
物尻だな

419 :413:04/08/02 19:41
手持ちのMSDNにはそんなこと書かれてねー。
要するに互換性が無いよってことでいいのですね。
アバウトに比較しておきます。まあ簡易ツールなので。

>>416
英語力ぜろなんですが、NTFSでは更新されてもしばらくは更新日時を更新しない
ということですかね?ツール使用前に再起動必須でいいのかな。

ありがとうございました

420 :デフォルトの名無しさん:04/08/02 19:43
>>419
更新日時じゃない。

421 :デフォルトの名無しさん:04/08/02 19:43
>>413
サイズと更新日時で比較する他に、アーカイブ属性を使うという手段もあるけど、
どうなのだろう…

422 :413:04/08/02 19:45
>>420
あ、ほんとだ。指摘ありがとうございます。

423 :413:04/08/02 19:54
>>421
これは誰でも操作可能なようで少し不安になりますね。
コピーするときに自前のDBを作っちゃうのがもっとも確実でしょうか。
そこまで面倒かけるのもあれですが。

424 :デフォルトの名無しさん:04/08/02 20:01
アーカイブ属性ってのは本来こういう用途に使うもんなんだけどな。
変更があったらアーカイブ属性がついてバックアップ時に消す。

425 :デフォルトの名無しさん:04/08/02 20:05
バックアップ取ったときにMD5かなんかでハッシュ取っとけ

426 :デフォルトの名無しさん:04/08/02 20:11
MD5だと一致しちゃうかもよ

427 :デフォルトの名無しさん:04/08/02 20:37
>>426
なぜですか?

428 :デフォルトの名無しさん:04/08/02 20:41
>413
コピー後にSetFileTime()は?

429 :デフォルトの名無しさん:04/08/02 20:57
>>427
MD5ハッシュは128bitだろ。128bit(0.301x128=38.528桁)ぐらいなら一致しちゃうかもしれないじゃーん。

まあ、これが一致するならGUIDやUUIDも一致する危険性があると言えるけど。

430 :デフォルトの名無しさん:04/08/02 20:59
>>429
アフォですか?

431 :デフォルトの名無しさん:04/08/02 21:04
>>430
そう思った根拠をどうぞ。現実的でない話、というの以外で論理的にお願い。

432 :デフォルトの名無しさん:04/08/02 21:05
いちいち煽りに反応しない

433 :デフォルトの名無しさん:04/08/02 21:08
運のいい人なら一致するよ
おれは運が悪いから一生当たらないだろうけど

434 :デフォルトの名無しさん:04/08/02 21:15
ジャンボ宝くじ1等が当たる確率のほうが高い。

435 :デフォルトの名無しさん:04/08/02 21:33
通りすがりの者す。
まったく根拠がないので大嘘かもしれないが、概略計算してみた。
現在、56BitのDESが何とか解読可能らしいから、1台のPCで解読可能な限界が
64Bit程度とすると、128BitであればPC1台で解読不能な64Bit倍の組み合わせ
が残っている。
これを100億台のPCで分散して計算したとしても
2^64 / 10,000,000,000 = 1,844,674,407.
通りの組み合わせがまだ残ってる。
つまり100億台のPC をフル稼働して128Bitビットの暗号を解読して解析される
確立は 1/1,844,674,407 とかそんなオーダーじゃないのかな?
運のいい人なら一致するレベルではないような気がする。

436 :デフォルトの名無しさん:04/08/02 21:42
MD5が一致する確立と、暗号の解読云々に何の関係があるんでしょうか。

437 :デフォルトの名無しさん:04/08/02 21:44
俺も、MD5とファイルサイズが一致するのに、別ファイルなんて考える事はないと思う。
それに、アバウトなタイムスタンプも組合わせれば、故意にそんなファイルを作成しない
限り問題ないと思うけどなあ

438 :デフォルトの名無しさん:04/08/02 21:45
MD5の一致でファイルの一致としてしまって、
万が一間違って国家機密ファイルを消してしまったらどうするのだろう

439 :デフォルトの名無しさん:04/08/02 21:47
>>438 が国家機密ファイルを扱うような身分になることはない。安心しろ。

440 :デフォルトの名無しさん:04/08/02 21:47
つーかMD5の中にファイルサイズも含まれてるんだら、
MD5とファイルサイズ両方調べても意味無いだろ

441 :デフォルトの名無しさん:04/08/02 21:48
あと、CRC32とかも組合わせれば、まず問題ない。

でも、市販ソフトはそこまでやっていないと思うぞ。


442 :デフォルトの名無しさん:04/08/02 21:51
つーか頭悪すぎる人多いのね。
430の気持ちが少しわかった。

443 :デフォルトの名無しさん:04/08/02 21:51
>>435
どうでもいいけど、その確率は宝くじが2回当たる確率をはるかに上回るから、無いとは言えないんじゃ。

444 :デフォルトの名無しさん:04/08/02 21:55
MD5は特定の条件下で結果が偏るから実際はそんなに確率低くないよ

445 :デフォルトの名無しさん:04/08/02 21:55
もしMD5が核の発射ボタンだとしても使えますか?

446 :デフォルトの名無しさん:04/08/02 21:58
SHA-1にすればだいぶ安全になるよ

447 :デフォルトの名無しさん:04/08/02 21:59
>>443
>無いとは言えないんじゃ

通常のものなら問題ないと思うが、ないとは言えないね。
もちろん
>国家機密ファイル
などという重要なものにはまだ足りないとも思うけど。
少なくとも普通の人が適当に入力し世界で1人ぐらい当たってしまうほど、脆い
符号化でもないということ。

448 :デフォルトの名無しさん:04/08/02 22:01
SHA512くらいでやっと安心かな

449 :デフォルトの名無しさん:04/08/02 22:05
ミラー・ラビン法みたいな感じで、底を変えて複数回評価することでより一意性を高める方法が良いのかもね。

450 :デフォルトの名無しさん:04/08/02 22:17
そこまでするなら、

1.日時が等しい(もしくは極めて近い)
2.サイズが等しい
場合に、
3.バイナリ比較

すればいいだけの話のような気もする。

451 :デフォルトの名無しさん:04/08/02 22:22
>>450
1も2も弱すぎる

452 :デフォルトの名無しさん:04/08/02 22:30
バックアップでしょ?
バックアップされてないファイル名があったらコピー。
もし、そのファイルが既存のもののコピーであったとしても、
それを検出する必要ってあるのか?

453 :デフォルトの名無しさん:04/08/02 22:46
>>452
更新されてたらどうするの?
日付とファイルサイズが変わって無くても中身が更新されてたらどうするの?

454 :デフォルトの名無しさん:04/08/02 23:48
>>452は視点がずれてる。
だれも新しいファイルの話などしてない。

というか、そろそろAPIの話題じゃないね。

455 :デフォルトの名無しさん:04/08/03 03:15
そろそろぬるぽの話ですね。

456 :デフォルトの名無しさん:04/08/03 03:21
そろそろガッの話です

457 :デフォルトの名無しさん:04/08/03 08:06
一致したらコピーしないんだから、そもそも上書きの心配はないだろ?

458 :デフォルトの名無しさん:04/08/03 09:36
       (\        /)
       (\\     //)
       (\\\  ///)
    / ̄ ̄    ∧Ω∧    ̄ ̄\  
   (/// ̄  ( ´∀`) ̄\\\) 
      ( \) ⊂   つ(/  )
       \\) │││ (//
        \) (_)__) (/

459 :デフォルトの名無しさん:04/08/03 22:03
教えて下さい。
IMEで現在変換候補選択中かどうかを知るにはどうしたらいいでしょうか?


460 :デフォルトの名無しさん:04/08/03 23:14
MD5が一致する確率は、HDDが壊れる確率の1/1000000000以下だよ。
もちろん確率だから、最初の1回でヒットする確率もゼロでは無い。
そういう意味では、地球に隕石が衝突して、人類が滅亡する確率のほうが100000倍も大きいのだがな…

なんと!Windowsがハングする確率は10回に1回以上だぞ!?
これは「ほぼ間違いなく」Windowsは異常終了する(何が起きてもおかしくない)ってコトなんだが(w


461 :デフォルトの名無しさん:04/08/03 23:18
100%成功する方法が存在するのに、失敗する可能性がある方法で
やろうとする神経がわからん。

462 :デフォルトの名無しさん:04/08/04 00:23
>>461
100%絶対に成功するが10万年かかる方法と、
10%しか成功しないが0.1秒でできる方法があったとしたら、
藻前は絶対、10万年かけろよ。絶対だぞ。自分から言ったんだからな。
せいぜい長生きしてくれ。

463 :デフォルトの名無しさん:04/08/04 00:34
死んで

464 :デフォルトの名無しさん:04/08/04 01:30
>>462
100%絶対に成功する方法が
10%しか成功しない方法より
時間がかかることを前提にされてもな。

100%絶対に成功するが10万年かかる方法と、
10%しか成功しないが同じく10万年かかる方法とじゃ
100%絶対に成功する方法を選ぶだろ。

特にMD5計算で単純なファイル読み込み以上に時間がかかる場合はなおさら。
ファイルを読み込んでMD5なんて無駄な計算をしてから比較するより、
ファイルを読み込んでそのまま比較した方がいい。

465 :デフォルトの名無しさん:04/08/04 01:30
プゲラ

466 :デフォルトの名無しさん:04/08/04 01:33
ゲラプシュ

467 :デフォルトの名無しさん:04/08/04 01:46
>>459
IME の動作を監視したいなら、対象のウィンドウで WM_IME_NOTIFY を処理する。
開いた時に IMN_OPENCANDIDATE、閉じた時に IMN_CLOSECANDIDATE が送られる。

実行時の瞬間に開いてるかどうかを調べるのは ImmGetCandidateWindow かな?
こっちは試してないのでよくわからん。

468 :デフォルトの名無しさん:04/08/04 02:47
>>464
片方はあらかじめ計算しておけば読み込みにかかる時間は半分になるだろ

469 :デフォルトの名無しさん:04/08/04 03:39
100%絶対に成功する方法が
この世にあることを前提にされてもな。


470 :デフォルトの名無しさん:04/08/04 04:01
チェインハッシュコンテナを作らせたら恐ろしいものがみられそうだな。

471 :デフォルトの名無しさん:04/08/04 08:35
>>460
10回に1回ってなんだ?起動した回数か?

472 :デフォルトの名無しさん:04/08/04 10:55
winnyで逮捕される可能性と同じくらいだろ
逮捕騒ぎでwinnyやめた奴はMD5使えないよな
一致する可能性同じだから不安で

473 :デフォルトの名無しさん:04/08/04 11:02
>>472
Winnyは実際に逮捕されたぞ。
winnyと同じとするならば、現実に起こりうる確率だが。

474 :デフォルトの名無しさん:04/08/04 11:04
スレ違いだったらゴメンナサイ

興味をもったので、仮想CDなどのソフトが実装している、仮想ドライブのアプりを作りたいのですが・・・
どのようなWinAPIを使えばよいのでしょうか?

また、参考になるドキュメントって存在しますか?
ググルときのキーワードの助言でも助かります。

テストとして、特定のディレクトリをドライブにしたり、仮想CDソフトのようにバイナリーファイル(イメージファイル)に複数のファイルをマッピングするようなドライブを作ってみたいと思っています。

よろしくお願いします。


475 :459:04/08/04 11:08
>467
ありがとう、できました!
よく考えたら選択ウィンドウだけじゃなく、単に入力開始/終了したかを
取りたかっただけだったので、WM_IME_STARTCOMPOSITIONと
WM_IME_ENDCOMPOSITIONでハンドリングするようにしたら、完璧でした。


476 :デフォルトの名無しさん:04/08/04 11:18
>>474
まずddkを入手して慣れろ
話はそれからだ

477 :デフォルトの名無しさん:04/08/04 11:20
>>475
ttp://d.hatena.ne.jp/einseul/?of=15
WM_IME_STARTCOMPOSITIONとかアテにするな
だそうな

478 :459:04/08/04 12:36
>477
ひー!でもIME2000以前なんて、手元に無いよぅ。問題が全角スペースだけなら、
まだ影響は少ないんですけどね。2002ならまともに動いてるみたい。

ATOKでも推奨しとこうかな(w

479 :デフォルトの名無しさん:04/08/04 17:48
ディレクトリを扱うDir()関数のようなものはないでしょうか?
:: を打ってみたのですがdir()関数が出てきませんでした
質問が間違っていたらごめんなさい

480 :デフォルトの名無しさん:04/08/04 17:55
FindFirstFileとその仲間

481 :479:04/08/04 17:59
>>480
ありがとうございました!

482 :デフォルトの名無しさん:04/08/04 22:20
int LoadString(
    HINSTANCE hInstance,
    UINT uID,
    LPTSTR lpBuffer,
    int nBufferMax
)
という関数がありますが
第4引数 nBufferMax に渡す数を動的にしたいのです。

そこで、どうすれば文字列テーブルから1文字列のバイト数か文字数を取得できるのでしょうか?
環境は WinXP & VC++ & PlatformSDK です。

SizeofResource()は1セクション(複数の文字列の合計)のサイズを返すので使えないです。


483 :デフォルトの名無しさん:04/08/04 22:34
>>482
atlcore.h の AtlGetStringResourceImage を読んでみると良いよ。

484 :デフォルトの名無しさん:04/08/04 22:46
MFCのCString::LoadStringでも追ってみれば何かわかるんじゃ。

485 :デフォルトの名無しさん:04/08/04 23:19
>>482
今月のCマガにちょうどのってたな。
よく覚えてないけど、_から始まるやつだった。

486 :デフォルトの名無しさん:04/08/05 00:01
リストビューについての質問なんですが、
SuperTagEditorのように、大量のタグ、文字列や数値を扱う場合、

・リストビューに反映させておいて必要な時だけリストビューから直接データを取り出す
・リストビューに反映させているのと同じ内容のデータを常に保持しておき、リストビュー側に変更があったら保持してあるほうにも変更を加える

のどちらが効率としては良いのでしょうか?

487 :デフォルトの名無しさん:04/08/05 00:05
その二択だと前者だけど、構造に自由がきかない。
仮想リストをつかうべし

488 :デフォルトの名無しさん:04/08/05 00:33
>>486
どうしても性能あげたきゃ、出来合いコンポ使わず、自前でやれ。
(データとビューを分離して、ビューはリストビューじゃなく自前って事。)

489 :デフォルトの名無しさん:04/08/05 00:56
>>485
あー俺も見た。あの新連載よさげ。

490 :デフォルトの名無しさん:04/08/05 01:32
>>488
仮想リストビューでいいじゃん

491 :デフォルトの名無しさん:04/08/05 16:01
他スレでも聞いたんだけど返答が無かったので、こちらでも質問させて下さい。

実はC#からWin32をコールしていた時の不思議な現象なんですが、
開発機のXP Homeで、RichTextBox内の文字を選択して書式設定するために
EM_SETSELをSendMessageで文字選択してました。
これは全然問題なかったんですが、別のXP Pro機で動かしたところ、選択文字が
ことごとくずれてました。どうやら選択指定範囲が文字数ではなくバイト単位で
動作しているようで、SendMessageWにするとXP Proでもうまく動きました。

基本的にSendMessageならOSとして対応するのがSendMessageWか
SendMessageAかを勝手にハンドリングしてくれてると理解してますが、違うのでしょうか?
また、なんでXP HomeとProなんかでこんな違いが出てしまうんでしょう??

492 :デフォルトの名無しさん:04/08/05 16:06
マルチポストウゼー

493 :デフォルトの名無しさん:04/08/05 16:09
マルポ

494 :デフォルトの名無しさん:04/08/05 16:21
ま、そう言わずに。
C#スレで聞くよりこっちで聞いてた方が相応しかったと考え直したもので。

495 :デフォルトの名無しさん:04/08/05 16:32
>>491
C (C++) では SendMessage は
#ifdef UNICODE
#define SendMessage SendMessageW
#else
#define SendMessage SendMessageA
#endif // !UNICODE

なるマクロで、コンパイル時に SendMessageA または SendMessageW に変換されてます。
C# で user32.dll からインポートして使うなら、どちらを使うのか自分で指定するべき。

496 :491:04/08/05 17:10
なるほど、C#からだとこのマクロがどう作用するのかは分かりませんが、
要はどちらが使われるか保障がないんですね。
内部的にUNICODEに対応しているかどうか最初にチェックしないといけないわけですか。

ありがとうございました。

497 :デフォルトの名無しさん:04/08/05 17:47
VC++ Win32のTreeViewコントロールでビューのアイテムなどを
ダブルクリックしたかどうかを検出するにはどうしたらいいですか?

いろいろ調べたのですがわかりませんでした。
私の方で思いつく手段は GetClassLongでTreeViewウィンドウの
クラススタイルを取得して
CS_DBLCLKS を ORしてSetClassLongでセットする
ウィンドウをサブクラス化して、置き換えてたプロシージャ内で
WM_LBUTTONDBLCLKなどを検出

以上のような方法ぐらいしか思いつきません。
もっとスマートな方法はない物でしょうか?
WM_NOTIFYなどで受け取る方法でもよいのですが・・
(APIなのだからあるとはおもうのですが・・)


それとトップのテンプレ↓リンクきれてましたけど・・
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/index.html
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm



498 :デフォルトの名無しさん:04/08/05 17:49
NM_DBLCLKだったかな

499 :デフォルトの名無しさん:04/08/05 19:07
サブクラス化

500 :デフォルトの名無しさん:04/08/05 19:34
>>498-499以外には無いと思われ

501 :デフォルトの名無しさん:04/08/05 19:59
>>499-500
ありがとう。
いけそうです。

502 :デフォルトの名無しさん:04/08/05 20:00
>>498抜けてました、ありがとう

503 :デフォルトの名無しさん:04/08/05 21:00
DLLとexeの間で、任意のデータを共有する手法はあるでしょうか。
DLL呼び出しは呼び出し元と呼び出し先でプロセスが違うため、
ポインタの引渡しなどがうまくいきません。
引数、シェアードメモリ、ファイルマッピング…みんなダメっぽいです。

流石に、ポインタ型の変数を持っているクラスを共有する手段が無いというのは考えにくいんだけどなぁ…。

504 :デフォルトの名無しさん:04/08/05 21:03
ファイルマッピングは使えるよ

505 :デフォルトの名無しさん:04/08/05 21:03
>DLL呼び出しは呼び出し元と呼び出し先でプロセスが違うため、
ソンナバカナ

506 :デフォルトの名無しさん:04/08/05 21:03
>>503
?????
何も考えずにできない?

507 :デフォルトの名無しさん:04/08/05 21:11
C++のクラスならexeとdllで共有できない可能性はあるな。コンパイラの問題で。

508 :デフォルトの名無しさん:04/08/05 21:29
>>503
どうせどこか間違えているだけだろ。

Win32APIもただのDLLの関数を呼び出しているだけ。
つまりWin32APIのポインタを引数に取る関数がうまく動くんだから、
自分で作ったDLLの関数も引数でポインタを受け取っても動かないはずがない。

509 :デフォルトの名無しさん:04/08/05 21:45
子ウィンドウをドラッグすると親ウィンドウも一緒にドラッグする
ようにはどうすればいいのでしょうか?


510 :デフォルトの名無しさん:04/08/05 21:55
MoveWindow

511 :238:04/08/06 01:03
>>503のはたぶん、システムフック用のDLLなんじゃないかな。
プロセス空間が違うので、当然ポインタの値も別のものだよ。

OS選ばずに済むなら、共有メモリでも使ってみてはどうかな。

512 :デフォルトの名無しさん:04/08/06 01:03
238はミスです、スマソ

513 :503:04/08/06 13:04
再実験してみました。

DLL側の関数を呼び出す際にポインタを渡しても、
ファイルマッピングを行っても、
値かポインタかに関わらず、データの引継ぎができたようです。
しかし、static変数については値でもポインタでも0クリアされてしまいました。

…えーと、static変数は無理なのかな?
ちなみに、実験環境はXP Home上の.NET2003。

>>DLL呼び出しは呼び出し元と呼び出し先でプロセスが違うため、
>ソンナバカナ
あれ?違いましたっけ。情報元を失念したので探しに行ってきます。

514 :503:04/08/06 13:06
あー、ちょっと誤解を招きそうなので修正。

class CTest
{
public:
int LocalValue;
int *LocalPointer;
static int StaticValue;
static int *StaticPointer;
};

こいつのポインタを渡したり、CreateFileMappingとMapViewOfFileで共有させたりしたってことです。

515 :デフォルトの名無しさん:04/08/06 13:26
>>514
クラスのインスタンスにはstaticは含まれていないから。
#include <iostream>

class A{
public:
int LocalValue;
int *LocalPointer;
static int StaticValue;
static int *StaticPointer;
};
class B{
public:
int LocalValue;
int *LocalPointer;
};

int main() {
std::cout << "sizeof(A)=" << sizeof(A) << std::endl;
std::cout << "sizeof(B)=" << sizeof(B) << std::endl;
return 0;
}


516 :デフォルトの名無しさん:04/08/06 13:35
dll 側で _declspec (dllexport) int CTest::StaticValue とか、
exe 側で_declspec (dllimport) int CTest::StaticValue とか、
これ正確な表記かどうかわかんないけど、こういうことちゃんとやってる?

あと、
>あれ?違いましたっけ。情報元を失念したので探しに行ってきます。
そんなの探してもムダだから、その時間を使って Microsoft が丁寧親切に書いてくれてる
公式ドキュメントをちゃんと読んだ方が良いと思う。

517 :503:04/08/06 13:35
日本語読み違えてた。DLLは同じプロセスだった…

>>515
りかいしますた。

えーと、staticな変数も共有する方法ってあるんでしょうか?
必死にぐーぐる先生と相談中。見つからないなぁ。

518 :デフォルトの名無しさん:04/08/06 14:23
>>517
方法もなにも、ふつうは何も考えずにできるってば。

本体側とDLL側で具体的にどういうコードを書いたのか示さないと、ア
ドバイスはできないと思うぞ。


519 :デフォルトの名無しさん:04/08/06 14:40
例えば mozilla の文字列クラス nsString や nsCString は
 class __declspec(dllexport) nsString : public nsAString {
  . . .
 };
 class __declspec(dllexport) nsCString : public nsACString {
  . . .
 };
みたいに宣言されてる。これで、EXE<->DLL 間でクラスのインスタンスを
やりとりできるみたい。

要するに __declspec(dllexport) で方向性は間違ってないはずだっていう
ヒントだけだ ('A`)ノ 漏れもあんま詳しくないんでね。ゴメソ

520 :デフォルトの名無しさん:04/08/06 14:41
Win32APIの話じゃ無いけどな。

521 :519:04/08/06 14:41
ごめん。無視して。ぜんぜん意味のない話だったね。
暑いから大変だ。

522 :503:04/08/06 14:42
てすと1

dll側
class CTest{public:    int LocalValue;    int *LocalPointer;    static int StaticValue;    static int *StaticPointer; };
int CTest::StaticValue = 0;
int* CTest::StaticPointer = NULL;
#define EXPORT extern "C" __declspec(dllexport)
EXPORT int TestFunction1(class CTest *test){    return 0;    }


exe側
dll側と同じCTestの定義

typedef int (*LPDLLFUNC1)(class CTest*);
int main(){    HINSTANCE hDll;    LPDLLFUNC1 lpDllFunc1;
   hDll = LoadLibrary("dll.dll");
   lpDllFunc1 = (LPDLLFUNC1)GetProcAddress(hDll, "TestFunction1");

   class CTest test;
   test.LocalValue= 100;    test.StaticValue= 200;
   test.LocalPointer= new int;    *(test.LocalPointer)= 1000;
   test.StaticPointer= new int;    *(test.StaticPointer)= 2000;

   int ret = lpDllFunc1(&test);

   delete test.LocalPointer;    delete test.StaticPointer;
   FreeLibrary(hDll);    return 0;
}

dll側でクラスがどうみえるか、ステップ実行で確認。
結果として、LocalValueとLocalPointerはそれぞれ100や1000が見えたが、StaticValueとStaticPointerは0が埋められていた。

523 :デフォルトの名無しさん:04/08/06 14:45
あたりまえだ

524 :503:04/08/06 14:46
てすと2

dll側
EXPORT int TestFunction2(){
 HANDLE hMapFile;  class CTest *test;

 hMapFile = CreateFileMapping((HANDLE)0xFFFFFFFF, 0, PAGE_READWRITE | SEC_COMMIT, 0, sizeof(CTest), "test");
 test = (CTest*)MapViewOfFile(hMapFile, FILE_ALL_ACCESS, 0, 0, 0);
 if(test==NULL)printf("test = NULL\n");

 UnmapViewOfFile(test);  CloseHandle(hMapFile);
return 0;
}


exe側:dllのロード/アンロードなどは省略
 HANDLE hMapFile;  class CTest *test;

 hMapFile = CreateFileMapping((HANDLE)0xFFFFFFFF, 0, PAGE_READWRITE | SEC_COMMIT, 0, sizeof(CTest), "test");
 test = (CTest*)MapViewOfFile(hMapFile, FILE_ALL_ACCESS, 0, 0, 0);
 if(test==NULL)printf("test = NULL\n");

 test->LocalValue= 100;  test->StaticValue= 200;
 test->LocalPointer= new int;  *(test->LocalPointer)= 1000;
 test->StaticPointer= new int;  *(test->StaticPointer)= 2000;

 int ret = lpDllFunc2();

こっちも同じ結果。

525 :503:04/08/06 14:47
と、いうわけで、何が悪いのかさっぱりさっぱり。
色々と根本的な間違いをしている気がするんですが、脳みそパニックなのでアドバイスください…_| ̄|○

526 :デフォルトの名無しさん:04/08/06 14:48
DLLがわとEXE側で両方でマップ作ってない?

527 :503:04/08/06 14:54
>>526
ファイルマッピングオブジェクトの新規作成に成功した場合は、新しいファイルマッピングオブジェクトのハンドルが返ります。指定したファイルマッピングオブジェクトが既に存在していた場合は、既存のファイルマッピングオブジェクトのハンドルが返ります。

なので、問題ないかと。

528 :デフォルトの名無しさん:04/08/06 14:57
だーかーらー、static変数は単にスコープが限定されたグローバル変数なの!
お前の書いたやつじゃexeとdllがそれぞれ自分のやつを自分でいじくってるだけで
相手には何も伝わっていないのー

529 :デフォルトの名無しさん:04/08/06 14:57
マイクロソフトが悪い

530 :デフォルトの名無しさん:04/08/06 14:59
ファイルマッピングは使う必要ない

531 :503:04/08/06 15:00
>>528
>相手には何も伝わっていない
すいませんが、相手に伝える方法について教えていただけませんか。
キーワードだけでも良いので。

532 :デフォルトの名無しさん:04/08/06 15:03
>>522
クラスや変数は__declspec(dllexport)書かないとDLLからインポートされないよ。

533 :528:04/08/06 15:09
>>531
>>516は?

534 :デフォルトの名無しさん:04/08/06 15:13
ぶっちゃけ、DLLとの通信に(具体)クラスを使うな!と言いたい。

535 :503:04/08/06 15:17
メンバ変数に__declspec (dllimport) つけると怒られてしまいます。
dllexportなら怒られないけど…どっかに実例落ちてませんか(ぉ

536 :デフォルトの名無しさん:04/08/06 15:35
いいかげん氏ねよ、能無し。

537 :デフォルトの名無しさん:04/08/06 15:36
>>535
メンバ変数じゃなくて>>519みたいにclass __declspec(dllimport) CTestってクラスに書くんだよ。

538 :デフォルトの名無しさん:04/08/06 15:42
>>535
(VC++ 使ってる仮定して)Visial Studio のドキュメントはインストールしてないの?

こうやるんだよ。

test.h
EXPORT class CTest{
 public:
   int LocalValue;
   int *LocalPointer;
   static int StaticValue;
   static int *StaticPointer;
};

dll.cpp:
#define EXPORT __declspec(dllexport)
#include "test.h"
EXPORT int CTest::StaticValue; //ココ EXPORT いるのかいらんのか知らんけど。
EXPORT int *CTest::StaticPointer; //ココ EXPORT いるのかいらんのか知らんけど。
extern "C" EXPORT int TestFunc() {...};
...

exe.cpp
#define EXPORT __declspec(dllimport)
#inlcude "test.h"
...


539 :デフォルトの名無しさん:04/08/06 15:47
DLL側の変数の名前をEXE側はどうやってわかるんですか?

540 :デフォルトの名無しさん:04/08/06 15:53
>>539
DLLにはシンボル名が埋め込まれています。

541 :503:04/08/06 15:53
一応、ちゃんとMSDNみながらやっているんですが…

class __declspec(dllexport) CTest{...};
はともかく、
class __declspec(dllimport) CTest{...};
の方は、static変数の宣言でこけてしまいます。
スタティックデータメンバの定義は許されないとか言われます。

#exe側にインスタンスがあるのに、exe側でクラス定義にimportって書くのは違和感があるなぁ。

542 :デフォルトの名無しさん:04/08/06 15:53
>>539
超能力で。

Win32 とどう関係があるのか正直漏れにはわからん。
なんだかこのスレが悲惨なことになりそうだからスルーしまつ。

543 :デフォルトの名無しさん:04/08/06 16:09
そもそも何でAPI形式でやる必要があるのか不明。
COM DLLではダメなのだろうか?

544 :デフォルトの名無しさん:04/08/06 16:23
API形式ってオレ用語?

545 :デフォルトの名無しさん:04/08/06 16:29
COMはレジストリー使うだろ?

546 :デフォルトの名無しさん:04/08/06 16:52
>>545
直接ハンドルすればレジストリ使わないよ。

547 :デフォルトの名無しさん:04/08/06 19:31
SHCreateStreamOnFileについてなんですけど
このAPIで取得したIStreamインターフェースのCloneを呼ぶとE_NOTIMPLが返ってきます。
自分で実装するしかないのでしょうか?
VC6.0SP6 Win2k
shlwapi.dll Ver 6.0.2800.1552


548 :デフォルトの名無しさん:04/08/06 19:32
そうですよ

549 :547:04/08/06 20:07
面倒くさいですね。
MSはなんで実装しなかったんでしょうね。

550 :デフォルトの名無しさん:04/08/06 20:07
MSの中の人も面倒くさかったんだろう

551 :デフォルトの名無しさん:04/08/06 20:21
ほとんどなんも実装されずに終わったDirectDrawよりマシ

552 :デフォルトの名無しさん:04/08/06 20:45
>>546
具体的に。

553 :デフォルトの名無しさん:04/08/06 20:54
IHogeInterface *CreateHogeInterface();
をExportするんだろ。

554 :デフォルトの名無しさん:04/08/06 20:57
普通はDllGetClassObjectじゃないの?

555 :デフォルトの名無しさん:04/08/07 01:53
こんばんわ、Win32のコモンコントロール(TreeView)で
キーボード入力を検出したいのですがうまくいきません。
お知恵をお貸しください。

TreeViewでアイテムにフォーカスがある状態で
Deleteキーを押すと、オーナーウィンドウの
WM_NOTIFYにNM_KEYDOWNが通知されるようにしたいのですが
意図したように動作しませんでした。

改行多いって出るので分割しますね

556 :デフォルトの名無しさん:04/08/07 01:54
プログラム部分は

case WM_NOTIFY:
{
NMKEY *pKeyInfo = (NMKEY *) lParam;

if ( (treeview_id == wParam) && (pKeyInfo->hdr.hwndFrom == treeview_handle) ) {
if ( pKeyInfo->hdr.code == NM_KEYDOWN ) {
if ( pKeyInfo->nVKey == VK_DELETE ) {
TreeView_DeleteItem(treeview_handle, item_handle);
}
}
}
}
break;

という感じです。

TreeView内でdeleteキーを押すと無反応です。
pKeyInfo->hdr.code で NM_KEYDOWN すら通知されません。
NM_KEYDOWNが通知されるのはマウス操作(VK_LBUTTON, VK_RBUTTON)のみでした。
どうすれば他のキーも通知されるようになるのでしょうか?

別件ですが
オーナーウィンドウが、子ウィンドウが終了したことを検知するためにはどうしたらよいでしょうか?
子ウィンドウ終了>オーナーウィンドウになんらかのウィンドウメッセージ通知
を想定しているのですが、これは可能でしょうか?


557 :デフォルトの名無しさん:04/08/07 01:54
あれ?なんかスペースがなくなっちゃいましたね・・・

558 :デフォルトの名無しさん:04/08/07 02:02
>>557
&nbsp;
つけろ

559 :デフォルトの名無しさん:04/08/07 02:04
>>556
どうしてもだめならキーフック使え

560 :デフォルトの名無しさん:04/08/07 04:11
>>555
TreeView の編集部分は TreeView 自身とは別のウィンドウです。
従って、編集中のキー押下は TreeView 自身では取れません。
(WM_COMMAND の EN_CHANGE なら取れるかも)
このウィンドウは最初からあるわけでなく、編集を行うと作成されます。
TreeView_GetEditControl で編集部分のハンドルが取得できますので、
Window Procedure を差し替えてサブクラス化すれば、その中で
WM_KEYDOWN など何でも取れます。
トラブルを避けるため編集が終わったら元に戻すことをおすすめします。

オーナーが親であれば、WM_PARENTNOTIFY で WM_DESTROY が送られます。
ただし、その子の ExStyle に WS_EX_NOPARENTNOTIFY が入っていると
送られてきません。

561 :560:04/08/07 06:10
>>555
すみません。後で見てみたら質問を読み違えてたみたいです。
編集中じゃなくて、普通の状態でのキー押下ですよね。
それなら親ウィンドウに送られる WM_NOTIFY の TVN_KEYDOWN に
応答するだけで OK です。

>>560 は全然違うことを書いてるので無視してください。

562 :503:04/08/07 11:17
いまだにわかっていない503です。

とりあえず>>538のようにやってみたんですが、
exe側でクラス内のstatic変数まわりでこけてしまいます。
クラス宣言の外でstatic変数を宣言しないと外部参照が未解決って言われるし、
宣言するとdllリンクが一貫していないとか、dllimportスタティックメンバの定義は許されないとか言われます。
>>516のような宣言をしても一緒でした。
どうすれば解決できるのでしょうか?

MSDNライブラリ見ても、classのstatic変数を共有する方法なんてみつからないよう。

563 :デフォルトの名無しさん:04/08/07 11:27
もうstatic変数にこだわるな

564 :デフォルトの名無しさん:04/08/07 12:10
503は、staticの意味を知らない香具師。
それに対して、答えてるのはDLLでstaticを
使った事無い香具師。

…これじゃ、いつまで経っても解決しない。

565 :デフォルトの名無しさん:04/08/07 12:23
だから、COM流にインターフェースだけ公開しろよ。

566 :503:04/08/07 12:37
うーん、私は確かにstaticの意味がわかっていないかもしれません。
ただ単に、クラス変数が作れるってだけで使っていますから。
今回のケースで必要なstaticに関する理解は、どこで得られるでしょうか。
良い教材(?)があれば教えていただけませんか。

それとは別に、DLLでstatic変数を使ったことのある/使っている方はいませんか。
簡単なサンプルとかを見せていただけると、大変ありがたいのですが。

567 :デフォルトの名無しさん:04/08/07 12:56
1って表示されたぞ
-----------------exe--------------------
#include <stdio.h>
class CTest{
__declspec(dllimport) static int sta;
};
int main() {
printf("%d\n", CTest::sta);
return 0;
}
-----------------dll--------------------
#include <windows.h>
class CTest{
__declspec(dllexport) static int sta;
};
__declspec(dllexport) int CTest::sta;
BOOL WINAPI DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
switch(dwReason) {
case DLL_PROCESS_ATTACH:
CTest::sta = 1;
break;
case DLL_PROCESS_DETACH:
break;
default:
break;
}
return TRUE;
}


568 :デフォルトの名無しさん:04/08/07 13:01
メンバ変数パブリックにするなんて汚ねえコードだな

569 :567:04/08/07 13:04
publicを消しちまった

570 :デフォルトの名無しさん:04/08/07 13:11
>>566
基本的にstaticはモジュールごとのローカル変数と考えるべきで、
モジュールをまたいで使うことは少なくとも俺はない。


571 :567:04/08/07 13:17
dll5行目は
int CTest::sta;
だけでよかった

572 :デフォルトの名無しさん:04/08/07 13:18
>>570
あなた違うものについて言ってるよね?

573 :デフォルトの名無しさん:04/08/07 13:19
そんなことはないか

574 :503:04/08/07 13:38
>>567
exeの方が、

exe error LNK2001: 外部シンボル ""__declspec(dllimport) public: static int CTest::sta" (__imp_?sta@CTest@@2HA)" は未解決です。

って出てビルドできないんですが…。
ちなみに、テスト環境は.NET2003。

575 :デフォルトの名無しさん:04/08/07 13:41
「リンクの冒険」オチでしたか…

576 :デフォルトの名無しさん:04/08/07 13:56
dll.libをexeにリンクしているよなぁ〜?

577 :デフォルトの名無しさん:04/08/07 13:59
そういうオチですか。

578 :503:04/08/07 14:15
アプリケーションの設計上、明示的リンクでいきたいんですが…。

579 :デフォルトの名無しさん:04/08/07 14:28
CWebBrowserクラスのNavigateで、自前のウィンドウに埋め込みウェブを表示させているのですが
そこのユーザーエージェントを制御したいのですがどうすればよいでしょうか?

Navigateに与える引数を工夫すれば実現できそうなのですが・・・
どなたか教えてください


580 :デフォルトの名無しさん:04/08/07 14:33
>>578
loadlibrary 使え

581 :デフォルトの名無しさん:04/08/07 14:36
>>578
ttp://black.sakura.ne.jp/~third/system/winapi/win149.html


582 :デフォルトの名無しさん:04/08/07 14:37
http://www.microsoft.com/ntserver/nts/downloads/management/uptime/default.asp

583 :デフォルトの名無しさん:04/08/07 14:38
>>579
その質問最近どっかのスレで見たぞ


584 :デフォルトの名無しさん:04/08/07 14:58
>>578
クラス・変数は__declspec(dllimport)とLIBでリンクする以外無理、ってMSDNのどっかに書いてあったような……。

585 :デフォルトの名無しさん:04/08/07 15:00
>>578
こんなとんまなクラスではダイナミックロードなど無理だボケ

586 :デフォルトの名無しさん:04/08/07 16:39
32ビットウインドーズコンソールアプリで画面に点を打ったりするみたいな
WIN32APIのHDCと同じようなことをやるにはどうやればいいですか?

587 :デフォルトの名無しさん:04/08/07 16:49
 

588 :デフォルトの名無しさん:04/08/07 20:07
 

589 :デフォルトの名無しさん:04/08/07 20:37
>>586
コンソールアプリでも hWnd や hDC は取得可能だが?


590 :デフォルトの名無しさん:04/08/07 20:38
そろそろ、>503 はスルーの方向でいいんじゃないか。
せっかく、レスしていても無意味だろ。

591 :デフォルトの名無しさん:04/08/07 20:38
>>589
素直に知らないと言えよw
あるいは書き込むな

592 :デフォルトの名無しさん:04/08/07 20:54
夏だね

593 :589:04/08/07 21:01
>>591
これで出来たが?

#include<windows.h>

#include<stdio.h>

intmain(void)
{
HWNDhWnd = (HWND)0x00000000L; // 君が書き込みたいウィンドウ(クライアント領域)のハンドル
HDChDC = GetDC(hWnd);
RECTr = {0, 0, 100, 100};
HBRUSHhbr = (HBRUSH)GetStockObject(WHITE_BRUSH);

FillRect(hDC, &r, hbr);
InvalidateRect(hWnd, NULL, TRUE);

ReleaseDC(hWnd, hDC);

return0;
}


594 :デフォルトの名無しさん:04/08/07 21:03
>>586
int10hのこと言ってるのかな?

595 :デフォルトの名無しさん:04/08/07 21:05
>>593
だから書き込むなって

596 :589:04/08/07 21:06
夏だから・・・
スマソ orz


597 :デフォルトの名無しさん:04/08/07 21:14
>>586
ウィンドウハンドルが欲しいという意味なら、
GetConsoleWindow() で取得できるので、あとはご自由に。
文字をつかって画面に点を打つという意味なら、
SetConsoleCursorPosition() かな。

598 :デフォルトの名無しさん:04/08/07 21:14
>>593
あのままじゃ動かないな


599 :デフォルトの名無しさん:04/08/07 21:56
>>590
素直に、自分にはわからないって言えよ

漏れはわかりませんが何か…orz

600 :586:04/08/07 23:15
そうじゃなくてドスプロンプトの画面のウインドーに
点を打ちたいのです
点は色の付いた点です

601 :デフォルトの名無しさん:04/08/07 23:25
> ウィンドウハンドルが欲しいという意味なら、
> GetConsoleWindow() で取得できるので、あとはご自由に。
で理解できないのか?

602 :586:04/08/07 23:29
HDCでやったら普通のウインドーに点を打つのと変わらないのでウインドープロシジャーを
使わないようなやり方をしたいです

603 :デフォルトの名無しさん:04/08/07 23:36
>>586
これで理解できないのなら、基礎からやりなおせ。

HWND hwndConsole = GetConsoleWindow();
HDC hDC = GetDC(hwndConsole);
RECT rc; GetClientRect(hwndConsole, &rc)
OnDraw(hDC, rc);
ReleaseDC(hwndConsole, hDC);

604 :586:04/08/07 23:38
ドスプロンプトに一番高速に書き込む方法はHDCしかないのならそれで諦めますが
他に方法があったら教えてください

605 :デフォルトの名無しさん:04/08/07 23:39
HDCと同じ事をやりたいというから
HDCそのものを与えてやると
今度は、HDCじゃダメという

どうしろと。

606 :デフォルトの名無しさん:04/08/07 23:40
キチガイとアホは相手にしないのが一番。

607 :デフォルトの名無しさん:04/08/07 23:40
>>604
ウインドウを好きなところに移動した後、画面に油性マジックで描画。
ウインドウを移動させると、内容がずれるから注意。

608 :デフォルトの名無しさん:04/08/07 23:46
GetConsoleWindow() で取得したウィンドウに対して、
Direct3D, DirectDraw, OpenGL などで描画すると高速だよ。

(呆れるのを通り越して、逆に楽しくなってきた)

609 :デフォルトの名無しさん:04/08/07 23:49
いったん他のウインドウの裏に回ってしまうと描画が
元に戻ってしまうんですが

610 :586:04/08/07 23:51
DirectXを使うとドスプロンプトでやる理由が全画面表示したいだけなので
意味ないですよね
直接打つ方法ありませんか?

611 :デフォルトの名無しさん:04/08/07 23:51
SetRegion() と SetLayeredEX() あたりを組み合わせると良いかも。

612 :デフォルトの名無しさん:04/08/07 23:52
>>619
DirectX ってそのためにあるんじゃないの?

613 :デフォルトの名無しさん:04/08/07 23:52
>>610
直接ってなんだよ

614 :デフォルトの名無しさん:04/08/07 23:53
>>610 です orz

615 :デフォルトの名無しさん:04/08/07 23:54
割り込まれた orz

616 :デフォルトの名無しさん:04/08/07 23:54
>>610
そうなると、もうWin32の範囲では できない。
16bit DOS で使われたような方法をとらないとダメ。

617 :デフォルトの名無しさん:04/08/07 23:56
全画面表示ふつうのウィンドウでもできるじゃん

618 :デフォルトの名無しさん:04/08/07 23:57
>>614-615
なんか悪い事をしている気分になってきた

619 :586:04/08/08 00:00
メッセージループがあるので普通のウインドーは出来ても使いたくないです
いまから自分で考える事にします
ありがとうございました

620 :586:04/08/08 00:01
>>617
もしよろしければそのやり方教えてください

621 :デフォルトの名無しさん:04/08/08 00:05
妙な質問するやつ→「ウインドー」


622 :デフォルトの名無しさん:04/08/08 00:05
CreateWindowで然るべきサイズとスタイルを指定する

623 :デフォルトの名無しさん:04/08/08 00:06
> いまから自分で考える事にします
> いまから自分で考える事にします
> いまから自分で考える事にします
> いまから自分で考える事にします
> いまから自分で考える事にします

624 :デフォルトの名無しさん:04/08/08 00:06
>>619
GDIとメッセージループとウインドウにどんな関係があるんだよ

>>620
ChangeDisplaySetting
IDirectDraw*::SetDisplayMode

625 :デフォルトの名無しさん:04/08/08 00:07
画面のサイズいっぱいで
キャプションもウインドウ枠も無いウインドウを作る

626 :586:04/08/08 00:07
>>622
解像度変えられますか?

>>624
それdirectX使ってませんか?

627 :デフォルトの名無しさん:04/08/08 00:08
>>610
直接打つ方法は>>607に書いてある。

628 :デフォルトの名無しさん:04/08/08 00:09
DirectX使わずに解像度変更するとウィンドウサイズが無茶苦茶になる。やるな。

629 :デフォルトの名無しさん:04/08/08 00:09
解像度の変更の仕方くらい、見つけることが出来ないのかよ

630 :586:04/08/08 00:10
もういいです、さようなら

631 :デフォルトの名無しさん:04/08/08 00:11
こんな程度のことが、自分の力で見つけられないようでは
見込み無いな


632 :デフォルトの名無しさん:04/08/08 00:11
では次の議題に移ろうか。

633 :デフォルトの名無しさん:04/08/08 00:12
ドスプロンプトに点を打つ方法を教えてください。
方法は、自分ではまだ考えてません。

634 :デフォルトの名無しさん:04/08/08 00:12
Eclipseスレが激しく荒れてる件について私見を述べよ

635 :デフォルトの名無しさん:04/08/08 00:16
夏だから

636 :デフォルトの名無しさん:04/08/08 00:18
なんだか荒れ気味だな
とりあえず579の質問に答えてやったらどうよ?
消化していこうぜ!


637 :デフォルトの名無しさん:04/08/08 00:18
それは逃げだ

638 :デフォルトの名無しさん:04/08/08 00:29
>>586はメッセージループが理解できないってことなの?

639 :デフォルトの名無しさん:04/08/08 00:33
コンソールアプリでもウィンドウ作ってメッセージループつくれば普通に使えるんだけどな。

640 :デフォルトの名無しさん:04/08/08 00:41
>>639
そんなことはみんな知っている

641 :デフォルトの名無しさん:04/08/08 00:44
>>636
おまえ本人だろ。そしてMFCスレでも同じこと言ってるだろ。

642 :デフォルトの名無しさん:04/08/08 00:47
無名のファイルって作る事できないんですか?
いちいちテンポラリファイルの名前を生成するのが
なんかスマートで無い気がするのですが。

643 :デフォルトの名無しさん:04/08/08 00:48
ファイルじゃなくてデータベースに格納すればいいんじゃなかろうか

644 :586[:04/08/08 01:26
メッセージループはクラス化できないので使いたくないのです

645 :デフォルトの名無しさん:04/08/08 01:27
>>644
出来るだろ?

646 :デフォルトの名無しさん:04/08/08 01:37
ドアホが入れ代わり立ち代わり沸いて出るスレはここです。

647 :586:04/08/08 01:58
スレッド一つに一つのクラスを持たせたいので
メッセージループを作るとクラスがいっぱい作らないといけなくなるからです

648 :デフォルトの名無しさん:04/08/08 02:14
スレッドひとつにひとつのクラスなら、
コンソールウインドウをホストにする限り
クラスひとつでいいはずなんだけど。

649 :デフォルトの名無しさん:04/08/08 02:28
間違いなく根本の設計から大勘違いして馬鹿なことやってるな。

650 :デフォルトの名無しさん:04/08/08 05:12
釣りでなければ、そうだね。

651 :デフォルトの名無しさん:04/08/08 06:58
プロセスが死んでいるタスクバーの右がわのアイコンを
消す方法はないでしょうか?

マウスを重ねると消えるのですが、どうプログラムして
いいのかわかりません。

652 :デフォルトの名無しさん:04/08/08 07:31
タスクトレイのハンドルを指定してInvalidateRectとか

653 :デフォルトの名無しさん:04/08/08 07:32
>651
マウスを重ねる。

654 :デフォルトの名無しさん:04/08/08 07:57
タスクトレイのハンドルってどうやって取得出来ますか?

655 :デフォルトの名無しさん:04/08/08 08:07
>>642
GetTempFileNameで我慢しろ。

656 :Win32SDK勉強中 ◆Win32BkCJ. :04/08/08 08:23
>>654
HWND hwndTaskBar = ::FindWindow("Shell_TrayWnd", NULL);
HWND hwndTray = ::FindWindowEx(hwndTaskBar, NULL, "TrayNotifyWnd", NULL);
これでhwndTrayにタスクトレイのウィンドウハンドルが取れる。

657 :デフォルトの名無しさん:04/08/08 08:52
>>656
ありがとう
そのウィンドウ名の定数でOSのバージョン制約とか受けませんか?

658 :デフォルトの名無しさん:04/08/08 09:08
まさか消したいアイコンって自分の登録したアイコンじゃないよね

659 :Win32SDK勉強中 ◆Win32BkCJ. :04/08/08 09:12
>>657
参考URL:
ttp://www.geocities.jp/g_e_k_o_g_e_k_o/column/column.html

660 :デフォルトの名無しさん:04/08/08 09:42
>>659
おかげさまで参考になりました。ついでにもうひとつ貼っておきます。
ttp://homepage1.nifty.com/kazubon/progdoc/tclock/taskbarhistory.html


661 :デフォルトの名無しさん:04/08/08 10:01
ドスプロンプトに点を打ちたいのですが
MDMAは新宿のどこで買えますか?

662 :デフォルトの名無しさん:04/08/08 10:27
>>661
OADG と VRAM でぐぐれ

663 :デフォルトの名無しさん:04/08/08 14:06
すみません質問したいんですが、CPUの稼働率?ってどうやって得ればいいんですか?
Win98だとレジストリから得られるみたいなんですがXPだとどうやればいいんでしょうか?
VisualC++歴半年のヘタレなんですが出来ますかね?

664 :デフォルトの名無しさん:04/08/08 14:21
シェル(エクスプローラ)での「コピー」や「貼り付け」をAPIを使って実行しようとすると、
どのあたりの関数を使えばよいのでしょうか。

665 :デフォルトの名無しさん:04/08/08 14:44
>>663
PdhOpenQuery
PdhMakeCounterPath
PdhAddCounter
PdhCollectQueryData
PdhCloseQuery

666 :デフォルトの名無しさん:04/08/08 15:14
>>665
なんだか色々使いますね。。。
とりあえず教えてもらった関数名を頼りにググってみます。

667 :デフォルトの名無しさん:04/08/08 16:11
プログラムを日本語版のwindowsでのみ動かしたいのですが
日本語版とそれ以外を判別する方法をご教授下さい。

668 :デフォルトの名無しさん:04/08/08 16:57
デバイスコンテキストの座標はX軸とY軸はどこから始まりますか?

669 :デフォルトの名無しさん:04/08/08 17:46
原点から。

670 :デフォルトの名無しさん:04/08/08 18:06
リストビューのアブアイテムにテキストを設定する際に

LV_ITEM lvitem;
lvitem.mask = LVIF_TEXT | LVIF_PARAM;

というように LVIF_PARAM が設定されていると、
テキストが設定されないのは仕様ですか?

671 :671:04/08/08 18:07
アブアイテムて。サブアイテムの間違いです。

672 :デフォルトの名無しさん:04/08/08 19:00
設定されると思うが?

673 :670:04/08/08 19:08
>>672
おやそうですか…。うむむ、なぜだらう。
表示されないんですよね。LVIF_PARAM を外すと表示されます。
どこかでおかしいことやってるのかな。

674 :デフォルトの名無しさん:04/08/08 19:17
メニューとかステータスバーのGUIの部品が占有する領域は
ウィンドウのクライアント領域から除外されるじゃないですか、
それってどんな機構で実現してるんでしょう?
クライアント領域から alloc するというか、なんかそんな隠しメッセージでも
やり取りしてるんでしょうかね…。

675 :デフォルトの名無しさん:04/08/08 19:26
>>674
そんなことはない。

676 :デフォルトの名無しさん:04/08/08 19:29
>>674
子ウィンドウを上から重ねて描画しているんじゃないですかね。
メニューの場合も高さに合わせてクライアント領域を
ScrollWindow()か何かでずらしてるだけのような気がする。
でもそれだけだとチラつくはずなんで、どこかで
クリッピング領域を管理してるんでしょう。

677 :676:04/08/08 19:34
ScrollWindowは無いな。単に再描画されるだけか。

678 :デフォルトの名無しさん:04/08/08 21:23
>>674
WM_NCCALCSIZE

679 :デフォルトの名無しさん:04/08/09 05:11
VCで、フォルダーの一括削除を行いたいのですが、
ファイルやサブフォルダがあるので、
RemoveDirectory()だと、うまくいかないみたいです。

VBだとDeleteFolder()が使えるようですが、
これをCから使うにはどうしたらいいのでしょうか?





680 :デフォルトの名無しさん:04/08/09 05:45
SHFileOperationかな

681 :デフォルトの名無しさん:04/08/09 05:45
>>679
SHFileOperation

682 :679:04/08/09 08:18
>>680 >>681 thanks

main()
{
SHFILEOPSTRUCTpFileOp;
intrc;

memset( &pFileOp, '\0', sizeof( pFileOp));

pFileOp.wFunc = 3;/* 削除 */
pFileOp.pFrom = "d:\\test\test\*.*";
rc = SHFileOperationA( &pFileOp );
printf( "rc = %d\n", rc );

}

一応 rc = 0 で返ってくるけど、何故か消えていない・・・

683 :デフォルトの名無しさん:04/08/09 08:37
pFromはdouble null-terminatedじゃないとダメだぞ。
pFileOp.pFrom = "d:\\test\\test\\*.*\0";

684 :デフォルトの名無しさん:04/08/09 08:43
>>682
>pFileOp.pFrom = "d:\\test\test\*.*";

それ以前にC言語がダメダメ。

685 :682:04/08/09 08:46
>>683
すんまへんでつた。お蔭様で出来ました。
ありがとうございました。

686 :デフォルトの名無しさん:04/08/09 08:50
"d:\\test\\test\\*.*"

687 :デフォルトの名無しさん:04/08/09 08:53
0x5C

688 :デフォルトの名無しさん:04/08/09 11:52
ビットマップの24bpp->16bpp変換コードを書いてます。んでCreateDIBSectionで
わからん部分があるんで教えて下さい。

内部でCreateDIBSectionで16bppのBITMAPを作成し、元画像(24bpp)をそこにBitBlt
する事で16bpp画像を作ってるんですが、BI_RGB(555)はいいとしてBI_BITFIELDS(565)の
時のDIBの格納形式が判りません…

ファイルに書き出す時にBITMAPFILEHEADER、BITMAPINFOHEADER、マスク情報(DWORD * 3)を
書いた後でCreateDIBSectionで取得したポインタから画像データを書き出してるのですが、
書き出した画像を見ると右に6ドットずれます。
しかも画像の左下から6ドットにマスク情報から起こしたような3色の点が書きこまれます。
(マスク情報のDWORD * 3ヶ?)
16bpp(BITFIELDS)の時、DIBSectionのデータはBI_RGBの時と格納形式が違うのでしょうか?

689 :デフォルトの名無しさん:04/08/09 12:10
>>688
BITMAPFILEHEADERのbfOffBitsあたりが間違ってるだけじゃないの?

690 :デフォルトの名無しさん:04/08/09 12:48
ハードディスクを自動でフォーマットするやり方教えてください

691 :デフォルトの名無しさん:04/08/09 12:56
>>690が作ったソフトは使いたくないな。


692 :690:04/08/09 13:16
WinGroove2開発中でうs

693 :デフォルトの名無しさん:04/08/09 13:36
DrawTextで文字を描画すると、文字の部分だけが白く縁取りさせてしまいます。
文字の部分以外は後ろに描画したものが透けるようにしたいのですがどうしたらよいでしょう?

694 :デフォルトの名無しさん:04/08/09 13:45
SetBkModeかな

695 :デフォルトの名無しさん:04/08/09 13:54
>>694
Thx

696 :688:04/08/09 16:01
>>689
ずばりその通りですた
つか、今までbmpファイル作るときそこは全部0のままにしてたよ…orz
ちゃんと値を設定したら直りました
マリガトン

697 :デフォルトの名無しさん:04/08/09 16:56
スケルトンプログラムのShowWindow()とUpdateWindow()をコメント化して
メッセージループに入っても、WM_PAINTはきっちりプロシージャに届いてるようですが
どこがWM_PAINTを飛ばしてるんでしょうか

698 :デフォルトの名無しさん:04/08/09 17:04
ウインドウの無効領域を見てDispatchMessage()が送出してる。

699 :デフォルトの名無しさん:04/08/09 17:32
RegDeleteKeyをMSDNで見たらこう書いてありました。

>Windows 95: 指定されたレジストリキーとそのサブキーを、すべて削除します。
>Windows NT: 指定されたレジストリキーを削除します。サブキーを持つキーを
> 削除することはできません。

googleったらここの Build4が引っ掛かってこう書いてありました。
http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
>13 名前: デフォルトの名無しさん 投稿日: 02/06/07 17:11
>>10
>> 今調べてみたんですけど、双方の違いがよくわかりませんでした。
>
>NTでもサブキーがあっても削除できるじゃん

2000とXP向けにあるレジストリを一括削除したいのですけど、何か方法ありますか?

700 :デフォルトの名無しさん:04/08/09 17:42
>>699
ある。たぶん再帰で書くのが簡単。

701 :デフォルトの名無しさん:04/08/09 18:02
SHReg〜系になんかあったような気がする。

702 :デフォルトの名無しさん:04/08/09 18:08
>>701
ない。と思う。

703 :699:04/08/09 18:12
>>700
再帰ですね、分かりました(マンドクセ)

>>701
SHDeleteKeyですね(チガイガ、ワカラン、オシエテケロ)

>>702
あたしゃ、どーすりゃイイんですかい?


704 :デフォルトの名無しさん:04/08/09 18:13
>>702が嘘。

705 :デフォルトの名無しさん:04/08/09 18:17
SHDeleteKey
Deletes a subkey and all its descendants.(以下全部消す)
こっちは9x系かNT系か関係ない。

706 :デフォルトの名無しさん:04/08/09 18:23
>>698
ありがとです

707 :699:04/08/09 18:30
>>705
マジでっか!? 試してみヤス。
ありがとうございやした。

708 :デフォルトの名無しさん:04/08/09 18:53
質問です。
GetDCでウィンドウのDCを取得・・・というのは必ずループ毎でしなければならないのでしょうか?
たとえばstaticを使用して一回目だけDCを取得するとかはダメなのでしょうか?

講座とかのサンプルソースを見てるとほとんど全ての物がループ毎にDCを取得しているので疑問に思いました。
教えてください。


709 :デフォルトの名無しさん:04/08/09 18:53
HDCの座標を左下を0にする方法教えてください

710 :デフォルトの名無しさん:04/08/09 18:55
>>708
スターティック使えばいいよ

711 :デフォルトの名無しさん:04/08/09 18:55
>>708
CS_OWNDC

712 :708:04/08/09 18:59
ありがとうございました。

713 :デフォルトの名無しさん:04/08/09 19:24
Subnet Maskを知る方法はありますか?

714 :デフォルトの名無しさん:04/08/09 19:27
>>709
SetMapMode
http://www.kumei.ne.jp/c_lang/sdk/sdk_55.htm

715 :デフォルトの名無しさん:04/08/09 19:41
>>714
本当にあるとは思ってもいませんでした
ありがとうございます

716 :デフォルトの名無しさん:04/08/09 21:50
プログラムからマウスやキーボードの操作を制御するにはどうすれば
よいでしょうか?
マクロツールのようなものを作りたいのですが、何から調べてよいか
検討がつきません。
どなたかご教授おねがいします。

環境はC++、WIN32APIです。

717 :デフォルトの名無しさん:04/08/09 21:57
>>716
>環境はC++
>環境はC++
>環境はC++

718 :デフォルトの名無しさん:04/08/09 22:27
プログラムを使ってマウスを動かしたり、キーボードを打鍵したりすることは出来ません。


719 :デフォルトの名無しさん:04/08/09 22:28
>>716
その前にWSHについて調べてみたら?

720 :デフォルトの名無しさん:04/08/09 22:32
>>716
mouse_event
keybd_event

721 :デフォルトの名無しさん:04/08/09 22:36
>>708
デバイスコンテキストの意味がわかってないね。

722 :デフォルトの名無しさん:04/08/09 22:56
WindowsXPのエクスプローラでは
「表示」→「縮小版」を選ぶと画像のサムネイルが表示されますよね。
# 他のファイル形式もサムネイルされますが

このサムネイルをプログラムから最新の情報に更新する方法を教えてください。
現在、画像ファイルを編集するプログラムを作っているのですが、
画像ファイルを更新しても、その画像のサムネイル画像が更新されないのです。

マウスで右クリックすれば「縮小版を最新の情報に更新」を選択すればよいのは
判りましたが、プログラムから更新したいのです。

723 :デフォルトの名無しさん:04/08/09 23:10
>>708
GetDC したら、不必要になった時点ですぐに ReleaseDC を呼ぶのが普通。
リソースがもったいない。
それに CS_OWNDC でも非クライアントを描画する必要があるでしょ。

>>716
むやみにキーボードやマウス操作を起こすよりも、操作対象のウィンドウの
種類によって、最適なメッセージを送った方がいいと思う。
ボタンを押すなら WM_COMMAND で BN_CLICKED を親ウィンドウに送るとか。

724 :デフォルトの名無しさん:04/08/09 23:43
タイトルバー(CAPTION)をクリックして、離した瞬間を捕らえることって可能でしょうか?
WM_NCLBOTTUNUPで捕らえれそうに思えたんですが、クリックしてからボタンを離すまで
の間隔が1秒程度を超えると、WM_NCLBOTTUNUPが送られてこないみたいなんです。
もうちょっとクリック時間が長くなるとSIZEMOVEメッセージが流れてくるので離した瞬間が
わかるんですが、1秒〜3秒未満でマウスを移動させずにボタンを離されると、SIZEMOVEも
送られないのでお手上げです。

725 :デフォルトの名無しさん:04/08/10 00:54
>>722
外してるかもしれないがSHChangeNotifyとか?

726 :デフォルトの名無しさん:04/08/10 01:09
>>722
一番簡単なのは、Thumbs.db を削除しちゃうこと。

727 :デフォルトの名無しさん:04/08/10 07:40
ウィンドウを、画面へ描画しているのは何のAPIなんでしょうか?
ShowWindow()かと思ってたんですが、WinMain()にそれがなくてもウィンドウは描画されますから
CreateWindow()がオブジェクトの生成から描画までやってるんですかね?

728 :デフォルトの名無しさん:04/08/10 09:01
自分で確かめろ

729 :デフォルトの名無しさん:04/08/10 10:27
>>708
HDCはループごとに取得するのが決まりのようだと本かサイトかに
書いてあったが……。
途中でHDCが変わらんとも限らんし。

730 :デフォルトの名無しさん:04/08/10 10:35
BiginPaintがWM_PAINT時にしか使えないからその影響でGetDC派も毎回取得するようになったんだろう。

731 :デフォルトの名無しさん:04/08/10 10:39
>>727
> ウィンドウを、画面へ描画しているのは何のAPIなんでしょうか?

WM_NCPAINTのときのDefWindowProc。
WM_PAINT,WM_NCPAINTはシステムが描画の必要があると判断したときに発行する。
ShowWindow()は状態を変更するだけ。

732 :デフォルトの名無しさん:04/08/10 10:54
>>713 もお願いでつ。

733 :デフォルトの名無しさん:04/08/10 10:55
>>731
ありがとです。
メッセージループの有無で
ウィンドウが描画されたりされなかったりしたので
デフォルトのプロシージャが何かやってるんだという結論に達してましたが
確信もてますた。
>ShowWindow()は状態の変更するだけ
参考になりました。

734 :デフォルトの名無しさん:04/08/10 11:07
>>732
GetAdaptersInfoだ

735 :デフォルトの名無しさん:04/08/10 11:12
>>732
GetIpAddrTable()

736 :デフォルトの名無しさん:04/08/10 11:42
>>734-735
サンクス。ぐぐったら
ttp://homepage2.nifty.com/spw/tips/GetIpTable.html
が出ますた。

737 :デフォルトの名無しさん:04/08/10 16:00
タスクバーのウィンドウプロシージャーを取得しようと思ったのですが、
うまくいきません。

hTaskbar = FindWindow("Shell_TrayWnd", NULL);
TaskbarProc = (WNDPROC)GetWindowLong(hTaskbar , GWL_WNDPROC);

FindWindowでハンドルは取得できているのですが、プロシージャーの取得で
失敗してしまいます。どうしたらいいのでしょうか。

738 :デフォルトの名無しさん:04/08/10 16:33
>>737
Shell のプロセス内で実行してますか?

739 :737:04/08/10 16:49
>>738
CoCreateInstanceを使ってやるんでしょうか・・・。
はじめて聞いてよくわからないので勉強してきます。

740 :デフォルトの名無しさん:04/08/10 17:21
180度回転した文字を表示するにはどうすればよろしいのでしょうか?
「小」という字だったら 「ヽ|ノ」みたいな感じで。
ちなみに、普通の文字の出力方法なら分かります。

741 :デフォルトの名無しさん:04/08/10 17:32
LOGFONT構造体の説明をよーく読む。

742 :デフォルトの名無しさん:04/08/10 17:33
>>740
nEscapement かな?

743 :デフォルトの名無しさん:04/08/10 17:34
CreateFontのnOrientation

744 :デフォルトの名無しさん:04/08/10 17:39
!分かりました。ありがとうございました。

745 :デフォルトの名無しさん:04/08/10 17:49
!分かりました。ありがとうございました。
 == わかりません。くそやろう。

いや、暑くてさ…

746 :デフォルトの名無しさん:04/08/10 18:50
RegOpenKeyExでキーを開くとき、キー名で
::RegOpenKeyEx(HKEY_CLASSES_ROOT, "\\\\\\\\AudioCD", 0, KEY_ALL_ACCESS, &key);
のように前後にたくさん '\\' を指定すると開けるときと
「パラメータが間違っています(0x57)」が帰ってくるときの二通りがあります。
規則も良く分からないのですが、この辺の事情知っている人いませんか?

VC6SP5+PPack,Win2kSP4

747 :744:04/08/10 19:56
>>745
そんなつもりじゃなかったんですけど・・・。
!(分かりました。ありがとうございました。== わかりません。くそやろう。)
です。

748 :デフォルトの名無しさん:04/08/10 20:16
>>747
!(false)

749 :デフォルトの名無しさん:04/08/10 20:17
>>747
すまんすまん、ジョークジョーク
いや、暑くてさ

750 :一星 ◆Cppn/.YI3. :04/08/10 20:31
ダブルバッファリングをやってみたんだが、
なぜか2ピクセルほどずれ、空白が出来てしまう。
そこに点か何かを描画しようとしたが、送信範囲にはいっていないのか、
何も描画されない。
WM_PAINTが送られてきた時のBitBltの引数をいじってみたりしたが、
うまくいかない。
考えられる理由はある?
この説明だけではわからないというのなら、テストコード載せるけど。

751 :デフォルトの名無しさん:04/08/10 20:31
2ピクセルずらせばいいやん

752 :デフォルトの名無しさん:04/08/10 20:35
うわぁ〜〜

753 :デフォルトの名無しさん:04/08/10 21:00
>>750
クライアント RECT ではなくウィンドウ RECT でアレコレしている、に1票。
ちゃんと動くサンプルって、Google とかで探せるとこになかったっけ。

754 :デフォルトの名無しさん:04/08/10 21:07
CreateFileでFILE_FLAG_OVERLAPPEDを指定して開いたファイルは
LPOVERLAPPEDでアクセスする位置を指定するので
SetFilePointerは機能しませんよね?
でもSetEndOfFileを使う場合にはSetFilePointerが必要ですよね?

FILE_FLAG_OVERLAPPEDを使った場合SetEndOfFileは使えないのでしょうか?


755 :一星 ◆Cppn/.YI3. :04/08/10 21:10
>>753
その問題は以前さんざん悩んだことがあるので、
大丈夫だとは思うんだが……。
コードを載せておく。

HDC CreateDoubleBuffer(HWND hWnd,COLORREF color,int width,int height){
HDC hDC,hMemDC; BITMAPINFO *lpBMI; HPEN hpnRect; HBRUSH hbrRect;
HBITMAP hBitmap; LPBITMAP lpBMP;
hDC=GetDC(hWnd);
lpBMI=(LPBITMAPINFO)GlobalAlloc(GPTR,sizeof*lpBMI);
ZeroMemory(&lpBMI->bmiHeader,sizeof lpBMI->bmiHeader);
lpBMI->bmiHeader.biSize = sizeof lpBMI->bmiHeader;
lpBMI->bmiHeader.biWidth = width;
lpBMI->bmiHeader.biHeight = height;
lpBMI->bmiHeader.biPlanes = 1;
lpBMI->bmiHeader.biBitCount = 24;
lpBMI->bmiHeader.biCompression = BI_RGB;
lpBMI->bmiHeader.biSizeImage = 0;
lpBMI->bmiHeader.biXPelsPerMeter = 0;
lpBMI->bmiHeader.biYPelsPerMeter = 0;
lpBMI->bmiHeader.biClrUsed = 0;
lpBMI->bmiHeader.biClrImportant = 0;
hBitmap=CreateDIBSection(hDC,lpBMI,DIB_RGB_COLORS,(void**)&lpBMP,NULL,0);
hMemDC=CreateCompatibleDC(hDC);
SelectObject(hMemDC,hBitmap);

756 :一星 ◆Cppn/.YI3. :04/08/10 21:11
続き。

hpnRect=CreatePen(PS_SOLID,1,color);
hbrRect=CreateSolidBrush(color);
SelectObject(hMemDC,hpnRect);
SelectObject(hMemDC,hbrRect);
Rectangle(hMemDC,0,0,width,height);
DeleteObject(hpnRect);
DeleteObject(hbrRect);

ReleaseDC(hWnd,hDC);
return hMemDC;
}

757 :デフォルトの名無しさん:04/08/10 21:25
>>756
WM_PAINT での処理は?

758 :デフォルトの名無しさん:04/08/10 21:29
>>746
"\\\\\\test\\\\\\command\\\\\\\\\\1\\\\"
こんなのも可能(ただし保証なし)
MSDNで名前規則について調べろ

759 :一星 ◆Cppn/.YI3. :04/08/10 21:31
よくわからないことになった。
ウィンドウスタイルをWS_OVERLAPPEDWINDOWにするとうまくいった。
俺は、サイズ固定ウィンドウにするために、
それをWS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOXと
指定していたんだが、恐らくこれがおかしいのだと思われる。

>>757
case WM_PAINT:
{
/* ClSizeX・ClSizeY:クライアントエリアの大きさ
hMemDC:CreateDoubleBufferで受け取ったメモリーデバイスコンテキスト
*/
HDC hDC; PAINTSTRUCT ps;
hDC=BeginPaint(hWnd,&ps);
BitBlt(hDC,0,0,ClSizeX,ClSizeY,hMemDC,0,0,SRCCOPY);
EndPaint(hWnd,&ps);
break;
}

760 :デフォルトの名無しさん:04/08/10 21:34
>>759
ClSizeX と ClSizeY はそれぞれ GetClientRect した RECT の幅と高さ、ですよね。


761 :一星 ◆Cppn/.YI3. :04/08/10 21:48
しまった。
AdjustWindowRectのところを見たら、
ウィンドウスタイルの引数が「WS_OVERLAPPEDWINDOW」のままだった……。
>>760の予想する問題点は、この関数を使って修正する様にしているから
大丈夫だと思っていたが、引数をよく見たら誤っていたというわけだ……。

わざわざ考えてくださって、みなさんありがとうございました。

762 :デフォルトの名無しさん:04/08/10 21:58
猿山にカエレ!!(・∀・)

763 :デフォルトの名無しさん:04/08/10 22:46
質問なのに独白調で面白いですね。と思った

764 :デフォルトの名無しさん:04/08/10 22:48
age厨うぜぇ

765 :デフォルトの名無しさん:04/08/10 22:53
>>763
ドクハク!

766 :デフォルトの名無しさん:04/08/10 23:19
D&Dされたものがフォルダかファイルかを判断するにはどうすればいいですか?
また、フォルダの場合そのフォルダの中のファイルを操作するにはどのようにすればいいんですか?

767 :デフォルトの名無しさん:04/08/10 23:31
GetFileAttributes
FindFirstFile

768 :デフォルトの名無しさん:04/08/10 23:34
PathIsDirectory()という、そのまんまなモノがある

769 :デフォルトの名無しさん:04/08/10 23:52
他のアプリケーションを終了させるのはどうやったらいいんですか?


770 :デフォルトの名無しさん:04/08/10 23:54
ウィンドウタイトルやウィンドウクラスからウィンドウハンドルを取得、ウィンドウハンドルからスレッドハンドルを取得、スレッドハンドルからプロセスハンドルを取得してTerminateProcess()

で、出来ない?

771 :デフォルトの名無しさん:04/08/11 00:02
>>769
対象アプリケーションに終了させる仕組みが用意されてなければ
メインウィンドウにWM_CLOSE、TerminateProcess()など…
ただし、正常に終了できるとは限らない。

772 :デフォルトの名無しさん:04/08/11 00:03
>>769-770
ExitProcess()でダメならSendMessage()、
それでもダメならTerminateProcess()かなぁ


773 :デフォルトの名無しさん:04/08/11 00:07
>>770-772

ありがとうございます。強制終了ではなくて、終了の指示を出すわけですね。試してみます。


774 :770:04/08/11 00:22
DWORD ProcID;
HANDLE hProcess;
BOOL fResult = FALSE;
HWND hwnd;


hwnd=FindWindow(0,winname);
GetWindowThreadProcessId(hwnd, &ProcID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);
if(hProcess != NULL){
fResult = TerminateProcess(hProcess, 0);
WaitForSingleObject(hProcess, 500);
CloseHandle(hProcess);
}

てな感じで無事、殺せました。ありがとうございました。


775 :デフォルトの名無しさん:04/08/11 01:48
RegOpenKeyExのsamDesiredで
KEY_CREATE_SUB_KEYを指定していない(KEY_READ指定)のに、
サブキーを作る事が出来ているのですが、私のプログラムのバグでしょうか?

以下のコードでassertに掛かって欲しいんですけど。
{
HKEY key1, key2;
LONG result;
result = ::RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_READ, &key1);
assert(result == ERROR_SUCCESS);
result = ::RegCreateKeyEx(key1, "TEST", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ, NULL, &key2, NULL);
assert(result == ERROR_SUCCESS);
::RegCloseKey(key2);
::RegCloseKey(key1);
}


776 :デフォルトの名無しさん:04/08/11 01:57
画面のプロパティで設定したフォントを、
自分で作ったウィンドウの中の文字に適用したいんですが、
なにもしないと適用してくれません。
何か設定しないといけないんでしょうか?

ちなみに、

エクスプローラでは、左のフォルダにも右のファイル表示にも
アドレスバーにも適用されてます。

かちゅでは、ステータスバーには適用されてるんですが、
メインの3つのビュー、バーにはどれも適用されてません。

というところを見ると、
子ウィンドウ毎にも設定があるんでしょうか・・・

777 :デフォルトの名無しさん:04/08/11 02:06
自分で作ったウィンドウのフォントなんか、システムが面倒見てくれるわけもなく。
逆にシステム設定を読んで、そのフォントで描画すればよし。
かちゅーしゃは知らんけど、好みのフォント設定できるようになってるだけじゃないの?

778 :776:04/08/11 03:03
>かちゅーしゃは知らんけど、好みのフォント設定できるようになってるだけじゃないの?

かちゅの設定に、ステータスバーのフォントなどという項目はなかったと思います。


以前、ある自作アプリのプログラムを変更中に、何かの拍子で
そのアプリに画面のプロパティのフォントが適用されたされたことがあるんです。
どこが影響したのか上手く特定できず、
開発を続けるうちになぜか元に戻ってしまいました。

なので、いちいちウィンドウ毎にフォントを設定しなくても、
画面のフォントを適用させる何かしらの設定があるんじゃないかと思うんですが・・・。

779 :デフォルトの名無しさん:04/08/11 03:28
CopyIconの使いどころが分かりません。
特定のモジュールからLoadIconでアイコンをロードした後、FreeLibraryする前にCopyすればいいのですか?
また、LoadImageの場合も必要になりますか?

LoadLibrary>LoadIcon>FreeLibraryだけでも(見た目正しく)ロードできているので、
どこで使うのか調べきれませんでした。

780 :デフォルトの名無しさん:04/08/11 04:09
>>774
TerminateProcess()は危険な香り

781 :デフォルトの名無しさん:04/08/11 09:44
>>778
Delphi ですか?
Delphi なら TControl.DesktopFont というプロパティがあります。
ただし TCustomStatusBar と THintWindow は別の方法でシステムの
フォントを使っています。

782 :デフォルトの名無しさん:04/08/11 13:44
>>774
QUERY_END_SESSIONとかそのへんのメッセージ投げるもアリ。
対象アプリの作りによるが

783 :デフォルトの名無しさん:04/08/11 13:50
>>775
テストした OS は?


784 :デフォルトの名無しさん:04/08/11 14:29
VBLANKのタイミングを取得できるAPIはありますか?

785 :デフォルトの名無しさん:04/08/11 14:32
>>783
2000です

786 :デフォルトの名無しさん:04/08/11 15:59
すみません。教えてください。

エクスプローラーみたいに、右ドラッグ時に
コンテキストメニューを表示したいのですが、
どのようにすれば良いでしょうか?

現在、IDropTarget::DropでIDataObjectまでは取得できています。

787 :766:04/08/11 16:00
>>767-768
無事解決できそうです。ありがとうございました。

788 :776:04/08/11 18:20
>>781
すみません、DelphiじゃなくてVC++です

789 :デフォルトの名無しさん:04/08/11 19:00
GDIでダブルバッファリングと画面を60分の一秒ごとに高速に書き換える手法を教えてください

790 :デフォルトの名無しさん:04/08/11 19:24
>>789
とても速いCPUと、とても速いビデオカードを買う。

791 :デフォルトの名無しさん:04/08/11 19:33
while (1) {
 SetPixel(hdc, 0, 0, rnd());
 Sleep(1000/60);
}

792 :デフォルトの名無しさん:04/08/11 19:43
そんなエサで俺様がクマー(AA略

793 :デフォルトの名無しさん:04/08/11 20:40
>>786
右ドラッグを受けたいの?
それとも、エクスプローラに送りたいの?

794 :デフォルトの名無しさん:04/08/11 20:43
WM_PAINTを始め、メッセージはメッセージキューに蓄積していくのでしょうか?

例えばWM_PAINTの処理を行っている最中にWM_PAINTのメッセージが何度送られても
次のメッセージが実行されるのは処理を全て終えてから、ということでしょうか?

795 :デフォルトの名無しさん:04/08/11 20:56
>>794
基本的にメッセージはキューに蓄積されます。
WM_PAINT は違うけど。

796 :デフォルトの名無しさん:04/08/11 21:01
>>795
WM_PAINTが違う、とはどういうことでしょうか?
もう少し詳しくお聞かせ願えませんか?

797 :デフォルトの名無しさん:04/08/11 21:08
>>796
MSDN読め

798 :796:04/08/11 21:13
>>797
MSDNってどこのプロバイダですか?

799 :デフォルトの名無しさん:04/08/11 21:24
>>796
WM_PAINT は、
・メッセージキューに他のメッセージがない場合のみ GetMessage で取得される。
・同一のウィンドウにたいして、複数の WM_PAINT があった場合(←妙な表現だが、
 例えば InvalidateRect() で2箇所の領域を無効化した場合)、それらは一つの
 WM_PAINT にまとめられてキューから取り出される(無効領域も合算される)。


800 :デフォルトの名無しさん:04/08/11 21:27
>>799
ご丁寧にありがとうございました。


801 :デフォルトの名無しさん:04/08/11 21:29
WM_PAINT と WM_MOUSEMOVE だけ特別扱いなんだっけ?
ユーザーメッセージで、同様に優先度の低いメッセージってできますか?

802 :デフォルトの名無しさん:04/08/11 21:33
>>801
WM_TIMER も。ユーザには出来ないんじゃない?


803 :デフォルトの名無しさん:04/08/11 21:36
ZIPでファイルを圧縮する方法について教えてください。
LZHの方法は猫でもで発見しましたがZIPの方法が載ってなかったので。

804 :デフォルトの名無しさん:04/08/11 21:46
pkzip e filename

じゃなかったっけ

805 :デフォルトの名無しさん:04/08/11 22:22
フォーマットの話だろ?

806 :デフォルトの名無しさん:04/08/11 22:30
>>788
じゃあ自分で実装するしかないんじゃないか?

SystemParametersInfo の SPI_GETICONTITLELOGFONT で取得した
LOGFONT から CreateFontIndirect でフォントを作成して
WM_SETFONT で送る。オーナードローの部分もそのフォントを使う。

ユーザーが設定を変更した場合はトップレベルウィンドウに
WM_WININICHANGE で SPI_GETICONTITLELOGFONT が通知されるので、
これを受け取ったらフォントの設定を最初からやりなおす。

807 :デフォルトの名無しさん:04/08/12 00:35
>>803
zlibを使って下さい。

808 :デフォルトの名無しさん:04/08/12 01:01
>>786
右ドラッグを受けたいです。

809 :デフォルトの名無しさん:04/08/12 01:07
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \__________________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\

810 :デフォルトの名無しさん:04/08/12 04:34
>>809
幅広すぎ。崩れまくり。

811 :デフォルトの名無しさん:04/08/12 04:50
>>808
APIとかの標準的な方法では提供されていない。
shellexからレジストリをたどって自分で構築するしかない。

812 :776:04/08/12 05:03
Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ


813 :デフォルトの名無しさん:04/08/12 08:09
>>808
エクスプローラのコンテキストメニューそのものを表示したいのならば、
IShellFolder.GetUIObjectOf( IID_IDropTarget ) を取得して、
自分で実装した IDropTarget の引数をそのまま転送してやればよい。

814 :デフォルトの名無しさん:04/08/12 08:48
>>803
UnZip32.dllを探せ。LHZと大して手順は変わらん。


815 :デフォルトの名無しさん:04/08/12 08:59
UnZip32.dllは有料ですよ

816 :デフォルトの名無しさん:04/08/12 09:13
>>815
まあまあ

817 :デフォルトの名無しさん:04/08/12 09:23
UnZip32.dll互換dllを作る

818 :デフォルトの名無しさん:04/08/12 09:30
商用以外ならカンパウェア扱いだろ。

819 :デフォルトの名無しさん:04/08/12 09:54
コレ使うといいよ。
こっちはフリーだから
http://www31.ocn.ne.jp/~heropa/funzip32dll.htm

820 :デフォルトの名無しさん:04/08/12 11:47
>>810
ショボイ画面で見てんじゃねーよ

821 :デフォルトの名無しさん:04/08/12 11:48
>>814 >>817 >>819
怪しいDLLは使いたくありません。

822 :デフォルトの名無しさん:04/08/12 11:49
>>823-1000
怪しいzlibは使いたくありません

823 :デフォルトの名無しさん:04/08/12 12:03
怪しいzipは使いたくありません

824 :デフォルトの名無しさん:04/08/12 12:07
怪しいWIN32APIは使いたくありません

825 :デフォルトの名無しさん:04/08/12 12:07
怪しいサイト=2chで質問することは、なんともないらしい。

826 :デフォルトの名無しさん:04/08/12 12:10
怪しい>>825を放置することは、何ともない

827 :デフォルトの名無しさん:04/08/12 13:42
>>813
できました。
ありがとうございました。

828 :デフォルトの名無しさん:04/08/12 13:46
ListBoxで教えて下され
ListBoxのウィンドウをLBS_NOTIFYを付けて作成し、親ウィンドウでLBN_DBLCLKを
拾ってるんですが、その時に渡されるWPARAMの下位ワードが常に0になってしまいます。

ヘルプを見るとLOWORD(wParam)の説明はidentifier of listboxとなっており
てっきりダブルクリックした項目の番号が渡されるものだと思ったのですが…
実際には何番目の項目をダブルクリックしようがLOWORD(wParam)は0のままです。
このidentifier of listboxは何を意味するのか教えて下さい。
オナガイシマス orz

829 :デフォルトの名無しさん:04/08/12 13:56
メインプログラムのほかは一つしかスレッドが無いという仮定の元で、
スレッド内で以下のような感じでキー入力を受けつけることはできますか?

_beginthread(Threadmain);

ThreadMain()
{
c = getchar();
}

830 :デフォルトの名無しさん:04/08/12 14:05
>>829
出来る

831 :デフォルトの名無しさん:04/08/12 14:12
>>828
identifier of listbox = リストボックスの識別子

つまり、どのリストボックスかを識別する。
LOWORD(wParam)が0なら、CreateWindow() したときの
子ウィンドウIDが0のリストボックスということ


832 :デフォルトの名無しさん:04/08/12 14:16
>>821
猫のサンプルで使っているUnLha32.dllの兄弟だってば。
http://archiver.wakusei.ne.jp/lib/main.html

833 :デフォルトの名無しさん:04/08/12 14:52
>>831
成程、Windowのidでしたか。納得。
やりたい事はLBN_DBLCLKを拾ってLB_GETCARETINDEXを送ることで出来ますた
マリガトン

834 :デフォルトの名無しさん:04/08/12 15:36
>>832
DLL Hell に悩まされるのはイヤンです

835 :デフォルトの名無しさん:04/08/12 16:04
>>834
UnLhaが良くてなぜUnZipはだめなのか?

836 :デフォルトの名無しさん:04/08/12 16:48
メッセージループでアプリケーションに送られたメッセージを取得するにはどうしたらいいのでしょうか?
当初PeekMessage()で処理したMSG構造体に全てのメッセージが格納されていると思っていたんですが、
どうやらSendMessage()などで送られたメッセージ限定だそうで一部のメッセージしか取得出来ません。
ウィンドウプロシージャ以外の場所で全てのメッセージを取得する方法がありましたら教えてください。

837 :デフォルトの名無しさん:04/08/12 16:55
>>836
ピークメッセージのループはどういうときに使うといいですか?

838 :デフォルトの名無しさん:04/08/12 16:57
>>813
それは「表示するだけ」

839 :836:04/08/12 17:07
>>837
GetMessage()はメッセージが来るまで制御を返さないので
メッセージが来てない時に(アイドル時)に何か処理したい場合に使ってます。


840 :デフォルトの名無しさん:04/08/12 17:31
>>839
PeekMessage()の戻り値を見ましょう

841 :デフォルトの名無しさん:04/08/12 17:40
>>839
GetQueueStatusでメッセージがあるかどうか調べて、GetMessageとアイドル時の処理とを振り分けてみたら

842 :デフォルトの名無しさん:04/08/12 17:50
>>836
PostMessageで送られてきたメッセージ限定だ。
ついでに言うなら、GetMessageでもそれは同じ。

843 :803:04/08/12 17:51
皆さんレスありがとうございました。だいたいのするべきことが分かってきました。
ちなみに途中に出てきた間際らしい人は自分ではありませんので。

844 :デフォルトの名無しさん:04/08/12 17:53
まぎわらしい(←なぜか変換できない)

845 :836:04/08/12 17:57
>>840
現状ではPeekMessage()して戻り値がTRUEならGetMessage()でメッセージを取得しています。
PeekMessage()の戻り値がFALSEならアイドルループを回しています。
そこまではいいんですが、GetMessage()でも完全に全てのメッセージが取得出来ません。

先ほどSetWindowsHookEx()を使ってメッセージをローカルフックしてみましたが
上記と同じ状態でハマッテます。

>>841
やってみましたが上記の方法と結果は同じでした。

そもそもメッセージループではウィンドウなどに送られたメッセージはトラップ出来ないんでしょうか?
でもウィンドウにメッセージを送ってるのはメッセージループ内のDispatchMessage()ですよね・・・。
うーん。

846 :836:04/08/12 18:02
>>842
やっぱりそうですか。

if (msg.message == WM_MOVE)
 // 自分所有のどれかのウィンドウが動いた
このような事をしたいんですが。

>>844
まぎらわしい


847 :デフォルトの名無しさん:04/08/12 18:09
同一スレッドからSendMessageされたメッセージは直接(Get/PeekMessageやDispatchMessageを介さず)
ウィンドウプロシージャに渡される。

848 :デフォルトの名無しさん:04/08/12 18:12
コンソールアプリの文字出力でunicode文字の記号(ハートマークとか)を
表示したいのですが出ません。

ハートマークは、ファイル名につけて、dir表示は出来るのに、
どうしてwprintfでは表示されないのでしょうか。

表示する方法があったら教えてください。

849 :一星 ◆Cppn/.YI3. :04/08/12 18:12
ダブルバッファーを作った後にクライアントエリアが真っ黒になるのは
し方ないことなのか?

850 :836:04/08/12 18:15
>>847
はー、と言う事はメッセージキューにも入らないんですね。
通りでSetWindowsHookEx()でもダメなはずだ。

とい言う事は
SetWindowsHookEx(WH_CALLWNDPROC, ...);
こんな感じで保持している全ウィンドウに対してフック掛ければいけるのかな?
でももっと簡単な方法ないのかなぁ。

851 :836:04/08/12 18:32
SetWindowsHookEx(WH_CALLWNDPROC,...)
これはウィンドウハンドルなどの指定はないんですね。
これ1つで所有ウィンドウのメッセージをトラップ出来ました。

SetWindowsHookEx(WH_GETMESSAGE...)
これと合わせて使えばほぼ全てのメッセージが取得できそうな感じです。

みなさんご指摘ありがとうございました。

852 :デフォルトの名無しさん:04/08/12 18:38
>>848
wprintfW

853 :デフォルトの名無しさん:04/08/12 18:42
>>849
WM_ERASEBKGNDを処理してるから?

854 :一星 ◆Cppn/.YI3. :04/08/12 18:48
>>853
いや、そんなものはいじっていないが……。

855 :デフォルトの名無しさん:04/08/12 18:48
CreateCompatibleBitmapで作った裏画面の色が黒だからだろ

856 :一星 ◆Cppn/.YI3. :04/08/12 18:55
>>855
あとから背景にしたいものを描画するしかないということ?

857 :デフォルトの名無しさん:04/08/12 18:57
>>854
WM_ERASEBKGNDをWindowsが処理してるから?

858 :デフォルトの名無しさん:04/08/12 18:59
E.YAZAWAが「黒く塗りつぶせ」って言ったから。

859 :デフォルトの名無しさん:04/08/12 19:02
>>852
そういう関数は無いみたいです。

860 :デフォルトの名無しさん:04/08/12 19:06
>>856
あたりまえだ、何も描いてないのに意図した絵が出ると考えるのはアホだ。

861 :デフォルトの名無しさん:04/08/12 19:06
SetWindowsHookEx()の第3引数はローカルフックの場合NULLを渡しますが、
システムフックの場合、ここにDLLのインスタンスハンドルを渡す必要があります。


862 :デフォルトの名無しさん:04/08/12 19:07
>>859
setlocaleしないとだめとか

863 :829:04/08/12 19:11
>>836
ヒントありがと

864 :デフォルトの名無しさん:04/08/12 19:20
CRTに頼らず、 WriteConsoleWで出力しないとダメ。

865 :デフォルトの名無しさん:04/08/12 19:35
>>848
swprintfでバッファに書いてからWriteConsoleで出力すれば出せる。


866 :デフォルトの名無しさん:04/08/12 19:42
>>859
ある。ヘッダ見てみろ。

867 :デフォルトの名無しさん:04/08/12 19:56
printf <=> wprintf (CRT)
sprintf <=> swprintf (CRT)
wsprintf <=> wsprintfW (API)

868 :デフォルトの名無しさん:04/08/12 20:11
>>867 こうだろ
   printf ← _tprintf → wprintf   (CRT)
  sprintf ← _stprintf → swprintf  (CRT)
wsprintfA ← wsprintf → wsprintfW (API)

869 :デフォルトの名無しさん:04/08/12 20:16
>>862
してる。
setlocale(LC_ALL, "");
setlocaleをしないと、普通のSJIS文字もでなくなる。

>>864-865
上手くいき、文字がでました!ありがとう!

>>866
検索したのですが.NET2003の中のヘッダには存在しないみたい。


870 :デフォルトの名無しさん:04/08/12 21:05
_tprintfはMS限定拡張だからなぁ。

871 :デフォルトの名無しさん:04/08/12 21:30
>>848
wprintfってAPIじゃないだろ
WriteConsoleWで直接書く
>>870
_tprintfは_UNICODEのときwprintfに#defineるだけだから
wprintfでダメならダメだろ

872 :デフォルトの名無しさん:04/08/12 21:31
APIじゃないんだからwprintfWも当然ない

873 :デフォルトの名無しさん:04/08/12 22:18
#define HOGE = 100
こう定義されてる時、

int iValue = HOGE;
これでiValueに100って値が入りますよね。

けど、"HOGE_"はini ファイルとかtextファイルから読み込みたいんです。

例えばテキストファイルに"HOGE"とだけ書かれていて、
まずそれを読み込んで
CString cs =_T("HOGE");
こう云う状態になるとしますよね。

この後iValueに同様に値をセットするにはどうすればいいんでしょ。
何か言葉がうまくでてこなくて、解りズラ買ったらすんません。


874 :デフォルトの名無しさん:04/08/12 22:22
マジでぜんぜん意味が分からん
超能力者щ(゚Д゚щ)カモーン

875 :デフォルトの名無しさん:04/08/12 22:24
なんかよくわからんが、たぶん無理なことをしようとしている。

876 :デフォルトの名無しさん:04/08/12 22:26
>>873
INIファイルを扱いたいならGetPrivateProfileStringもしくはGetPrivateProfileInt
テキストファイルで扱いたいなら自分で読み込むルーチンを作れ

こういうことでいいんだろうか?


877 :デフォルトの名無しさん:04/08/12 22:30
INIファイルを扱いたいなら
INIファイルの内容が以下のようだとして
----hoge.ini-----
[Section]
Key = 100
------------------
コードが以下
int iValue = GetPrivateProfileInt("Section", "Key", 0, "hoge.ini");


878 :超プログラマー:04/08/12 22:33
>>873
typedef std::map<CString, int> map_type;

map_type valMap;
valMap[_T("HOGE")] = 100;
valMap[_T("HAGE")] = 200;

とか、やっといて

CString cs = _T("HOGE");
int iValue = valMap[cs]; //これでiValueに100が代入される

879 :873:04/08/12 22:34
こんな感じなんですが・・・

<aaa.h>
HOGE = 100

<bbb.txt>
HOGE

<ccc.cpp>
CString str;
(bbb.txtから1行読み込んで、strには"HOGE"と入っている)

880 :873:04/08/12 22:35
ぬお!!! 説明考えてる間に、878さんありがと!
多分それだと思います。

しかしSTL勉強してないのだった。勉強してみます。

881 :873:04/08/12 22:36
連続すんません、訳解らん話に付き合っていただいた
他の方々も、本当にありがとうです。

882 :デフォルトの名無しさん:04/08/12 23:37
しょぼい質問で申し訳ないのですが、
ウインドウプロシージャの中で、WM_PAINTを受け取った際の処理で
BeginPaint()とEndPaint()を2回実行して、
一回目は線を描いて、2回目は文字を書いたのですが、
線しか表示されないのはどうしてでしょう?
解決策などあったら教えてください。

883 :デフォルトの名無しさん:04/08/12 23:40
二回実行しない

884 :デフォルトの名無しさん:04/08/12 23:41
一回目のBeginPaintでアップデートリージョンが吹っ飛ぶから。
二回目はGetDCにしとけ。

885 :デフォルトの名無しさん:04/08/12 23:50
もしこうしてるのなら
paint1(); //この中でBeginPaintとEndPaint
paint2(); //この中でBeginPaintとEndPaint

こう変えろ
dc = BeginPaint(hwnd, &paintstruct);
paint1(dc);
paint2(dc);
EndPaint(hwnd, &paintstruct);

886 :デフォルトの名無しさん:04/08/12 23:51
>>882
WM_PAINTで描画できるのは、"無効リージョン(更新リージョン)"の部分だけ。
最初のBeginPaint(),EndPaint()で、無効リージョンはすべて有効化されるので、それ以上は描画できない。
デバイスコンテキストを引数にもつ、"線を引く関数"と"文字を書く関数"を作れ。
BeginPaint(),EndPaint()は1回で済む。





887 :882:04/08/12 23:55
みなさん、丁寧にありがとうございます。
やはり、2回呼び出したのが間違いだったのですね。
>>885さん >>886さん
わかりにくい文章を解読してくれてありがとうございます。
今度は引数渡しでやってみます。


888 :デフォルトの名無しさん:04/08/13 00:23
マウスカーソルが、あるコントロールの上にある時だけ
フラグを立てておきたいのですが、良い方法はないでしょうか?

特にカーソルがコントロールのウィンドウ外に出るときの
イベントが分からず、困っています。

889 :デフォルトの名無しさん:04/08/13 00:27
マウスをキャプチャして、MOUSEMOVEが定石か。
まあ、TIMERでGetCursorPos+HitTestを使っても良いけど

890 :デフォルトの名無しさん:04/08/13 00:29
定期的にGetCursorPosを呼び出す
とか一応考えられるけど、本当にそんなフラグ立ての必要があるのか、仕様を考え直した方がいいな。

891 :デフォルトの名無しさん:04/08/13 00:37
>>888
フラグを立てずに、判定が必要になったときに毎回調べては。
コントロールのRECTとマウスのPOINTをPtInRect()に渡して。
ScreenToClient()やClientToScreen()なども使うかも。


892 :デフォルトの名無しさん:04/08/13 00:41
>>888
889の前者に一票だな。

893 :デフォルトの名無しさん:04/08/13 00:43
意味もなくマウスキャプチャすんなよ…

894 :デフォルトの名無しさん:04/08/13 00:43
>>891
WindowFromPointで一発じゃ

895 :デフォルトの名無しさん:04/08/13 00:43
(・∀・)ニヤニヤ

896 :888:04/08/13 00:50
>>889-894
皆さんレスありがとうございました。
キャプチャしてPtInRect、またはChildWindowFromPointで判定が良さそうですね。
そのものずばりのやり方が無いようなので、逆に安心しました。

897 :891:04/08/13 00:51
891はウィンドウが下に隠れてるときが考慮されてないのでダメだな。
894が賢い。


898 :デフォルトの名無しさん:04/08/13 00:55
_TrackMouseEvent使ってWM_MOUSELEAVEでフラグを消すじゃ
だめなのか?

899 :888:04/08/13 01:09
>>898
ありがとうございます!こんな物があったとは。使ってみましたが良好です。

実はコントロールの場合だと、何もしなくてもドラッグしたとき
キャプチャー状態になっちゃうんですよね。

ですので自前でキャプチャーするとその辺の兼ね合いが面倒だったもので…。
このやり方なら、かぶらずにできそうです。

900 :一星 ◆Cppn/.YI3. :04/08/13 11:01
『WPARAM』と『LPARAM』の頭文字はどんな意味?

901 :デフォルトの名無しさん:04/08/13 11:05
WORD LONG


902 :デフォルトの名無しさん:04/08/13 11:07
Woman
Lady

903 :デフォルトの名無しさん:04/08/13 11:08
Winner Looser

904 :デフォルトの名無しさん:04/08/13 11:27
Windows Linux

905 :デフォルトの名無しさん:04/08/13 11:30
Wgowgo Luga

906 :デフォルトの名無しさん:04/08/13 11:43
書くなよ。自分でツマランってわかってるだろ。

907 :デフォルトの名無しさん:04/08/13 11:59
オモシレー

908 :デフォルトの名無しさん:04/08/13 12:44
16ビットWindowsでは>>901の通りで、WPARAMはWORDと同じ、LPARAMはLONGと同じサイズだった。
(つまりLONG WndProc(HWND hwnd, UINT uMsg, WORD wParam, LONG lParam);って宣言でも良かった。キャストも甘かったし)
ちなみに今のWPARAMはUINT_PTR、LPARAMはLONG_PTRからtypedefされている。

909 :デフォルトの名無しさん:04/08/13 13:14
APIというかアーキテクチャの話なんですけど

マルチプロセッサ環境で、スレッドが走るCPUはどう決められるのでしょうか?
スレッドを作ったときに割り当てられたCPUでずっと走るのか
それともコンテキスト切り替えが発生するたびに動的に変化するのでしょうか?

910 :デフォルトの名無しさん:04/08/13 13:34
サービスプログラムを作成しています。
ローカルシステムアカウントで動作しているサービスから、IEを起動したいのですがウィンドウが表示されません。
CreateProcessでIEを起動しているのですが、そのパラメータ(STARTUPINFO等)の問題でしょうか。
何か情報をお持ちでしたらご教授ください。
よろしくお願いします。

911 :デフォルトの名無しさん:04/08/13 13:38
素朴な疑問です
次期OSロングホーンになると
Win32SDKはWin64SDKになるんでしょうか?
また、メッセージループ構造にウィンドウプロシージャという
構造は変化しませんか?

912 :デフォルトの名無しさん:04/08/13 13:41
>>911
変化しないと思う。
ただ、ミドルウェアやライブラリに隠蔽された別スタイルでのやりかたが増えてくるかもしんない。

913 :デフォルトの名無しさん:04/08/13 13:44
質問です。Mutexオブジェクトは、開いているハンドルが全て閉じたときに破棄されますが、
それ以外に無理やりオブジェクトそのものを破棄してしまうことは出来ませんでしょうか?

914 :デフォルトの名無しさん:04/08/13 13:47
ExitWindowEx

915 :デフォルトの名無しさん:04/08/13 13:48
ExitWindowsEx
         ~

916 :913:04/08/13 13:52
>>914-915
いや、あの、たしかにオブジェクトは破棄されるだろうけど…
Windowsも終了しちゃうじゃん (;´Д`)

917 :911:04/08/13 13:55
>>912

>変化しないと思う。
覚え始めなので変化したらどうしようかと考えていました

>ミドルウェアやライブラリに隠蔽された別スタイルでのやりかたが増えてくる
APIをラップしたライブラリを使ったりするんでしょうか・・・・
数年先のことですので、お楽しみにしておきます。


918 :デフォルトの名無しさん:04/08/13 15:04
Win32APIが.NETをラップしたものになるんじゃなかったのか?

919 :デフォルトの名無しさん:04/08/13 15:30
>>909
うーん、どうなんだろうね?

今の Windows の実装がどうなってるか知らないけど、今後出てくる
Intel のマルチコア CPU では「暇なときは一部のコアの電源を落とす」
ということをやるそうだから、あるスレッドが特定のコアで動き続ける
という保証はなくなるはずだよね。


920 :デフォルトの名無しさん:04/08/13 15:53
>>909
動的に変化するし、固定することも出来る。


921 :デフォルトの名無しさん:04/08/13 16:01
TrackbarをAPIで作る方法を教えてください(CreateWindow)
UpDownなどはうまくいくのですがTrackbarだけうまくいきません。"msctls_trackbar32"

922 :デフォルトの名無しさん:04/08/13 16:09
>>921
ttp://homepage2.nifty.com/Mr_XRAY/Halbow/Chap26.html

検索したのか世

923 :デフォルトの名無しさん:04/08/13 17:24
自己解決しました

924 :デフォルトの名無しさん:04/08/13 17:24
>>911
Longhorn Development Kit(LDK)

925 :デフォルトの名無しさん:04/08/13 17:43
>>924
嫌だなあ、また新しいこと憶えなきゃなんねえのかよ……。

926 :デフォルトの名無しさん:04/08/13 17:49
>>919
「暇なときに」コアの電源落とすのなら、スレッドが動いている間は
特定のコアで動き続けるんじゃないか?


927 :911:04/08/13 18:00
>Kit(LDK)
そのLDKでつくったものは、ユーザモードによっては
動かないという情報を耳にしたのですが、不便ではないですか?

928 :デフォルトの名無しさん:04/08/13 18:05
なにLDKって。LonghornSDKでしょ。

929 :デフォルトの名無しさん:04/08/13 18:10
メッセージループを書くとき if (PeekMessage(..., TRUE)) {} とぜずに
if (PeekMessage(..., FALSE) { if (GetMessage(...)) } とするケースを良くみますが、
どうしてわざわざGetMessageを呼び出しているのでしょうか?

930 :デフォルトの名無しさん:04/08/13 18:15
TRUE/FALSEじゃなくてPM_REMOVE/PM_NOREMOVEでした

931 :デフォルトの名無しさん:04/08/13 18:32
>>929
ソースの見易さを優先してんじゃないのかな?
パフォーマンスの差なんてほとんど無いだろうし。

932 :デフォルトの名無しさん:04/08/13 18:35
MSがそうしているからじゃないかな

933 :デフォルトの名無しさん:04/08/13 18:40
PeekMessage/hWnd=NULLではPostThreadMessageで投入されたメッセージを受ける事は出来ない。
PeekMessage/hWnd=-1なら受けられるけど、今度はウインドウメッセージが取れないから二度手間になる。
GetMessage/hWnd=NULLなら両方受け取れる。

934 :デフォルトの名無しさん:04/08/13 19:12
>>910
「サービスにデスクトップとの対話を許可する」を「ON」にする

935 :デフォルトの名無しさん:04/08/13 20:18
>>910
そもそも、サービスからUIプログラムを起動すんな。

936 :デフォルトの名無しさん:04/08/13 20:56
>>935
(°Д°)ハァ? お前何様?

937 :デフォルトの名無しさん:04/08/13 22:57
>>936
( ´,_ゝ`)プッ まあ、もちつけ。

938 :デフォルトの名無しさん:04/08/14 01:57
Winsock2の各APIのエントリー番号が知りたいのですがわかる人いますか?
DISWINでdiswin.apiを作ったのですが、WinsockのAPIが登録できていないので知りたいです。


939 :デフォルトの名無しさん:04/08/14 02:17
>938
ttp://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
このへん見てガンガレ。

940 :デフォルトの名無しさん:04/08/14 02:23
>>938
Dependencywalkerで見れる

941 :デフォルトの名無しさん:04/08/14 10:08
939&940サンクス。わかりました。

942 :デフォルトの名無しさん:04/08/14 15:26
ピークメッセージでメッセージをおくったウインドープロシジャーと
ピークメッセージのあるループはマルチスレッドですか?

943 :デフォルトの名無しさん:04/08/14 15:40
>>942
ピークメッセージでメッセージは送れない。

944 :デフォルトの名無しさん:04/08/14 15:57
>>943
送る関数のなまえわすれたので それでお願いします

945 :デフォルトの名無しさん:04/08/14 17:07
シングルスレッドです

946 :デフォルトの名無しさん:04/08/14 17:48
デスパッチメッセージでループの処理が止まるということですね?

947 :デフォルトの名無しさん:04/08/14 19:11
ACCEL構造体のfVirtに指定するフラグFNOINVERTはメニュー項目を反転させないとあるのですが、
具体的にはどういう効果があるのでしょうか?
普通に{ FALT|FVIRTKEY, 'A', 1 }とかを指定しても、メニューが反転する様子は見られないんですけど。

948 :デフォルトの名無しさん:04/08/14 19:23
ウインドウ・プロシージャ内で、インクリメント(デクリメント)するにはどうすればいいのさ?

949 :デフォルトの名無しさん:04/08/14 19:34
i++(i--)

950 :デフォルトの名無しさん:04/08/14 22:05
プロセスで使ってるウインドウの一覧はどうやって取得するのでそ?

951 :デフォルトの名無しさん:04/08/14 22:10
>>950
EnumWindows()
EnumChildWindows()
GetWindowThreadProcessId()

952 :デフォルトの名無しさん:04/08/14 22:39
EnumThreadWindow は?

953 :デフォルトの名無しさん:04/08/14 22:50
>>952
まずプロセスに所属するスレッドのIDを列挙しないとね

954 :デフォルトの名無しさん:04/08/14 23:22
RegisterClassでウインドウクラスを登録するとATOMが帰ってきますよね?
後からこのATOMを使ってクラスのデータを取り出せると思うのですが、
*AddAtomとかを見ても文字列を登録するだけで、任意のデータ(WNDCLASSとか)を
登録する方法がわかりません。どうすればいいのでしょうか?

955 :950:04/08/14 23:30
>>951-953
アリガd

956 :デフォルトの名無しさん:04/08/15 00:18
>>954
ウィンドウクラスの"名前"が登録されてるだけじゃね?
ふつうウィンドウクラスの情報がほしいときはGetClassInfoExだと思う。


957 :デフォルトの名無しさん:04/08/15 13:54
タスクバーのマウス右クリックメニューでシステムメニュー以外の独自のポップアップメニューを
追加しているアプリがありますがどんなAPIを使ったら実現できるのでしょう?


958 :デフォルトの名無しさん:04/08/15 14:22
GetSystemMenuとInsertMenuItem

959 :デフォルトの名無しさん:04/08/15 15:31
>>957
単純なものならリソース作っといて、
ウィンドウクラス登録するときにlpszMenuNameにセットする。

960 :デフォルトの名無しさん:04/08/15 16:06
>>958
>>959
違うよ。タスクバー上でのコンテキストメニューの話だよ。
[重ねて表示]とか[上下に並べて表示]とかあるやつ。

961 :デフォルトの名無しさん:04/08/15 19:01
960 デフォルトの名無しさん sage New! 04/08/15 16:06
>>958
>>959
違うよ。タスクバー上でのコンテキストメニューの話だよ。
[重ねて表示]とか[上下に並べて表示]とかあるやつ。

962 :デフォルトの名無しさん:04/08/15 20:13
>>960
それはシステムメニューとは言わない

963 :デフォルトの名無しさん:04/08/15 20:54
>>962
システムメニューとは言わなくてもいいんで、教えて下さい。

964 :デフォルトの名無しさん:04/08/15 20:59
>>963
画像をメニューの起きたい場所に貼り付けそこをマウスでクリックするとウインドーが出るようにする

965 :デフォルトの名無しさん:04/08/15 21:09
>>963
フックや他の何らかの方法でプロセスに進入し
InsertMenuItem

966 :デフォルトの名無しさん:04/08/15 21:39
>>964
>>965
頓珍漢な回答はいりません

967 :957:04/08/15 21:39
>>958-959
そう、それです。有難う御座いました。

>>960-961, 963
あんた誰? w

968 :959:04/08/16 00:46
>>967
あんたの質問そのものが的外れだからだよ
漏れもあとから見返して自分の回答があんたの質問と食い違ってると思ったぞ。

969 :デフォルトの名無しさん:04/08/16 01:41
ウィンドウをタスクバーよりも手前に常に表示するにはどうすれば
よいのでしょうか?
普通にSetWindowPos(hWnd, HWND_TOPMOST, ...)ではタスク
バーがアクティブになった際に裏に回ってしまいます。
試行錯誤の末、WM_WINDOWPOSCHANGINGがきたときに
((WINDOWPOS)lParam).hwndInsertAfterにHWND_TOPMOST
を指定する方法を見つけましたが、これだとスタートメニューを開
いた時に裏に回ってしまいます。

お手数をおかけしますが、どうかご教授願います。


970 :デフォルトの名無しさん:04/08/16 04:34
タスクバーのプロパティの「常に手前に表示」のチェックをはずす

971 :デフォルトの名無しさん:04/08/16 05:46
タスクバーをOwnerに指定してウィンドウを作れば

972 :デフォルトの名無しさん:04/08/16 07:21
>>969
君のプログラムがそうやって最前面にしたように
スタートメニューもそうやって最前面にしてるのでしょうがない。


973 :デフォルトの名無しさん:04/08/16 07:39
>>971
普段は親ウィンドウ指定で大丈夫だけど、
別アプリ(WMPなど)をフルスクリーンにして元に戻すと、
タスクバーの裏にいってしまうんだよなぁ、これ。

974 :デフォルトの名無しさん:04/08/16 10:34
>>971
タスクバーを自動的に隠すようにしてるとどうなるんだろ?


975 :デフォルトの名無しさん:04/08/16 12:04
リストビューで、特定の項目がクリック(ダブルクリック)されたイベントをキャッチするには
どうすれば良いのでしょうか。

976 :デフォルトの名無しさん:04/08/16 12:10
>>975
NM_DBLCLK

977 :デフォルトの名無しさん:04/08/16 12:26
>>976
何も起こりません・・・。

978 :デフォルトの名無しさん:04/08/16 12:26
>>970-973
回答ありがとうございました。
最初は>>972と同じことを思っていたのですが、親ウィンドウにタスクバー
を指定することで取りあえずはなんとかなるようですね。
本当にありがとうございました。


979 :デフォルトの名無しさん:04/08/16 12:42
ウィンドウモードとフルスクリーンモードの切り替えを行いたいのですが
関数は何を使えば?

980 :デフォルトの名無しさん:04/08/16 12:45
>>977
spy++とか使って確認してみろよ

981 :デフォルトの名無しさん:04/08/16 12:47
>>979
ChangeDisplaySettings()


982 :デフォルトの名無しさん:04/08/16 12:50
>>979
ShowWindow

983 : ◆AGE9iuhArk :04/08/16 13:05
>>980
すみません、出来ました。ありがとうございました。

984 :デフォルトの名無しさん:04/08/16 15:55
ダイアログウィンドウに、リソーススクリプトを使わずにコントロールを配置することは出来ますか?

985 :デフォルトの名無しさん:04/08/16 16:02
出来ます

986 :デフォルトの名無しさん:04/08/16 16:41
CreateFile() で指定するファイル名に環境変数を含める方法はありますか?
例えば "%APPDATA%\appname\hoge.ini" みたいにダイアログに入力されたら
APPDATA の部分を展開して欲しいのですが…

987 :デフォルトの名無しさん:04/08/16 16:47
>>986
ないと思う、というか横着しすぎです。


988 :デフォルトの名無しさん:04/08/16 16:48
あると思う

989 :デフォルトの名無しさん:04/08/16 17:04
>>986
自分で環境変数取得して置換するか、
それっぽいライブラリ(あるかどうかしらんけど)を使うかしなきゃだめ。
一発でできるって方法は用意されていないはず。

990 :デフォルトの名無しさん:04/08/16 17:08
System("echo %APPDATA%\appname\hoge.ini")
の出力をいただく

991 :デフォルトの名無しさん:04/08/16 17:20
>>986
ExpandEnvironmentStrings で環境変数を展開したあとに CreateFile するべし。

992 :デフォルトの名無しさん:04/08/16 17:23
>>987>>989を晒しsage次スレ誘導

Win32API質問箱 Build22
http://pc5.2ch.net/test/read.cgi/tech/1092524669/

993 :デフォルトの名無しさん:04/08/16 17:29
ではカウントダウンの時間です


994 :デフォルトの名無しさん:04/08/16 17:30
夏だね。シッタカ君が多いな。

995 :デフォルトの名無しさん:04/08/16 17:35
>>992
イッパツじゃ無理じゃん

996 :デフォルトの名無しさん:04/08/16 17:37
>>995
痛い

997 :デフォルトの名無しさん:04/08/16 17:48
997

998 :デフォルトの名無しさん:04/08/16 17:50
>>992
>>989 は何も間違ったことは言ってないぞ


999 :989:04/08/16 17:53
>>998
いや、私は知ったかぶりしてしまってると思う。
よく調べもせずに書いてスマソ

1000 :デフォルトの名無しさん:04/08/16 17:54
間違ったことは言ってないが、回答としてはクズ。

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

208 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)