Win32API質問箱 Build37

このエントリーをはてなブックマークに追加
1東トルキスタンと言ってみるテスト
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
2デフォルトの名無しさん:2005/11/13(日) 21:31:29
3デフォルトの名無しさん:2005/11/13(日) 21:32:53
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
ttp://pc.2ch.net/tech/kako/991/991576947.html
4デフォルトの名無しさん:2005/11/13(日) 21:36:05
5デフォルトの名無しさん:2005/11/13(日) 23:13:03
  ∧_∧
 ( ´∀`) < 0x25
6デフォルトの名無しさん:2005/11/14(月) 00:07:10
>マルチメディアタイマーは割り込みじゃなくてコールバック。
>詳しくは知らないが、>>995みたいなビジーループ回してるんじゃないかな?
CPU1つしかないのにビジーループでなんてどうやってまわすの?
そんなことやったら、精度が10msで測ったらどっかで止まるよね?
7デフォルトの名無しさん:2005/11/14(月) 00:13:38
>>6
そのようなことを不思議に思うのであれば、
OSがms単位以下で各スレッドにタイムスライスを分配することも不思議に思うべきではないか?
8デフォルトの名無しさん:2005/11/14(月) 00:17:58
>>7
だから、やってねぇんだよ、そんなことは。
ビジーループでなんてまわしてねぇの。
9デフォルトの名無しさん:2005/11/14(月) 00:26:11
あるフォルダ内のファイル名をパス付きでリストとして得たいのですが、どの辺
のAPIを調べたら良いでしょうか?
10デフォルトの名無しさん:2005/11/14(月) 00:33:09
11デフォルトの名無しさん:2005/11/14(月) 00:35:15
12デフォルトの名無しさん:2005/11/14(月) 00:36:17
>>6
ビジーループの話なら、回せるからプリエンプティブマルチタスクって言うんだよ。
マルチメディアタイマーの話は、書いた通り、詳しくは知らん。知ってる奴解説よろ。
13デフォルトの名無しさん:2005/11/14(月) 00:37:05
14デフォルトの名無しさん:2005/11/14(月) 00:37:43
>>12
それって見た目の話でしょ?
15デフォルトの名無しさん:2005/11/14(月) 00:39:47
>>14
そうだね。
結局、OSレベルでの実装じゃその切り替えもメッセージでやるしかない。
16デフォルトの名無しさん:2005/11/14(月) 00:41:50
>>14
は?

1CPUで本当の並列処理しないと「プリエンプティブ」でないと言うつもりなら、
世の中にはプリエンプティブマルチタスクなOSは存在しないないことになるんだが?
17デフォルトの名無しさん:2005/11/14(月) 00:45:05
>>16
いやいや、プリエンプティブかどうかってところは争ってないでしょ?
よく読まないと無駄な論争することになるよ。
18デフォルトの名無しさん:2005/11/14(月) 00:45:07
メッセージ厨が湧いているようだな(w
CriticalSectionやらFiberやら知らんのだろうな、こういう厨は。
19デフォルトの名無しさん:2005/11/14(月) 00:47:45
>>17
すまん、さっき酒入れたもんで。
メッセージ経由だとマルチメディアタイマーの精度が生きない気がするけどなあ。
まあエロイ人に任せて寝る。
20デフォルトの名無しさん:2005/11/14(月) 00:48:53
>>19
>マルチメディアタイマーの精度が生きない気がするけどなあ
で、実際生きてねーじゃんw
どないなっとんねん>MS
って話なわけよw
21デフォルトの名無しさん:2005/11/14(月) 00:54:04
>>20は本物の厨なのか・・・。哀れになってきた。
22デフォルトの名無しさん:2005/11/14(月) 00:56:07
マルチメディアタイマとWM_TIMERタイマの区別ができてない人が滞在するスレはここですか?
23デフォルトの名無しさん:2005/11/14(月) 00:56:12
とりあえずマルチメディアタイマで検索して
ttp://www.sm.rim.or.jp/~shishido/mmtimer.html
を読んでみたぞ
どうやら1ms以下でも計測できるらしい
マイクロ秒単位まで測れるとかも書いてるぞ
24デフォルトの名無しさん:2005/11/14(月) 01:00:47
20は何を言ってるんだ?
マイクロ秒まで測れるなら十分だと思うが
25デフォルトの名無しさん:2005/11/14(月) 01:09:49
いや、パフォーマンスカウンターはタイマじゃないから。
26デフォルトの名無しさん:2005/11/14(月) 01:12:42
マルチメディアタイマに対応してないマザーボードは多いから
配布するソフトには向いてないね
27デフォルトの名無しさん:2005/11/14(月) 01:50:37
>>26
今世紀に出たマザーで対応してないのあったら、1つでいいから
実例を挙げてくれ。
28デフォルトの名無しさん:2005/11/14(月) 02:15:25
まあしかし、いずれにしろ現在時刻を_やμ秒の精度で取得するのは無理ってことだな。
29デフォルトの名無しさん:2005/11/14(月) 02:24:11
よし、じゃあナノ秒で取得しよう
30デフォルトの名無しさん:2005/11/14(月) 02:39:59
エロゲープログラマの権威はポーリングをすすめてたよ
31デフォルトの名無しさん:2005/11/14(月) 06:49:47
>>23
でも、実際そんなことできてないじゃん。
やってみ?できないから。
32デフォルトの名無しさん:2005/11/14(月) 07:24:05
だとしてもその理由はマルチメディアタイマがメッセージベースだからではない
33デフォルトの名無しさん:2005/11/14(月) 07:25:20
( ゚д゚)ポーリング
34デフォルトの名無しさん:2005/11/14(月) 07:35:06
何だか時刻計取得と、定周期実行の話が混ざってるような。
35デフォルトの名無しさん:2005/11/14(月) 08:12:52
おまいらまだやってたんかい
36デフォルトの名無しさん:2005/11/14(月) 08:16:41
>>30
誰だよ、それ
37デフォルトの名無しさん:2005/11/14(月) 09:21:05
ちょっと質問なんですが、WinAPIで文字列を表示するときに

LPTSTR ctStr = TEXT("あいうえおabcかきくけこdefさしすせそght");
DrawText(hdc , ctStr , -1 , &rect , DT_CENTER | DT_WORDBREAK );

でも

char *ctStr = TEXT("あいうえおabcかきくけこdefさしすせそght");
DrawText(hdc , ctStr , -1 , &rect , DT_CENTER | DT_WORDBREAK );

でも、クライアントエリアに表示されるのはどちらもきちんと 

あいうえおabcかきくけこdefさしすせそght

と表示されます。

自分の認識としては、char*で表示させると2バイト文字は文字化けしてでると思っていたのですが
どうしてきちんと表示されるのでしょうか?

もしどちらでもいいのであれば、LPCTSTRなどの存在する意味が分からないのですが…。 
38デフォルトの名無しさん:2005/11/14(月) 09:33:01
>>37
_UNICODEやUNICODEを#defineしてない場合はその二つは同じ物だ
同じ結果になるのは当たり前

char型がそもそも文字を扱うための型なのだから、それで文字化けしたらおおごとだよ

charはシングルバイト文字を扱うための型で、それ以上でもそれ以下でもない
一方LPCTSTRは、プリプロセッサの定義でchar*型とwchar_t*型のどちらかになる
char *ctStr = TEXT(" ")としていて、UNICODEを使おうとした場合型が違うとエラーが出るが
LPCTSTR ctStr = TEXT(" ")とすれば、UNICODEでもANSIでもエラー無く使える
汎用性の問題だな
39デフォルトの名無しさん:2005/11/14(月) 09:37:52
wide character stringはstrのn文字目にアクセスするのに常にstr[n]でいけると思ってるような、
一生multi byte character stringなんか目にすることのない馬鹿な欧米人プログラマでも多言語
対応プログラムが書けるようにするためにある。
40デフォルトの名無しさん:2005/11/14(月) 10:13:09
38,39さんどうもです。

すみません。UNICODEで書くとは具体的にどういったことをいうのでしょうか。
#define UNICODEとすれば、TEXT("")の文字列は全てUNICODEになるという解釈でよろしいのですか?
例えば、<window.h>の上に#define UNICODEとすれば、文字列は全てUNICODEとして扱われる
といったかんじなんでしょうか。

あと汎用的ということなのでVC++使ってみました。
しかしながらPCTSTR ctSrt = TEXT("")でビルドすると
PCTSTRは定義されていません。とエラーが出ます。

インクルードファイルは、<windows.h>と<stdio.h>の二つです。
<window.h>でPCTSTRは通ると思ったのですが、これはUNICODEの定義と何らかの関係があるのでしょうか。
ヘルプにはPCTSTRはUNICODEが定義してあると、PCWSTRそうでないとPCSTRになると解釈したのですが…。
41デフォルトの名無しさん:2005/11/14(月) 12:17:36
SetFocus(hwnd)命令についての質問です。
この命令は、既にhwndにフォーカスがある場合はWM_SETFOCUSメッセージを生成しない
のでしょうか。検証しているプログラムの挙動を見る限りそうではないかと思うのですが、
MSDNライブラリ等にはそのような記述が見あたりませんでした。よろしくおねがいします。
42デフォルトの名無しさん:2005/11/14(月) 12:18:02
現在ソケットプログラム勉強中なのですが、ローカルなネットワーク(192.168.0.XX)のような
のではなく、グローバルなネットワーク(インターネット側から見たアドレス)を取得したいのですが、
解決方法をどなたかご存知ありませんか。自分のアドレスをインタネット側からみたIPアドレスを知りたいのですが。。
環境はVC.net + SDKです。
43デフォルトの名無しさん:2005/11/14(月) 12:28:18
>>40
アホすぎる
掲示板で説明するのは面倒すぎるから本でも探して自分で勉強しろ
44デフォルトの名無しさん:2005/11/14(月) 12:30:45
ルータ等でNAPTのようなアドレス変換を行っている環境の話ならインターネット上のホスト(ex.確認君)に聞くか、さもなくば変換を行っているルータ自身に聞くしかない。
45デフォルトの名無しさん:2005/11/14(月) 12:46:12
>>44
返信ありがとうございます。
たとえば、インターネット側にあるサーバー(http://○○○.ne.jp)とかならサーバーに繋いだ際、
クライアント(インターネット側)アドレスは知る命令はご存知ありませんか。初歩的な質問ですみません。
46デフォルトの名無しさん:2005/11/14(月) 12:50:03
>>44
うわ・・。すみません。わかりました。。
ちょっと記憶が混乱してるみたいです。listen関数のアドレスもらえばいいだけですね。。
すみません。。
47デフォルトの名無しさん:2005/11/14(月) 13:15:15
>>42
UPnP
48デフォルトの名無しさん:2005/11/14(月) 13:36:04
>>43
すみませんでした。あきらめたいと思います。
49デフォルトの名無しさん:2005/11/14(月) 14:00:18
諦めるようじゃそもそもだめだな
50デフォルトの名無しさん:2005/11/14(月) 15:48:45
すみません、ファイル一覧に関してです。

任意のディレクトリに存在する、ファイルの一覧(サブディレクトリなども含んでも良い)を取得したいのですけど。
MSはこのような要求を満たすAPIは提供しているのでしょうか
51デフォルトの名無しさん:2005/11/14(月) 15:49:41
52デフォルトの名無しさん:2005/11/14(月) 15:50:35
あらやだorz
53デフォルトの名無しさん:2005/11/14(月) 18:18:10
質問です。

文字の選択後に右クリックで、以下の部分に自作のアプリを埋め込んで選択肢に入れたいのですが
ググル先生やMSDNでAPIを調べてもとんと分かりません。調べる単語がわからないので助けて下さい

切り取り
コピー
貼り付け
すべて選択
----------
ぬるぽ
Google検索
54デフォルトの名無しさん:2005/11/14(月) 18:24:36
レジストリで設定するのかな?
55デフォルトの名無しさん:2005/11/14(月) 18:32:53
只のTrackPopupMenue()なら作れるんだけど
56デフォルトの名無しさん:2005/11/14(月) 18:38:51
Menue
57デフォルトの名無しさん:2005/11/14(月) 18:39:46
nるぽ
58デフォルトの名無しさん:2005/11/14(月) 18:41:13
ググル先生はどうやってIEのMenueをいじったのか教えてください
59デフォルトの名無しさん:2005/11/14(月) 18:43:19
        ぬるぽワッショイ!!
     \\  ぬるぽワッショイ!! //
 +   + \\ ぬるぽワッショイ!!/+
                            +
.   +   /■\  /■\  /■\  +
      ( ´∀`∩(´∀`∩)( ´ー`)
 +  (( (つ   ノ(つ  丿(つ  つ ))  +
       ヽ  ( ノ ( ヽノ  ) ) )
       (_)し' し(_) (_)_)
60デフォルトの名無しさん:2005/11/14(月) 18:53:18
>>53
何の文字列を選択して右クリックなんだ?

自作アプリで表示してる文字列なら自分で出す必要があるし、
そうでないならそのアプリ次第。
一般的な方法なんてない。
61デフォルトの名無しさん:2005/11/14(月) 19:00:12
>>60
.htmlをInternet Explorerで開いたときの、反転した文字列でつ
62デフォルトの名無しさん:2005/11/14(月) 19:11:14
諦めろ
63デフォルトの名無しさん:2005/11/14(月) 19:15:11
>>60
レスありがとうございました。
IEはやめときます。猫でも〜のテキストエディタでtryしてみます
64デフォルトの名無しさん:2005/11/14(月) 19:44:46
質問させてください。

ポップアップメニューを表示する際に、状況によって
メニューの文字列の一部を置き換えたいと思っています。
例えば %1を削除 → ファイルAを削除 のように。

現在、ON_UPDATE_COMMAND_UI() と CCmdUI を用いていますが、
元の文字列を取得するメソッドがありません。
CCmdUI::m_pMenu を使おうとしましたがこれは NULL になっていました。

これを実現するにはどうするのが正しいのでしょうか。
65デフォルトの名無しさん:2005/11/14(月) 19:49:05
自分で設定したものなのに自分で分からないとはこれ如何に
66デフォルトの名無しさん:2005/11/14(月) 19:53:41
どうしようもないな
67デフォルトの名無しさん:2005/11/14(月) 19:53:55
ライパンコ使った?
68ヒントになるかな?:2005/11/14(月) 19:55:33
6964:2005/11/14(月) 20:01:00
>>65
私へのレスでしょうか?
メニューはリソースで定義されているものを表示しています。
折角 ON_UPDATE_COMMAND_UI によってリソース定義とイベント処理が分離されているのですから、
イベント処理からリソースを読むということはあまりしたくありません。

別の意味だったらすみません。
70デフォルトの名無しさん:2005/11/14(月) 20:25:07
前スレで出たtimeBeginPeriod良さげだと思ったが、
SetTimerのWM_TIMERの精度には効果なしか・・。残念。
ttp://homepage1.nifty.com/toro/dlw32api.html
71デフォルトの名無しさん:2005/11/14(月) 20:41:53
>>53
ウィンドウをフックしろ hook windows
72デフォルトの名無しさん:2005/11/14(月) 20:52:29
>>64
GetMenuItemInfoは?
7372:2005/11/14(月) 20:53:26
ゴメンなんでもない
ちょっと寝ぼけてた

変更後も元の値を知りたいのであれば、別のところに保存しておくしかないだろう
74デフォルトの名無しさん:2005/11/14(月) 21:22:39
>>64
SetMenuStringとかじゃないのか?
で、英語勉強したのか?
75デフォルトの名無しさん:2005/11/14(月) 21:23:32
SetMenuItemStringだったりして
7664:2005/11/14(月) 21:23:58
すみません、置き換えをした後で置き換え前の文字列が欲しいという意味ではなくて、
そもそも置き換えをするためのベースの文字列が欲しいということです。

それともうひとつすみません、勘違いしていました。
今手元の環境でテストしてみたところ、
CCmdUI::m_pMenu が NULL になるのはメニューがクリックされた時に呼ばれる場合で、
メニューが表示される前に呼ばれる場合はちゃんと値が入っていました。
そこで

void CMenuTestApp::OnUpdateEditTest(CCmdUI* pCmdUI)
{
  if(pCmdUI->m_pMenu)
  {
    CString str;
    pCmdUI->m_pMenu->GetMenuString(pCmdUI->m_nID, str, 0);
    str.Replace(_T("%1"), _T("ファイルA"));
    pCmdUI->SetText(str.GetString());
  }
}

のようにしたらうまくいきました。
お騒がせしました。
77デフォルトの名無しさん:2005/11/14(月) 21:27:50
>>76
「ありがd」の心を忘れないで。
78デフォルトの名無しさん:2005/11/14(月) 21:29:38
>>77
>>76←このレスでいいと思う。
79デフォルトの名無しさん:2005/11/14(月) 21:34:57
>>68
>>71
両氏の技を今勉強しています。
レス有難うございます。なんだか楽しいです^^
80デフォルトの名無しさん:2005/11/14(月) 21:40:00
>>33
ポーリングなんて半端じゃなく時間のかかるものやってるわけないだろwアホかw
81デフォルトの名無しさん:2005/11/14(月) 21:43:02
>>80
俺はタイマは一定時間毎に取得してるだけだと思うけどな。
82デフォルトの名無しさん:2005/11/14(月) 21:43:27
あ、つまりポーリングだと思う。
83デフォルトの名無しさん:2005/11/14(月) 21:51:37
自作のアプリをIEの右クリックメニューに追加するだけなら
そのためのアプリがあるみたいだからそれを使えばいいし、
自作のアプリ自体にその機能をつけたいならレジストリをいじればいい
ttp://www.rocaz.net/rclick/howtomenu.html
84デフォルトの名無しさん:2005/11/14(月) 21:52:51
CreateStatusWindow関数でステータスバーを作ったのですが、
http://www.borujoa.org/upload/source/upload3279.jpg
の下の方の様になってしまいます。
上の方の様にしたいのですがどうすればよいでしょうか。
よろしくお願いします(^o^)
85デフォルトの名無しさん:2005/11/14(月) 21:53:33
ボーリングってあのボーリング?ストライクとかスペアとかあるやつ?
86デフォルトの名無しさん:2005/11/14(月) 21:55:44
>>85そうだよ
87デフォルトの名無しさん:2005/11/14(月) 22:02:08
>>84
http://homepage2.nifty.com/winfaq/wxp/hints.html#1347
従来のアプリケーションを、XP の新 UI に対応させるには?
88デフォルトの名無しさん:2005/11/14(月) 22:33:07
>>84
マタオマエカ
89デフォルトの名無しさん:2005/11/14(月) 22:40:20
jpgにしてきたのか
90デフォルトの名無しさん:2005/11/14(月) 22:47:12
>>85
ボーリングは穴掘り
玉転がしはボウリング
91デフォルトの名無しさん:2005/11/14(月) 23:25:18
MAX_PATH って何文字でしょうか?
printfさせてみようと思って %d に渡したら、int から const char* に変換できませんと怒られてしまう…
92デフォルトの名無しさん:2005/11/14(月) 23:27:51
260だが。そのエラーになるprintfのコードはちょっと気になる。
9391:2005/11/14(月) 23:32:26
>>92
ありがとうございます。
後になって気づいたのですが、printfを使った自作のマクロが腐っていたのに気づきました。確認できました。すみません。
94デフォルトの名無しさん:2005/11/14(月) 23:49:06
>>91
MAX_PATHをGREPで検索するだけでいいんジャマイカ?
95デフォルトの名無しさん:2005/11/15(火) 00:39:25
http://pc8.2ch.net/test/read.cgi/tech/1131282679/l50

237 :デフォルトの名無しさん :2005/11/14(月) 23:38:29
さあ話をそらしにかかりました
96デフォルトの名無しさん:2005/11/15(火) 00:40:21
97デフォルトの名無しさん:2005/11/15(火) 00:46:36
馬鹿が馬鹿を論破して自慢したがってるんだろ?
ほっとけ。
98デフォルトの名無しさん:2005/11/15(火) 01:58:11
正直2ちゃんってレスポンスがいいだけだよね

急ぎじゃなけりゃ他で聞いたほうがマシだよ質問者の皆さん
くだらない煽りとかネタとかのが多いし
99デフォルトの名無しさん:2005/11/15(火) 02:08:18
Windows上でIPv6に対応したLinuxのようなtraceroute(UDP撃ってICMP受ける)を作りたいのですが、
IPv4はできたのですが、IPv6がうまいこといきません。
WinsockでIPv6のRAWモードソケットってちゃんと使えるのでしょうか?
やっぱりWinPCapが必要なのかな...
100デフォルトの名無しさん:2005/11/15(火) 02:52:22
質問です。

ShiftJISの文字列から、第一水準・第二水準以外の文字コード
(機種依存文字・第三水準・第四水準・補助漢字・外字等)
を削除したいのです(契約しているフォントの問題)。

適切なAPI、もしくは何かうまい判定方法はありますでしょうか?

対象はWindows98以降、開発環境はVC++2003です。
101デフォルトの名無しさん:2005/11/15(火) 05:25:47
>>81
お前の妄想なんかどうでもいい
102デフォルトの名無しさん:2005/11/15(火) 05:46:26
急ぎでも他の方がいいと思うんだけど。
103デフォルトの名無しさん:2005/11/15(火) 07:45:16
>>100
区点コードに直してから判定するといいかと。
104デフォルトの名無しさん:2005/11/15(火) 09:00:45
>>100
APIは全然関係ない。
105デフォルトの名無しさん:2005/11/15(火) 11:29:03
マルチスレッドプログラムの排他制御について質問があるんですが、

glb_mutex = CreateMutex(NULL, FALSE, L"mumu");

としてミューテックスハンドルをグローバル変数にして
各スレッドでWaitForSingleObject(glb_mutex, INFINITE), ReleaseMutex(glb_mutex);
としても合法でしょうか?
それとも各スレッドごとにOpenMutex()として別々に
ミューテックスハンドルを作成してやる必要があるのでしょうか?
106デフォルトの名無しさん:2005/11/15(火) 11:33:24
>>105
同期オブジェクトはプロセス内ならどのスレッドでも使えるよ。
つーかスレッド間同期のためにあるんだから使えて当然。
107デフォルトの名無しさん:2005/11/15(火) 11:36:24
つか、単一プロセスで完結する同期に名前つきオブジェクト使うなよ
108デフォルトの名無しさん:2005/11/15(火) 11:39:21
プッ
109デフォルトの名無しさん:2005/11/15(火) 11:42:46
質問なのですが、お願いします。
今、リストビューのLVS_OWNERDRAWFIXEDを使ってDRAWITEMしてるのですが、
ディバイダー(カラム)のサイズを変更すると再描画が起こるのは分かりますが、
どうしてもちらついてしまいます。
LVS_OWNERDRAWFIXEDを知っている方で、ディバイダーのサイズを変更しても
ちらつかない方法を知ってる方いませんか。 WM_ERASEBKGNDや、知ってるかぎり
やってみたのですが。。
110109:2005/11/15(火) 11:44:47
環境は、VC.net + SDK です。
よろしくお願いします。
111デフォルトの名無しさん:2005/11/15(火) 11:47:11
>>109
WS_CLIPSIBLINGSをウィンドウスタイルに加えたらどう?
112105:2005/11/15(火) 11:51:23
皆さんすばやいレスありがとうございました。
今までReleaseMutex(glb_mutex)を呼び出すと
WaitForSingleObject()を呼んでいても
GetLastError()が288を返してきていたので
この原因はグローバル変数にあるかと思っていましたが、
そうでないとわかり安心しました。

CreateMutex()自体は成功していました。

実はWaitForSingleObject()が
WAIT_ABANDONED WAIT_OBJECT_0 WAIT_TIMEOUT
のいずれかを返すものとして考えていたのですが、
WAIT_FAILEDを返す場合もあるとわかったので
こちらが返されていないか調べるようにします。

今は実験できる環境にいませんが試してから報告に来ます。

ではでは、
113109:2005/11/15(火) 11:54:40
>>111
試してみましたが、ダメみたいです。。
114109:2005/11/15(火) 11:56:50
あっ。ちらついているのは、ディバイダー(カラム)ではなくて、リストビューのアイテム郡です。。
ちらつきを取るのは難しいです。。
115デフォルトの名無しさん:2005/11/15(火) 13:21:42
それは無理だろう。
描画を全部カスタムドローで管理しても取れるかどうか。
116デフォルトの名無しさん:2005/11/15(火) 13:49:35
描画を全部自前にしてダブルバッファリング
117デフォルトの名無しさん:2005/11/15(火) 15:19:01
質問です。
GNUのLibiconvをVB6.0から利用できるようにしたいのだが、
stdcallでないために使用できないらしい。
ソースをなおしてみようかと思ったんだが、どう手をつけていいか..
教えてエロ(ry
118デフォルトの名無しさん:2005/11/15(火) 16:40:09
>>117
stdcallにするだけなら楽だが、iconv()はエラー通知用にerrnoを使用するし
引数もダブルポインタがあったりしてアレなので、
どのみちそのままではVBから使うには不適当。
VB用にラッパー関数を書くんだね。
119デフォルトの名無しさん:2005/11/15(火) 16:45:19
ていうかiconv()ポートせんでも
MlangのConvertINetString()でいいんじゃないかな。
IEの文字コード変換機能がそのまま使えるよ。
日本語エンコーディングのAutodetectも利用できる(IEが出来るんだから当然だが)
120デフォルトの名無しさん:2005/11/15(火) 17:05:50
日本語入力時の入力キーと打鍵時間を記録するプログラムを書いているのですが、

WM_KEYDOWN上でログを取ろうとすると、
時間は取れるのですが、wParamの中身が入力内容として使えません。
(何を入力しても0xE5が飛んでくる)

WM_CHARやWM_IME_CHARでは確定後にまとめて情報が来るため、
BSキーなどで修正をした場合、そこの入力が無視されてしまいます。
(実のところ、そのローマ字入力を修正した部分周りの情報が欲しいです)

ローマ字入力中の打鍵列をリアルタイムに取得するには
何かいい方法はないでしょうか。
121デフォルトの名無しさん:2005/11/15(火) 17:15:37
日本語入力中はIMEがWM_KEYDOWNの情報を書き換えてしまうから
フックをかけてIMEより先に情報を取得するのがいいんじゃね?
IMEより上位にフックできるのか試してないからわからんが
122デフォルトの名無しさん:2005/11/15(火) 17:16:04
ImmGetVirtualKey
123121:2005/11/15(火) 17:18:05
そんな関数があったのか
124デフォルトの名無しさん:2005/11/15(火) 17:33:15
>>121-123
ありがとうございます!
MSDNで早速調べてみたところ、まさにそのまんまの関数でした。

ただ、返り値が元の仮想キーコードとなるとあったのですが

if(wp == VK_PROCESSKEY){
  printf("keycode: %x\n", ImmGetVirtualKey(hWnd));
}

としてクイックコンソールで確認してみたところ、
依然として0xE5が出力されてくれます( 'A`)
イージーミスの可能性もあるので、もうちょっと色々試してみます。
本当にありがとうございました。
125117:2005/11/15(火) 17:41:00
>>118-119
mlangのConvertINetStringから、ADODBのStreamにまで流れ着きました。('A`)
おかげでできました。d
126デフォルトの名無しさん:2005/11/15(火) 17:46:11
>>124
if(wp == VK_PROCESSKEY){
  printf("keycode: %x\n", MapVirtualKey(LOBYTE(HIWORD(lParam)),1));
}
こんなんでもいいみたい。
127デフォルトの名無しさん:2005/11/15(火) 18:14:25
memsetのWin32SDK版は何ですか?
もち、TCHAR対応で
128デフォルトの名無しさん:2005/11/15(火) 18:17:50
>>126
ありがとうございます、そっちの方法だと行けました!
ImmGetVirtualKey()が成功しなかった理由はまだちょっと判らないですが、
コレ使って何とか先に進めそうです。
助かりました。
129デフォルトの名無しさん:2005/11/15(火) 18:46:36
>>127
memset()は文字列を扱うための関数ではありませんが。
130デフォルトの名無しさん:2005/11/15(火) 19:08:26
>>127
VC++のCランタイムにはwmemsetもあるが129の理由でTCHAR版はない。
自分でマクロ作れ。

あるいはC++なら<algorithm>のstd::copyも使える。
131デフォルトの名無しさん:2005/11/15(火) 19:32:10
>grep memset string.h
File string.h:
_CRTIMP void * __cdecl memset(void *, int, size_t);
void * __cdecl memset(void *, int, size_t);
132デフォルトの名無しさん:2005/11/15(火) 20:42:04
>>131
wmemsetは<wchar_t.h>
133デフォルトの名無しさん:2005/11/15(火) 20:52:27
つーか、string.hだからなんだって言うんだ?w
134デフォルトの名無しさん:2005/11/15(火) 21:06:52
少なくともwin32apiで無いことはわかるな。
135デフォルトの名無しさん:2005/11/15(火) 21:17:49
VOID FillMemory (
PVOID Destination, // メモリブロック
SIZE_T Length, // メモリブロックのサイズ
BYTE Fill // 書き込みたい値
);

つーのはあるけどな。
136デフォルトの名無しさん:2005/11/15(火) 21:21:19
>>135
でもTCHARでないから127の希望とは違うだろうな。
137デフォルトの名無しさん:2005/11/15(火) 21:23:37
それがAPIにある必然性は感じないな。
138デフォルトの名無しさん:2005/11/15(火) 21:24:40
みんな「な。」で終わってるな。
139デフォルトの名無しさん:2005/11/15(火) 21:26:12
>>137
激しく同意だな。
140デフォルトの名無しさん:2005/11/15(火) 21:27:02
どうせ中でmemset呼んでるだけだろうしな。
141デフォルトの名無しさん:2005/11/15(火) 21:29:40
そもそもmemsetみたいな関数がTCHARを引数に取ることがありえないと思うな。
142デフォルトの名無しさん:2005/11/15(火) 21:32:51
でも、memsetとwmemsetがあって_tmemset?が無いのも、「あれ?」と思うな。
143デフォルトの名無しさん:2005/11/15(火) 21:37:03
CopyMemory,MoveMemory,FillMemory,ZeroMemoryあたりはともかくSecureZeroMemoryは覚えておこうな。
144デフォルトの名無しさん:2005/11/15(火) 21:42:36
>>140
正解。マクロでmemsetになる。
一応kernel32にRtlFillMemoryのエントリポイントもあるけどな。
145デフォルトの名無しさん:2005/11/15(火) 21:45:04
お前ら、もうその話はするな。
146デフォルトの名無しさん:2005/11/15(火) 21:48:50
>>143
SecureZeroMemory()は低速。
これは、不具合の原因を特定できるまでの暫定処置だった。
原因が特定された現在では、以下のコードが望ましい。

inline void* MemSet( void *dest, int c, size_t count )
{
memset(dest, c, count);
*(volatile char*)dest = *(volatile char *)dest;
return dest;
}


↓詳細は以下URLで
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdncode/htm/secure10102002.asp
147デフォルトの名無しさん:2005/11/15(火) 21:50:51
>138をスルーしつつ、スタイルは踏襲しているんだな。
148デフォルトの名無しさん:2005/11/15(火) 21:55:40
>>146は見なかったことにしような。
149デフォルトの名無しさん:2005/11/15(火) 21:56:22
PSDKのSecureZeroMemory()の実装を以下に示す。

---winnt.h---
FORCEINLINE
PVOID
RtlSecureZeroMemory(
    IN PVOID ptr,
    IN SIZE_T cnt
    )
{
    volatile char *vptr = (volatile char *)ptr;
    while (cnt) {
        *vptr = 0;
        vptr++;
        cnt--;
    }
    return ptr;
}

---winbase.h---
#define SecureZeroMemory RtlSecureZeroMemory
150デフォルトの名無しさん:2005/11/15(火) 21:56:51
あきまへんがな。
151デフォルトの名無しさん:2005/11/15(火) 21:57:59
普段から空気の読めないやつと言われているんだろうな。
152デフォルトの名無しさん:2005/11/15(火) 22:00:53
お前らいい加減にしろよな。
153デフォルトの名無しさん:2005/11/15(火) 22:01:36
お、おこられちゃったんだな。
154デフォルトの名無しさん:2005/11/15(火) 22:04:29
お前ら、>>146のリンク先は必ず読んでおけ。
memset() の最適化処理に伴う予期しない最適化について記述されている。
155デフォルトの名無しさん:2005/11/15(火) 22:26:26
>>146のリンク先の一番下のヤツはどこが欠陥なの?

な。
156デフォルトの名無しさん:2005/11/15(火) 22:33:16
事情通を気取った>>143が赤っ恥をかいたのは気の毒だが、
みんなの知識向上に寄与したから誉めてやってもいいと思う。
157デフォルトの名無しさん:2005/11/15(火) 22:40:05
ななななななななななななななななななななななななな
158デフォルトの名無しさん:2005/11/15(火) 22:47:24
「な」じゃなくて「な。」なんだな。
159デフォルトの名無しさん:2005/11/15(火) 23:14:24
>>146
>これはオプティマイザのバグだ!と叫んで通りに飛び出すのはちょっと待ってください。

ちょっとワロタ
160デフォルトの名無しさん:2005/11/15(火) 23:29:33
>>87
ありがとう^^^^^^^^^^^^^^^
161デフォルトの名無しさん:2005/11/16(水) 00:37:51
>>159
今度、リリースビルドしたら動作しなくなったとかいう質問者に言ってみるよ!
162デフォルトの名無しさん:2005/11/16(水) 02:29:44
メニューとかツールバーとか作ってみたら
http://up.mugitya.com/img/Lv.1_up12444.jpg
の上の奴の様になるんだけど、
真ん中や下の奴の様にしたいんだけど、どうすればいいかな?
よろしくお願いします(^o^)
163デフォルトの名無しさん:2005/11/16(水) 02:56:14



    ま た グ ラ デ 厨 か


164デフォルトの名無しさん:2005/11/16(水) 03:23:03
オーナードロー
165デフォルトの名無しさん:2005/11/16(水) 03:57:52
オーナードローじゃないよ
真ん中や下の奴はvisual styleで定義されたグラフィカルな色合い
だからvisual styleを変更すれば別のグラフィカルな色合いになる
166デフォルトの名無しさん:2005/11/16(水) 04:03:50
いや、ネタだったんだが。
167デフォルトの名無しさん:2005/11/16(水) 06:42:44
>>166
調子のんなよカス(^o^)
168デフォルトの名無しさん:2005/11/16(水) 06:53:06
    .__
   ヽ|・∀・|ノ
    |__|
     | |
     調子
     調子
     調子
     調子
     調子
     調子
     調子
     調子
     調子
     調子
169デフォルトの名無しさん:2005/11/16(水) 07:05:05
カスがカスって言っても説得力無いよ
170デフォルトの名無しさん:2005/11/16(水) 07:39:09
>>169
わかったからさっさと答えろや(^o^)
171デフォルトの名無しさん:2005/11/16(水) 07:43:10
あんまり調子こいてるとアクセス禁止にして貰うぞ
172168:2005/11/16(水) 07:48:58
>>171
すいません。
173デフォルトの名無しさん:2005/11/16(水) 08:04:41
さっさと答えろや雑魚ども(^o^)
174デフォルトの名無しさん:2005/11/16(水) 08:28:32
ったくしょうがねぇガキだなぁ。
ttp://www.microsoft.com/japan/msdn/windows/windowsxp/xptheming.asp
175デフォルトの名無しさん:2005/11/16(水) 09:25:36
win32apiとwindows sdkとplatform sdkの違いが分からないのだが誰か教えて
176デフォルトの名無しさん:2005/11/16(水) 09:33:29
windows sdkなんぞ聞いたこともない
177デフォルトの名無しさん:2005/11/16(水) 09:36:33
>>175
char[]に格納したときに消費するメモリの大きさが違う
178デフォルトの名無しさん:2005/11/16(水) 09:40:10
>>176
VistaのSDK
179デフォルトの名無しさん:2005/11/16(水) 09:45:24
sdk の検索結果のうち 日本語のページ 約 842,000 件中 1 - 10 件目 (0.29 秒)

SDKとは 【Software Development Kit】 ─ 意味・解説 : IT用語辞典 e ...
SDKをさらに検索. 全文検索 ・ 関連ニュース検索. SDK. あるテクノロジー(プログラミング 言語やAPIな
ど)を利用してソフトウェアを開発する際に必要なツールのセット。 フルスペル :, Software
Development Kit. IT派遣情報, ITエンジニア派遣なら ...
e-words.jp/w/SDK.html - 関連ページ
180デフォルトの名無しさん:2005/11/16(水) 13:54:12
実行ファイルのプロパティの「互換モード」の影響を受けずに
OSの情報を取得する方法があれば教えてください。
互換モードで起動するとGetVersionEx()で取得される情報も変更されてしまいます。
181デフォルトの名無しさん:2005/11/16(水) 14:01:51
>>180
9xとNT系の区別だけでいいなら、GetSystemDirectory()で取得した文字列から泥臭く判断するのはどう?
182181:2005/11/16(水) 14:07:02
あ、>>181だとXPがダメだ。
デスクトップのパスで判断するとか。
SHGetSpecialFolderPath(NULL, buffer, CSIDL_DESKTOPDIRECTORY, FALSE);
183デフォルトの名無しさん:2005/11/16(水) 14:07:10
version.dllのバージョン情報読むってのはダメか?
それすら騙されるなら、ファイルとして読み込んで自己解析とか。
184デフォルトの名無しさん:2005/11/16(水) 14:52:36
LPARAM型ってDWORDのポインタでしょうか・・すみません
185デフォルトの名無しさん:2005/11/16(水) 14:56:25
>>184
LPARAM は LPARAM だしょ
186デフォルトの名無しさん:2005/11/16(水) 14:59:45
ううん、質問が悪かったです。
WPARAM型は(私の環境では)32bit変数(DWORD型と同じ)
LPARAM型は・・?
てな具合です。
187デフォルトの名無しさん:2005/11/16(水) 15:02:59
File WTypes.h:
typedef LONG_PTR LPARAM;
typedef long LONG;
File wmsstd.h:
typedef LONG LONG_PTR;
188デフォルトの名無しさん:2005/11/16(水) 15:03:33
ヘッダファイルを読めばわかる・・・かも
32ビットでしょ
189デフォルトの名無しさん:2005/11/16(水) 15:06:11
>>186
どっちも単なる32bitのメモリ。

好きに使えばいい。
ただ、LPARAMは、何かのポインタを入れるのに使うことが多い、
というだけ。

たとえば
WM_CREATEのLPARAMは、CREATESTRUCT構造体へのポインタ
WM_NOTIFYのLPARAMは、NMHDR構造体へのポインタ
190デフォルトの名無しさん:2005/11/16(水) 15:07:50
わざわざ有り難うございます・・
今さっきも*lParamとしたのですが、無効な参照と吐いてくれたので。
すみませんでした
191189:2005/11/16(水) 15:07:55
>>186
もちろん、いま32bitというだけであって、
将来、MSは変える可能性があるから、絶対に32bitだとするのはあれだけど。
(まあ、互換性を考えるとまずない)
192デフォルトの名無しさん:2005/11/16(水) 15:10:02
今、というかx64 Editionなら64bitにもうなってるんじゃ?
193デフォルトの名無しさん:2005/11/16(水) 15:11:03
>>191
新しいヘッダファイルでは、
既に、64bitに対応できる定義に変わってるけど
194デフォルトの名無しさん:2005/11/16(水) 15:16:26
すでにWPARAMという名で32bitなわけだし。
195デフォルトの名無しさん:2005/11/16(水) 15:33:17
>>194
名前は16bitだと思うが‥‥
Word: 16bit
DoubleWord: 32bit
QuadWord: 64bit
196デフォルトの名無しさん:2005/11/16(水) 15:57:26
>>195も間違い。

以下は、MSDNの「データ型」(MFCの関連ページ)から

WPARAM
ウィンドウ プロシージャまたはコールバック関数への引数として渡される値。
Windows Versions 3.0 と 3.1 では 16 ビット値、Win32 では 32 ビット値。

LPARAM
ウィンドウ プロシージャまたはコールバック関数の引数として渡される 32 ビット値。
197デフォルトの名無しさん:2005/11/16(水) 16:05:16
いや別に間違ってはないだろ
「名前は」16bitだっつってんだから>WORD Parameter
198デフォルトの名無しさん:2005/11/16(水) 16:22:30
16bitOSから32bitOSになった時点で、
WORDという表現が紛らわしくなっただけでしょ
199仕様書無しさん:2005/11/16(水) 16:37:49
>>198
16bitだろうが、32bitだろうが、よほど偏屈なマイナー仕様のシステムでない
限り、WORDは16ビットだが?

intのサイズが未定義(環境依存)なのと区別ついてねぇんじゃないか?
200180:2005/11/16(水) 16:49:53
>>181-183
やはり、そういう裏ワザ的手法になってしまうんですね…。
みなさんのご助言をもとにいろいろ試行錯誤してみます。
どうもありがとうございました。
201デフォルトの名無しさん:2005/11/16(水) 16:59:53
なぜ195が194にレスしているのかが分からない
同じ事言っているのに
202デフォルトの名無しさん:2005/11/16(水) 17:04:00
いや同じことは言っていない
むしろ>>196>>195に対するレスがおかすい
203デフォルトの名無しさん:2005/11/16(水) 17:06:12
同じだよ
204デフォルトの名無しさん:2005/11/16(水) 17:07:29
>>202
すでにWPARAMという(16bitの)名で32bitなわけだし(いまさら拘ることはない)。

読解力無いな195も196も
205デフォルトの名無しさん:2005/11/16(水) 17:13:06
ゆとり世代はもう一度小学生からやり直したほうがいいな
206デフォルトの名無しさん:2005/11/16(水) 19:55:23
64bit Windowsの場合はどうなんだろうな
207デフォルトの名無しさん:2005/11/16(水) 22:03:36
質問です。ツールチップを表示しっぱなしにする方法がありましたら教えてください。
TTM_SETDELAYTIMEでTTDT_AUTOPOPを指定すれば時間を変更できますが、
最大30秒ちょっとしか表示を持続させることができないようなので・・・。
208デフォルトの名無しさん:2005/11/16(水) 22:08:54
自分でウィンドウ作って表示したほうがはやくね?
209デフォルトの名無しさん:2005/11/16(水) 22:16:07
>>207それおれもわからんかった
しょうがないから最大30秒で我慢してるw
210209:2005/11/16(水) 22:19:28
TOOLTIPのウィンドウをサブクラス化して
30秒を測ってると思われるWM_TIMERあたりのメッセージを横取りすれば
持続して表示できるかもしれないが、そこまで試さなかったw
211デフォルトの名無しさん:2005/11/16(水) 22:25:18
Janeとか専用ブラウザが実現してるな
212デフォルトの名無しさん:2005/11/16(水) 22:27:07
こんばんは、よろしくお願いします。
win32sdkです。
ダイアログボックスに、エディットコントロールを貼り付けていますが、
英数と、.コンマのみ入力にしたいのですが、
ime の変更を行いたいと思っています。
どのイベントにそれを書き込むのかが分かりません。
教えてください
hlmc = ImmGetContext(hwnd);
ImmGetConversionStatus(hlmc,&dwConv,&dwSent);
ImmSetConversionStatus(hlmc,IME_CMODE_FULLSHAPE, dwSent);
上記かきこもうとおもっています。
213デフォルトの名無しさん:2005/11/16(水) 22:27:42
昭和生まれださい
214デフォルトの名無しさん:2005/11/16(水) 22:29:19
ゆとり世代は(・∀・)カエレ!
215デフォルトの名無しさん:2005/11/16(水) 22:32:04
昭和生まれはジャガイモでも食ってろ
216デフォルトの名無しさん:2005/11/16(水) 22:32:44
昭和生まれと平成生まれの関係って韓国と日本の関係に似てるよね
韓国:日本=昭和生まれ:平成生まれ
217デフォルトの名無しさん:2005/11/16(水) 22:37:38
this thread 面白いne☆
218デフォルトの名無しさん:2005/11/16(水) 22:38:50 BE:268887694-##
スレッド関数は見つかったのですが、レス関数が見つかりません
219デフォルトの名無しさん:2005/11/16(水) 22:39:40
218's response 面白いne☆
220デフォルトの名無しさん:2005/11/16(水) 22:46:57
CreateDIBSectionで確保した描画メモリを
memcpy辺りでガッと初期化しようと思っているのですが、
1列の最後尾にゴミが無いってのは保証されてましたっけ?

古き良きDirectDrawの描画メモリと記憶が混在してしまって
221207:2005/11/16(水) 23:02:00
>>208-211
やはり標準的な手法は存在しないんですね。
自前の表示とサブクラス化、両方を検討してみます。
ありがとうございました。
222デフォルトの名無しさん:2005/11/17(木) 00:03:07
あるアプリの特定のウィンドウの内容を自分のウィンドウにビットマップコピーしたい場合、コピー元のアプリを表示させずに
コピってくる方法ないですか?スクリーン上では見えない座標にコピー元を移動したりと色々試したけど、WM_PAINTが発生しないから
ハードコピーしても期待したDCのビットマップが取得できないんですよね。無理?
223222:2005/11/17(木) 00:04:44
あ、WM_PAINT飛ばしてみればいいのか。。やってみます。
224デフォルトの名無しさん:2005/11/17(木) 00:16:35
>>223
まぁ、無理だと思うよ。
タスクマネージャなどの最前面アプリのしたにいるウィンドウや、
モニタから見切れているウィンドウで試せば判るが、理論DCを取得することは不可能。
225224:2005/11/17(木) 00:19:24
誤爆でした
226デフォルトの名無しさん:2005/11/17(木) 00:20:32
>>224
おっしゃる通りだめでした。FindWindow()で見つけたウィンドウに対してInvalidate()とUpdateWindow()呼んだけど×。
本当はOLEで自アプリに埋め込みたいのですが、OLEで埋め込むと必要ない部品までくっついてきてしまうので…
メインウィンドウの画面イメージだけ欲しいんですよね。このような要件を満たすことはできないですかね?
227デフォルトの名無しさん:2005/11/17(木) 00:21:38
>>225
うっそー誤爆なん!?w あまりにもタイムリー
228224:2005/11/17(木) 00:25:04
>>225
偽装誤爆申請しないでくれ。
229デフォルトの名無しさん:2005/11/17(木) 00:36:10
不可能じゃないし
230226:2005/11/17(木) 00:43:22
>>229
どうやるんですか?
231デフォルトの名無しさん:2005/11/17(木) 00:52:28
内緒(はぁと
232デフォルトの名無しさん:2005/11/17(木) 02:01:01
>>174
OpenThemeData試したけど無理だったよ(^o^)
詳しく教えてよー(^o^)
233デフォルトの名無しさん:2005/11/17(木) 02:24:19
>>232
礼の一言も言えねぇガキに教えてやるほど俺はヒマじゃねぇ。
他の優しいお方にでも頼め。
234デフォルトの名無しさん:2005/11/17(木) 02:28:05
>>233
>160
235デフォルトの名無しさん:2005/11/17(木) 03:49:24
>^^^^^^^^^^^^^^^
>(^o^)

コレウザイ
236デフォルトの名無しさん:2005/11/17(木) 04:04:15
>>235
すみませんでした。
237デフォルトの名無しさん:2005/11/17(木) 05:15:47
DLL内で作成したウィンドウの表示内容を、MDIウィンドウのビューに貼り付けたいのですが、どこから手を付けていいか解からず、困っています。
とりあえず、DLLのウィンドウ作成メッセージをフックするところから調べていますが、正しいのでしょうか?
ご教授お願いします
238デフォルトの名無しさん:2005/11/17(木) 05:16:02
>>237
^^
239デフォルトの名無しさん:2005/11/17(木) 09:14:17
もうお前らいいです(^o^)
雑魚ばっかだな(^o^)
240デフォルトの名無しさん:2005/11/17(木) 09:19:02
ピザでも食ってろ(^o^)
241デフォルトの名無しさん:2005/11/17(木) 09:45:57
>>237
SetParent()
242デフォルトの名無しさん:2005/11/17(木) 11:01:38
VS2005にあわせて、そろそろPlatform SDKの更新こねーかなー。
ヘルプブラウザ(dexplore.exe)がVS2005の世代のになればいーなー。
243デフォルトの名無しさん:2005/11/17(木) 15:50:57
ttp://www.it-engineer.jp/main/programing/sample/vc13.html
このサイトを参考にプログラムを作成しました。
このプログラムにおいて、(x,y)座標のRGB値を取得したいのですが、
どのようにすれば宜しいのでしょうか?

プログラムの関数grayScaleでは、
for (i = 0; i < xSize * ySize; i++) {
b = lpBMP[i * 3];
となってますが、これをどういじれば(x,y)で示せるのか分かりません。
244デフォルトの名無しさん:2005/11/17(木) 16:20:11
>>243
i = x + y * width;
245デフォルトの名無しさん:2005/11/17(木) 17:55:41
C/C++室の方から移住してきたんですけど、codepageでUTF-8って使えますか?setlocaleでセットできるのでしょうか?
ファイルパスをUTF-8で渡してくるアプリの移植で困っていまして。
できないならファイル操作のところでUTF16に自力変換してwopenとか*W系APIとかを自力で呼び出そうかと考えているのですが。
246デフォルトの名無しさん:2005/11/17(木) 18:31:42
WideCharToMultiByte(CP_UTF8,...)
247245:2005/11/17(木) 18:58:16
>>246
サンクス。変換して渡せばよいのですね。
googleさまにお尋ねしてみたところ、wfstreamというものを教えてくださいました。fstream継承して自分で書く羽目になるのかと思っていました。
ところで
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/mslu/winprog/microsoft_layer_for_unicode_on_windows_95_98_me_systems.asp
怪しげな拡張ですが、これを入れれば95とかでもFileW系とかWideCharの変換系とかのAPI呼べるんでしょうか?
なんか内部的にローカルなcodepageに変換しているだけのようにも見えますが・・・
私の扱っているアプリはUTF8ネイティブなのでANSIに変換すると情報が失われてしまうことがあります
あとFATの場合ってファイルパスは256バイト以内(Unicode128文字以内)しか使えないのでしょうか?
248デフォルトの名無しさん:2005/11/17(木) 19:11:26
MSLUはまぁ基本的に役に立たない。
249デフォルトの名無しさん:2005/11/17(木) 19:14:42
>>247
wfstreamも、コンストラクタのファイル名の引数の型はconst char *だったと思うが。
WideCharなどの関数は元から9xでも対応している。
ここに9xでも使えるUnicode系の関数の一覧がある。
http://msdn.microsoft.com/library/en-us/mslu/winprog/other_existing_unicode_support.asp?frame=true
(ほかにもCOM関連はもちろんUNICODEしかないな)

それ以外の関数の場合、MSLUは単にANSIへ変換しているだけ。
250デフォルトの名無しさん:2005/11/17(木) 19:47:21
>>249
streamの中身がwcharなだけなんですね。
C++初心者ですが、ヘッダファイルとGoogle様を参考にしてがんばって自分で作ってみます。
9x系は切捨ての方向でいきたいと思います。
今のままでもマルチバイトなファイル名がぶっこわれることがあるだけで、使えないわけじゃないし。
どうもありがとうございました。
251デフォルトの名無しさん:2005/11/17(木) 20:04:48
>>250
書き忘れたが、
wstream類も入出力先(ファイルなど)ではマルチバイト文字で、
入出力時にワイド文字へ変換しているからな。
252デフォルトの名無しさん:2005/11/17(木) 20:41:11
>>251
ありがとうございます。
その書き込みで気がついたのですが、データはANSI(UTF-8)のまま読み書きしなきゃいけないのでした。本家がデータはすべてUTF8で扱う方針のようですので。
とりあえずUTF-8ならASCIIと衝突することがないだろうという適当な方法ではあるのですが、国際化なんてほとんどそんなもんですよね。
C++/C室の方には書いたのですが、ファイル名をUTF8で渡すと壊れる文字があるのです。
bash+cygwin,MinGW,VC7&6のどれも同じように壊れるんで、libcrtかWin32APIのどちらかが悪さしてるみたいですが、そのへんを深く追求するのはやめました。
とりあえずファイルパスを扱う部分だけUTF16化して、適時変換を噛ませればよいかな、と。
9x系はどうしようもないですねぇ。
ファイル名をUnicode化せずにファイル内部にUTF-8なファイル名を持たせればASCIIでもいけるのですが、それだと手間が大きすぎますし…
253デフォルトの名無しさん:2005/11/17(木) 20:58:31
>>252
きっとまずいのはWinAPIだ。
CRTはおそらくファイル名の文字列に手を加えていないと思われるので、
WinAPIに原因がある。もちろん単にファイル名をUTF-8では受け付けない仕様で、
WinAPIには何の非もないのだが。
254デフォルトの名無しさん:2005/11/17(木) 21:04:56
>>248
でも、ないよりはましじゃね?
ちょっとした物ならこれで十分なこともあるし。
255デフォルトの名無しさん:2005/11/17(木) 23:26:55
>>245
俺も詳しいことは知らんが、LCIDとCodePageは分けて考えたほうが良いと思うな。
setlocale()やSetLocaleInfo()等で設定するのはLCID。で、Language Identifier
に紐づいているCodePage(エンコーディング)が自動的に設定されるんだと思う。
日本語なら932、という風にな。

VC++のヘルプにはsetlocale()で設定可能な言語識別文字列が載っているが、
そこにはUTF-8は無いし、OSレベルのLanguage Identifierにも無い。
から、「設定できない」と考えるべきだろう。

GetACP()があるんだから、SetACP()のような、エンコーディングだけ指定できる
APIがあると良かったんだがな。

>>252
Windows APIでANSI文字列(char*)を渡したときは、ACPでエンコードされていると
仮定される。何もしなければそれは932だから、UTF-8文字列なんぞ食わせりゃ
問題が生じて当然だな。
で、上で述べたようにACPをUTF-8に変更する方法はどうもなさそうだから、
やはりWCSに変換してW版のAPIを呼ぶのが一番穏当だろう。
9x系がどうしようもないのは確か。
256デフォルトの名無しさん:2005/11/17(木) 23:58:46
_tsetlocale() の影響下にある各種Cライブラリ関数は、
Win32APIの同機能に比べて低速なので期待したほど使えない。
多くの人は、_tcsicmp() を使うくらいなら、Win32APIの lstrcmpi() を使う。
257デフォルトの名無しさん:2005/11/18(金) 05:41:02
メニューバーとツールバーにヴィジュアルスタイルを適用する方法を教えてください
お願いします
お願いします
.manifestファイルおいても適用されません
このとおりです
258243:2005/11/18(金) 07:40:35
>>244
ありがとうございます。
ところで、なぜその式になるのでしょうか?
参考になるHPなどありましたら教えていただけますでしょうか?
こういう情報って、どのようなキーワードでググれば出てきますか?

無知&教えて君でスマソorz
259デフォルトの名無しさん:2005/11/18(金) 08:39:50
>>258
どちらかというと算数のお話し

3×2の画像は

123
456

の順でデータが並んでいる。あとは自分で考えれ
260デフォルトの名無しさん:2005/11/18(金) 08:55:05
>>259
そうだね、数学じゃなく算数レベルだねぇ(w
widthは横の幅、yは縦の位置、xは横の位置、だから解りやすくすると・・・
i = (width * y) + x;
261デフォルトの名無しさん:2005/11/18(金) 09:18:00
まぁ、実際に画像の加工をするなら
static inline offset(int x, int y, unsigned width) {return x + y * width;}
とでもしておくと便利なわけだが。
#どう便利かはスレ違いにつき割愛。
262デフォルトの名無しさん:2005/11/18(金) 10:11:51
アライメントのこと忘れてるヤツが多いのかな
263デフォルトの名無しさん:2005/11/18(金) 10:13:37
アライメット、あれは良い物だ
264デフォルトの名無しさん:2005/11/18(金) 10:16:02
>>262
そこはハマってもらうところだからなw
265デフォルトの名無しさん:2005/11/18(金) 11:07:19
4bitでRLEなDIBを食わせてやるぜ。
266デフォルトの名無しさん:2005/11/18(金) 11:08:37
ペッ
267デフォルトの名無しさん:2005/11/18(金) 11:16:43
メモリデバイスコンテキストの情報をビットマップファイルとして
ディスクに書き出すにはどうしたらよいのでしょうか?
268デフォルトの名無しさん:2005/11/18(金) 11:19:15
前略
CreateFile
WriteFile
CloseHandle
269デフォルトの名無しさん:2005/11/18(金) 11:37:40
>>262
そんなときにも>261のように関数にしておけばちょっと安心。
270デフォルトの名無しさん:2005/11/18(金) 12:41:37
>>267
デバイス非依存ビットマップを作成し、
それに対しBitBlt()などで記録したい情報をコピー。
それからDIBの内容を>>268の通りにする。
271デフォルトの名無しさん:2005/11/18(金) 13:07:14
>>268
「草々」で締めるんだよ
272デフォルトの名無しさん:2005/11/18(金) 13:10:52
そうそう、そうだったな
273デフォルトの名無しさん:2005/11/18(金) 14:09:57
bitmap の画像に文字を埋めこんでいますが、文字列の取得のためにダイアログを
出してやって入ます。これをエディタのようなインライン入力にしたいのですが、
これまでこの手の操作は edit control 任せだったので、APIもよく分かりません。
ImmCreateContext() とかを使うのかなと想像していますが、マウスでクリックし
た場所に入力ウインドウを表示するというのは、どういう API を使うのでしょうか。
この関連を調べろとかでも結構です。お教え下さい。
(猫でも...も見ました。IMM 設定操作のみのようです。)
274デフォルトの名無しさん:2005/11/18(金) 14:11:56
その場にeditを出してしまうのが手っ取り早い。
275デフォルトの名無しさん:2005/11/18(金) 15:39:12
エディットコントロールで使用するフォントをArialに変更しているのですが
Arialは日本語をサポートしていないため全角文字を入力すると文字化けしてしまいます。
この文字化けを防ぎたいのですが何か方法はありますか?
276デフォルトの名無しさん:2005/11/18(金) 15:40:30
答えわかってるんじゃん。
277デフォルトの名無しさん:2005/11/18(金) 15:57:00
>>275
・全角文字を入力させない。
・Arialを使わない。
278デフォルトの名無しさん:2005/11/18(金) 19:19:19
フォントリンクとかできねーの?
279デフォルトの名無しさん:2005/11/18(金) 19:32:45
UNICODEアプリにすればオケ。
280デフォルトの名無しさん:2005/11/18(金) 19:37:50
それは嫌です
281デフォルトの名無しさん:2005/11/18(金) 20:21:34
諦める
282デフォルトの名無しさん:2005/11/18(金) 21:09:59
自アプリのファイルの関連付けをプログラムから変更した場合に、
アイコンなどは再起動しないとエクスプローラなどに反映されないみたいですが、
これをすぐに反映させる方法をご存知でしたら教えてください。
283デフォルトの名無しさん:2005/11/18(金) 21:15:32
284デフォルトの名無しさん:2005/11/18(金) 21:19:39
>>283
( ゚Д゚)ハァ?
285デフォルトの名無しさん:2005/11/18(金) 21:20:44
>>282
SHChangeNotify
286243:2005/11/18(金) 21:29:04
>>259
>>260
なるほど! 解説、ありがとうございます!
287282:2005/11/18(金) 21:43:57
>>285
早速のお返事ありがとうございます。
意外と手軽に実現できたので驚きました。
本当に助かりました。
288デフォルトの名無しさん:2005/11/18(金) 21:58:57
>>283
m9(^Д^)プギャ---ッ
289デフォルトの名無しさん:2005/11/18(金) 22:25:07
>>283はたぶん私はこれからここへ行って調べてきますって言いたかったんだよ
290273:2005/11/18(金) 22:34:01
>>274
レス感謝。「確定」をどう受け取るかイメージがまだ。試して見ます。
291デフォルトの名無しさん:2005/11/19(土) 00:59:12
257 :デフォルトの名無しさん :2005/11/18(金) 05:41:02
メニューバーとツールバーにヴィジュアルスタイルを適用する方法を教えてください
お願いします
お願いします
.manifestファイルおいても適用されません
このとおりです

これに答えてください
292デフォルトの名無しさん:2005/11/19(土) 01:35:23
自作の Editor で IME のインライン変換が突然でなくなったんだけど、
どうしてかわかる人います?

同じバイナリで、別の Windows2000 や XP では出てるんだけど・・・。
環境は、Windows XP SP1、IME 2003

そんなのを設定できるプロパティってあったかな。
293デフォルトの名無しさん:2005/11/19(土) 02:00:45
MakeSureDirectoryPathExists()にてフォルダを作成しています。
c:\\ \\ \\
と指定すると空白のフォルダが作成できてしまいます。
CreateDirectory() や _mkdir() などでは、空白のフォルダを作成しようとした際にはエラーになります。本来、命名規約上は作成できないのが正解だと思います。
このように空白のフォルダを作ってしまうと削除もできなくなってしまいます。
Debug系のAPIのせいかもしれませんが、何か情報をもっていれば教えて下さい。
不具合でしょうか。
294292:2005/11/19(土) 02:24:46
>>291
uxtheme.lib をロードして、DrawThemeBackground とか
適用すればいいんじゃないの?
295デフォルトの名無しさん:2005/11/19(土) 02:48:39
Unicode使うと\を含むフォルダが作れるんだっけ・・・
296292:2005/11/19(土) 03:08:19
うーん、どうやら IME のナチュラルインプット2003が有効で、
かつ、
テキストサービスと入力言語>互換性の構成
の「詳細なテキスト サービスのサポートをプログラムのすべてに
拡張する」にチェックが付いていると描画できないみたいなんだけど

情報お持ちの方がいらっしゃったら教えていただければ幸いです
297デフォルトの名無しさん:2005/11/19(土) 03:24:15
>>293
> 本来、命名規約上は作成できないのが正解だと思います。

果たしてそうなんだろうか。WinXPのコマンドプロンプトで試してみたが、
>md " "
だとエラーになったが、
>md " \"
とするとディレクトリができた。
削除は
>rd " \"
でOK

って、よく試したらcdができないな。ダメポ。
298デフォルトの名無しさん:2005/11/19(土) 03:25:17
VCのリソースエディタでコンボボックスを置いて
ドロップダウンリストにしているのですが
クリックしてもリストが表示されません
(正確には表示されているようなのですが、数ピクセルしか縦の幅がなくて項目が一つも見えません)
どうしたらちゃんと表示されるのでしょうか?
299デフォルトの名無しさん:2005/11/19(土) 03:31:28
>>298
それFAQ。ってかスレ違い。
リソースエディタ上で、ドロップダウンさせてみれば分かるんじゃない?
300デフォルトの名無しさん:2005/11/19(土) 03:39:27
>>155
日本語訳されていない続きがあってそっちに正解が載ってる。
http://msdn.microsoft.com/library/en-us/dncode/html/secure03132003.asp
ImpersonateNamedPipeClientのエラーチェックをしていないので
失敗したときSYSTEM権限のまま続きのコードが実行されてしまう。
301デフォルトの名無しさん:2005/11/19(土) 03:40:58
>>296
どうでもいいけどx64 Editionだとそのオプションないな
302デフォルトの名無しさん:2005/11/19(土) 04:08:04
ある文字列の一部を指定した文字列に置換するようなAPIってありますか?
例えば、"abcdefg" の "cd" の部分を "\%" に置換するといったような感じで。
303デフォルトの名無しさん:2005/11/19(土) 04:41:13
APIには無いだろうが、標準ライブラリに有るだろ。
304デフォルトの名無しさん:2005/11/19(土) 06:31:46
1. GUIアプリが、自らコンソール窓を開いたり、既存のコンソール窓に出力したりすることは可能なのでしょうか?
2. Win32コンソールアプリが、コンソール窓を自ら閉じてしまう(実行は継続)ことは可能なのでしょうか?
305デフォルトの名無しさん:2005/11/19(土) 06:53:44
可能
306デフォルトの名無しさん:2005/11/19(土) 07:16:26
>>294
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/topics/partsandstates.asp
なぜかここに書かれてる定数を利用できないので無理です
最新版のSDKいれてるのに
マジわかんね
307デフォルトの名無しさん:2005/11/19(土) 07:28:10
>>306
いれたSDKのフォルダをインクルードパスに指定してないか、指定順序が後のほうになってるんじゃない?
308デフォルトの名無しさん:2005/11/19(土) 07:41:57
>>307
最新版のSDKのインクルードファイルが詰まってるフォルダを一番先に指定してるけど無理
309デフォルトの名無しさん:2005/11/19(土) 07:47:29
直接定数値を入力すれば?
310デフォルトの名無しさん:2005/11/19(土) 07:48:48
つ Tmschema.h
311デフォルトの名無しさん:2005/11/19(土) 08:18:27
>>308
インスコしてんのに使えないんだから、
設定か記述か、どちらにしろあんたのやり方が悪いだけ
312デフォルトの名無しさん:2005/11/19(土) 08:48:26
Windows2000/XPだと、txtファイルなどの通常ファイルにもコメントやカテゴリを埋め込むことができる。
docファイルなどの内部ストレージファイルの場合は、
PSDKにあるStructuredStorageサンプルのpropdump.cppを単体ビルドしたもので閲覧できるのだけど、
通常ファイルの場合は、このサンプルではプロパティを取得することができない。

どなたか、txtなどの通常ファイルのプロパティ(カテゴリ・コメント・作成者など)を取得する方法をご教授下さい。
313デフォルトの名無しさん:2005/11/19(土) 08:59:57
>>312
NTFS副次ストリームのSummaryInformationに保存されている。
だからhoge.txtならhoge.txt:SummaryInformationという名前でファイルを開けばデータを読み出せる。
俺もやったことはないからどういう風に格納されているかは知らないけど。
314デフォルトの名無しさん:2005/11/19(土) 09:41:59
>>309-311
Tmschema.hインクルードするの忘れてました
315312:2005/11/19(土) 09:57:05
>>313
回答ありがとうございます。
自分の環境では"StructuredStorage"の前に0x05が入るため、
"hoge.txt:\x50SummaryInformation"とする必要があるなど、汎用な取得方法ではないようです。
ですが、ヒントになるキーワードを頂いたのでさらに調査を進めることができました。
NTFS固有プロパティの取得方法が以下のURLにありました。今から試してみるつもりです。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/stg/stg/ipropertysetstorage_open.asp
316デフォルトの名無しさん:2005/11/19(土) 09:57:38
その後>>314の姿を見た者はいない
317デフォルトの名無しさん:2005/11/19(土) 09:58:22
(´・ω・) カワイソス
318315:2005/11/19(土) 09:59:03
文章訂正:
× 自分の環境では"StructuredStorage"の前に0x05が入るため、 
○ 自分の環境では"SummaryInformation"の前に0x05が入るため、 
319デフォルトの名無しさん:2005/11/19(土) 10:09:48
どういう誤植だよそれ
320312:2005/11/19(土) 10:31:02
>>319
直前にクリップボードに入ってた文字列が似てたから間違えただけ。

BTW、>>312で失敗サンプルとしてあげたpropdump.cppで呼び出している、
StgOpenStorageEx()の第7引数のGUIDを
IID_IStorage から IID_IPropertySetStorage に変更すれば、
ちゃんとNTFSプロパティでも動くっぽい。但し、なぜかassert()を吐く。
321315:2005/11/19(土) 10:53:47
>>315の文章訂正:
×"hoge.txt:\x50SummaryInformation"
○"hoge.txt:\x05SummaryInformation"
322デフォルトの名無しさん:2005/11/19(土) 11:02:13
全然似てねぇ・・・
323デフォルトの名無しさん:2005/11/19(土) 11:08:03
ていうか取得して何に使うんだろう・・・
微妙に気になった
324デフォルトの名無しさん:2005/11/19(土) 11:40:31
エロ動画にジャンルを埋め込めば自動で整理するツールを簡単に作れる
325デフォルトの名無しさん:2005/11/19(土) 11:52:59
なるほど
326デフォルトの名無しさん:2005/11/19(土) 12:03:34
>>323
応用は色々だね。メディアファイルにユーザ定義の付加情報つける時に有益だ。
Office・一太郎ドキュメントファイルなどの内部ストレージ型情報と違って、他のPCに持ちこしできないけど。
327デフォルトの名無しさん:2005/11/19(土) 12:17:55
自作のメディアプレイヤーを使用しているのであれば、
メディアのタイムマーカー情報を副次ストレージに保存できる。
長時間のファイルの頭出し再生もこれで快適だ。
328デフォルトの名無しさん:2005/11/19(土) 14:41:54
副次ストレージって便利なんだな
329292:2005/11/19(土) 15:55:15
>>301

レスありがとうございます。
うーん、他の Editor(sakura とか)では、その状態でも IME の
変換ウィンドウが出るから、やり方が悪いみたいなんだけど・・・。

ちょっとシンプルなサンプル作って考えて見ます。
330デフォルトの名無しさん:2005/11/20(日) 02:16:46
あるプロセスが起動しているかどうかを調べて
起動してなければ起動する、
既に起動していたら何もしない、
といった動作を考えているのですが、起動しているかどうか
を判別する方法はありますか?
331330:2005/11/20(日) 02:18:55
ちなみに、その「あるプロセス」は、一番最初は
自分で起動する事が決まっています。そのため
ハンドル等は保持しておく事は可能なので
そのハンドルを使って判別するAPIとかがあれば
良いのですが。
332デフォルトの名無しさん:2005/11/20(日) 02:24:39
二重起動防止等でググればいろいろ出てくると思うが、CreateMutexでも使っとけば。
333330:2005/11/20(日) 02:28:47
ありがとうございました。逝ってきます。
334デフォルトの名無しさん:2005/11/20(日) 11:13:24
OpenMutex⇒CreateMutexで2重起動出来たという落ちは未だ。チンチン(AA略
335デフォルトの名無しさん:2005/11/20(日) 12:06:24
アトム使ってもいい?
336デフォルトの名無しさん:2005/11/20(日) 12:50:57
お茶の水博士の承認が必要です。
337デフォルトの名無しさん:2005/11/20(日) 13:11:38
むしろ手塚プロダクションの承認の方が厳しいぞ
338デフォルトの名無しさん:2005/11/20(日) 14:33:09
ブラックジャックとサングラスと手塚センセがギャルゲーをしてるマンガで、
隅に「手塚プロダクション承認済み(本当)」と書いてあるのを見たことがある。
339デフォルトの名無しさん:2005/11/20(日) 16:38:29
マジレスが1人もいないのかw

GlobalAddAtom
GlobalGetAtomName
GlobalDeleteAtom
GlobalFindAtom

で、アトムテーブルを使っても逝ける。
340デフォルトの名無しさん:2005/11/20(日) 16:58:56
>>334
その間違いをやってた本もあったなあ。

http://www.expertmg.co.jp/html/cti/vctips/process.htm#%91%BD%8Fd%8BN%93%AE%82%F0%96h%8E~%82%B7%82%E9
↑は修正済み
341デフォルトの名無しさん:2005/11/20(日) 17:52:43
フリーソフトpasswinのソースですが、ウィンドウを動かした時などに
ちらつきが生じます。どこを修正すればよいか検討がつきませんので、
なにかアドバイスなどよろしくお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1122.c
342デフォルトの名無しさん:2005/11/20(日) 17:54:21
>>334
信長○野望オンラインがそれやってる。
343デフォルトの名無しさん:2005/11/20(日) 18:00:28
>>341
適当に言ってみるけど
wndclass.hbrBackground = GetStockObject( WHITE_BRUSH );
これをNULLにしてみては?
344デフォルトの名無しさん:2005/11/20(日) 18:08:48
>>340
そのリンク先の多重起動防止の所のコードでReleaseMutex()って必要なのかなぁ
345デフォルトの名無しさん:2005/11/20(日) 20:40:24
C言語初心者スレからきました。
ウインドウを表示するプログラムをコンパイルしたのですが、
外部シンボル ’_main’が未解決 (C:\borland\bcc55\lib\cox32.objが参照)
というエラーが表示されます。
どういう意味ですか?
346デフォルトの名無しさん:2005/11/20(日) 20:51:31
main()関数がないんだよ。
347345:2005/11/20(日) 21:06:24
レスありがとうございます。
WinMain()が最初に書いていますが、別にmain関数がいるんですか?
348デフォルトの名無しさん:2005/11/20(日) 21:08:32
>>345スレ違い
349デフォルトの名無しさん:2005/11/20(日) 21:19:00
知識が無いなら金払えのいい見本だな。
そこから動くまで教えてやれるほど気が長くないよな。
普通の人は。
350デフォルトの名無しさん:2005/11/20(日) 21:21:59
>>345
bccのFAQ。ヘルプのコンパイラオプションのとこ嫁
351デフォルトの名無しさん:2005/11/20(日) 21:25:47
>>345にはこれがお似合い(;^ω^)
ttp://www.imgup.org/file/iup121219.png
352デフォルトの名無しさん:2005/11/20(日) 21:46:06
おー、懐かしい。
俺が買ったのはVer.2だったな。
BorlandC++も買ったけど、高校生だったから高かったなぁ。
353345:2005/11/20(日) 21:49:59
ここも違いますか?
どこへ行けばいいのでしょうか?
354345:2005/11/20(日) 21:51:34
>>350
すいません。リロードしてませんでした。
bccの問題なんですね。そこを読みます。
ありがとうございました!
355デフォルトの名無しさん:2005/11/20(日) 21:56:17
356デフォルトの名無しさん:2005/11/20(日) 22:03:03
TurboC良かったけどな
マウスなかったから、左手だけでカーソル動かせるのが好きだった
そういやVCのキーコンフィグを弄らなくなったのはいつからだろう
357デフォルトの名無しさん:2005/11/20(日) 22:03:51
>>344
いらないけどこのMutexは本来の目的(待機)にはまったく使ってないから
間違いでもない
358デフォルトの名無しさん:2005/11/20(日) 22:55:07
win32 api はどうしてこんなに糞仕様が多いのでちゅか?
359デフォルトの名無しさん:2005/11/20(日) 23:15:21
>>358
昔はそれで良かったからさ。
360デフォルトの名無しさん:2005/11/21(月) 00:07:55
昔はパラメータチェックすらなかったから変なパラメータ渡すと
簡単にOSがおかしくなってたな
361デフォルトの名無しさん:2005/11/21(月) 00:29:04
Winampみたいに動的にタスクバー表示/非表示を切り替えるのって
どうやってるんですかね?
最初からずっと非表示なら、HIDEのメインウインドウを用意すれば
できましたけぢ。
362デフォルトの名無しさん:2005/11/21(月) 01:27:33
いかにもアバウトな欧米人の作ったものらしい
363デフォルトの名無しさん:2005/11/21(月) 02:35:39
俺らもアバウトになれば解決
364デフォルトの名無しさん:2005/11/21(月) 06:26:49
>>361
WM_EX_APPWINDOW拡張スタイルをつけたりはずしたりすればいいんでない?
365デフォルトの名無しさん:2005/11/21(月) 06:48:14
>>361
The Shell creates a button on the taskbar whenever an application creates a window that isn't owned.
To ensure that the window button is placed on the taskbar,
create an unowned window with the WS_EX_APPWINDOW extended style.
To prevent the window button from being placed on the taskbar,
create the unowned window with the WS_EX_TOOLWINDOW extended style.
As an alternative, you can create a hidden window and make this hidden window the owner of your visible window.

The Shell will remove a window's button from the taskbar only if the window's style supports visible taskbar buttons.
If you want to dynamically change a window's style to one that doesn't support visible taskbar buttons,
you must hide the window first (by calling ShowWindow with SW_HIDE), change the window style, and then show the window.
366デフォルトの名無しさん:2005/11/21(月) 08:42:29
マウスカーソルを移動させてクリックさせたいのですが
GetCursorPosで移動は出来たのですが、
クリックの方法が判りません。
教えてください。宜しくお願いします。
367デフォルトの名無しさん:2005/11/21(月) 08:54:04
mouse_event
368デフォルトの名無しさん:2005/11/21(月) 08:56:05
GetCursorPosで移動ってことは…
369デフォルトの名無しさん:2005/11/21(月) 08:56:50
>>368
気にしたら負け
370デフォルトの名無しさん:2005/11/21(月) 08:56:55
SendInput
371デフォルトの名無しさん:2005/11/21(月) 10:19:01
SendMessage WM_LBUTTONDOWN
372デフォルトの名無しさん:2005/11/21(月) 10:40:05
本当にありがとうございました
373デフォルトの名無しさん:2005/11/21(月) 17:17:47
374デフォルトの名無しさん:2005/11/21(月) 20:22:30
timeSetEventのTimerProcを同時に複数使うことは出来るでしょうか。
timeBeginPeriodとtimeEndPeriodを
前後に付けるルールがあるので、やり方が分かりません。
375デフォルトの名無しさん:2005/11/22(火) 00:22:49
何故WindowsのAPIを使ってコードを書くと
小汚くなってしまうのでしょうか?www
376デフォルトの名無しさん:2005/11/22(火) 00:29:13
書いてるやつにコーディングセンスがないから
377デフォルトの名無しさん:2005/11/22(火) 01:01:15
書いてるやつが小汚いから
378デフォルトの名無しさん:2005/11/22(火) 01:17:23
自己評価乙w
379デフォルトの名無しさん:2005/11/22(火) 01:35:21
EnumThreadWindows等の、ウィンドウ列挙APIで列挙したウィンドウ(というかダイアログ)が、
本当に目的のウィンドウかを区別する方法について。

SendMessageTimeoutを使って、「山」といえば「川」を返す、みたいな特定の「合言葉」を
何個かやりとりして、相手を識別する方法はどうかと思うのですが...問題ありますか?
380デフォルトの名無しさん:2005/11/22(火) 01:38:57
>>379
たまたまその投げた先のウインドウが実装している独自定義のメッセージIDとぶつかってしまった場合
381379:2005/11/22(火) 01:52:27
そこはRegisterWindowMessageあたりで。
っていうか、まさにこういうときに↑を使うんですかね。
382デフォルトの名無しさん:2005/11/22(火) 02:02:41
>>379が何をしたいのかよくわからない。
俺様ルールを決めたところで他プロセスは全く従わないと思うが。
383デフォルトの名無しさん:2005/11/22(火) 03:05:42
ウィンドウ名かウィンドウのクラス名を調べればいいじゃん
と言ってみるテスト
384デフォルトの名無しさん:2005/11/22(火) 03:23:54
補足したい相手のアプリは自作なんだよな?
で、ウィンドウ名、クラス名、メッセージ通信だと偶然被るのが心配、と。
だったら共有メモリ使ってハンドルを受け渡すってのが確実といえば確実。
385デフォルトの名無しさん:2005/11/22(火) 03:25:07
ああ、RegisterWindowMessageで決着ついてたのか。
ゴメソ。見なかったことにしてくれ。
386デフォルトの名無しさん:2005/11/22(火) 11:47:49
これまで長いこと使ってて気がつかなかったんだが、TRACEマクロ内の文字列で、
'\n'だけの改行の後に日本語の文字列を出力すると、アウトプットウィンドウの
表示がおかしくなるのな。

例えば ...

TRACE("\n現在時刻 =%s",COleDateTime::GetCurrentTime().Format(_T("%Y/%m/%d %H:%M:%S")));

TRACE(_T("\n現在時刻 =%s"),COleDateTime::GetCurrentTime().Format(_T("%Y/%m/%d %H:%M:%S")));

の実行結果は...

現サ在時刻 =2005/11/22 12/34/56

と「現」と「在」の間に半角の「サ」が表示される。

TRACE("\r\n現在時刻 =%s",COleDateTime::GetCurrentTime().Format(_T("%Y/%m/%d %H:%M:%S")));

TRACE(_T("\r\n現在時刻 =%s"),COleDateTime::GetCurrentTime().Format(_T("%Y/%m/%d %H:%M:%S")));

と、「\n」→「\r\n」とすれば問題ない。

コンソールのバグが原因なのか?これって、ガイシュツ?
環境は、VC++6.0SP6で、Win2000,Win98とも同じ結果になった。
387デフォルトの名無しさん:2005/11/22(火) 12:03:22
改行文字を考えろ
388デフォルトの名無しさん:2005/11/22(火) 12:22:31
OutputDebugString("\n現在時刻");
OutputDebugString("\r\n現在時刻");
OutputDebugString("\r\r\n現在時刻");
389デフォルトの名無しさん:2005/11/22(火) 15:46:09
HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255);
として作成したペンを
hPen = CreatePen(PS_SOLID, 1, RGB(128, 128, 128);
と後から変更しようと思ってるのですが2回目のCreatePen()の前にDeleteObject()は必要ですか?

それと二種類のペンが必要な場合は、↑の様にせずに
最初からペンを二つ用意しておいた方が無難ですか?
390デフォルトの名無しさん:2005/11/22(火) 15:52:40
>>389
それは、解放せずに同じ変数に上書きしてるだけ
リークしたくなければ、DeleteObjectするべき
391デフォルトの名無しさん:2005/11/22(火) 16:02:20
最初から二種類要るとわかってるなら用意しとけ
392デフォルトの名無しさん:2005/11/22(火) 16:11:43
>>390>>391
迅速なレスありがとうございます。
最初から二種類必要なのはわかってるのですが
同時に使用することはまず無いので
一つの変数を使いまわしで良いかと思いました。
使いまわす場合はDeleteObjectが必要で
使いまわすよりは別々に用意しておいた方が良いのですね。
393デフォルトの名無しさん:2005/11/22(火) 16:16:07
「同時に使用することは無い」は「交互に使用することは無い」の間違いでした
394デフォルトの名無しさん:2005/11/22(火) 16:33:42
文字列が見つかりません:「同時に使用することは無い」
395デフォルトの名無しさん:2005/11/22(火) 17:17:55
>>392
使い回さなくても、DeleteObjectはしろ。
396デフォルトの名無しさん:2005/11/22(火) 19:16:39
念のため聞いておくけど、SelectObjectの返り値を使って復元しているよな。
397デフォルトの名無しさん:2005/11/22(火) 20:02:38
>>395>>396
ああ、それはちゃんと心得ています。
お気遣いありがとうございます。
398デフォルトの名無しさん:2005/11/22(火) 23:42:20
evntはCreateEvent()で作成したハンドルです。

ret = WaitForSingleObject(evnt, 0);

の戻り値について質問なんですが、
evntがシグナルな状態ならWAIT_OBJECT_0
evntが非シグナルな状態ならWAIT_TIMEOUT
が戻ってくると考えて正しいでしょうか?
399デフォルトの名無しさん:2005/11/22(火) 23:57:03
MSDNを読む限りそう書いてあるようです。
400デフォルトの名無しさん:2005/11/23(水) 00:47:40
>>398
ドキュメントが本当に正しいかどうか自力で検証できるように、
関数の動作テスト用の小規模なプロジェクトを用意しておくべきだよ。
のちのちまで、その小テスト環境が威力を発揮することになる。

小テストをはじめるに当たって、何が影響を与えていて何が影響を与えていないのか、
最初に考えなければならないが、これが問題の切り分けをする良い機会になる。
401デフォルトの名無しさん:2005/11/23(水) 01:39:19
さすがM$の製品、ユーザが使用前にAPIのテストをしなきゃならんとは…ククク
402デフォルトの名無しさん:2005/11/23(水) 01:40:34
お前プログラマじゃないだろ
403デフォルトの名無しさん:2005/11/23(水) 01:56:13
標準のC/C++であっても動作テストはやるものだ。
Unix系のUnicode関連処理のお粗末ぶりを確認するためにも必要だ。
また、ドキュメントの微妙なニュアンスが正確にプログラマに伝わらないことは多い。
例えば、構造体メンバに渡した文字列のアドレスは、すぐに破棄してよいのか、維持する必要があるのかなど。
404デフォルトの名無しさん:2005/11/23(水) 02:22:25
SetWindowsHookExを使ってコンソールアプリもAPIフックしたいんだけど
SetWindowsHookExは コンソールアプリからだと使えないのかな
誰か知っている人が居たら教えて
405デフォルトの名無しさん:2005/11/23(水) 02:27:13
>>404
使えない。
コンソールアプリはメッセージキューが無い。
(無いっていっちゃうと厳密じゃないかもしんないけど。)
406デフォルトの名無しさん:2005/11/23(水) 02:36:16
>>405
あー、そうなんだ。

ということは、例え、全プロセスにAPIフックしていたとしても
コンソールアプリからAPIを叩かれると、ダメなんだ。
407デフォルトの名無しさん:2005/11/23(水) 02:37:55
というか全プロセスのAPIをフックしたかったら、
レジストリでやってもいいんじゃないか?
408デフォルトの名無しさん:2005/11/23(水) 02:41:51
>>407
でも、あれってやっぱりコンソールには通用しないんじゃなかったっけ。

http://www.codeproject.com/system/hooksys.asp
ここにそんな記述が。
409デフォルトの名無しさん:2005/11/23(水) 02:50:06
健全なキーストローク記録プログラムを制作しようと思うのですが、
タイマーでチェックしまくるのとフックするのって、どちらがオススメでしょうか?
410デフォルトの名無しさん:2005/11/23(水) 02:51:27
>>409
タイマーなんざ使い物にならない
411デフォルトの名無しさん:2005/11/23(水) 02:59:29
>>410
レスありがとうございます。フックで行く事にします。

#レスを見た後検証し、納得しました
412デフォルトの名無しさん:2005/11/23(水) 03:37:10
指定したウィンドウがMDIの子ウィンドウか調べる方法はありますか?
413デフォルトの名無しさん:2005/11/23(水) 04:50:24
ありますよ
414デフォルトの名無しさん:2005/11/23(水) 08:40:01
>>408
その通り。そのレジストリもUSER32.DLLが見てDLLをロードしている
(本来はプロセス間で共通のウィンドウクラスを登録するためのものだから)
よってUSER32.DLLを使わないプロセスに対しては無力。
コンソールアプリのAPIフックにはCreateRemoteThreadかDebugActiveProcessが必要。
415デフォルトの名無しさん:2005/11/23(水) 09:09:13
質問です。

ある関数のメモリ使用量をモニタリングする関数or方法があれば教えてください。
最終的にやりたい事は、その関数内における最大メモリ使用量の取得です。
416デフォルトの名無しさん:2005/11/23(水) 09:53:56
どんな変数があるかとかチェックして自分で計算すれば?
417デフォルトの名無しさん:2005/11/23(水) 10:01:13
>>415
・メモリとはヒープなのか、スタックなのか。
・ヒープの場合、その関数でallocして、外に所有権を移した場合、どうカウントするのか。
・その関数で作成したインスタンスがdelayed-initializeされた際のメモリはどの関数につけるのか。
・OSからのメモリ取得、言語内のメモリ管理どちらを対象にするのか。
・再帰した場合、どのようにカウントするのか。
・例外が発生した場合、どのようにカウントするのか。
・その関数が、他の関数を呼んだ場合、その呼ばれた関数の分もカウントするのか。
・その呼ばれた関数が、SendMessageだったりした場合、
 他のスレッドにメッセージを送ってその処理終了を待つことがあるが、その場合他スレッドの分はどうカウントするのか。
・その関数が内部で他のスレッドを起動した場合、そのスレッドの分はどうカウントするのか。

とりあえず思いついた謎。
スタックならプロファイラで分かったような気がする。
418デフォルトの名無しさん:2005/11/23(水) 10:11:57
実行状況で変わるんじゃないの?
419デフォルトの名無しさん:2005/11/23(水) 11:32:04
>>415
それは最終的にやりたい事じゃないだろ。
その値を使ってする事が最終的にやりたい事だろ。
どのみち関数毎は自分で計算するしかないな。
一応、パフォーマンスカウンタを調べれば出来ることと出来ない事が判るだろう。
420デフォルトの名無しさん:2005/11/23(水) 12:37:36
>>414
できますた。
色々なテクニックを組み合わせないと、実現できないのね。

感謝です。
421デフォルトの名無しさん:2005/11/23(水) 12:39:39
自ウィンドウ外でもマウスの動きを取得するには、どうすればいいんでしょうか
422デフォルトの名無しさん:2005/11/23(水) 14:15:31
APIからconsoleアプリを呼び出して標準出力の内容を呼び出し元で取得したいのだけれど
どうすれば良いの?
423デフォルトの名無しさん:2005/11/23(水) 14:21:14
>>422
つ[popen()]
APIもあるだろうけど取り敢えずこれ。
424デフォルトの名無しさん:2005/11/23(水) 14:35:01
>>423
呼び出し元がconsoleアプリじゃないのでpopenじゃ無理っぽいですがpopenのヘルプ内の
リンクにCreatePipeのサンプルがありました。これだと出来そうです。
ありがとうございました。
425デフォルトの名無しさん:2005/11/23(水) 15:27:20
>>421
SetCapture & ReleaseCapture ?
426デフォルトの名無しさん:2005/11/23(水) 15:31:50
>>425
ありがとう
427デフォルトの名無しさん:2005/11/23(水) 15:37:23
お久しぶりです(^o^)
さっそくですがツールバーやメニューバーに視覚スタイルを適用する方法を教えてください(^o^)
他の掲示板にいったけど完全にスルーされたので戻ってきました^^
http://up.mugitya.com/img/Lv.1_up12444.jpg
メニューバー・ツールバーを作ってみたら、上の奴のようになってしまうのです。
下や真ん中の奴のように視覚スタイルを適用したいのですがどうすればよいのでしょうか?
DrawThemeBackgroundでできると思ったのですが、それらしい定数が見つかりません(分かりません)
何卒お願いいたします(^^)
428デフォルトの名無しさん:2005/11/23(水) 15:46:47
>>424
別に呼び出し元がconsoleアプリじゃなくてもpopen()できると思うのだが。
429デフォルトの名無しさん:2005/11/23(水) 16:30:19
テキストファイルの特定の文字列のある1行を書き換えたいんだけど
何か便利なAPIってありますか?

今の所
ファイルを1行ずつ読み込みながら
条件によってそのままか書き換えして、別ファイルに書き出すってベタな方法考えてる。
430デフォルトの名無しさん:2005/11/23(水) 16:33:38
長さが変わる可能性がある以上は是非もないと思うが。
431デフォルトの名無しさん:2005/11/23(水) 16:45:37
  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;   APIならやってくれる……
  ヾ;;;ハ    ノ       .::!lリ;;r゙  そんなふうに考えていた時期が
   `Z;i   〈.,_..,.      ノ;;;;;;;;>  俺にもありました
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f
   ~''戈ヽ   `二´    r'´:::. `!

ありがとうございました
432デフォルトの名無しさん:2005/11/23(水) 19:12:26
433デフォルトの名無しさん:2005/11/23(水) 19:43:41
>>432
それでは無理
434デフォルトの名無しさん:2005/11/23(水) 20:05:16
>>427
二度と来るな
435デフォルトの名無しさん:2005/11/23(水) 20:46:12
>>434
そんな事いわないで教えてくださいよ
教えてくれれば二度と着ませんよ
436デフォルトの名無しさん:2005/11/23(水) 20:48:13
今度からは、もっと上手く釣ろうな?
437デフォルトの名無しさん:2005/11/23(水) 20:49:31
>>435
「やり方」が知りたいんだよね?そこまでに簡単に出来る事じゃない気がする。
ここで聞くよりも、自分が使ってる開発環境のスレ行った方が早いよ。
438デフォルトの名無しさん:2005/11/23(水) 20:51:05
>>435
「独自に GUI 部品を作成している場合」とやらに該当するのか?
439デフォルトの名無しさん:2005/11/23(水) 20:59:33
俺には貼ってあるアイコンの絵が違うようにしかみえないんだけど?
視覚スタイルとはなんぞや?
440デフォルトの名無しさん:2005/11/23(水) 21:04:44
malloc(436);
free(439);
441デフォルトの名無しさん:2005/11/23(水) 21:07:37
>>435
MFCのコードを読めばどっかにあるよ
442デフォルトの名無しさん:2005/11/23(水) 21:40:41
>>436
うわっ
気持ち悪い
この人
>>437
俺の環境=bcc32+sdk
>>438
普通にツールバーを作成しただけで、独自に作ったわけじゃないよ
>>439
Visual Styleともいう
よく見てみてください。
色が違います。しかも真ん中や下の奴はグラフィカルです。
>>441
MFCとか知りません
443デフォルトの名無しさん:2005/11/23(水) 21:44:21
答え知る気ないだろ
444デフォルトの名無しさん:2005/11/23(水) 21:45:33
釣る気は満々のようだねぇ
445デフォルトの名無しさん:2005/11/23(水) 21:49:05
今日は大漁だなwww
446デフォルトの名無しさん:2005/11/23(水) 21:51:53
しかしま、ドッキングツールバーを作りたいのかと思いきや
独自のアイコンを作りたいだけみたいだな。
447デフォルトの名無しさん:2005/11/23(水) 21:58:19
448デフォルトの名無しさん:2005/11/23(水) 22:03:40
>>446
こいつ頭大丈夫か
>>447
アイコンじゃないんだよ
http://up.mugitya.com/img/Lv.1_up12444.jpg
ちゃんと↑これみろよ
449デフォルトの名無しさん:2005/11/23(水) 22:04:55
あ、自己解決しました
450デフォルトの名無しさん:2005/11/23(水) 22:05:30
アイコンだろ
451デフォルトの名無しさん:2005/11/23(水) 22:06:38
>>450
もう解決したんでいいですよ
ちなみにアイコンじゃありません
452デフォルトの名無しさん:2005/11/23(水) 22:09:32
>>442
ツールバーの変なの使ってるってぐらいしかわからないんだけど?
猫でもわかる〜のところにのってなかったっけ?
俺もOSはXP使ってるけどXPスタイルにしてないせいか、
IEのツールバーがグラフィカルかどうかはさっぱりわからん。
つーか、グラフィカルってアイコンのこといってるわけじゃないんだよな?
ツールバーが白っぽいってことをいってるんだよな?

#ただ、へなへなアイコンに移動されると使いにくいだけだぞ。
#ドッキングツールバーと同じでやる意味あるのか?
453デフォルトの名無しさん:2005/11/23(水) 22:11:07
なんにしても普通はmanifestファイルを作るだけでできると思うのだけど。
432を試してどう駄目だったのか?
454デフォルトの名無しさん:2005/11/23(水) 22:14:03
>>453
普通にmanifestファイル作って置いとくだけじゃ、ボタンとかにしか反映されんよ
455デフォルトの名無しさん:2005/11/23(水) 22:15:18
なんだよ。
ちゃんと Luna スタイルって名前でのってんじゃん。
456デフォルトの名無しさん:2005/11/23(水) 22:16:09
457デフォルトの名無しさん:2005/11/23(水) 22:25:07
解決したっぽいな・・・w
458デフォルトの名無しさん:2005/11/23(水) 22:28:06
俺からすればこんなん死んでも入れたくないけどな。
こんなんだし↓w

タイトル表示やリンク コントロールなどの ComCtl32.dll バージョン 6 の機能を使用する場合、
これらのコントロールがユーザーのコンピュータで使用できない事態に対処する必要があります。
ComCtl32.dll バージョン 6 は、再配布することができません。
459デフォルトの名無しさん:2005/11/23(水) 22:40:38
そんなわけのわからんスタイルにする必要がないな
460デフォルトの名無しさん:2005/11/23(水) 23:12:33
>>448
頭おかしいのはお前だ
461デフォルトの名無しさん:2005/11/23(水) 23:24:13
consoleの簡易編集モードを無効にするにはどうしたら良いのでしょう?
あれが生きていると画面をクリックすると止まってしまうんですね。
console周りのAPIを調べたけどそれらしいのは見つからなかった。orz
462デフォルトの名無しさん:2005/11/23(水) 23:27:27
>>461
コマンドプロンプトのシステムメニューからプロパティを選んでそれらしいオプションをいじる
463デフォルトの名無しさん:2005/11/23(水) 23:27:56
>>452
>ツールバーが白っぽいってことをいってるんだよな?
そうそう
>>453
ツールバーは無理なんです
>>454
うんうん
>>455-456
違うよばーか
>>460
うわぁ
きもい
464デフォルトの名無しさん:2005/11/23(水) 23:28:33
おいお前らスルーしろよ!相手の思う壷だぞ・・。
465デフォルトの名無しさん:2005/11/23(水) 23:29:57
やっぱり頭おかしいな
ま、たくさん釣れたから満足しただろうが。
466デフォルトの名無しさん:2005/11/23(水) 23:43:08
>>463
どうみてもLunaスタイルじゃねーの?
467デフォルトの名無しさん:2005/11/23(水) 23:52:04
ちなみにクラシックウィンドウにかえてみるとツールバーの色に違いなんてないけど?
だからやっぱXPのLunaスタイルのなんかに反応して処理が変わってんじゃねーの?
468デフォルトの名無しさん:2005/11/23(水) 23:54:05
469デフォルトの名無しさん:2005/11/23(水) 23:55:14
>>462
それをプログラムからやりたいんですが・・・
470デフォルトの名無しさん:2005/11/24(木) 00:08:50
コモンダイアログ表示中、イベント処理をブロックしないようにしたいと
考えています。

・モードレスで起動
・別スレッドでダイアログを表示させる
といった方法があるのかな、と思いましたが
コモンダイアログをモードレスで表示させることは可能なのでしょうか。
(なるべくならスレッドは作成したくないので…)
471デフォルトの名無しさん:2005/11/24(木) 00:10:16
>>428
そ、そうなんですか。。
VC2003のランタイム ライブラリ リファレンスにはWindowsアプリから使うとハングするとか書かれていたので。
472デフォルトの名無しさん:2005/11/24(木) 00:43:42
>>466
Visual styleだよ
ばーか
>>467
ばーか
473デフォルトの名無しさん:2005/11/24(木) 00:48:07
>>470
不可視ウィンドウをメインウィンドウとして作成し、かつてのメインウィンドウの親にする。
その後、コモンダイアログの親を不可視ウィンドウにする。

かつてのメインウィンドウの作成方法を変更する必要があるけど、
不可視ウィンドウをメインウィンドウにする手法は一般的だよ。
タスクバーに表示される文字列と可視ウィンドウの文字列を違うものにしたい場合などにも、役に立つ。
474デフォルトの名無しさん:2005/11/24(木) 01:01:09
>>427
以前てめぇにゃ絶対もう教えないと言った者だ。
また暴れてるようだな。
めんどくせぇけどアク禁依頼出しとくから。有難く思え。
475デフォルトの名無しさん:2005/11/24(木) 01:04:13
これはひどい
476デフォルトの名無しさん:2005/11/24(木) 01:08:08
>>472
いや、だから、同じモンだろw
477デフォルトの名無しさん:2005/11/24(木) 01:11:27
なんか最近どのスレ行っても俺以外にもう一人変なの湧いてるんだけどなんだろう?
これが類は友を呼ぶって奴なの?
478デフォルトの名無しさん:2005/11/24(木) 01:13:39
朱に交われば赤くなるかもなwww
オリジナリティ0www
479デフォルトの名無しさん:2005/11/24(木) 07:03:28
>>473
親じゃなくてオーナー
480デフォルトの名無しさん:2005/11/24(木) 10:46:17
ちょいとお尋ねしますが、MSDNのMesageBOX()関数のヘルプは皆さんも英語ですか??
481デフォルトの名無しさん:2005/11/24(木) 10:50:39
MesageBOX()関数なんてものは無い
482デフォルトの名無しさん:2005/11/24(木) 10:51:30
MessageBox(hWnd, szBuf, "Debug", MB_OK);

これです。スペルミスでした
483デフォルトの名無しさん:2005/11/24(木) 10:51:30
日英両方あるますが。
484デフォルトの名無しさん:2005/11/24(木) 10:53:34
両方あるますね
485デフォルトの名無しさん:2005/11/24(木) 10:58:08
見つかったんですが、.net framework SDK の方にありました。

win32APIのドキュメントはMSDNではなく、こっちなんですかね?
486デフォルトの名無しさん:2005/11/24(木) 10:58:55
win32APIのドキュソメソトは
487デフォルトの名無しさん:2005/11/24(木) 11:04:13
検索後ちゃんと、MSDNから見れるようになりました。
488デフォルトの名無しさん:2005/11/24(木) 11:16:26
なんか色々と誤解がありそうな気がする
489デフォルトの名無しさん:2005/11/24(木) 11:37:52
横やり入れると、Visual Style != Lunaスタイルだよ。
Lunaは、Visual Styleで使える1デザイン。
タイトルバーが青くて、タブにオレンジの帯がついて…というのをLunaと言う。
(シルバーバージョンとかもあるが)
当然Visual Styleでは他のデザインも使用できる。
490デフォルトの名無しさん:2005/11/24(木) 12:00:45
それを言うなら、VS ≒ Luna
491デフォルトの名無しさん:2005/11/24(木) 12:37:11
DirectShowを使ってプログラムするためDirextX 9 SDK をインストールしたのですが、
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Includeの中に
dshow.hがありませんでした。Graph Editなども付属していませんでした。他にインストールしなければいけないのでしょうか?
ご存知の方がいらっしゃいましたらご教授下さい。
492デフォルトの名無しさん:2005/11/24(木) 12:37:59
Lina⊆VS
493デフォルトの名無しさん:2005/11/24(木) 12:45:36
>>491
Extrasに入ってる
494デフォルトの名無しさん:2005/11/24(木) 12:51:13
う〜ん。Extrasってフォルダの名前ですよね?探したのですがExtrasが
見つかりませんでした。
495デフォルトの名無しさん:2005/11/24(木) 13:02:25
Negative
496495:2005/11/24(木) 13:03:01
うんこ
497495:2005/11/24(木) 13:06:36
Direct Showはいつからか忘れたけど、Platform SDKに統合されたんじゃなかったっけっか?
498491:2005/11/24(木) 13:23:35
>>497
Platform SDKにありました。有難うございます。
bcc -I
で無事動きました。有難うございます。。
499495:2005/11/24(木) 14:00:30
  _, ._
( ゚ Д゚)
 ( つ O   ガシャ
 と___)_)  __
      (__()、;.o:。

        ゚*・:.。
500デフォルトの名無しさん:2005/11/24(木) 19:43:46
この板にもIDが欲しいな・・・
501デフォルトの名無しさん:2005/11/25(金) 00:35:31
空欄IDならいいけど。
502デフォルトの名無しさん:2005/11/25(金) 00:58:18
あるアプリがCreateProcessでプロセスを起動したとします。
そのプロセスを同アプリから必要なくなった時に強制終了させる事はできますか?

LinuxだとプロセスIDを検索してkillするような処理が可能ですが
それと同じような事をしたいのですが。
503デフォルトの名無しさん:2005/11/25(金) 01:11:13
>>502
強制終了させたいというなら、TerminateProcess()
その起動するプロセスも自分のものなら、
何らかのプロセス間通信で終了させたほうがいいけどね、
504デフォルトの名無しさん:2005/11/25(金) 01:23:45
>>502
同じような事はできます。
505デフォルトの名無しさん:2005/11/25(金) 01:35:29
>>502
自分で起動したプロセスなら検索しなくてもハンドルわかるだろ
506デフォルトの名無しさん:2005/11/25(金) 01:55:38
イヤです
507デフォルトの名無しさん:2005/11/25(金) 01:57:55
会話になってません
508デフォルトの名無しさん:2005/11/25(金) 02:12:57
>>502
もしWM_CLOSEで終了してくれるプログラムなら
WM_CLOSEの方がいいかもしれん。
強制終了じゃなくて、自主的に終了してくれるようにお願いする、
みたいな感じだけど。
509デフォルトの名無しさん:2005/11/25(金) 02:18:36
便乗質問だけどwindowsのタスクマネージャの「プロセスを終了」ボタン
押して強制終了させんのはやっぱTerminateProcessしてんのかな
510デフォルトの名無しさん:2005/11/25(金) 02:23:10
>>509
MSしか知らない「裏技」だったしてなwww
511デフォルトの名無しさん:2005/11/25(金) 02:27:02
>>509
APIにフックかけて確認してみるとか
512デフォルトの名無しさん:2005/11/25(金) 03:25:35
デバッガで覗いたらTerminateProcessだった。
513デフォルトの名無しさん:2005/11/25(金) 05:19:33
>>427に答えろやカスども(^o^)
514デフォルトの名無しさん:2005/11/25(金) 06:59:40
>>427
全部同じに見えるんだが。
515デフォルトの名無しさん:2005/11/25(金) 07:24:37
>>427
>>513
通報しました
516デフォルトの名無しさん:2005/11/25(金) 07:30:06
>>513
お断りだゴキブリ野郎(^o^)
517デフォルトの名無しさん:2005/11/25(金) 08:52:17
ダメです
518デフォルトの名無しさん:2005/11/25(金) 11:16:08
>>513
さっさと首吊って死ねやうんこちゃん(^o^)
519デフォルトの名無しさん:2005/11/25(金) 11:16:46
イヤです。
520デフォルトの名無しさん:2005/11/25(金) 12:24:53
#include <dshow.h> としてlstrcpyを加えたコードを
bcc32でコンパイルするとエラーが出ます。他にも色々使えない関数が出てきました。
---------------------------------------------
#include <windows.h>
#include <dshow.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow){
TCHAR ore[64];
lstrcpy(ore,TEXT("こんにちは"));
return 0;
}
---------------------------------------------
bcc32 -I"C:\Borland\Bcc55\Include" -L"C:\Borland\Bcc55\Lib"
-I"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Include" -L"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Lib" -I"C:\Program Files\Microsoft Platform SDK\Include"
-L"C:\Program Files\Microsoft Platform SDK\Lib" -W test.cpp
---------------------------------------------
エラー E2451 test.cpp 7: 未定義のシンボル lstrcpy_instead_use_StringCbCopy_or_St
ringCchCopy(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )

もし解決方をご存知の方がいらっしゃいましたらご教授なにとぞお願い致します。
521デフォルトの名無しさん:2005/11/25(金) 12:29:27
>>520
書いてある通りにすればいいんじゃない?
つまり、lstrcpy()を使うのをやめてかわりにStringCbCopy()か
StringCchCopy()を使う。
522デフォルトの名無しさん:2005/11/25(金) 12:32:04
>>520

>-L"C:\Program Files\Microsoft Platform SDK\Lib"

    _, ._
  ( ゚ Д゚)   ガシャ
  ( つ O. __
  と_)_) (__()、;.o:。
          ゚*・:.。

523520:2005/11/25(金) 12:41:49
524495:2005/11/25(金) 13:28:38
>>520
マルチおつ。
525デフォルトの名無しさん:2005/11/25(金) 16:28:10
isdigitの代わりになるAPIを教えておくれ
526デフォルトの名無しさん:2005/11/25(金) 16:29:02
ねぇよ
それくらい自分で判定しな
527デフォルトの名無しさん:2005/11/25(金) 16:53:38
>>525
isdigit()の何が不満だ?
528デフォルトの名無しさん:2005/11/25(金) 18:00:25
あるウィンドウにメッセージをおくりたい。
ただし、そのウィンドウが既になくなっている場合は送れなくても問題はない。
という状況で、以下のようにしました。

if(IsWindow(hWnd)) PostMessage(hWnd, WM_MESSAGE, 0, 0);

この場合IsWindowで分岐させなくても問題なく動くのですが
パフォーマンス・安定性・SDKの仕様などの観点からはどちらのほうがよいのでしょうか?
また、同様にSendMessageの場合はどうでしょうか?
529デフォルトの名無しさん:2005/11/25(金) 18:42:20
>>528
まだ勉強中の俺だから間違ってるかも知れないが
MSDN見た限りだと、PostMessage/SendMessage共に消えたウインドウのハンドルを
渡したときにどうなるかって事については明記されてなかった

使わない砲がいいんじゃまいか?
530デフォルトの名無しさん:2005/11/25(金) 18:57:38
同じウィンドウハンドルが全然違うウィンドウに使いまわされると言うことはアウトオブ眼中ですか?
531デフォルトの名無しさん:2005/11/25(金) 19:09:15
IsWindowがtrueを返した瞬間、ウィンドウがなくなる可能性も?
532528:2005/11/25(金) 19:14:35
>>529,>>530レスありがとうございます。
>同じウィンドウハンドルが全然違うウィンドウに使いまわされると
その可能性もありますね;
プロセスIDなどを取っておいて毎回照合すべきでしょうか。
>>531
頭が痛くなってきましたorz
533デフォルトの名無しさん:2005/11/25(金) 19:44:03
>>532

SendMessage()/PostMessage()に限らず、API呼び出しはAtomicな処理では
ないので、>>529-531が言ってるようなことは気にする必要はない。

SendMessage()を呼び出した時にはウィンドウが存在しても、システムがAPI
処理中に、ウィンドウが消えてしまう場合もあれば、PostMessage()が正常
終了しても、ポストしたメッセージより先に相手のメッセージキューに
WM_CLOSEが溜まっている場合もありうる。

確実にメッセージを届けたかったら、ミューテックスとか、共有メモリなど
を使ってプロセス/スレッド間で同期をとる必要がある。
534デフォルトの名無しさん:2005/11/25(金) 19:49:25
>>533
目的のウィンドウが、自分が作ったものじゃない時はヌルーですか?
535デフォルトの名無しさん:2005/11/25(金) 20:21:12
別のソフトのある入力フォームに数字を入力してEnterキーを押す、
といったような操作を行うにはどうすればいいのでしょう?
Googleで検索するにも取っ掛かりが掴めなくて困っています。
メッセージのフックとは異なるでしょうし。
536デフォルトの名無しさん:2005/11/25(金) 20:35:00
>>535
上で出てるSendMessageとかPostMessageでいけるんじゃない?
537528:2005/11/25(金) 20:41:51
>>533
解説ありがとうございました。
ウィンドウがなければメッセージは届かなくても良いので、いきなりSendMessageを呼んでいいのですね。
ただ>>530は低い確率かもしれませんが、起こりえるのではないかと思うのですがどうなのでしょう?
538デフォルトの名無しさん:2005/11/25(金) 20:49:48
ウィンドウの特定方法による

ウィンドウタイトルとかわかってるならFindWindowしる
539デフォルトの名無しさん:2005/11/25(金) 21:05:32
>>535
ありがとうございます。よく考えればそうですね。

>>538
ありがとうございます。
540デフォルトの名無しさん:2005/11/25(金) 22:31:31
>>509
WM_CLOSEを送ってシカトされたらTerminateProcess()してるんだとおも。
541WM_CLOSE:2005/11/25(金) 23:02:14
私の話を聞いてっ!無視するなんてヒドイ><
542デフォルトの名無しさん:2005/11/26(土) 00:14:24
>>534
自分(のプロセス内)で作っても、別スレッドで作成されたウィンドウの場合、
メッセージループが独立しているので、プライマリスレッドがウィンドウの
消滅を知らずに、SendMessage()/PostMessage()する場合もある。
543デフォルトの名無しさん:2005/11/26(土) 00:37:05
__cdeclとか__stdcallとか関数呼び出し規約が複数あるのには
何か特別な理由があるんでしょうか?
こんなもん1つあれば十分な気がするのですが・・・
WINAPIとかCALLBACKとかいちいち書かなくていいし。
教えてエロイ人。
544デフォルトの名無しさん:2005/11/26(土) 00:39:00
>>541
死ねやウンコ野郎
545デフォルトの名無しさん:2005/11/26(土) 00:40:13
>>543
他言語と呼び出し規約を合わせる気は無しですか
546543:2005/11/26(土) 00:43:41
>>545
あー、そういう理由があったんですか。
勉強になりました。ありがとうございます。
547デフォルトの名無しさん:2005/11/26(土) 07:54:48
>>542
そういう意味じゃないし
548デフォルトの名無しさん:2005/11/26(土) 08:31:42
>>546
「そういう理由」じゃないし
549デフォルトの名無しさん:2005/11/26(土) 12:28:14
そういう理由じゃないんですか?
550デフォルトの名無しさん:2005/11/26(土) 13:15:17
cdeclは呼び出した側が引数の後片付けをし,可変個引数が使える。
stdcallは呼び出された側が引数の後片付けをする。
(ちなみにVCではfastcallとthiscallもある)

x86ではユーザーモードからカーネルモードへ行く処理の途中で引数はカーネルのメモリへコピーされ,
元のは片付けられてしまうのでstdcall(/pascal)形式にするしかない,という話を聞いたことがある。
なので他の関数も全てstdcall(/pascal)に統一したのではないだろうかと俺は思っている。
551デフォルトの名無しさん:2005/11/26(土) 18:58:17
システム情報を更新するみたいなAPIってありましたっけ?
なんかあったような気がするんだけど見つからない。

XPにSP2入れたら起動直後にSUBSTしたドライブが、
マイコンピュータ上でF5押さないと認識しなくなってしまったのでした。
552デフォルトの名無しさん:2005/11/26(土) 19:04:56
ヒント:SPI
553470:2005/11/26(土) 21:31:04
>>473
ありがとうございます。message-only windowというやつですね。
もうちょっと調べてみます。
(web上にはMFCのサンプルコードは沢山あるようですが…)
554デフォルトの名無しさん:2005/11/26(土) 21:40:08
>>553
是非、調べるといいと思う。

Windowsでソケットを扱う場合にも重宝するよ。
メッセージループを使わずにselect()で実装して痛い目に遭う人は多い。
特にUnix出身者。ほぼ間違いなく嵌る罠。
555デフォルトの名無しさん:2005/11/26(土) 22:20:11
>>554
もちっと詳しく。
ポインタだけでもお願いします。
556デフォルトの名無しさん:2005/11/26(土) 22:30:01
>>555
WSAAsyncSelect()

目に見えるウィンドウだけがウィンドウじゃない。
むしろウィンドウの本質はメッセージ処理の受け皿であること。

コンソールアプリでもメッセージ処理用のウィンドウは作成できる。
というか、必要になる場面が結構多い。
557デフォルトの名無しさん:2005/11/26(土) 22:30:35
>>555
知りたいことを書きなさい。
558デフォルトの名無しさん:2005/11/26(土) 22:43:56
>>556
便乗質問ですが、コンソールアプリでそうしたウィンドウが必要になる場面って
どういうものがあるんでしょうか?
559デフォルトの名無しさん:2005/11/26(土) 22:46:15
サービス系のプログラムとかかな
コンソールアプリとは言わんかも試練が
560デフォルトの名無しさん:2005/11/26(土) 23:02:21
サービスの設定項目に、「デスクトップとの対話をサービスに許可」というチェック項目がある。
デフォルトではチェックされていない。
この項目が必要なのは、サービスプロセスがメッセージ処理を行っているからだ。

通常、メッセージは、シグナルなどのHANDLEオブジェクトと違いアクセス権限を設定できない。
そのため、ユーザのメッセージ送信から完全に遮断された領域でサービスプロセスが動いている。
561560:2005/11/26(土) 23:05:57
訂正

×:この項目が必要なのは、サービスプロセスがメッセージ処理を行っているからだ。 
○:この項目が必要なのは、サービスプロセスのメッセージ処理を想定しているからだ。
562デフォルトの名無しさん:2005/11/26(土) 23:10:18
一瞬誤爆かモノローグかと思った。
563デフォルトの名無しさん:2005/11/26(土) 23:52:03
コンソール含めてウィンドウが全く必要ないアプリだったら、
そのアプリからスレッド一個作って、そこでソケット開いて送受信させれば
いいだけじゃないの? 
564デフォルトの名無しさん:2005/11/26(土) 23:52:18
いや、どっからどうみてもモノローグだろ。
565デフォルトの名無しさん:2005/11/26(土) 23:53:17
>>563
少なくとも >>470 はスレッドを使いたくないと言っていた
566デフォルトの名無しさん:2005/11/27(日) 00:09:56
>>554
select()で合う痛い目は具体的には?
567デフォルトの名無しさん:2005/11/27(日) 00:16:14
俺も>>554の痛い目に興味ある。
返値ハンドリングがヘタレだとまずいってのは常識として
それ以外に何かあるのか?
568デフォルトの名無しさん:2005/11/27(日) 00:18:49
名前なしパイプとの互換性が一切ない。
作成できるソケット数に制限がある。
569デフォルトの名無しさん:2005/11/27(日) 00:21:52
先に判っている事は痛い目ではなかろ
570デフォルトの名無しさん:2005/11/27(日) 00:41:36
アフォですか?
571デフォルトの名無しさん:2005/11/27(日) 00:49:35
照れるな

だがあちこちに同じ一言レスしてるお前ほどじゃないけどな
572551:2005/11/27(日) 05:08:32
>>552
↓これでできました。
PostMessage(HWND_BROADCAST,WM_COMMAND,0x0001A220,0x00000000);

SPIってのはSystemParametersInfo関数ですよね?
でもこれだと最初にパラメータに何が適当か不明でした。
573デフォルトの名無しさん:2005/11/27(日) 07:12:12
C++室から案内されてきました。

CreateProcess()でプログラムが終了するまで次の処理を待つように
しているのですが、
リダイレクトしようとしても、実行されません。
if( !CreateProcess( NULL,
"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml",
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) )

どうすれば、リダイレクトされるのでしょうか?
574デフォルトの名無しさん:2005/11/27(日) 09:05:41
リダイレクトはできねぇだろ?
そこに記述するのは、第一引数がNULLの時の実行するモジュールと、そのプログラムに与えるコマンドライン引数だし
リダイレクトはシステムの機能だし
575デフォルトの名無しさん:2005/11/27(日) 09:18:56
>>573
cmd.exe /C
とか
command.exe /C
使ったら?

つーか最後のπってなんだ…
576デフォルトの名無しさん:2005/11/27(日) 09:21:48
>>573
STARTUPINFOのメンバにそれらしきものがある。
577デフォルトの名無しさん:2005/11/27(日) 09:28:01
バッチファイルを作成して起動!!!
cmd /c のほうがマシか
578573:2005/11/27(日) 09:59:41
cmd /C を見てみたのですが
if( !CreateProcess( NULL,
"cmd.exe /C 'C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml'",
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) )
でも、変化がありませんでした。
579デフォルトの名無しさん:2005/11/27(日) 10:18:14
リダイレクトは標準出力から自前でやれと
580デフォルトの名無しさん:2005/11/27(日) 12:00:10
system関数でも行ける気がする。コマンドプロンプト出るけど。
581デフォルトの名無しさん:2005/11/27(日) 12:38:48
>>572
SHChangeNotifyで同じことができるかもしれない。

>>578
手元にWindows環境がなくて試せないのだけど、
cmd.exeってシングルクォーテーションでパス囲めるのだっけ?

あと、CreateProcessは成功してるのかどうか。
失敗してたらGetLastErrorは何返してるか。
成功してるのに動作しないなら、同じコマンドラインでシェルから実行出来るか。
などなど、ある程度自力で切り分けも。
582デフォルトの名無しさん:2005/11/27(日) 12:56:20
>>566-567
alarm()がないのに仕様がalarm()の存在を前提としている。
gethostbyname()の非同期版がBSDソケットにはないとか。
つーかマジでIPv6の名前解決をタイムアウトするにはどうしたらいいのか
教えてくれ。スレッド使うしかないのか?
583デフォルトの名無しさん:2005/11/27(日) 12:56:50
>>575
command.com /C
でしょ
584デフォルトの名無しさん:2005/11/27(日) 13:01:47
>>568
デフォルトのソケット数の上限が64個なだけで変更は出来るが。。
585デフォルトの名無しさん:2005/11/27(日) 14:06:49
>>578
"cmd.exe /C \"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\" > results.xml"
じゃねーの?試してないが。
586デフォルトの名無しさん:2005/11/27(日) 14:40:12
"cmd.exe /C \"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml\""
だろう
587デフォルトの名無しさん:2005/11/27(日) 15:50:17
>>586
それだとC:\Programという実行ファイルを実行しようとしてエラーだろ。
588デフォルトの名無しさん:2005/11/27(日) 16:08:57
でも>>585じゃリダイレクトを処理できない。リダイレクトを解釈してるのも
cmd.exeだから。
もしかして二重に囲む必要があるのか?
"cmd.exe /C \"\\\"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\\\" > results.xml\""
589デフォルトの名無しさん:2005/11/27(日) 16:28:35
いやおまえ、その\の付け方おかしいだろ

"cmd.exe /C \"\"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\" > results.xml\""
やるならこうだべ
590デフォルトの名無しさん:2005/11/27(日) 16:44:26
>>589
それじゃcmd.exeに渡されるコマンドラインは
""C:\Program Files\Microsoft Baseline Security Analyzer 2\mbsacli.exe" > results.xml"
つまり第一パラメータ=「」(空文字列)、第二パラメータ=「C:\Program」、…最終パラメータ=「 > results.xml」
になっちゃわないか?
内側の""は\でエスケープしなきゃならないはず。つまり
"\"C:\Program Files\Microsoft Baseline Security Analyzer 2\mbsacli.exe\" > results.xml"
これをC言語の文字列リテラルの形式にしたら>>588になる
591デフォルトの名無しさん:2005/11/27(日) 16:46:35
まさに明後日の方向だな
592デフォルトの名無しさん:2005/11/27(日) 16:47:17
それともcmd.exeは/C以降はすべて一続きのコマンドラインとして解釈したりして
>>585でいいってオチだったりするのかな?
593デフォルトの名無しさん:2005/11/27(日) 18:56:30
まぁ、やってみりゃわかるだろ
594デフォルトの名無しさん:2005/11/27(日) 18:59:20
reopen
595デフォルトの名無しさん:2005/11/27(日) 22:47:51
INT26H で直接セクタ書込をしようと思うんだけど、手順はどうすればいいの?
LOCK レベルとか解説して遅れ。
596デフォルトの名無しさん:2005/11/27(日) 22:52:34
>>595
Win95系?
597デフォルトの名無しさん:2005/11/27(日) 23:19:30
そう。DOS Mode
598デフォルトの名無しさん:2005/11/27(日) 23:43:28
>>596
一応、VWIN32.VDX をオープンして、その後の話。
599デフォルトの名無しさん:2005/11/28(月) 00:04:15
600573:2005/11/28(月) 00:13:28
レス遅れてすみません。
>>585で動きました。
>>586,588では動きませんでした。
>>589で動きました。

C:\の前に\が必要なことを知りませんでした。
皆様、どうもありがとうございました。
601デフォルトの名無しさん:2005/11/28(月) 02:03:12
>>583-590
なんだこの流れ
ワロスwwwww
602デフォルトの名無しさん:2005/11/28(月) 03:15:55
> C:\の前に\が必要なことを知りませんでした。
最終的にこうなったのが何ともいえず面白いな
603デフォルトの名無しさん:2005/11/28(月) 03:53:44
\" の意味を分かってないんだな。
604デフォルトの名無しさん:2005/11/28(月) 04:15:49
CreateFont等によって取得された論理フォント等のハンドルは
プロシージャが終了する前にDeleteObjectしなきゃだめですか?
static変数に保存して次回使ったりしても問題ありませんか?
605デフォルトの名無しさん:2005/11/28(月) 04:22:48
毎回返した方が良いです

ハンドルは勝手に捨てられたり入れ替えられたりするので
同一性が保障されるのはプロシジャ内だけだと思った方が良いでしょう
606604:2005/11/28(月) 04:26:11
>>605

わかりました!
ありがとうございます!
607デフォルトの名無しさん:2005/11/28(月) 05:19:58
XmlTextReaderみたいなのは、ASPでありますか?
608デフォルトの名無しさん:2005/11/28(月) 05:32:39
609デフォルトの名無しさん:2005/11/28(月) 06:00:21
C++でxmlを操作することは可能でしょうか?
610デフォルトの名無しさん:2005/11/28(月) 06:05:26
>609
誤爆?
611デフォルトの名無しさん:2005/11/28(月) 06:58:51
MSXML
612デフォルトの名無しさん:2005/11/28(月) 08:59:13
>>597-598
DOSモードかWin32なのかはっきりしる!
Win9x/2Kならこんなのとか。(ロックはあまりちゃんとやってないようだが。)
ttp://homepage3.nifty.com/k-takata/mysoft/rwfd.html
613デフォルトの名無しさん:2005/11/28(月) 14:48:21
CreatePipe()の第四引数について質問です。

nSize
パイプのバッファのサイズをバイト単位で指定します。
このサイズは、参考として使われるだけです。
システムはこの値を使って、適切なバッファリングメカニズムを決定します。
このパラメータで 0 を指定すると、既定のバッファサイズが割り当てられます。

なんてマニュアルには書いてあるんだけども、0を指定したときの
規定のバッファサイズってどこ見たら分かる?
#自分で設定しても参考値にしかならんみたいだけど……どんな仕様だよ。
614デフォルトの名無しさん:2005/11/28(月) 15:45:05
>>604
問題ない。ファイルハンドルも、GDIオブジェクトのハンドルも基本的には同じ。
MFCのCFontクラスやCBrushクラスは、オブジェクト内の変数としてGDIオブジェ
クトのハンドルを保持している。

自身のプログラムのバグを含めて意図的にDeleteObject()しない限り、少なく
ともシステム側で勝手に捨てられたり入れ替えられたりすることはない。
615デフォルトの名無しさん:2005/11/28(月) 19:09:24
>>613
中の人もそれはそれで大変なんだよ。
察してやれ。
616デフォルトの名無しさん:2005/11/28(月) 20:29:34
タブを複数行にしたときに、
選択するタブを変えても
表示される行が変わらないようにするには
どうすればいいでしょうか?
617デフォルトの名無しさん:2005/11/28(月) 21:07:35
選んだタブを前に出す仕様だから
618616:2005/11/28(月) 21:14:05
自作するしかないということですか?
619デフォルトの名無しさん:2005/11/28(月) 21:14:48
タブをボタンにすれば
620デフォルトの名無しさん:2005/11/28(月) 21:20:10
それはイヤです
621616(≠620):2005/11/28(月) 22:00:51
>>617>>619
回答ありがとうございました。
ボタンと自作、両方試してみます
622デフォルトの名無しさん:2005/11/28(月) 22:28:54
ダメでした。
623デフォルトの名無しさん:2005/11/28(月) 22:51:10
奇遇ですね
私もダメでした
624デフォルトの名無しさん:2005/11/28(月) 23:41:33
TerminateProcess()の第二引数って、検索すると0を与えてたり0xFFFFFF与えてたりするんですが
使い方が良く判りません。何を指定すべきでしょうか?
625デフォルトの名無しさん:2005/11/28(月) 23:48:00
>>624
好きな値
626デフォルトの名無しさん:2005/11/29(火) 00:04:17
>0xFFFFFF
なんでまたそんな中途半端な……
627デフォルトの名無しさん:2005/11/29(火) 13:34:47
>>612
WIN32の方です。

単純なセクタライトの場合、
(1) ロックレベル=1,アクセス権=0x0002 で論理ドライブをロック
(2) DeviceIOControl の INT26H
(3) アンロック
(4) ドライブのリセット

の手順でよか?


あと、アクセス権のbit1とかbit3、ロックレベルがなんで0とか3とかあんのか、それも和下欄。
628デフォルトの名無しさん:2005/11/29(火) 14:35:28
あるコンソールプログラムを外部から利用したいと考えています。
具体的にはCraftyというチェスのプログラムで、普通に起動すると

[7六歩]
move 3四歩
[2六歩]
move 8四歩
...

という形で対戦することが可能なチェスソフトです(実際はチェスの棋譜を返してきます)。
入力は標準入力、出力は標準出力です。
[括弧]の中にあるのはこちらかの入力で、move xxxがコンピュータからの返答です。

これを外部の、例えばグラフィカルなGUIを提供するプログラムから呼び出して
操作してやりたいのですが、具体的にどのAPIを使って通信すればよいのかわかりません。

どなたかAPIの名前だけでも結構ですので助言いただけませんか?よろしくお願いします。
629デフォルトの名無しさん:2005/11/29(火) 14:53:56
>>627
Win32アプリからはドライブのリセットのファンクションコール(int 21h ax=710Dh)は呼び出せないはず。

他のアプリが同時にそのドライブにアクセスしないのならそれで十分だろう。
あるいはロックレベル0の方がいいのかもしれない。
defragのようなことをやるのならロックレベル2,3も必要。詳細は↓
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/win9x/excluse_2inb.asp
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/win9x/excluse_406f.asp
ロックレベルが上がるにつれて、他のアプリのディスクへの書き込み、読み出し、
ファイルの作成などが制限されるようになる。
630デフォルトの名無しさん:2005/11/29(火) 15:42:19
>>628
パイプ、リダイレクト
631デフォルトの名無しさん:2005/11/29(火) 15:46:44
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200310/03100013.txt
このやりとりを参考に、自作のファイル管理ソフトに
エクスプローラの「元に戻す」を実装してみたんですが、
Win2kでは正常に動作するものの、XPではまったく無反応です。

XPで上手く動作させる方法、もしくは別な方法があれば教示願います。
632609:2005/11/29(火) 17:54:53
すいません、誤爆じゃないです。
C++ .net を使っているのですが、XmlTextReaderというAPIを
使うにはどうすればいいのでしょうか?
633デフォルトの名無しさん:2005/11/29(火) 18:10:24
スレ違い
634デフォルトの名無しさん:2005/11/29(火) 18:22:43
XmlTextReaderなんていうAPIはありません
はい終了
635609:2005/11/29(火) 18:34:33
どう見ても .NET Framewarkのクラスです
本当にありがとうございました
636デフォルトの名無しさん:2005/11/29(火) 19:21:54
>>628
APIはCreateProcess()
Yahooで
STARTF_USESTDHANDLES
で検索すれば、サンプルいっぱい。
637デフォルトの名無しさん:2005/11/29(火) 21:12:31
>>631
ファイルのプロパティでWin2000互換モードにする
638デフォルトの名無しさん:2005/11/29(火) 21:13:40
それはいやです
639デフォルトの名無しさん:2005/11/29(火) 21:17:24
WM_CREATEとか
WM_DESTROYとか
WM_PAINTとか
WM_LBUTTONDBLCLKとか
WM_COMMANDとか
いろいろメッセージがあるけれど、

自分でメッセージを送信しなかったとして、
通常ウィンドウプロシージャに運ばれてくるメッセージの一覧を教えて下さい。

http://www7.plala.or.jp/keny01/windows/win32/#sub1-6
こんな代表的な者の他に…
640デフォルトの名無しさん:2005/11/29(火) 21:18:37
それもいやです
641639:2005/11/29(火) 21:21:05
   Σ (゚Д ゚ ;)/
>>640に断られた…orz
642デフォルトの名無しさん:2005/11/29(火) 21:29:22
SPY使ってください
643デフォルトの名無しさん:2005/11/29(火) 22:12:37
>>636
ありがとうございます。早速調べてみます
644デフォルトの名無しさん:2005/11/29(火) 22:42:27
645デフォルトの名無しさん:2005/11/29(火) 23:26:33
>>629
ありがと。安心したわ。
646デフォルトの名無しさん:2005/11/29(火) 23:59:10
>>644
サンクス
647デフォルトの名無しさん:2005/11/30(水) 11:58:41
CreateProcessでアプリケーションを起動しているのですが、このときに
SHIFTキーを押してアプリケーションを起動したように振舞いたいのですが
どのようにすればいいのでしょうか?
例えば、AccessをSHIFTキー押しながら立ち上げたときのようにしたいのです。
648デフォルトの名無しさん:2005/11/30(水) 12:49:18
ACCESS起動時にパラメータ渡せば?
649デフォルトの名無しさん:2005/11/30(水) 12:53:15
>>648
Accessに限った話しでなくてSHIFTキー押しながら起動すると振る舞いの変わる
アプリケーション全般に使いたいと思っています。
650デフォルトの名無しさん:2005/11/30(水) 12:58:08
651デフォルトの名無しさん:2005/11/30(水) 13:01:59
>>647
立ち上がる時にSHIFTキーを押して貰えばいい
652647:2005/11/30(水) 13:12:50
>>651
現在はそういう運用になっていますが使いにくいという意見が出ていまして
改良できるならしてみたいと思っています。
653デフォルトの名無しさん:2005/11/30(水) 13:19:09
>>653
SHIFTキーを押しているときと同じ効用を持たせるコマンドラインオプションを設けて
ショートカットでも作ればええやん。
654デフォルトの名無しさん:2005/11/30(水) 13:21:54
事故参照乙
655647:2005/11/30(水) 13:29:14
>>653
起動先のアプリケーションはこちらで作成したものではなく一般にあるアプリケーションに
なりますので、パラメータを用意してもらうことはできないんです。
656653:2005/11/30(水) 13:37:22
やってまったがや。

一般にあるアプリケーションの使い勝手を変更するのはそのアプリケーションの
著作権者に対するデザインの侵害につながるので勝手にやってはいけません。
#ってことはないだろうか。

冗談さておき、もう少し情報欲しいな。
#もしかして、「例えば」じゃなくて実際にAccessの話だったりしてw
657デフォルトの名無しさん:2005/11/30(水) 13:43:32
サスペンド状態で起動してグローバルフックかな
658647:2005/11/30(水) 14:09:38
>>656
本当にAccessに限らないんです。

>>657
グローバルフックですか。。。
dll作ってとか結構大そうな感じになりますよね。
やはり簡単にはできそうにないんですね。
659デフォルトの名無しさん:2005/11/30(水) 14:15:32
まさかとは思うが、Shiftキーをロックできるのは知っているよな?
660デフォルトの名無しさん:2005/11/30(水) 14:16:43
Alt+半角/全角 押してローマ字入力モードにして
キー押すと
ウィンドウ左上に文字が出てくるんだが、これを非表示にする方法無い?
661デフォルトの名無しさん:2005/11/30(水) 14:27:29
>>660
IMEの設定でもいじれ
662647:2005/11/30(水) 14:30:19
>>659
keybd_eventを使うんですね。
試したところ上手くいきました。
ありがとうございます!
663デフォルトの名無しさん:2005/11/30(水) 14:43:37
自作のクラス内でスレッドを作成する際、現在スレッドプロシージャ
はクラス外に定義して、パラメータとしてクラスのポインタを渡して
制御する方法をとっているのですが、この場合スレッドプロシージャ
内で使用するメンバ変数は全てpublic定義にしなければいけません。

上記手法ではクラス化の意味が薄れてしまうため、スレッドプロシ
ージャをクラス内にstatic定義してCreateThreadしてみたところ、正
常に動作していますが、処理に自信が持てません。

Win32というよりはC++についての質問になってしまうのですが、この
ようなケースでは、どちらが正攻法でしょうか?
664デフォルトの名無しさん:2005/11/30(水) 14:48:27
>Win32というよりはC++についての質問になってしまうのですが
分かってて何故こっちに来る・・・
665デフォルトの名無しさん:2005/11/30(水) 14:55:39
>>661
いや、APIで解決したい。
ImmSetCompositionWindow使うと、場所移動できるのはわかった
666デフォルトの名無しさん:2005/11/30(水) 15:00:18
>647
それは、Access側で、起動時のShift状態を見て、
動作を変えてるんじゃなかろうか。
試してないけど、
SendInputでVK_SHIFTのDOWN
→ターゲット起動、Idleまで待つ。
→SendInputでVK_SHIFTのUP
でどう?
667デフォルトの名無しさん:2005/11/30(水) 16:18:10
グローバルフックとかしなくても、ホットキーでよくないか?
668667:2005/11/30(水) 16:19:30
ちなみにDLL作成しなくてもグローバルフックは可能。
669デフォルトの名無しさん:2005/11/30(水) 16:38:55
>>668
ノ 先生!方法を教えてください!
670デフォルトの名無しさん:2005/11/30(水) 16:47:33
>>663
それであってる
671667:2005/11/30(水) 16:58:05
>>669
つWH_JOURNALRECORD
672デフォルトの名無しさん:2005/11/30(水) 18:01:37
>>665
ImmSetConversionStatus
673デフォルトの名無しさん:2005/11/30(水) 23:12:22
MUTEXの一覧を烈拳するAPIを教えてください?
674デフォルトの名無しさん:2005/11/30(水) 23:28:02
DDKを使えば出来そうです。
DDKのAPIでカーネルオブジェクトテーブルの取得が
出来るっぽいです。
675デフォルトの名無しさん:2005/11/30(水) 23:49:40
列挙
烈拳
676デフォルトの名無しさん:2005/12/01(木) 00:10:24
北斗百裂拳って、原作では最初の方にちょろっと出ただけで、全然奥義っぽくないよね
677デフォルトの名無しさん:2005/12/01(木) 01:32:52
そもそも奥義なのか?>百裂拳
678663:2005/12/01(木) 08:57:05
>>664>>670
遅くなりましたけれど、レスありがとうございました。
679デフォルトの名無しさん:2005/12/01(木) 09:52:11
>>678
友達は?


額面どおりの意味不明な一行レスとして受け取るなよ。
ヒントが書かれている。
680663:2005/12/01(木) 10:19:54
>>679
ソレダ…って勉強が足りてないです。
スレ汚し失礼しました。
681デフォルトの名無しさん:2005/12/01(木) 10:27:37
679みたいのはさすがに寒いな…
682デフォルトの名無しさん:2005/12/01(木) 18:37:21
>>673

総当りで作ってみる
エラーが起きた名前は存在する
以上
683デフォルトの名無しさん:2005/12/01(木) 19:31:47
Visual Studio.net 2003からデバッグモードで起動すると問題なく起動できて
デバッグ無しだと起動に失敗してエラー報告ダイアログが出てきます。
んで、ダイアログ内のデバッグボタンを押すと

hoge.exe の 0x7c9514b6 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00d5503d に書き込み中にアクセス違反が発生しました。 。

と表示されてxstringの605行に緑の|>が表示されるのですが何事かわかる人いたりしますか?
デバッグ無しでもWin95/98/ME/NT互換モードだと起動できます。
684683:2005/12/01(木) 19:33:45
ああ、すみません。開発環境はWindowsXP SP2+Visual Studio.net 2003で言語はC++です。
685デフォルトの名無しさん:2005/12/01(木) 19:35:49
どっか初期化し忘れがあるんじゃねーの
686デフォルトの名無しさん:2005/12/01(木) 19:47:34
とりあえず確実なのはスレ違いってことだ。
687デフォルトの名無しさん:2005/12/01(木) 20:17:52
スレ違いでしたか。すみません。しかも自己解決してしまいました。
以前動いていた状態に少しずつ近づけてみた結果
MultiByteToWideCharを使用していた部分をCA2Wに直すと動くようになることがわかりました。
お騒がせしました。原因は今のところよくわかりませんが。

CHAR* mtext = "test";
WCHAR* wtext = NULL;
int nSize = MultiByteToWideChar(CP_ACP, 0, mtext, -1, wtext, 0);
wtext = (WCHAR *)malloc(nSize);
MultiByteToWideChar(CP_ACP, 0, mtext, -1, wtext, nSize);
688デフォルトの名無しさん:2005/12/01(木) 20:22:55
>wtext = (WCHAR *)malloc(nSize);
wtext = (WCHAR *)malloc(nSize*sizeof(WCHAR));
689デフォルトの名無しさん:2005/12/01(木) 20:28:05
>>688
!!!!
動きました!ありがとうございます!
MultiByteToWideChar()の戻り値って必要なバイト数じゃなくて文字数なんですね…。
勘違いしていました。本当にありがとうございました。
690デフォルトの名無しさん:2005/12/01(木) 20:39:14
>>689
このスレで聞いてよかったね(^_^)
691デフォルトの名無しさん:2005/12/01(木) 20:44:34
>>690
はい、本当にありがとうございました。
692デフォルトの名無しさん:2005/12/01(木) 21:44:13
でもATL::CA2Wを使い続けたほうが便利だよ。
693デフォルトの名無しさん:2005/12/01(木) 22:29:02
メモリ管理がちょっと楽になるぐらいじゃねーの?
694デフォルトの名無しさん:2005/12/01(木) 22:47:11
>>687方式よりはるかにシンプルに(というか1行で)書けて
しかも例外安全だが?
どーしてもATL使いたくないんなら、必要なクラス/テンプレートだけでも
パクれば?と言いたい。せっかくC++使ってるんだから。
695デフォルトの名無しさん:2005/12/01(木) 22:54:47
それはいやです
696デフォルトの名無しさん:2005/12/01(木) 23:11:49
ダメです
697デフォルトの名無しさん:2005/12/01(木) 23:45:45
ATL使うデメリットって何かあるの?
698デフォルトの名無しさん:2005/12/01(木) 23:46:23
おっと、スレ違いか、スマン
699デフォルトの名無しさん:2005/12/01(木) 23:52:50
つか、C++で必要も無いところでchar*だのwchar_t*だの扱ってるのは
糞コードだろ。
って、スレ違いだけどな。
700デフォルトの名無しさん:2005/12/02(金) 00:06:25
>>697
使えない人には使えない
701デフォルトの名無しさん:2005/12/02(金) 01:00:02
>>699
普通は何をつかうんじゃー!
702デフォルトの名無しさん:2005/12/02(金) 01:10:36
>>701
std::basic_string<T>でもCString<T>でも好きなモン使えよ
生char*とか使うよりはマシだから
703デフォルトの名無しさん:2005/12/02(金) 01:27:12
>>702
なにそれ?どうなんの?
ユニコード使う奴とにてんね。
704デフォルトの名無しさん:2005/12/02(金) 10:55:09
sprintfの使えない文字列クラスはウンコーヽ(・∀・)ノ
705デフォルトの名無しさん:2005/12/02(金) 11:27:42
CStringの切り貼りが遅すぎて、わざわざTCHAR *で書き直した俺が来ましたよ。
706デフォルトの名無しさん:2005/12/02(金) 12:27:49
> CStringの切り貼りが遅すぎて、わざわざTCHAR *で書き直した
そういうシビアな速度要求はまだ存在するんだねぇ。

因みに自分は(必要時以外の)TCHAR*は怖くて使えない。絶対解放し忘れる。
707デフォルトの名無しさん:2005/12/02(金) 12:40:30
>>704
スレ的には _sntprintf()。wsprintf()がギリギリ。
sprintf() を素で使う人にはグーでパンチするべきだろう。
708704:2005/12/02(金) 12:46:17
>>707
AnsiString::sprintf()使いだから大丈夫
709デフォルトの名無しさん:2005/12/02(金) 12:54:37
>>704
std::basic_stringに対しての発言ならboost::formatがあると返す。
710デフォルトの名無しさん:2005/12/02(金) 14:12:21
boost::formatは最強だな
711デフォルトの名無しさん:2005/12/02(金) 15:14:57
ここはapiスレ
712デフォルトの名無しさん:2005/12/02(金) 15:47:45
スレッドの内部で
そのスレッドを Create したときの
ハンドルを知る方法はありますか?
713デフォルトの名無しさん:2005/12/02(金) 15:50:46
マイクロ秒単位でポートの監視をするプログラムを
作成したいのですが、
Windowsで
QueryPerformanceCounter()
QueryPerformanceFrequency()
を使った場合、環境によって取得間隔がことなってしまうのでしょうか?

また マイクロ秒単位で動かすプログラムは、
ウインドウズアプリケーションで作成は、可能なのでしょうか?

714デフォルトの名無しさん:2005/12/02(金) 15:50:50
GetCurrentThread
715デフォルトの名無しさん:2005/12/02(金) 17:00:33
>>704
CStringT<>にはそのものズバリのFormat()があるでよ。
std::basic_string<>の場合はstd::stringstreamを使うか
>>709の言うように、boost::format使え。

sprintf()はバッファオーバーフローの危険性がある最悪関数。
非標準だがsnprintf()の類が使えるならそちらを使うべき。
でも、C++のフォーマッタの方が、文字列長に限界が無いし、
下らないメモリ管理に関する心配が不要だからずっといい。

C++使っておきながらchar*とsprintf()族を無意味に使ってる奴は
ただの馬鹿。

716デフォルトの名無しさん:2005/12/02(金) 17:07:26
sprintfでバッファオーバーフローと言い出すのは
sprintfの使い方さえろくに知らないバカ
717デフォルトの名無しさん:2005/12/02(金) 17:11:59
ここは何のスレですか?
718デフォルトの名無しさん:2005/12/02(金) 17:25:38
>>716
そうだな。長さは数えようと思えば数えられる。だが、それは面倒で誤りの多いコードになりがちだから
非常に多くのCプログラムでそうしたことが省かれるし、それがCプログラムのセキュリティホールを
産んで来た。
わざわざsnprintf()なんてものが導入されたのはそのためであって、そうした歴史を無視して
語ったところで無知が露呈するだけだぞ。

それにくらべてCStringT<>::Format()のようなものがいかに便利であることか。
719デフォルトの名無しさん:2005/12/02(金) 17:26:14
>>716
きちんと使えるようになってもうっかり間違えることはあるさ。
720デフォルトの名無しさん:2005/12/02(金) 17:31:57
何いってんだ
char buff[200];
sprintf(buff, "%.180s", s);
とかの「すごく簡単で基本的な使い方」すら知らないのか?
721デフォルトの名無しさん:2005/12/02(金) 17:34:03
>>720
きちんと使えるようになってもうっかり間違えることはあるさ。
722デフォルトの名無しさん:2005/12/02(金) 17:35:16
>>720
あんたは意図的に物事を単純化している。
%.180のように「勝手に切り詰めてもいい」場合だけじゃないだろ。
切り詰めては駄目な場合は、フォーマット後の長さを数えるしかない。
723712:2005/12/02(金) 17:36:31
>>714
GetCurrentThread で得られるのは
擬似ハンドルですよね?
本当のハンドルを得ることはできないのでしょうか?
724デフォルトの名無しさん:2005/12/02(金) 17:37:02
は?

「バッファオーバーフローの危険」の話をしてるんじゃないの?
725デフォルトの名無しさん:2005/12/02(金) 17:37:39
フォーマットに必要なバッファを自動的にアロケートしてくれる
asprintf()のようなものが使えるシステムもある。
これは後でfree()しなければならないことを除けば、大変便利だ。
が、無論C++ならば不要なものでもある。
726デフォルトの名無しさん:2005/12/02(金) 17:38:53
>>724
そのとおりだが、セキュリティホール塞ぎは仕様を捻じ曲げて達成するものではない。
727デフォルトの名無しさん:2005/12/02(金) 17:39:06
それと、sprintfは、「書き込んだ文字数を返す」んだよ。
戻り値が「バッファが足りないっぽい」数字だったら
改めてバッファを広げて呼び直せばいいだけの話。
(snprintfなら、必要なバッファサイズもわかるけどね)
728デフォルトの名無しさん:2005/12/02(金) 17:41:05
やっぱ勉強不足を屁理屈でごまかしてる奴ばっかじゃん。
729デフォルトの名無しさん:2005/12/02(金) 17:41:44
>>727
えーと、sprintf()の場合、平気でバッファを超えて書き込んで(メモリを破壊し)、その値を返すわけですが。
730デフォルトの名無しさん:2005/12/02(金) 17:42:51
>>723
DuplicateHandle()
731デフォルトの名無しさん:2005/12/02(金) 17:43:02
>>728
「誰が」勉強不足なの?
C++使ってるくせにstd::stringstreamやboost::formatやCString<>::Format()のような便利なものを
使わない人たちだよね?w
732デフォルトの名無しさん:2005/12/02(金) 17:43:29
>>726
必要があるところでなら、そのような処理をすればすれば良いだけ。
大抵のところでは、その程度で充分だよ。
例えばファイル名の長さとかに制限を設けて仕様としても問題はない。
内部処理ならなおさら。

そして、sprintfには「バッファオーバーフローの危険」はない。
733デフォルトの名無しさん:2005/12/02(金) 17:45:36
>>732
>sprintfには「バッファオーバーフローの危険」はない。
「正しく使えば」が抜けている。だが、それは意外に難しい。

実のところ別に無能なわけでもなんでもないCプログラマたちが作ったレガシープログラム群
の多くにそのようなセキュリティホールが発見されているのだ。
734デフォルトの名無しさん:2005/12/02(金) 17:45:49
>>729
sprintf(buff, "%.180s", s) が179を返した場合の話なんですが
その程度も推察できないのですか?
735デフォルトの名無しさん:2005/12/02(金) 17:47:16
ところでwsprintfには1024文字までしか書き込まれないという制限がある。
だからどうしてもwsprintfを使わなければならないときに俺はバッファの要素数を必ず1024以上にしている。
736デフォルトの名無しさん:2005/12/02(金) 17:47:49
>>734
それなら>>727の説明が誤っている。
>改めてバッファを広げて呼び直せばいいだけの話。
ではなくて、フォーマット文字列もいちいち変更するんだろ?
まあ、%.*sとかにしといて、長さ部分を変えるだけだろうが。
737デフォルトの名無しさん:2005/12/02(金) 17:49:24
あのね、俺だって
「CString::Format等を使わないでsprintfを使え」なんて言ってる訳じゃないの。
「『「sprintfにバッファオーバーフロー』と言う奴は使い方を知らないだけ」と言ってるの。

どこぞのスレで「strcpyの脆弱性」と言ってる奴と全く同じだよ。
738デフォルトの名無しさん:2005/12/02(金) 17:49:25
スレ違いを修正出来ないやつらが偉そうに語ってるが
説得力ゼロ
739デフォルトの名無しさん:2005/12/02(金) 17:50:41
>>735は一応スレに沿っているなw
740デフォルトの名無しさん:2005/12/02(金) 17:59:45
>>730
それだと、同じスレッドを指す別のハンドルになった希ガス。
741デフォルトの名無しさん:2005/12/02(金) 18:01:11
話の流れには沿っていないがな。
742デフォルトの名無しさん:2005/12/02(金) 18:05:14
>>740
Advanced Windows嫁。
ちゃんと実ハンドルが取れる。

Advanced Windowsにも、スレッドの実ハンドルをとる目的で載っている。
743デフォルトの名無しさん:2005/12/02(金) 21:52:29
DuplicateHandleでも「Createしたときの」ハンドルは取れないんじゃないの?
何のためにCreateしたときのハンドルが必要なのかはともかく。
つーか質問者が何かを激しく勘違いしてる可能性が高いが。
744デフォルトの名無しさん:2005/12/03(土) 00:10:44
sprintf()を擁護する池沼が湧いたか。ご苦労なこった。
745デフォルトの名無しさん:2005/12/03(土) 00:21:02
おまいら、ここはWin32APIの質問スレですよ
746デフォルトの名無しさん:2005/12/03(土) 00:42:49
スレタイすら読めない池沼が(ry
747デフォルトの名無しさん:2005/12/03(土) 00:47:53
池沼は何をやっても許されます
裁判でも裁けません

池・沼・最・強・伝・説
748デフォルトの名無しさん:2005/12/03(土) 01:18:13
sprintfが駄目ってヤツに聞きたいんだけど。
>>720のプログラムは間違ってるの?
動かないの?
そこらへん考えてレスつけないと馬鹿に見えるよ。
749デフォルトの名無しさん:2005/12/03(土) 01:21:28
見当違いのレスも馬鹿みたいだぞ。注意しな。
750デフォルトの名無しさん:2005/12/03(土) 01:28:34
>>749
頭の悪い糞餓鬼が大して重要でない部分に大騒ぎしてる臭いがプンプンするね。
いいアプリケーションを作ってくださいねw
751デフォルトの名無しさん:2005/12/03(土) 01:34:24
>>745
snprintf()ならば、十分にスレテーマに沿ってる。
なぜならgccとVCとでは、snprintf()でバッファサイズを埋め尽くした時の振る舞いが違うので。
この辺もちゃんと押さえておかないと、軽くヤバイ。
752デフォルトの名無しさん:2005/12/03(土) 01:39:28
落ち着け馬鹿ども
753デフォルトの名無しさん:2005/12/03(土) 01:52:17
>>751
C標準ライブラリの実装依存の話と、スレタイのWin32APIとどんな関係が?
754デフォルトの名無しさん:2005/12/03(土) 01:53:50
はいそこいちいち釣られない
755デフォルトの名無しさん:2005/12/03(土) 01:57:58
>>748
もう少し、未来を予測する能力を培ったらどうだろうか。

バッファサイズがのちのち変更される可能性については考えないのか?
ソースコードが別プロジェクトにコピペされる可能性については考えないのか?

バッファサイズを指定していたマクロなり定数なりの文字列でgrepしただけでは、
修正すべき場所を追跡できない。それがprintf()系フォーマット引数クオリティ。

>>748、君は職業PGに向いていないと思う。
もし今、職業PGなのであれば、迷惑をかける前に転職してほしい。
趣味PGなのであれば、これ以上はキツク言わないよ。思う存分、使ってくれ。
756デフォルトの名無しさん:2005/12/03(土) 02:13:28
共同開発をしたことのない初心者が調子に乗って煽ってただけか。
お前ら、初心者の相手して暇だな。
757デフォルトの名無しさん:2005/12/03(土) 02:18:50
他人の尻馬に乗らない
758デフォルトの名無しさん:2005/12/03(土) 02:23:11
アフォばっか
759デフォルトの名無しさん:2005/12/03(土) 02:25:41
sprintf (buffer,"%.*s",sizeof(buffer)-1,string);
760デフォルトの名無しさん:2005/12/03(土) 02:32:49
>>759
lstrcpyn(buffer, string, sizeof(buffer));
で済むことに何故sprintf()を使う。

もっと現実的なsprintf()の使用例で考えてみろ。
761デフォルトの名無しさん:2005/12/03(土) 02:42:24
#define CONSTANT "editing data"
sprintf (buffer, "%.*s" CONSTANT, sizeof(buffer)-1-(sizeof(CONSTANT)-1),string);
762デフォルトの名無しさん:2005/12/03(土) 02:43:30
CreateFile関数が失敗した時の原因が共有違反だったか調べる方法はありませんか?
共有違反だったら他のプロセスがハンドルを開放するのを待って、
共有違反でなかったらreturnさせたいのですが。
763デフォルトの名無しさん:2005/12/03(土) 02:44:45
面白いアイディアだが、遠慮なく却下させてもらう。
sizeof()に依存している時点で死亡決定。
理由はわかるな?
764デフォルトの名無しさん:2005/12/03(土) 02:48:35
>>748 を援護する
がんがれ
765デフォルトの名無しさん:2005/12/03(土) 02:49:04
>>761
フォーマット文字列を変更した時の気の使いようは並じゃないな。
で、毎度毎度そんな誤りやすい計算をやるのか。
却下だ、却下。

実際そうしたことが面倒で誤りやすいからバッファオーバーフローのバグが
生じてきた「現実」があるのだとなぜ分からないのか。
単に「出来る出来ない」の話じゃないんだよ。それだけでいいんなら全部
アセンブラで書けっての。
766デフォルトの名無しさん:2005/12/03(土) 02:50:22
>>763
lstrcpyn(buffer, string, sizeof(buffer));

こいつも脂肪
767デフォルトの名無しさん:2005/12/03(土) 03:06:38
sizeofって使っちゃダメなの?
768デフォルトの名無しさん:2005/12/03(土) 03:19:59
ソースコードをいずれコピペするであろう時のことを常に念頭に置くことだ。

bufferの部分がポインタだったとしてもちゃんと動いて欲しいのが人情。
UNICODEビルドしたときにクラッシュして欲しくないのも人情。
769デフォルトの名無しさん:2005/12/03(土) 04:02:16
「明日の自分は赤の他人」、この心がけ大事。
特にハイテンションでコード書いてしまった次の日とか。
770デフォルトの名無しさん:2005/12/03(土) 04:04:22
特にハイテンションでレス書いてしまった次の日とか。
771デフォルトの名無しさん:2005/12/03(土) 04:16:49
>>770
ワロタw

「多い日も安心、次の日も安心」だよな、基本は。
772デフォルトの名無しさん:2005/12/03(土) 04:51:37
sizeofが駄目となるとstrlen使えってことなのか?
773デフォルトの名無しさん:2005/12/03(土) 05:00:50
>>772
もうネタは投下しなくていい。お前はよくがんばった。
だが、いかんせん可燃性に乏しいようだ。あきらめろ。
774デフォルトの名無しさん:2005/12/03(土) 05:06:28
分かってる奴は説明省略しすぎるし、
分かってない奴は自分で調べようともしないし、
ほんと質問スレとしては最悪だな。

・sprintf()に限らず、printf()系のフォーマットの幅指定は、
あくまで最低限確保される幅の指定であって、最大限じゃあない。
よって指定幅を超えた書き込みをすれば、指定幅を超えて書き込むので
バッファオーバーフローしうる。回避方法はないのでsnprintf()系を使うべき。
参考:>>715>>729>>735>>745

・sizeofは型及び変数のサイズ(バイト数)を返す。
文字列の長さを返すわけじゃないし、配列の要素数を返すわけでもない。
変数が配列なら配列サイズ(not 要素数)を返すが、ポインタならポインタのサイズを返す。
「ポインタと配列は全くことなるもの」という実例の1つだな。
参考:>>763>>766>>768
775デフォルトの名無しさん:2005/12/03(土) 05:12:13
>>774
>・sprintf()に限らず、printf()系のフォーマットの幅指定は、
>あくまで最低限確保される幅の指定であって、最大限じゃあない。

%100sと%.100sの違いも知らない池沼が何かホザいてるようだな。
776デフォルトの名無しさん:2005/12/03(土) 05:19:05
ああ、精度指定(ピリオドより後)って文字列にも効くのか。うっかりしてた。
>>774の上半分は無視してくれ。
777デフォルトの名無しさん:2005/12/03(土) 05:20:39
char *buffer = new char[128];
lstrcpyn(buffer, string, sizeof(buffer));

漏れこれではまったことあるな・・・
778デフォルトの名無しさん:2005/12/03(土) 05:31:06
よん?
779デフォルトの名無しさん:2005/12/03(土) 05:31:52
sprintf()は整数の場合は最大桁が予測可能だからオーバフローの心配をするまでもないのだが、
実数の場合は迂闊に%fを使うと1e300などと言う異常値が入ると300桁もの数値を吐き出しかねない。
以上を踏まえて注意を纏めてみる。

・最小幅指定はあくまでも入力が予測可能な場合にのみ意味がある。
#入力値が異常な場合、バッファオーバフローの危険が常に付き纏う。
・文字列→"%.*s", len, str などとして最大幅を制限する。
・整数値→INT_MAX(或いはその他)から桁数を計算できるのその分のバッファを用意する。
・実数値→%e/%gを精度指定とともに使うようにする。

そういう注意をした上でsprintf()を使うかCString::Format()などを使うかは強制されることではない。
まぁ、WinAPIスレだから仕方ないが世間知らずが多いよな。
780デフォルトの名無しさん:2005/12/03(土) 05:40:59
やっと良スレになってきたな
781デフォルトの名無しさん:2005/12/03(土) 05:43:10
だよね(^o^)
782デフォルトの名無しさん:2005/12/03(土) 08:04:32
unsigned long
をwin32api風に書くとどうなるんですか?
UNSIGNEDは定義されてないみたいです
783デフォルトの名無しさん:2005/12/03(土) 08:39:38
DWORD
784デフォルトの名無しさん:2005/12/03(土) 08:40:35
ありがと
785デフォルトの名無しさん:2005/12/03(土) 08:41:57
DWORD < ULONG < ULONGLONG
786デフォルトの名無しさん:2005/12/03(土) 09:26:55
>>755
>もう少し、未来を予測する能力を培ったらどうだろうか。
おまえこそ気にしてもしょうがないようなとここだわってるじゃん。
>>720についていってるのに「将来変更されたら〜」なんていつの話だよ。
将来変更される可能性なんていったって、お前の勝手な妄想だろ。

そんな一時保存的なバッファサイズだけに変更がかかったことなんて生涯を通して一度も無いよ。
お前の未来予測は当たる確率が低すぎて意味がねぇんだよw
787デフォルトの名無しさん:2005/12/03(土) 09:37:47
神崎タケノリは、姉歯秀次・創価学会員に
「そうはイカンザキー!!」といったのでしょうか。
ぜひTVで言ってください。
言わないのなら、誰か誇大広告でJAROに訴えてください。
大作が草加をゴミタメにした。
788デフォルトの名無しさん:2005/12/03(土) 09:46:17
>>785
俺はDWORDとULONG/ULONGLONGは別次元だと思っている。
DWORDLONGは自分では使わない。
789デフォルトの名無しさん:2005/12/03(土) 09:50:02
つか普通BYTE,WORD,DWORD,QWORD
790デフォルトの名無しさん:2005/12/03(土) 10:17:05
なぜWinAPIにはQWORDがないのかわからない。
DWORD64の前にQWORD作れよ。
791デフォルトの名無しさん:2005/12/03(土) 10:40:44
UINT64とかでいいのに…
792デフォルトの名無しさん:2005/12/03(土) 10:53:39
ULARGE_INTEGER
793デフォルトの名無しさん:2005/12/03(土) 11:30:44
>>762
GetLastError()でERROR_SHARING_VIOLATIONが返ってくれば共有違反
794デフォルトの名無しさん:2005/12/03(土) 11:36:17
>>786
>そんな一時保存的なバッファサイズだけに変更がかかったことなんて生涯を通して一度も無いよ。 

あきれ果てた上司PGがお前をプロジェクトから外したからだ。
代わりにソースコードの後継を任されたほかのPGが大変だったわけだ。
すぐにプロジェクトから外されるお前は、未来を予想する必要がなかった。
そういう意味ではお前の言っていることは間違ってないから、安心しろ。
795デフォルトの名無しさん:2005/12/03(土) 11:47:46
ネタがないからって変なケンカはやめろヽ(`Д´)ノ
796デフォルトの名無しさん:2005/12/03(土) 11:50:14
全ては使用禁止でFAが出ている関数を使い続けようとするモグリのせいだ。
797デフォルトの名無しさん:2005/12/03(土) 11:56:44
>>763
extern char *buffer;
こんなアホなコード書いてる訳かw
798デフォルトの名無しさん:2005/12/03(土) 12:13:00
MSDNのサンプルソースで大量に用いられるsizeof演算子。
PMの判断によって開発の最前線から外された窓際PGがサンプル作成を担当している。
const定数を使わずdefine定数を使ってバッファサイズを指定するところがさすが窓際。
799デフォルトの名無しさん:2005/12/03(土) 13:07:33
なんつーか、CとC++の区別がつかないおこちゃまが紛れているようだが。
800デフォルトの名無しさん:2005/12/03(土) 13:15:04
>>794
実のところお前も汎用性をつけるだけつけておいて、
全くそんなことが起きたことがないってことでFAだろ?
お前の未来予測は役に立たねぇんだよ。
801デフォルトの名無しさん:2005/12/03(土) 13:28:07
sprintfの使い方を知らなくて「使えねー」って騒いでいるわけか
802デフォルトの名無しさん:2005/12/03(土) 13:45:24
sprintfってwindows.hで宣言されてないから嫌いですぅ
803デフォルトの名無しさん:2005/12/03(土) 14:06:49
>>800は、PGとしての適正を否定されたことがそんなにくやしかったのか?
UnixコミュニティやWindows開発チームが到達した結論を否定するだけあってアフォだな。
804デフォルトの名無しさん:2005/12/03(土) 14:26:14
でもwsprintfは使える記述指定子が少ないから嫌いですお
805デフォルトの名無しさん:2005/12/03(土) 14:30:38
>>800
ヒント: 備えあれば憂いなし
806デフォルトの名無しさん:2005/12/03(土) 14:46:57
>>803
起こりもしないような不具合想定して、
いつも職場で大声で騒ぎたてる馬鹿が掲示板で元気だなぁwおいw
807デフォルトの名無しさん:2005/12/03(土) 14:49:15
>>806
John Robbinsの本でも読んどけ
808デフォルトの名無しさん:2005/12/03(土) 14:49:42
関係ないことでしか反論できなくなったら終わり
809デフォルトの名無しさん:2005/12/03(土) 14:53:02
John Robbinsが関係ないという人がいるスレはここですかw
810デフォルトの名無しさん:2005/12/03(土) 14:53:42
結局ここでも
「sprintfでバッファオーバーフロー」と言う奴はバカばっか(>>774)という実例が増えただけ

ちなみに>>765は、sprintfのフォーマット文字列が変更される可能性はあっても
Formatのフォーマット文字列が変更される可能性は無いと言ってます。
811デフォルトの名無しさん:2005/12/03(土) 14:54:19
>>806
起こるんじゃあない。起こすんだ、人間自身が。
人間のスペックを信頼している時点でお前はPG失格。氏ね。
812デフォルトの名無しさん:2005/12/03(土) 14:58:47
中には「是非sprintfを使え」という人も居るかもしれないけど
普通の人は>>737のように、「適材適所」ということを理解してるから。

盲目的に「sprintfは使えねえ」って言う奴はバカ
これだけは確実だけどね。
813デフォルトの名無しさん:2005/12/03(土) 14:59:37
「ヒューマンエラーしやすい手法をあえて使いこなしてこそ玄人」
という価値観ならば、C++は一切必要ないな、そいつには。
統合開発環境も必要ない。C言語さえ必要ない。アセンブラだけで十分だろ。
Win32API質問スレに来なくてもいいだろ、玄人なのだから。
814デフォルトの名無しさん:2005/12/03(土) 15:04:07
>>812
まだ判ってないな。本物の馬鹿だろ、お前。
sprintf()がプロジェクトで使えるかどうかは、末端PGが個人判断してよいことではないのだ。
PMが一方的に使用禁止と末端PGに命令して、初めてプロジェクトの安定性が確保される。
お前の個人的判断なぞは全く重要ではない。
815デフォルトの名無しさん:2005/12/03(土) 15:07:25
なんだ、「俺たち末端バカコーダにはsprintfは使いこなせない」と言いたかったんだ。
816デフォルトの名無しさん:2005/12/03(土) 15:08:30
うん、俺もそう思うよ。
>>774みたいに使いこなせないバカコーダー(ITドカタ)が
山ほどいるからね。
817デフォルトの名無しさん:2005/12/03(土) 15:10:38
盲目的と陰口されようが顔色ひとつ変えずに、関数を使用禁止できるPMが優秀なPM。
使うメソッド・使うアルゴリズムを制限していくからこそ、管理が楽になる。
末端PGに自由裁量を与えているようなチームは、ダメなチームだ。
818デフォルトの名無しさん:2005/12/03(土) 15:10:59
んー、sprintf使用禁止なプロジェクトってそんなに多いのかね?
一応CでもC++でも言語使用に定められた標準ライブラリに含まれるんだけど。
API以外使用禁止なんてところもあるんだろうな。
819デフォルトの名無しさん:2005/12/03(土) 15:15:17
で、sprintfを使用禁止にしておきながら
「boost::formatを使え」とか、言ってるわけだよ。
大笑いだね。

標準ライブラリすらまともに使えない末端コーダーに
boostの使い方を先に覚えさせようとするわけだ。
ま、確かに便利だけどね。
820デフォルトの名無しさん:2005/12/03(土) 15:16:36
>>818
>んー、sprintf使用禁止なプロジェクトってそんなに多いのかね?

多い。
標準ライブラリであることは安定性に関して何の保証にもならない。
標準ライブラリが保証するのは汎用性だけ。勘違いするな。
821デフォルトの名無しさん:2005/12/03(土) 15:17:00
Lhasaは全部APIでやってるそうな。
822デフォルトの名無しさん:2005/12/03(土) 15:19:39
はいはい、
「バカ」はsprintf使用禁止で良いよ。

「普通の人」は別にsprintf使っても、何の問題もないから。
もちろん、個人で何か作る場合も、複数で作る場合もね。

「末端職業プログラマ」のレベルは、実際酷いもんだし
バカが混じるプロジェクトで禁止するのも仕方ないかもね。


「バカの常識」を「一般人の常識」にはして欲しくないけど。
823デフォルトの名無しさん:2005/12/03(土) 15:20:24
キャリアアップを目指すならsprintf()反対。
末端下請けで突き進むならsprintf()賛成。

お前らの人生観次第だ。好きな方を選べ。
824デフォルトの名無しさん:2005/12/03(土) 15:22:43
>>822
バカかどうかじゃない。自分を過信するかしないかだ。
根本的に判ってないな、お前。
825デフォルトの名無しさん:2005/12/03(土) 15:22:51
自分自身が末端であることを
>>774みたいに証明してる人が沢山いるんだから

そりゃ必死になって
「sprintfを使うことの悪さ」を主張するわな。
「sprintfの悪さ」を主張しようとして、論破されちゃったもんだから。
826デフォルトの名無しさん:2005/12/03(土) 15:23:55
Win32APIの質問マダー?
827デフォルトの名無しさん:2005/12/03(土) 15:25:50
つまり、「明示的に禁止されているから」「バカが使い方を知らないから」以外に
「自分がsprintfを使うべきではない理由」は
何一つ挙げられないと。
828デフォルトの名無しさん:2005/12/03(土) 15:29:47
>>819
「アセンブラすらまともに使えない末端コーダーに
C言語の使い方を先に覚えさせようとするわけだ。」
と言っているに等しいな。

そもそも何をもって「標準ライブラリをまともに使える」と見なすか決めるのはお前ではない。
俺がPMならお前をプロジェクトから外すだろう。標準ライブラリをまともに使えてないと感じるからだ。
829デフォルトの名無しさん:2005/12/03(土) 15:31:02
このスレは釣られるバカが多くて楽しい ^^
830デフォルトの名無しさん:2005/12/03(土) 15:31:22
だって、「バカが使い方を知らない」という以外に
「sprintfの悪い点」を出せないから。

出そうとして自分の無知をさらけだしてしまい
必死に論点をずらしてるだけだから。
831デフォルトの名無しさん:2005/12/03(土) 15:32:48
(^o^)<YO!YO!チェケラッキョッ!
832デフォルトの名無しさん:2005/12/03(土) 15:34:25
そりゃまあ、>>774みたいな奴がプロジェクトに入るとわかっていたら
どんなPMでも、「このプロジェクトはsprintf禁止」にするでしょ。間違いなく。
833デフォルトの名無しさん:2005/12/03(土) 15:35:04
質問です!
バイナリエディタもどきを作成してみたいのですが
バイナリエディタにあるあのインターフェイスは
GDI関数でクライアント領域に直書きするものなのでしょうか?
それともエディットコントロール(orリッチエディット)で実装すべきでしょうか?
ご助言をお願いします!
834デフォルトの名無しさん:2005/12/03(土) 15:35:22
>だって、「バカが使い方を知らない」という以外に 「sprintfの悪い点」を出せないから。 

それだけで十分だ。それ以上の理由も必要ない。
「他人に合わせたくない」という孤高のPGはずっと下請けをやってもらうしかない。
実際、業界はそうなっている。
835デフォルトの名無しさん:2005/12/03(土) 15:35:40
そんな事よりstdio.hのprintfに対応するWinAPIは何ですか
_printfとかあると思ったのですがないようです
836デフォルトの名無しさん:2005/12/03(土) 15:42:33
だから、「sprintfの悪い点」を挙げろよ。
もちろん自分で使う上で。
末端コーダが、自分で何か作ろうなどという創造的なことをしないだろうというのは
分かるけどさ。

「自分みたいなバカが加わるプロジェクト」は大抵sprintf禁止なのはもうわかったよ。

バカがsprintfを使うのは良くないのは>>774で良くわかったから
普通の人が自分のプログラムでsprintfを使ってはいけない理由は?
837デフォルトの名無しさん:2005/12/03(土) 15:43:33
>>835
ない。unixにもない。

_write()に対応するAPIならある。
GetStdHandle()
WriteFile()
838デフォルトの名無しさん:2005/12/03(土) 15:43:48
スレ違いの話題で荒らすなぼけ
くだらん論争はCスレ言ってやってこいぼけ
839デフォルトの名無しさん:2005/12/03(土) 15:46:07
>>836
思う存分、使えばいい。>>755で答えは出ている。
840デフォルトの名無しさん:2005/12/03(土) 15:49:00
>>837
GetStdHandle+wsprintf+WriteFile使ってみるわ
841デフォルトの名無しさん:2005/12/03(土) 15:49:24
「末端コーダーを目指す人はsprintf禁止」ということですね。
842デフォルトの名無しさん:2005/12/03(土) 15:52:06
>>840
UNICODEビルドの場合はマルチバイトに変換してから出力する必要あり。要注意。
843デフォルトの名無しさん:2005/12/03(土) 15:54:44
まだやってたんか('A`)
844デフォルトの名無しさん:2005/12/03(土) 15:55:46
>>840
wsprintfを使う時はバッファサイズを1024以上取り、
なおかつ全体が1024以上にはならない程度の文字列にしないと。

しかも末端コーダーを目指す人は使わない方が良いらしいぞ。
845デフォルトの名無しさん:2005/12/03(土) 15:56:01
>>842
Unicodeつかわね
あとWinapiでstrlenに対応する関数はどれですか。
846デフォルトの名無しさん:2005/12/03(土) 15:57:34
>>845
sizeof
847デフォルトの名無しさん:2005/12/03(土) 15:58:18
lstrlen
848デフォルトの名無しさん:2005/12/03(土) 16:00:55
ありがと
849デフォルトの名無しさん:2005/12/03(土) 16:05:06
>>755はもしかして
char buff[BUFFER_SIZE];
sprintf(buff, "%.200s", s);
みたいな使い方を想定してるのか?
明示的にdefineした定数の数字を想像して%.200なんて書く奴なんか居ないよ。

逆に
char buff[200];
の"200"という数字をgrepするというのなら、
defineやconstを使わないで200という重要な数字を生で書いているということだよな?

もちろん、ローカルのバッファならそれで充分だが
そんなのgrepして見つかっても書き直すわけ無いし。

逆に引数等でバッファサイズが与えられるなら、必ず.*を使うし

どう考えても「バッファサイズを変更する>>755の状況」が想像つかないね。
俺には。
850デフォルトの名無しさん:2005/12/03(土) 16:12:44
>>849
入力側の予想されるサイズが変わった時のコストを考慮してないのは、何故だ?
わざと無視してるのか?
851デフォルトの名無しさん:2005/12/03(土) 16:15:11
>>833
APIの質問でなく、機能の実装方法だからスレ違いな気もするが・・・
くだらない論議にうもれてしまいそうで、かわいそうなので、

どういう仕様のエディタを作るかによるが、GDI直書きがおすすめ。

(リッチでない)エディとコントロールは64K文字しか扱えないので、
バイナリエディタじゃ足らないでしょう。
リッチエディトで頑張ればそれなりの物は作れるが、バイナリエディタなりの
カーソルの動き等を実装しようとすると、かえって大変。

自分で全て制御・描画するほうが最初は手間がかかるが融通が利く。
852833:2005/12/03(土) 16:18:47
>>851
あ、ありがとうございます!
スレ違いでしたか、にもかかわらず答えていただいてありがとうございます!
直書きでやってみます!
853デフォルトの名無しさん:2005/12/03(土) 16:23:51
>>850
ん、ちょっと真面目に議論しようよ。スレ違いだけど。

他との関連があるバッファだったら、
(例えば構造体のメンバとかで他と受け渡しするものなら)
defineなりsizeofなりを使って、バッファサイズを取得するでしょ?
つまり、"%.200"というリテラルを使うことはあり得ないわけ。
動的に確保したサイズを渡す場合にしても。

逆に、ローカル変数でのバッファだったら、その関数内で完結するわけでしょ?
その場合は、バッファの大きさが数字で直接書かれているだろうけど
そのバッファを使用するのがそもそも関数内だから
バッファサイズを変更したら、そのバッファを使っている部分(関数内)を一通り見て
影響がないか確認するのが常識じゃないの?

もちろん、「その程度のことすらまともに出来ない人間」が存在するのは確かだけど
「自分で作って自分で使う部分」なら問題にならないんじゃないの?

それに、例えば数字→文字列とか、ディレクトリ+ファイル名+拡張し→文字列
みたいなのは、ある程度上限があるから、
あらかじめ余裕をもって確保するべきだと思うし。
854デフォルトの名無しさん:2005/12/03(土) 16:25:44
示し合わせて他所へ行けっての
855デフォルトの名無しさん:2005/12/03(土) 16:32:18
>>849は書式に関する深い知識と経験を用いて、
書式文字列をsprintf()で作ってからsprintf()を実行するから、なんら問題ないよ。
それができないお前らは(ry
856デフォルトの名無しさん:2005/12/03(土) 16:35:48
>>852
VB使って、あの表示部分をユーザーコントロールとして作ってしまう、
もしくは、VCなら1個のクラスでまとめてしまうと楽
857デフォルトの名無しさん:2005/12/03(土) 16:36:53
>>855
"%.*"って知ってるかい?

858デフォルトの名無しさん:2005/12/03(土) 16:38:11
  ,,,,_  
 /,'3 `ァ <もうだめぽぉ
 `ー-‐`
859デフォルトの名無しさん:2005/12/03(土) 16:40:10
要するにだな、>>755が全ての答えだ。
>>755の文意を理解できた人間は職業PGを続けていい。
>>755の文意を理解できない人間は即刻職業PGをやめろ。
860デフォルトの名無しさん:2005/12/03(土) 16:40:16
>>853
うざい
スレ違いだとわかっているなら他所へいけぼけ
そんな判断さえできんやつが屁理屈こねたところで
どうせロクなコードは書けん
わかったら消えろぼけ
861デフォルトの名無しさん:2005/12/03(土) 16:42:29
>>755の文意を理解できた人間は末端コーダーを続けていい。
>>755の文意を理解できない人間は即刻末端コーダーをやめろ。

sprintfの悪いところは、末端コーダーが使いこなせないことだから。
862デフォルトの名無しさん:2005/12/03(土) 16:48:33
要するにここまでの議論を読むと結論は、
糞PGの集団は、>>755に従えってことだね
863デフォルトの名無しさん:2005/12/03(土) 16:54:04
>>862
結論はスレ違いウザイってことだろ?
864デフォルトの名無しさん:2005/12/03(土) 16:54:28
職業PG=薩長軍
アマPG=彰義隊・新選組

派手なのはどっち?
強いのはどっち?
865デフォルトの名無しさん:2005/12/03(土) 16:56:14
この手の標準?APIの使い方というか、危険、安全の議論をするスレは無いの?
無いんだったらここでいいじゃん。
866デフォルトの名無しさん:2005/12/03(土) 16:56:16
お久しぶりです(^o^)
さっそくですがツールバーやメニューバーに視覚スタイルを適用する方法を教えてください(^o^)
他の掲示板にいったけど完全にスルーされたので戻ってきました^^
http://up.mugitya.com/img/Lv.1_up12444.jpg
メニューバー・ツールバーを作ってみたら、上の奴のようになってしまうのです。
下や真ん中の奴のように視覚スタイルを適用したいのですがどうすればよいのでしょうか?
DrawThemeBackgroundでできると思ったのですが、それらしい定数が見つかりません(分かりません)
何卒お願いいたします(^^)
867デフォルトの名無しさん:2005/12/03(土) 16:57:17
>>866 はコピペ荒らしなのでスルーするように
868デフォルトの名無しさん:2005/12/03(土) 17:00:17
>>865
APIじゃないs
869デフォルトの名無しさん:2005/12/03(土) 17:01:59
職業PG=前田利家
アマPG=前田慶次

ただし、漫画じゃなくて史実の方。
870デフォルトの名無しさん:2005/12/03(土) 17:03:24
↓ ここが適当なのかな… いちおうあげといたけど

セキュアなプログラムを作ろう パート1
http://pc8.2ch.net/test/read.cgi/tech/1113622199/
871デフォルトの名無しさん:2005/12/03(土) 18:45:24
sprintf()の利点って「標準である」ってだけだろ。
このスレで議論されてるようなWin32APIを利用するバリバリ環境依存
プログラムでわざわざ(_snprintf()ではなく)sprintf()を使う理由って
あるのか?
872デフォルトの名無しさん:2005/12/03(土) 18:47:18
MessageBox(NULL, ">>1-1000 スレタイ嫁", "もちろん、オレモナー", 0);
873デフォルトの名無しさん:2005/12/03(土) 18:52:43
apiならwsprintf
874デフォルトの名無しさん:2005/12/03(土) 19:04:54
vsprintf()は使うな、でFA?
875デフォルトの名無しさん:2005/12/03(土) 19:19:29
引き継いだ香具師がアフォだったんだろ
876デフォルトの名無しさん:2005/12/03(土) 19:22:31
>>806
お前みたいなやつが2000年問題を引き起こしたんだということがまだ分からんのか
877デフォルトの名無しさん:2005/12/03(土) 19:26:11
くどい
878デフォルトの名無しさん:2005/12/03(土) 19:26:13
2000年問題は空騒ぎにしか思えんな
879デフォルトの名無しさん:2005/12/03(土) 19:29:13
>>834
最近のプログラムの品質が落ちたのはそのせいか
880デフォルトの名無しさん:2005/12/03(土) 19:30:42
>>875
俺にとってはフクザツな書式指定と計算を使ってまで、わざわざsprintf()を使ってる
奴の方が余程アフォだな。
_snprintf()ならば、そのコードで「バッファオーバーフローが起きない」ことを
はるかに簡単・確実に保証できるのに。

無論C++なのにsprintf()使ってる奴は、「論外」な。
881デフォルトの名無しさん:2005/12/03(土) 19:32:21
>>879
便利な道具があるのにそれを使わない奴は一生ハンドアセンブルしてろってこった。

ま、一方で「便利な道具」にプログラマがスポイルされたことは、否定しない。
882デフォルトの名無しさん:2005/12/03(土) 19:32:22
スレの質が急激に低下しております
883デフォルトの名無しさん:2005/12/03(土) 19:38:47
どうして適切なスレがあるのにここで続けようとするんだろう
884デフォルトの名無しさん:2005/12/03(土) 19:39:28
>>851
64k制限って2k/XPあたりではなくなってるんじゃなかったっけ?

>>833あわれだなぁ。もうちょっとタイミングいい時にくればいいのに。
885デフォルトの名無しさん:2005/12/03(土) 19:54:27
>>833
SPYか何かで、既存エディタが何使ってるか
調べてみればいいかも
886デフォルトの名無しさん:2005/12/03(土) 20:33:28
隔離されてることも気付かず議論してる様はすごく笑える。
887デフォルトの名無しさん:2005/12/03(土) 20:50:07
誰か>>779の検証、解説してくれ。
>>779はsprintfを使うなと言ってるのか使ってもいいといってるのかどっちだ。
888デフォルトの名無しさん:2005/12/03(土) 20:50:56
sprintfの話は↓へ逝け
セキュアなプログラムを作ろう パート1
http://pc8.2ch.net/test/read.cgi/tech/1113622199/
889デフォルトの名無しさん:2005/12/03(土) 20:53:23
質問です
apiとmfcは同じようなものなのですか?理解が進んでいないので抽象的な質問しかできないですが、この2つの違いをご教授していただけたら幸いです
890デフォルトの名無しさん:2005/12/03(土) 21:08:33
違います

Win32APIはWindowsのシステムが提供する機能を使うための関数インターフェース群
MFCはそれを使いやすくした「クラス群」

APIはCとかC++とか関係無いが、MFCはCじゃ使えない
891デフォルトの名無しさん:2005/12/03(土) 21:12:28
>>889
MFCはAPIを使うクラスライブラリだからコーダーを目指さないsprintf使いには不要

とか回答するとスレ違いになるのか?
892デフォルトの名無しさん:2005/12/03(土) 21:17:38
MFCならCString::Formatがほぼsprintf
893デフォルトの名無しさん:2005/12/03(土) 21:17:50
sprintfの話は↓へ逝け
セキュアなプログラムを作ろう パート1
http://pc8.2ch.net/test/read.cgi/tech/1113622199/
894デフォルトの名無しさん:2005/12/03(土) 21:18:54
sprintf厨 Uzeeeeeeeeeee
895デフォルトの名無しさん:2005/12/03(土) 21:20:48
>>889
MFCは糞である事を覚えておいて損はないでしょう
896デフォルトの名無しさん:2005/12/03(土) 21:23:33
VCL最強
897デフォルトの名無しさん:2005/12/03(土) 21:41:39
リッチテキストっつえば、EM_FINDTEXTには
後方検索の機能がないんだけど
どっかに隠し機能としてでもあるんだろか?
今は、2進探索と組み合わせてなんとか実現してるんだけど
メガ級のテキストになると遅くて遅くて。
898デフォルトの名無しさん:2005/12/03(土) 21:56:03
Delphi厨だけど何か質問ある?
899デフォルトの名無しさん:2005/12/03(土) 22:01:18
>>897
メモリマップ度ファイルと組み合わせて
900デフォルトの名無しさん:2005/12/03(土) 22:10:21
>>755みたいな人って職業PGなの?
こんな口調の書き込みは餓鬼がしてるものだと思ってたのだが。
901デフォルトの名無しさん:2005/12/03(土) 22:15:21
それが参照している748のほうが餓鬼に見える。
902デフォルトの名無しさん:2005/12/03(土) 22:21:38
あれ?ここ職業PGいたの?
903流れを帰るな!変えろ!:2005/12/03(土) 22:22:37
MessageBox関数が導入されたのはいつぐらい?
古いドキュメントが手元にあるんですがWindows3.1ぐらいから存在してることは確かですが…
904デフォルトの名無しさん:2005/12/03(土) 22:24:48
まあMessageBoxが要Win98/2kあるいはIE4以上だったら救いようがないな。
ところで9xにもMessageBoxWがあるのはありがたい。
905デフォルトの名無しさん:2005/12/03(土) 22:26:16
>>900
2chはおとながこどもに、こどもがおとなになるワンダーランドなのです
906デフォルトの名無しさん:2005/12/03(土) 22:29:11
僕も子供になっておっぱいわしづかみして甘えたいよ ママー
907755:2005/12/03(土) 22:32:23
>>900
たまにはキレることもあるさ。
ついつい自分の体験がオーバラップしてしまったもんで。
やっかいなのは、「俺って玄人だから必要ない。」というタイプ。
こういうタイプを真っ先に開発から排除する必要がある。
こういうタイプが入るとえてしてソース管理がいい加減になる傾向に・・・。
バカが自分でわざわざ仕事増やしてるんだから、当然そうなるわけで。
908デフォルトの名無しさん:2005/12/03(土) 22:39:36
  応援 どうもありがとうございます...・゚・。・゚゚・*:.。 .・゚・☆


./⌒丶、                        , イ
(丶   `丶.          __ __  ..      , .イ ソ
ミ .  `丶、 ヽ、     , ´  ,.-〜へヽ  /  彡
ミ  `丶、 ヽ、 \   /ヽヽヾ〈 __  ハ V   彡
 乂ヽ  ヽヽ ヽー\il i il ハ ! } ノ ,ィオ f-;〈    ソ      あなたもあるぅ〜  翼があるぅ〜
 ( \ヽヽ ヾ ヽ ヽヽ V il 〉 ハ {    __ i  ツ   
  ( \ ヽヽ ヽ ヽヽ V// //ソ   ` ´ } シ            飛び立つのよぉ〜  空へと〜 ♪
   \__  ヽ ( (.__ヽヽ }i ノ ノ イ   ァrr‐く'    
    ゝ.__  (__ __ <r'< 〈   / /i|ー- 、
      > .__ /   トv ハ 〉  / リ    ヽ         
       ( __ _/    .| 〉V/     i〉    }        美しいわぁ〜  しあわせでしょ〜
         ノ!    |/ ヽ.    リ    ,'            
        // |    |{       リ   /              風にのり〜  虹をわたろぅ〜 ☆
        从i l|`ヽ.  |`ー -- ---く!   /_
        >-‐‐ }   !.    ,'   }  ノf i
       >' イこ i   !      ノ   /  〉
     ,. --'´に.. l   ヽ.___ < __ ___j  i______
   ,.- '     ` ̄ヽ!            ノ みなこ .
. /          `ー─ -- -- -- ─ "´







909デフォルトの名無しさん:2005/12/03(土) 23:49:23
>>878
年末返上で必死に対策した香具師らにあやまれっ!
910デフォルトの名無しさん:2005/12/03(土) 23:51:17
>>900
自分がソースを追えない責任を関数に求めているだけだからスルーしろ
911デフォルトの名無しさん:2005/12/03(土) 23:53:30
「派遣」「使い捨て」「最底辺」「コーダー」「プライド」あたりがキーワード
912デフォルトの名無しさん:2005/12/04(日) 01:07:16
>>853でFAだと思う。俺。
sprintf使っちゃ駄目とか言ってる奴は
どう考えてもちょっとした不具合例に挙げておおげさに言いすぎだと思う。
913デフォルトの名無しさん:2005/12/04(日) 01:11:09
議論はスレ違いなので、こっちでどうぞ。

C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc8.2ch.net/test/read.cgi/tech/1049790146/
914デフォルトの名無しさん:2005/12/04(日) 01:12:40
>>753
snprintfってC標準ライブラリ?
915デフォルトの名無しさん:2005/12/04(日) 01:20:06
>>912
>>774>>855が、「業界」のレベルなので
仕方がないのです。
本人には、自分が最底辺という自覚はありませんが。
916デフォルトの名無しさん:2005/12/04(日) 01:21:54

scanf 最強!
917デフォルトの名無しさん:2005/12/04(日) 01:24:39

漢なら gets !!

gets 最強伝説
918デフォルトの名無しさん:2005/12/04(日) 01:25:49
sscanfは16進文字列から数字に直すときによく使った希ガス
919デフォルトの名無しさん:2005/12/04(日) 01:31:07
>>916
すまんがscanfとはどんなAPIですか?
920デフォルトの名無しさん:2005/12/04(日) 01:32:38
バッファオーバフローノーケアな標準関数だけを使って
ノーバグでセキュアなプログラムを作るコンテストとかやったら
おもしろそうだ。
921デフォルトの名無しさん:2005/12/04(日) 02:09:59
scanfは書式が実行時でないと決まらんから
余計な変換手順も持ち込むんで
オブジェクトがばかでかくてカナ湾
922デフォルトの名無しさん:2005/12/04(日) 06:14:37
>>920
パンクラス、K-1のレベルだな。
923デフォルトの名無しさん:2005/12/04(日) 06:40:55
アプリケーションソフトってのはな、動作が重いほうがありがた味が増すんだよ。
勿体つけて処理した方が一般人は凄いことやってる錯覚に陥ってくれる。
お前らCプログラマがコードを高速化したところで、かえって一般人から軽んじられるんだよ。
924デフォルトの名無しさん:2005/12/04(日) 07:09:41
ヒドイアリサマデスネ
925デフォルトの名無しさん:2005/12/04(日) 07:14:32
>>923
そう思うのは本当の初心者だけ。
処理が単純なのにやたら重いソフトはMFCを必要以上に使ってるとかバレバレ。
ましてやそんな理由で無駄にSleepとか使ってわざと重くしたらすぐわかる。
926デフォルトの名無しさん:2005/12/04(日) 07:17:05
ヒドイアリサマデスネ
927デフォルトの名無しさん:2005/12/04(日) 07:36:20
>>923
あまりにひどいと自分で組んでフリー公開したくなる
928デフォルトの名無しさん:2005/12/04(日) 08:02:12
LoadImage, SetPixel, GetPixelの
DIB版がありましたら教えてください。
929デフォルトの名無しさん:2005/12/04(日) 08:07:12
やはり決め手はプログレスバーだな。
1つのファイルの処理進行状態で1つ、全体の処理の進行状態で1つの
2つは用意できるとユーザーも大喜びだ。
もちろん処理が一瞬で終わるからといって一瞬で終わってしまっては意味が無い。
意味もなく処理に時間をつかうんだ!
DirectXのシェーダ機能を無理やり使ってPCからキーン・・・という音を出せばGOOD!
930デフォルトの名無しさん:2005/12/04(日) 08:12:35
プログレスバーは偉大だな。
ほんと、プログレスバー様様ですよ!
931デフォルトの名無しさん:2005/12/04(日) 08:18:33
>>923
初心者は声を揃えて言います。

「ノー○ンは最強のセキュリティソフトだ!!」
932デフォルトの名無しさん:2005/12/04(日) 08:25:05
>>928
CreateDIBSectionは?
933デフォルトの名無しさん:2005/12/04(日) 08:35:42
以下は実話をTVで再現する番組で見たやつ

ある優秀な鍵業者がいた。
彼は、鍵を閉じ込めてしまった客の緊急依頼に即座に駆けつけては
短時間で開錠するサービス熱心で真面目な男だった。
その鍵業者があまりに簡単に開錠するので、値切ったり金を払わずにすませようとする客が多かった。
ウンザリした鍵業者は仕事を止め、開錠の専門学校を設立することにしたのだった。
934デフォルトの名無しさん:2005/12/04(日) 08:40:39
>>929-930
プログレスバーは控えめに小さく出して
画面真っ暗にしてディスプレイが鏡のようになるようにする。

「この待ち時間に身だしなみを整えてください。」
935デフォルトの名無しさん:2005/12/04(日) 08:45:29
お前ら、バカばっかりだな。
客からすれば、業務ソフトとゲームソフトの違いなんてないんだよ。
遊園地のアトラクションで長時間乗ってたら料金が多くかかるだろ。
同じように鈍行列車に乗ったほうが料金が多くかかるものなのだと客を躾ければいいのさ。
新幹線?航空旅客機?
技術の無駄だな。
936デフォルトの名無しさん:2005/12/04(日) 08:54:57
>>925
>処理が単純なのにやたら重いソフトはMFCを必要以上に使ってるとかバレバレ。 

MFCさんをいじめるな!!
そんな奴はAPI直書きでもタコソースを書く。
937デフォルトの名無しさん:2005/12/04(日) 08:59:40
>>918
単に16進法文字列からなら数値にしたいだけならstrtol/strtoulなんかで十分だ。
938デフォルトの名無しさん:2005/12/04(日) 09:01:06
939デフォルトの名無しさん:2005/12/04(日) 10:02:59
>>936
別にMFCが悪いとは言ってないが。
ただ使う場所を間違えると速度が遅くなるかと。
940デフォルトの名無しさん:2005/12/04(日) 10:05:49
全部VCLな漏れには関係ないさ(*´ω`*)
941デフォルトの名無しさん:2005/12/04(日) 10:13:34
>>939
使う場所間違えると遅いのは、STLやboostでも同じッスよ。
つか、ライブラリなるものは全てそうでしょ。

とりあえず、
MFCさんをいじめる人はボクが許さない!!
942デフォルトの名無しさん:2005/12/04(日) 10:17:35
MFCはスレ違い
うせろ
943デフォルトの名無しさん:2005/12/04(日) 10:19:37
>>936
タコソースってたこ焼きソースか?(藁
944デフォルトの名無しさん:2005/12/04(日) 10:33:56
>>932
ありがとうございます。
945デフォルトの名無しさん:2005/12/04(日) 12:54:24
あーあ、>>943のせいでスレが急に寒くなったな。
946デフォルトの名無しさん:2005/12/04(日) 13:03:38
423GJ
947デフォルトの名無しさん:2005/12/04(日) 13:31:45
プログラムから環境変数を設定したいんだけどどうすればいいですか
948デフォルトの名無しさん:2005/12/04(日) 13:37:36
石やーきいーもー おいもー
949デフォルトの名無しさん:2005/12/04(日) 13:44:06
>>947
SetEnvironmentVariable
950デフォルトの名無しさん:2005/12/04(日) 13:59:13
>>949
システム環境変数を設定したいのです。
951デフォルトの名無しさん:2005/12/04(日) 15:15:20
こんにちは、よろしくお願いいたします。
vc++でプログラムを作っていますが、
exeファイルの存在するフォルダに
datファイルを、おいて、参照あるいは、書き込みをしています。
datファイルのパスはGetCurrentDirectoryで収得して、
変更できないよう最初1度だけ読み取っています。
それで、違うフォルダーのテキストファイルにアクセスした場合、
そこのフォルダーで、どうも、datファイルを探している場合が、
ちょくちょくあります
そういうことは、皆様ありませんでしょうか。
952デフォルトの名無しさん:2005/12/04(日) 15:19:52
あなたの場合、日本語の勉強が先でしょう。
953デフォルトの名無しさん:2005/12/04(日) 15:22:11
関係あるかどうかわからんが
GetCurrentDirectoryが必ずしもexeのあるフォルダを指すとは限らんよ
954デフォルトの名無しさん:2005/12/04(日) 15:33:57
DOSさわったこと無いプログラマが増えてきたんかな。
955デフォルトの名無しさん:2005/12/04(日) 15:46:14
>>951
GetModuleFileName使えば?
956デフォルトの名無しさん:2005/12/04(日) 16:01:16
>>947,954
PSPから環境変数領域のセグメントを調べて
直接書き換えればよい
ttp://www5c.biglobe.ne.jp/~ecb/assembler2/2_1.html

Windows上なら別プロセスに対しては意味が無くなるので
素直に >>949 の SetEnvironmentVariable 等を使う方がよい
957デフォルトの名無しさん:2005/12/04(日) 16:08:12
>>956
WinNT系ならレジストリいじればいいはず。
Win9x系なら非公開APIを使ってシステムの環境変数領域を取得し、
メモリの内容を直接書き換える。
958デフォルトの名無しさん:2005/12/04(日) 16:09:09
>>929
>DirectXのシェーダ機能を無理やり使ってPCからキーン・・・という音を出せばGOOD!

おいおい、それ俺のNEC Lavie のノートPCだおwwwwwwっww
画面のスクロールするとキーンwww
959デフォルトの名無しさん:2005/12/04(日) 18:15:56
GetOpenFileNameへのコントロールの追加を「CreateWindowで」動的に、
行いたいのですが、次のようなHookProcではうまくいきません。
具体的には、ダイアログの描画が適切に行われず、画面が乱れます。
どうしたらよろしいでしょうか?

UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_INITDIALOG : {
            MoveWindow(hdlg, 30, 17, 300, 22, FALSE);
            CreateWindow("ComboBox", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_GROUP | WS_TABSTOP, 130, 0, 164, 100, hdlg, (HMENU)0x1000, Instance, 0);
            return 0;
        }
    }
    return 1;
}
960デフォルトの名無しさん:2005/12/04(日) 18:32:28
>>951です
>>952さんそうですね。日本語難しいです。
>>953さん。
確かにexeを指すわけではないようなので、
一番最初の立ち上げにカレントフォルダを取得したらいいのかなと思っているのですが。
>>954さんdirやcd なんかしかつかわなくて、
>>955さんへ。
一度試したのですが、最初からうまくいかなくて、
どううまくいかないのか、よくわかりません。
ので、もう少し試してみます。

皆様いろいろありがとうございます。
961デフォルトの名無しさん:2005/12/04(日) 19:17:22
>>960
GetModuleFileName (GetModuleHandle(NULL),buff,sizeof(buff)-1);
こいつからdatファイルのパスを生成汁
962デフォルトの名無しさん:2005/12/04(日) 19:21:49
>>961をもう少し丁寧に言うと


GetModuleFileNameで実行ファイルのパス取得
         ↓
PathRemoveFileSpecでファイル名部分を削除
         ↓
PathAppendでそれとdatファイル名をくっつける
         ↓
datファイルのパス完成
963デフォルトの名無しさん:2005/12/04(日) 22:16:05
>>962
駆け出しの頃に誰もが困惑した経験があるのが、バックスラッシュの切り出しだよな。

【初心者へのお題】
以下のフルパスからディレクトリ名とファイル名を分割せよ。
ただし、tchar.hとC標準関数を用いること。Win32APIは使用禁止。

C:\噂の真相\一覧表\赤十字.doc
964デフォルトの名無しさん:2005/12/04(日) 22:17:20
スレ違いだゴルァ
965デフォルトの名無しさん:2005/12/04(日) 22:20:49
今アプリケーションを作成していまして、検索ダイアログを
作ったのですが、いったん検索ダイアログを閉じてしまうと、
CFindReplaceDialogオブジェクトがNullになってしまうので
すが、どうにかして状態を残しておくことはできないでしょうか?
CFindReplaceDialogオブジェクトを残しておきたい理由としまして、
ダイアログを閉じても、F3ボタンで検索の続きができるように
したいのです。どなたか教えていただけないでしょうか?
966デフォルトの名無しさん:2005/12/04(日) 22:27:02
スレ違い
967デフォルトの名無しさん:2005/12/04(日) 22:29:51
968デフォルトの名無しさん:2005/12/04(日) 23:39:26
何だったか忘れたけど日本語対応の
jstrrchrって関数がついてるコンパイラがあったなぁ
969デフォルトの名無しさん:2005/12/04(日) 23:48:31
そんなのはMSC/VCにもあるぞ。
970デフォルトの名無しさん:2005/12/05(月) 13:10:50
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1206.txt

//パレット(RGBQUAD構造体)の終わりの位置の取得
offSet = *(LPDWORD)(*buf + 10);

は、コメントの通り、ビットマップメモリの始めから、
パレットの終わりの位置を得る式だと思うんですけど、
(1,24ビットなら54+0、4ビットなら54+16*4、8ビットなら54+256*4)
なぜこの式でそれが得られるのでしょうか。
971デフォルトの名無しさん:2005/12/05(月) 13:26:22
>>970
BITMAPFILEHEADERのbfOffBitsパラメータを参照してるだけ

972デフォルトの名無しさん:2005/12/05(月) 13:30:25
>>970
bufが指す位置にはBITMAPFILEHEADERがある。

っていうか、そのプログラム合ってる?
offset=のところ、*が1個多くね?
973デフォルトの名無しさん:2005/12/05(月) 13:42:47
>>972
bufはLPBYTE*だからあってるよ。
974970:2005/12/05(月) 13:44:04
ありがとうございます。

>>971
なるほど。分かりました。
ビットマップファイルを作るときそこに値を入れますもんね。

>>972
VCとBCCで一応正しく動作しています。
DIB系のは、サイトに載っているのがグローバリー変数なので、
ローカル変数で出来るように意識したんですが、
記述としてよい書き方かは、良く分かりません。
975970:2005/12/05(月) 13:45:14
>>973
あってて良かったです。
976デフォルトの名無しさん:2005/12/05(月) 14:18:47
>>973
ウホ ほんとだ。よく見てなかった。
bufはLPBYTEだと思い込んでた。
977959:2005/12/05(月) 16:18:41
無理なんでしょうか
978デフォルトの名無しさん:2005/12/05(月) 16:47:43
スレッドの中から自分を Create したときの
ハンドルを取得したいと思い
スレッドの中で以下のようにしました

HANDLE hThreadFake = GetCurrentThread();
HANDLE hThreadReal;
DuplicateHandle(
hThreadProcess,
hThreadFake,
hThreadProcess,
&hThreadReal,
0,
FALSE,
0
);

このようにして得られる
ハンドル hThreadReal が
このスレッドのハンドルではなく
なぜか,次にスレッドを Create したときの
ハンドルになります.

なぜこのようになるのでしょうか?
979デフォルトの名無しさん:2005/12/05(月) 18:01:53
GetMessage()でユーザからのメッセージをmsgに格納し,
それをDispatchMessage()でウィンドウプロシージャに渡す事は解りましたが。

例えばウィンドウA,Bを作成し、ウィンドウAへのメッセージとウィンドウBへのメッセージも
このメッセージループで取得されますよね?そしてDispatchMessageで適当なウィンドウプロシージャへ
送出するのですが。
この送出先というのは、DispatchMessageがMSG構造体のメンバHWND hwndから判断してるのでしょうか?
980デフォルトの名無しさん:2005/12/05(月) 19:13:52
>>978
レスが1000件に到達したから
981デフォルトの名無しさん:2005/12/05(月) 19:16:25
>>979
それは違う
そこに来るのは自分宛のMsgのみ

DispatchMessageで回ってくるMsgとは別に
Windows自身がMsgキューを持っている
そちらにはどのWindowsへ送るMsgかのハンドルを持っている
982デフォルトの名無しさん:2005/12/05(月) 19:57:06
>>981
??????????
別々のウィンドウでも同じアプリケーションのものなら単一のメッセージループですが?(一部除く)
>>979のウィンドウA、Bもそういうことだろ?
983デフォルトの名無しさん:2005/12/05(月) 21:00:00
>>959
なんでそんなめんどくさいことしてんの?
lpTemplateNameじゃ駄目なん?
984デフォルトの名無しさん:2005/12/05(月) 22:09:48
>>962さん丁寧に教えていただきありがとうございます。
その通りにするとちゃんとできました。
>>963さん
char *Getdictory(){
char moji[] = "C:\噂の真相\一覧表\赤十字.doc";
int mojicount = strlen(moji);
char damy[mojicount+1];
int i,j;
for(i=0;i<strlen(moji);i++){
if(moji[mojicount-i]=='\\') break;
}
for(j = 0;j<i;j++){
damy[j] = moji[j];
}
damy[++j]='\0';
return damy;
}
こんな感じでしょうか。コンパイラーは通してないですが、
場違いですみません。
985デフォルトの名無しさん:2005/12/05(月) 22:13:49
>>984訂正
for(j = 0;j<i;j++){
ここちがう。
for(j = 0;j<mjicount-i;j++){
まちがいだらけかも。
986デフォルトの名無しさん:2005/12/05(月) 22:34:28
>>982
>同じアプリケーション
同じスレッドでしょ

>>984
IsDBCSLeadByte, CharNext あるいは mbcs 対応の crt 関数使わないと
'\\' を正確に判断できないよ
987デフォルトの名無しさん:2005/12/05(月) 22:39:33
その前に

int mojicount = strlen(moji);
char damy[mojicount+1];

なんだよこれ
初心者スレ行け
988デフォルトの名無しさん:2005/12/05(月) 22:44:19
元のコードを結構修正することになるけど、CharNextのほうが986のより楽。

>>987
C99という可能性はまだ消えていない。
989デフォルトの名無しさん:2005/12/05(月) 22:44:56
>>987
確かに。
スペルはdamyじゃなくてdummyだわな。
話にならん。
990デフォルトの名無しさん:2005/12/05(月) 22:53:55
WM_MOUSEMOVEメッセージについてなんですけど、
マウスカーソルがスタティックテキスト(含むグループボックス)の子ウィンドウ上の時にはメッセージ来るようなんですが、
他の子ウィンドウ(エディットコントロールやチェックボックスなど)上だとメッセージが来ないようなのです。

うまくスタティック以外のウィンドウ上でのマウスカーソルの動きをキャッチする方法はないのでしょうか。
991デフォルトの名無しさん:2005/12/05(月) 23:19:06
>>987
allocaだ
992959:2005/12/05(月) 23:57:31
>>983
任意のhWndを持つウィンドウの追加が動的に行えればそれでも
構いません。ただし、.resファイルなどは一切使用しないことが
条件なのです。どうすればいいでしょうか?
993デフォルトの名無しさん:2005/12/06(火) 01:01:40


Win32API質問箱 Build38
http://pc8.2ch.net/test/read.cgi/tech/1133798345/
994デフォルトの名無しさん:2005/12/06(火) 01:04:01
Z
995デフォルトの名無しさん:2005/12/06(火) 01:12:23
1000なら元カノをレイープ
996デフォルトの名無しさん:2005/12/06(火) 01:40:29
>>995
犯罪予告すると、かなりの確率で警察のお世話になるよ。
997デフォルトの名無しさん:2005/12/06(火) 01:43:28
大丈夫、元カノはくたびれた南極ちゃんだから
998デフォルトの名無しさん:2005/12/06(火) 02:01:13
1000
999デフォルトの名無しさん:2005/12/06(火) 02:02:03
1000
1000デフォルトの名無しさん:2005/12/06(火) 02:02:17
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。