[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 08/26 18:36 / Filesize : 100 KB / Number-of Response : 476
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build81



1 名前:デフォルトの名無しさん [2009/08/02(日) 00:20:49 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build80
pc12.2ch.net/test/read.cgi/tech/1244057140/l50

41 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:51:55 ]
ウィンドウの幅と高さにrect.rightとrect.bottomをそのまま渡しちゃってるとか、
ツールバーのサイズを考慮に入れてないとか・・・。

42 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:52:37 ]
>>40
WS_SYSMENU | WS_CAPTIONの二つで
640x476になります
OSはXPでシェルはLiteStepに変えています

43 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:54:37 ]
>>41
サイズを指定する時はきちんと
right - left
bottom - top
としています

ツールバー等は無しで、只単純なウィンドウです
連投すみません

44 名前:22 [2009/08/03(月) 22:56:22 ]
>>28のやり方でうまく出来ました。ありがとうございます

45 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:09:48 ]
>>42
LiteStepが原因だろ、どうみても。
非公式ツールで変更しまくっている環境は流石にスレ違いだ。
LiteStepのスレで訊けよ。

46 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:13:44 ]
そうかなあ。自分は42のやり方が悪いのだとまだ思っている。

47 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:31:23 ]
LiteStepってちゃんとSystemMetricを利用して動いてるんだろうか
利用してるならAdjustWindowsRectも動作するはずだが

48 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 07:16:16 ]
>>46
CreateWindowした後に
SetRect( &rect, 0, 0, 640, 480 );
AdjustWindowRect( &rect, GetWindowLong( hWnd, GWL_STYLE ), FALSE );
SetWindowPos( hWnd, NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOMOVE );
としています

ずっとLiteStepを使ってきて、他の環境でもあまり問題無かったので意識してませんでしたが
もし、上記やり方に問題が無ければ、LiteStepに原因があるかもしれないですね

49 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 08:32:30 ]
つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・



50 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:08:02 ]
互換性でトンデモ仕様になっていく

51 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:46:46 ]
便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると
若干画面大きくなるよね?
その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?

52 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:53:32 ]
どこが便乗なんだか

53 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 10:21:03 ]
つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・

54 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:30:08 ]
互換性でトンデモ仕様になっていく

55 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:32:37 ]
便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると
若干画面大きくなるよね?
その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?

56 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 14:13:41 ]
何だこの流れ

57 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 14:20:36 ]
つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・

58 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:27:42 ]
互換性でトンデモ仕様になっていく

59 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:32:00 ]
だって互換性取れってうるさいんだもん



60 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:32:47 ]
便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると
若干画面大きくなるよね?
その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?

61 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:34:46 ]
便乗質問なんだが
Aero有効にしてるとタブとかツールバーとかトンデモ仕様になっていくのが不便だなあ
なんか互換性の為らしいが・・・

62 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:36:40 ]
>>61
えーと、どのへんが質問?

63 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:41:04 ]
知らないならレスしないで下さい。ウザイだけです。

64 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:12:30 ]
だって互換性取れってうるさいんだもん

65 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:14:23 ]
dgtu

66 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:14:35 ]
互換性でトンデモ仕様になっていく

67 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:15:05 ]
いつまで続けるのこれ

68 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:49:16 ]
15498回

69 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 18:50:38 ]
夏休みが終わるまで続けるよ!



70 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:04:23 ]
つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・

71 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:05:22 ]
Aeroを無効にすればよい

72 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:05:23 ]
dgtu

73 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:06:40 ]
>>67
涼宮さんが満足する何かがわかるまでです。

74 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:07:32 ]
ネバーエンディング

ム板的にはwhile(true)

75 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:10:34 ]
break;

76 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:11:40 ]
便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると
若干画面大きくなるよね?
その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?

77 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:13:16 ]
>>74
警告:条件式が定数です

78 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:14:51 ]
volatile boolean flag;

79 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:16:40 ]
何の言語だよ



80 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:16:43 ]
APIと関係ない話すんな

81 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:20:36 ]
A Pocotan Inshitao

82 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:21:03 ]
Aero有効にしていてGetWindowRect等で正確なサイズを得る方法を教えろ

83 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:26:17 ]
ThemeAPIで頑張って計測、とかいう話じゃなかったっけ?

>>76
タブとかツールバーはクライアント領域の載せているものだから、
その上で空き領域を一定サイズ確保したいというなら当然必要。

84 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:59:08 ]
>>ThemeAPIで頑張って計測
ハズレ

85 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:04:29 ]
うそつくなよw

86 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:15:48 ]
知らないならレスしないで下さい。ウザイだけです。

87 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:45:04 ]
msdn.microsoft.com/ja-jp/library/ms633519(en-us,VS.85,loband).aspx

88 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:50:14 ]
VistaとXPではステータスバーの大きさが異なるんだけど
ステータスバーの大きさって変えられない?
自分でステータスバーもどきのウィンドウ作った方が速いかな?

89 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:55:00 ]
デバッグビルドでLoadLibraryA("MSVCP90.dll")実行するとNULLが返ってくるんだけど、MSってバカなの?何なの?



90 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:58:05 ]
>>88
SB_SETMINHEIGHTとか

91 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:40:01 ]
>>89
side-by-sideアセンブリ

92 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 23:21:42 ]
CランタイムをLoadLibraryする方がバカ

93 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 04:12:25 ]
ネットで公開されているAPIってサイドパーティ含めてどのくらいか?
把握している人はエロい

94 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 06:51:42 ]
は?

95 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 08:14:32 ]
www.google.com/search?q=api

Google先生は把握してますが何か?

96 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 15:58:10 ]
質問です。

ウインドウメッセージを解決するProcの中で、SendMessageをすると、即座に処理される理由がいまいちわかりません。
MessageBoxでも似たような疑問を持った際は「勝手にメッセージ解決ループを作って裏でまわしてくれるんだよ」
といった説明を受けて納得したのですが、今回の件も同様なのでしょうか?

97 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:02:50 ]
>1 つまたは複数のウィンドウへ、指定されたメッセージを送信します。
>この関数は、指定されたウィンドウのウィンドウプロシージャを呼び出し、
>そのウィンドウプロシージャがメッセージを処理し終わった後で、制御を返します。

98 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:03:19 ]
SendMessageが発行したメッセージはちゃんとOSのメッセージキューに入れられて、
該当するウインドウのメッセージループに通知され、
その後メッセージハンドラがコールバックされて
対応するコード上で処理されてるから、即座じゃなくない?

MessageBoxの方も同様で、メッセージボックスがクリエイトされた後、
OS経由でメッセージがMessageBoxのメッセージハンドラに通知されてるよ。
Spy++みるとメッセージの応酬が見られるし。

99 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:16:14 ]
96です。
>>97-98
お返事ありがとうございます。
MSDNの説明を妙に勘違いしていたようです。

::SendMessageはウィンドウプロシージャを直接呼び出すのですね。
実は困っていたのは
case WM_CLOSE:
の中で別のワーカースレッドに停止命令を出し、ワーカースレッドの停止を確認するまでSleepする。
という処理でした。

このとき、ワーカースレッド側でSendMessageされると、フリーズしてしまいます。

これは、メインスレッドがプロシージャで処理中(Sleep中)なのに、他スレッドがプロシージャを呼ぼうとしたので、排他制御された。
ということで合っているでしょうか?



100 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:36:52 ]
>>99
そんな感じ。
ttp://msdn.microsoft.com/en-us/library/ms644927.aspx
のMessage Deadlocksに詳しく書いてある。

101 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:48:44 ]
>>100
ありがとうございます。
・・・そのページ、日本語版のMSDNでは省かれてますね・・・

102 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:50:16 ]
メッセージプロシージャを待ちたくないのなら、PostMessageを使ってみては

103 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:51:04 ]
メッセージプロシージャってなんだ・・・ウィンドウプロシージャでした

104 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:58:57 ]
>>102
色々アドバイスありがとうございます。
タイトルバーの書き換えが目的のため、ポインタ渡しが必要となり、PostMessageでは行えませんでした。
(SetWindowTextは、内部でSendMesssageを呼んでるっぽいですね)

ついでに、報告。
>>100の文書のおかげで
SendMessageTimeout
なる関数を知りました。
タイムアウト値を10msくらいにしておけば、デッドロックが起こらずに済みますね。

こんな関数知りませんでしたわ

105 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:17:49 ]
>>91
winsxsはside by sideで使われてたのか、MSめ・・・

106 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 20:27:52 ]
>>104
UIの更新はUIスレッドにやらせるのが基本。
文字列は別の場所に置いておいて、
PostMessageでタイトルバーの更新を指示、といった感じで。

107 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:28:29 ]
>>106
いちいちクリティカルセクション使って、文字列渡し合うのか?

108 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:42:38 ]
ロストを許すことなく、きっちり伝えようとするべくクリティカルセクションの出し入れすると
結局 SendMessage のブロッキングと同じでデッドロックにならない?

109 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:28:21 ]
C言語にfopenという関数があるのに
windows APIにもCreateFileという関数があって

どちらを使えばいいのかわかりません。
CreateFileのほうが細かく設定できるという認識だけで
よろしいのでしょうか?



110 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:40:39 ]
ファイルハンドル取得のためには必須なんじゃないの?
勉強中の身だからなんとも言えんけど、
プロに任せれば正しい回答が来るはず

111 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:48:33 ]
fopenはC言語の関数。
C言語が仕様を決め、Windowsが従ってる。
そのため(C言語の仕様が古いため)2GBまでのファイルしか扱えない。

CreateFileはWindowsが提供している関数。
Windows以外で使えないけど、代わりに2GBを超えるファイルも扱えるし、Windows特有のファイル属性なども操作できる。

112 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 12:33:14 ]
つまりWindows環境ならfopenよりもCreateFileのほうがいいってことか

113 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 13:07:04 ]
まぁそう考えてもOK
ただし、色々できる=複雑ってことだからそのあたりは臨機応変で。

114 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:15:59 ]
毎回引数7個も書いてるとうざいぜ
fopenで間に合うときはそっちのがシンプルでいいよ

115 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:36:58 ]
>>111
以下コードで 4 GB のファイルが生成できる件について

#include <stdio.h>
#define MEGA_BUF_SIZE (1024 * 1024)
#define OUT_FILE "test.dat"
int main(void)
{
static char buf[MEGA_BUF_SIZE] = { 0 };
int i;
FILE *oFP = fopen(OUT_FILE, "wb");
if(oFP == NULL)
{
perror(OUT_FILE);
return -1;
}
for(i = 0; i < 1024 * 4; i++)
fwrite(buf, 1, sizeof(buf), oFP);
fclose(oFP);
return 0;
}

116 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 18:15:32 ]
つーかfopenも最終的にはCreateFileを呼んでるんだから当然だろ

>>111こいつバカじゃねーの?

117 名前:デフォルトの名無しさん [2009/08/06(木) 19:23:44 ]
fopen で開いたファイル(FILE*)にランダムアクセスする際にfseekでは
32bit幅しか考慮されていないので、2Gの範囲しかアクセスできないと言う
点について、>>111がちょびっとだけカスってる。

#まあ、そもそも fopen の仕様を決めているのはC言語ではないけどね…。

fopen が CreateFile呼んでるから当然使えるってのは、標準関数の仕様と
比べてどうかと言う方向からみるべきなので、短絡的な意見だとは思うが。


118 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:16:53 ]
SEEK_CURを使って2GBずつ進んでいくってのは無理?

119 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:21:26 ]
規格上はその辺り何も規定されてないので処理系に依存する。



120 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:39:15 ]
>>118
VC2008だと、0x7FFFFFFFより後への移動はエラーになって返ってくる。
関数内で、SetFilePointerを上位32ビットを指定せずに呼んでいる為に、
オフセット位置の範囲に制限がかけられている所為だな。

121 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:46:08 ]
使えねー

122 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:25:26 ]
つーか、CreateFileをラップしたクラスを作っとけばいいだろ・・・

そもそもクロスプラットフォーム開発してる訳でもなけりゃわざわざfopenなんて使う理由が無い

123 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:49:47 ]
そもそもクロスプラットフォーム開発してる訳でもなけりゃわざわざfopenなんて使う理由が無い(キリッ

124 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:54:12 ]
そもそもクロスプラットフォーム開発してる訳でもなけりゃわざわざfopenなんて使う理由が無い(ヌルポ

125 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:57:04 ]
>>124
がっ

126 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:10:06 ]
fopen (笑)

127 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:12:36 ]
C言語 (笑)

128 名前:デフォルトの名無しさん [2009/08/06(木) 22:16:42 ]
今時マルチスレッドや巨大ファイルの扱いが規格外なプログラミング言語なんてゴミ

129 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:16:44 ]
ヌルポ (笑)



130 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:04:30 ]
今時ポインタがあるプログラミング言語なんてゴミ

131 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:11:25 ]
と思ってるお前がゴミ

132 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:22:58 ]
ふぉぺん

133 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:26:21 ]
その辺にしとけ

134 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:39:51 ]
何を?

135 名前:デフォルトの名無しさん [2009/08/07(金) 00:43:08 ]
ネットワークディレクトリをsamba(smb)共有させる場合、
IEのURL打ち込み欄で

\\hostname.com

で、、このあとアカウントとパスワードを入力するダイアログが表示され
進めるとネットワークディレクトリがマウントできますが、
(Vistaの場合、レジストリを変更してセキュリティポリシーの書き換え必要)

この一連の流れをC++/MFCの環境で記述してマウントさせたいのです。
具体的にどういうAPIを使えばよいか、どういうサイトを参照すればよいか
など教えていただけますでしょうか。

よろしくお願いします。



136 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:53:01 ]
>>135
msdn.microsoft.com/ja-jp/library/default.aspx

137 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:59:35 ]
マウントといったら、WNetAddConnection2しか思いつかん

138 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 06:05:30 ]
それでいい。WebDAV のフォルダもマウントできるし。

139 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 11:42:31 ]
>>99
なんか微妙に誤解があるような気が……
ウィンドウプロシージャをメッセージ経由で実行する場合は、
必ずウィンドウを作成したスレッドで実行されるのがwindowsの仕様です。
その場合は、このスレッドがSleepさせられているため、SendMessageで
デッドロックするわけです。



140 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:17:19 ]
スレッド間でSendし合うからだろ

141 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:29:26 ]
sendし合うのは問題ない。
別スレッドにSendMessageして、send先から返ってくるのを待ってる間は
別スレッドからのSendMessageを受け付ける事ができる。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<100KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef