Win32API質問箱 Build61

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2デフォルトの名無しさん:2008/01/05(土) 15:34:40
60 ttp://pc11.2ch.net/test/read.cgi/tech/1196874830/
59 ttp://pc11.2ch.net/test/read.cgi/tech/1194701996/
58 ttp://pc11.2ch.net/test/read.cgi/tech/1191781463/
57 ttp://pc11.2ch.net/test/read.cgi/tech/1189255282/
56 ttp://pc11.2ch.net/test/read.cgi/tech/1186989201/
55 ttp://pc11.2ch.net/test/read.cgi/tech/1184853465/
54 ttp://pc11.2ch.net/test/read.cgi/tech/1181645965/
53 ttp://pc11.2ch.net/test/read.cgi/tech/1178882828/
52 ttp://pc11.2ch.net/test/read.cgi/tech/1176828891/
51 ttp://pc11.2ch.net/test/read.cgi/tech/1174416295/
50 ttp://pc11.2ch.net/test/read.cgi/tech/1171721448/
49 ttp://pc10.2ch.net/test/read.cgi/tech/1168708801/
48 ttp://pc10.2ch.net/test/read.cgi/tech/1166172047/
47 ttp://pc8.2ch.net/test/read.cgi/tech/1163375772/
46 ttp://pc8.2ch.net/test/read.cgi/tech/1159158014/
45 ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/
44 ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/
43 ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
3デフォルトの名無しさん:2008/01/05(土) 15:35:16
4
4デフォルトの名無しさん:2008/01/05(土) 15:35:28
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
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html
5デフォルトの名無しさん:2008/01/05(土) 15:36:46
6デフォルトの名無しさん:2008/01/05(土) 15:37:45
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/

- Advanced Windows (書籍)
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055

-おまけ
Build19が見たい人で余裕のある人は●でも買ってくれ。
7デフォルトの名無しさん:2008/01/05(土) 15:48:16
>>1 otu
新しいのが出てるんだぜ

Microsoft® Windows® Software Development Kit (SDK) for Windows Server® 2008 and .NET Framework 3.5
(6.0.6001.16621.148)
http://www.microsoft.com/downloads/details.aspx?FamilyID=74dd6e2d-89c6-4e1e-af00-fc7d70f15439&DisplayLang=en
8デフォルトの名無しさん:2008/01/05(土) 16:11:02
>>7
ドトネトなんてインスコしたくないしXP迄のAPIが使えれば十分なので
Microsoft Platform SDK for Windows Server 2003 R2を使ってる俺が来ましたよ
9デフォルトの名無しさん:2008/01/05(土) 16:15:48
あっそ
10デフォルトの名無しさん:2008/01/05(土) 16:20:23
>>8
11デフォルトの名無しさん:2008/01/05(土) 16:25:05
>>8
12デフォルトの名無しさん:2008/01/05(土) 16:28:32
最近のMSのヘルプは.NET製だった気がする
13デフォルトの名無しさん:2008/01/05(土) 16:33:32
>>8
>>5にもWindows SDKとは別にPlatform SDKを載せているジャマイカ
14デフォルトの名無しさん:2008/01/05(土) 16:57:25
waveOutResetをコンソールアプリから任意のタイミングで実行するとそこでフリーズしてしまうんですが
dousureba.
15デフォルトの名無しさん:2008/01/05(土) 17:27:15
>>14
デバッグしろ
16デフォルトの名無しさん:2008/01/05(土) 17:51:02
>>15
dousureba.
17デフォルトの名無しさん:2008/01/05(土) 18:33:24
>>16
debaggusiro.
18デフォルトの名無しさん:2008/01/05(土) 18:40:43
19デフォルトの名無しさん:2008/01/05(土) 18:46:43
>>14
waveOutResetを呼ばない
サウンドデバイスを無効にする
ハードウェアアク(ryを最低に落としてみる
ドライバを別のバージョンに入れ替えてみる
DirectSoundに乗り換える
20デフォルトの名無しさん:2008/01/05(土) 19:26:39
>>1
乙。
前スレの>>996
ありがとうございました。デフォルトでインストールされてるんですね。
「アプリケーションの構成が正しくない」とかで動かないXPマシンが
あったのですが、じゃあそのマシンが何かおかしいんですね・・・。
21デフォルトの名無しさん:2008/01/05(土) 19:29:16
>>20
MFCのランタイムはバージョンが非常に多い。
デフォルトでインストールされてるのはその中の一部。
動かないのはインストーラーが悪い
22デフォルトの名無しさん:2008/01/05(土) 19:29:36
>>16
>>17
死ね。

>>18
気持ち悪い。失せろ。

>>19
waveOutResetを呼ばないと適切にCloseできないみたいです。
DirectSoundは使用できません。


デバッガに乗せて実行してみたんですが、waveOutResetで「デッドロックの可能性がある」とのメッセージと共に
waveOutResetの行で止まってしまったままそれ以上追跡できません。
コールバック関数内でwaveOutWriteを実行しているんですが、もしかしたらこれが不具合の原因かもしれません。
しかしwaveOutOpen時にCALLBACK_WINDOWを指定したうえで
ウィンドウプロシージャ内でwaveOutWriteを実行し巧く動いている例もあり、何が明確な原因なのか分からない状態です。
ウィンドウプロシージャで処理したらうまく動くのか!?そうなのか!?赦さんぞマイクロソフト!
23デフォルトの名無しさん:2008/01/05(土) 19:31:06
死ね
24デフォルトの名無しさん:2008/01/05(土) 19:31:56
誤爆先でも即レスが付いててわろたw
25デフォルトの名無しさん:2008/01/05(土) 20:12:45
>>22
レスから見るに知っているような気もするが、
コールバック関数内でのI呼び出し可能なAPIは制限されている。
SetEvent/PostThreadMessageあたりは使えるから、
それを利用してコールバック関数外から呼ぶように修正。
26デフォルトの名無しさん:2008/01/05(土) 20:42:58
>>20
どうしても調べたいなら、面倒くさいけど、
dependency walker ってのがあるから、それで使用されるdllを調べて、
動くマシンと動かないマシンのdllのバージョンを比べてみればいんじゃね?
27デフォルトの名無しさん:2008/01/05(土) 21:05:34
>>20
そのエラーメッセージは、SxSでDLL(か何か)が指定されているのに
見付からなかったときのエラー。

VC++ 2005/2008で作ったプログラムなら、
ランタイムをダウンロードセンターから落として入れてみろ。

2005 SP1 x86用
http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&DisplayLang=ja
ほかにも2005 SPなしや2008、それらのx64/IA64版と色々あるので間違えないように。
28デフォルトの名無しさん:2008/01/05(土) 21:56:11
作ったソフトが作ったPC(XPx64:VisualStudio2005インストール済み)ではちゃんと起動
するのに、他のPC(Vista32bit:VisualC++インストール済み)でも(XP32it:何もインストールしてない)
でも起動させようとしても何も表示されずエラーもでずプロセスにも残ってないんだけどなんで?…
VistaのVisualC++の方のPCにプロジェクトファイル全部コピーしてコンパイルさせても
エラーはでないでコンパイル成功するのに何も表示されない…
今までこんなこと無かったんでかなり戸惑ってます。どんな原因が考えられますか?
29デフォルトの名無しさん:2008/01/05(土) 21:58:47
>>28
デバッガで動かしてみても、何も起こらないのか。
30デフォルトの名無しさん:2008/01/05(土) 22:15:08
あらたなDLLヘルだな
31デフォルトの名無しさん:2008/01/05(土) 22:22:20
ありがとう
ブレイクポイントつけて調べた結果WNDCLASSEXのアイコンの設定がおかしかったことに気づいた
32デフォルトの名無しさん:2008/01/05(土) 22:23:35
>>28
>どんな原因が考えられますか?
スタックの戻りアドレスぶち壊して、いきなり消滅するパターンに似てるな
33デフォルトの名無しさん:2008/01/06(日) 01:19:52
>>28
64bit版のプログラムが32bit版Windowsで動くわけねーじゃん。
34デフォルトの名無しさん:2008/01/06(日) 02:42:00
>>21,>>27
ありがとうございます。が、私が作ったインストーラなんですorz
作った側の責任としてどのマシンでも動くようにしないと駄目だろう、ということで
MSのサイト見ながら四苦八苦していろいろパッキングしてみたら、動くには
動いたんですが、ファイルサイズがバカでかくなってしまい・・・しかも警告出てるし・・・
この辺の仕組みを詳しく知っておかなければ、、と痛感してたんです。

で、そもそもMFCだと動かなくて当たり前なのか?と思いまして質問に至りました。
(微妙にスレ違いになってしまってすみません)

>>26
良さげなソフトをありがとうございます!難しそう・・・!
35デフォルトの名無しさん:2008/01/06(日) 02:43:49
//ウィンドウハンドルが格納された配列の中で、一番最初のWS_VISIBLEスタイルを持つハンドルを見つける

// c は配列のデータ数(カウンタ)
// wh[] はウィンドウハンドルが格納されている配列

for ( i = 0 ; i < c ; i++ ) {
  if ( IsWindowVisible( wh[ i ] ) != 0 ) {
    break;
  }
}

例えばですが、この IsWindowVisiblef ( ) を実行するとメモリを消費します。
繰り返すと、少しずつですが、どんどん消費します。
他のWindows32APIでも同様にメモリ消費するものがたくさんあります。
こういったWindows32APIで消費したメモリを解放する方法はありますでしょうか?
よろしくご教授お願いします。
36デフォルトの名無しさん:2008/01/06(日) 02:45:20
>>34
MFCでDLLの心配するくらいならスタティックリンクしてしまったほうがいいかも
37デフォルトの名無しさん:2008/01/06(日) 02:50:39
>>35
ないんじゃない?
3835:2008/01/06(日) 02:55:05
言葉足らずで済みません。
メモリ消費するのはキャッシュだと思われます。
wh[ ]の内容が同一であればメモリ消費しません。

>>37
そうですか。
ありがとうございます。
39デフォルトの名無しさん:2008/01/06(日) 02:56:23
どうやってメモリをどんどん消費しているってことを突き止めたのか聞きたかったんだが……まいっか
4035:2008/01/06(日) 03:02:29
>>39
ありがとうございます。
私はBorland Cを使っていまして、VC++がありませんので、ツール類を使っておりません。
ですので、

void SP(int i){//デバッグ用一時停止(キー入力により再開)
  Beep(3000,500);
  while(1){
    if(GetAsyncKeyState(i))break;
    Sleep(10);
  }
}

というような関数を用意して、

処理1
SP(VK_CONTROL);
処理2
SP(VK_ESCAPE);
処理3

というブレークポイントを儲け、タスクマネージャとにらめっこしながら、どこでメモリ消費しているのか突き止めました。
41デフォルトの名無しさん:2008/01/06(日) 03:10:49
>>40
タスクマネージャでメモリの消費って……
それって、本当に分かるものなのか? タスクマネージャの「メモリ使用量」ってとこ読んでるんだったら、
別に何の問題でもない可能性が高いと思うんだが……
4235:2008/01/06(日) 03:25:03
>>41
そうなのですか。
メモリ使用量が増えることは何の問題もなかったのですか。
確かにキャッシュ的なものだと思われましたので、メモリが切迫したときに自動的に解放されるかも?
という思いはしておりましたが。

自分の書いたコードにおいては、きちんとメモリ管理し、動的ヒープも確保したら確実に解放し、バッファオーバーフローなどに関しても徹底して検証しました。
ところが、動作させているうちにある処理をさせた時に少し(4KB〜12KB程度ですが)ずつ確実にメモリ消費(=メモリ使用量が増えている)していくことがわかり、その場所を突き止めました。
するとその全てがWindows32APIだったので、Windows32APIで確保したメモリを解放する術がなければ、動作させ続ければ結局のところメモリリークを起こしているのと同じことになってしまいます。
まさか、Windows32APIでそのようなことは放置されていないだろうと思い、色々調べたのですが、答えがわからず、質問させていただきました。
問題がないのなら、いらぬ心配をした私が馬鹿でした。
どうもありがとうございました。
43デフォルトの名無しさん:2008/01/06(日) 03:29:25
なんとなくお年を召してそうな文章
4441:2008/01/06(日) 03:31:51
>>42
より正確に言うと、メモリ使用量が増え続けるだけでは問題とは断定できないという事。
ちなみに、
>他のWindows32APIでも同様にメモリ消費するものがたくさんあります。
と書いてあるが、当然APIによっては使い方を間違うと本当に問題となるメモリ消費を起こすものがある。
その点はMSDN読みながら注意する事だな。
45デフォルトの名無しさん:2008/01/06(日) 03:34:11
逆に老成した若者のような
4635:2008/01/06(日) 03:36:44
>>43
はい。老兵です。
すみません。

>>44
はい。
わかりました。
注意したいと思います。
ありがとうございました。

ところで、SetProcessWorkingSetSizeではWindows32APIの使用するメモリエリアを限定できないのでしょうか?
甘えついでにお願いいたします。
47デフォルトの名無しさん:2008/01/06(日) 03:48:21
実際、OSがリークしているケースはある。
だがそうだとしたら手のうちようがないので気にしても仕方がない。
48デフォルトの名無しさん:2008/01/06(日) 03:50:46
SetProcessWorkingSetSizeで指定できるのはあくまで目安なんで厳密なコントロールはできない
OS側がさせてくれない
4935:2008/01/06(日) 03:55:53
>>47
はい。
気にしないようにします。

>>48
やっぱりそうなのですね。
良くわかりました。

皆さん、本当にありがとうございました。
失礼します。
50デフォルトの名無しさん:2008/01/06(日) 10:13:04
>>42
GDI
51デフォルトの名無しさん:2008/01/06(日) 20:24:20
>>46
はっきりとはいえないけど、ちょっとずつ増えるってのは
やはりメモリリークだと思いますよ。

自分の経験でもタスクマネージャ見ててちびちび増えて
いくのは良く調べると何かの開放し忘れなことがほとんど。

ただタスクマネージャの数字はそれが表示されるタイミング
があてにならないので、ほんとうにちびちび増えていくこと
しか分からない。

もうちょっと自分のコード調べてみたらどうでしょうかね?
(予想では何かしらのハンドルのクローズし忘れくさいと
思いますが…)
52デフォルトの名無しさん:2008/01/06(日) 20:29:49
アイコンとか読み込むたびにキャッシュされるからハンドル開放したって増えるよ
53デフォルトの名無しさん:2008/01/06(日) 20:30:59
少しスレ違いですが、Windows 1.0〜3.xのSDKはもう入手できないですか?
54デフォルトの名無しさん:2008/01/06(日) 20:34:16
Borland Suiteに含まれてたりしない?
55デフォルトの名無しさん:2008/01/06(日) 20:35:08
リークかどうかを判断するのはソースがないと判断できないけど、
「ソースは徹底して検証した。原因がAPIっぽい? 」
ってのなら、リークは無いと判断していいと思うんだ

ちなみにタスクマネージャで言うところのメモリ使用量を減らしたいということであれば、
SetProcessWorkingSetSize に -1 -1 を渡せば一時的にスリムアップできる

意味の無いことだけど
56デフォルトの名無しさん:2008/01/06(日) 20:40:49
プログラム起因のリークはツールで検出するだろうしなあ
57デフォルトの名無しさん:2008/01/06(日) 20:50:23
リークの疑惑のあるAPIを繰り返し呼び出して、本当に際限なく何百メガもメモリの使用量が増えるんであれば原因を調査すれば良いんじゃないか。
そうでなく、数Mぐらいで頭打ちになるなら、そういうもんだということじゃないか。
58デフォルトの名無しさん:2008/01/06(日) 21:09:38
リーク疑惑のあるAPIがHeapAllocとかだったらウケる。
59デフォルトの名無しさん:2008/01/06(日) 21:10:15
昔 CreateWindow() が 4byte リークするって時期があったな。
とっくに直ってるだろうけど。
60デフォルトの名無しさん:2008/01/06(日) 21:15:03
ごめん、まだ直してなかったわ
61デフォルトの名無しさん:2008/01/06(日) 21:18:50
おいらも、タスクマネージャ見て、「あれ、どっかリークしてる?」とか思ったこともあったけど、
PlatformSDK付属のvadumpとかで調べてみると、単にAPI呼び出しでDLLのコードが
メモリに載ったとかの、くだらねー原因だったことがあるな。

そいえばnyaruruセンセもワーキングセットについて色々書いてるネ
http://d.hatena.ne.jp/NyaRuRu/20051022
62デフォルトの名無しさん:2008/01/06(日) 21:38:40
>>46
You should better use Performance meter.
63デフォルトの名無しさん:2008/01/06(日) 23:15:10
>>35
メモリだけじゃなくてタスクマネージャで
ハンドルリーク起こしてないかみてみれば?

俺はリークチェックの時ハンドルの数が増え続けてないか
必ず見るようにしてるが。
64デフォルトの名無しさん:2008/01/07(月) 00:17:59
タスクマネージャは「メモリ使用量」と「仮想メモリ サイズ」の項目も重要
65デフォルトの名無しさん:2008/01/07(月) 01:35:59
CreateProcessで起動した子プロセスと、呼び出しもとの親プロセスの
関係を切れないでしょうか?

プロセスエクスプローラなどで見てもツリー状にならないようにしたいんです。
何か良い方法あればお願いします。
66デフォルトの名無しさん:2008/01/07(月) 01:59:58
Windowsで親・子プロセスとの関係で何ができるか、って
あんまし何にも出来ないんだけどね。

どーしても気になるなら、ダブルフォークみたいな仕組みを考えてあげれば。
孫を生む子供をたてて、子供はすぐに殺してしまう。cmd.exe辺りを仲介にするのが
楽だろうけどね。
6765:2008/01/07(月) 08:43:14
>>66
>ダブルフォーク
ありがとうございます。
基本的にAPIで親子関係のツリーをどうこうは出来ないんですね。
68デフォルトの名無しさん:2008/01/07(月) 18:36:45
Vistaだと、管理者昇格プロセスからプロセス起動すると自動的に管理者権限にならない?
そのへんは気をつけたいところかもしれない
69デフォルトの名無しさん:2008/01/07(月) 20:20:42
ダイアログに貼付けたタブコントロールにダイアログを貼付けたいのですが、
出来ますかね?
70デフォルトの名無しさん:2008/01/07(月) 20:25:21
>>69
出来ます。
71デフォルトの名無しさん:2008/01/07(月) 21:57:53
タブコントロールの中にダイアログがある図を想像した
72デフォルトの名無しさん:2008/01/07(月) 22:00:37
>>69はそれを意図してたりして・・・
73デフォルトの名無しさん:2008/01/07(月) 22:27:49
文字を表示するとき下の色と文字色が近くて見えにくいことがあります。
下の色の逆を文字色にするなどしたいのですがそのような関数はあるのでしょうか?
74デフォルトの名無しさん:2008/01/07(月) 22:33:50
ある
75デフォルトの名無しさん:2008/01/07(月) 22:57:15
>>73
逆の色っていうのはどういう色を言う?赤の反対は青?白?
76デフォルトの名無しさん:2008/01/07(月) 23:03:31
>>75
位相が180度違う色の事
77デフォルトの名無しさん:2008/01/07(月) 23:05:00
補色じゃないかな?水色だね?XORでいいよ
78デフォルトの名無しさん:2008/01/07(月) 23:06:27
RGB(128,128,128)の色で困りそうだな
79デフォルトの名無しさん:2008/01/07(月) 23:24:56
2回掛けると元に戻るという条件の場合変化がない色が必ず存在するということが
数学的に証明されていたような
80デフォルトの名無しさん:2008/01/07(月) 23:30:53
あれ?たとえば色空間を2bitとして、0,1,2,3を逆転して、3,2,1,0とすれば、
変化がない色は存在しないよな。似てる色ではあるけど。

まあ、下にマット敷くとか、文字を縁取るとかも対策ではあるな
81デフォルトの名無しさん:2008/01/07(月) 23:36:43
>>74
教えてもらえませんか?

逆の色というのは>>76さんので合ってると思います。
赤の反対は緑だったはずです。
82デフォルトの名無しさん:2008/01/07(月) 23:40:02
>>78
(127,127,127)だろ常考
83デフォルトの名無しさん:2008/01/07(月) 23:41:12
>>81
赤の反対はシアンだぜ。緑の反対はマゼンタだぜ。
84デフォルトの名無しさん:2008/01/07(月) 23:42:22
補色ってRGBの各要素が8bitなら255から引けば出せるんじゃないの?
85デフォルトの名無しさん:2008/01/07(月) 23:48:11
そりゃバックグラウンドが白固定ならな
86デフォルトの名無しさん:2008/01/07(月) 23:50:51
(128,128,128)(127,127,127)を肉眼で区別出来るひとがいたら紙
87デフォルトの名無しさん:2008/01/07(月) 23:51:35
バックグラウンドは関係ないよ
88デフォルトの名無しさん:2008/01/07(月) 23:53:50
下の色と演算するんだろうが、元の話は
で、下が255なら引き算でもXORと同じ結果になるだけだ
89デフォルトの名無しさん:2008/01/08(火) 00:05:03
+64&255
90デフォルトの名無しさん:2008/01/08(火) 00:07:22
APIにするまでもない処理だな
91デフォルトの名無しさん:2008/01/08(火) 00:22:30
ペンにXORを指定すればすむんだな。
92デフォルトの名無しさん:2008/01/08(火) 00:46:33
つまんないから次
93デフォルトの名無しさん:2008/01/08(火) 00:48:09
ありがとうございました。
94デフォルトの名無しさん:2008/01/08(火) 01:10:06
CEでシャットダウン・サスペンド遷移を検知する方法ってありますか?
95デフォルトの名無しさん:2008/01/08(火) 03:30:16
色相環とか補色とか、なつかしいな。
逆の色とかイミフww
96デフォルトの名無しさん:2008/01/08(火) 03:31:43
っ 反対色
97デフォルトの名無しさん:2008/01/08(火) 05:36:50
色相は輝度には言及されていないし
単に各色255から引けば良いっていうもんでもない
98デフォルトの名無しさん:2008/01/08(火) 05:50:32
99デフォルトの名無しさん:2008/01/08(火) 07:57:05
明けましておめでとうございます。
年が明けて来てみれば、いつの間にか新スレ61番になってますね。

挨拶はさておき、久々に質問させていただきます。

ウィンドウのクライアント領域を、四つの等しい大きさの子ウィンドウでそれぞれ描画を担当させます。
ウィンドウに終始有効なDCを保持させたい場合、ウィンドウクラスの登録時にCS_OWNDCをスタイルに設定すれば、
例えばWM_CREATEでhdcを取得しておくと、その後の他のメッセージ処理で、毎回取得する必要はないと思います。
同じ性質の子ウィンドウを複数作る場合は、基本的にクラスの登録は一度だけで、その同じスタイルを元に
CreateWindowを複数回呼び出して、子ウィンドウのクローンを作っていく、という手順になると思うのですが、
子ウィンドウクラス登録時にCS_OWNDCを指定しても、これでは各子ウィンドウに独自のDCを割り当てることはできないんじゃないかと・・

子ウィンドウ・クラスの登録に
wndclass.style = CS_OWNDC;
として、
CreateWindow(---)を複数回呼び出し、
ウィンドウ・プロシージャのWM_CREATEで
hdc_own = GetDC(hwnd);
とした場合、どうなるんでしょう?

描画はOpenGLを使って、3Dオブジェクトをバラバラに動かすというものです。
100デフォルトの名無しさん:2008/01/08(火) 10:41:14
>>99
ttp://msdn2.microsoft.com/en-us/library/ms633574(VS.85).aspx
> CS_OWNDC Allocates a unique device context for each window in the class.
101デフォルトの名無しさん:2008/01/08(火) 10:59:59
API関数を見ていると、構造体を引数として渡す時、
引数を変更する関数でなくても構造体のポインタを渡していることが多いみたいですが、
これは構造体を丸々渡すよりポインタを渡して関数内で必要な情報だけ引っ張り出した方が
処理が早かったりメモリを食わなかったりするから、って理由でいいんでしょうか?
102デフォルトの名無しさん:2008/01/08(火) 11:50:18
まぁそんなとこ。
構造体の大きさがバージョンによって変わる可能性がある、という理由もあるかも。
103デフォルトの名無しさん:2008/01/08(火) 13:43:45
構造体って配列とか文字列みたいにそのものが渡せないからポインタで渡すしかないんじゃないのか。
104デフォルトの名無しさん:2008/01/08(火) 13:51:41
>>103
はあ?
C言語の基礎からやり直せ
105デフォルトの名無しさん:2008/01/08(火) 14:06:41
>>103
そんな事はない。そのものを渡す事は出来る。

struct asdf{
int x, y, z;
};

asdf function(){
asdf a;
a.x = 0;
a.y = 1;
a.z = 2;
return asdf;
}
106デフォルトの名無しさん:2008/01/08(火) 15:46:27
何冊か本を読んでいたところ、ウィンドウプロシージャのswitch文でメッセージごとに分岐した後、
最後break;で抜けている本とreturn 0;を返している本がありました。
前者はどのメッセージもデフォルトウィンドウプロシージャに送られ、
後者は自分で処理した奴は送られない、という違いはわかるのですが、
一般的にはどちらのやり方が多いのでしょうか。
107デフォルトの名無しさん:2008/01/08(火) 15:52:19
breakのさきにreturn 0があるだろ
108デフォルトの名無しさん:2008/01/08(火) 15:53:41
>>106
答えになってないけど
メッセージクラッカを使った方が後々困らない気がします
109デフォルトの名無しさん:2008/01/08(火) 15:56:33
>>106
前者もswitchのdefaultでDefWindowProcを呼んでいるので、他のcaseでbreakしても、
そこからDefWindowProcが呼ばれることは結局ないというオチだと思う。

俺としては各case毎にreturnを置くほうを勧める。
いつも0を返すとは限らず、何か他の値を返すこともあるので、
ほかがbreakで、そこだけreturnでは見た目が揃わないため。
110デフォルトの名無しさん:2008/01/08(火) 16:04:22
>>106
自分で処理した後デフォルトプロシージャにも処理させるかどうかはケースバイケース。
どっちが一般的とかは無い。
111デフォルトの名無しさん:2008/01/08(火) 17:15:40
APIの前に言語仕様を勉強しろ
112デフォルトの名無しさん:2008/01/08(火) 18:06:56
>>106
基本的に処理したメッセージでもbreakしてDefWindowProcしておいた方が
WM_CONTEXTMENUなんかで余計なバグを生み出しにくい

つーかこれ、フリーソフトや市販ソフトでもバグってる物を見かけるから困る
Windows2000のregedit.exeとか
113デフォルトの名無しさん:2008/01/08(火) 18:36:38
>>112
どういうこと?
114デフォルトの名無しさん:2008/01/08(火) 18:46:00
http://www.winapi-database.com/

ここテンプレに入れたらどうかな?
115デフォルトの名無しさん:2008/01/08(火) 19:13:20
使えねぇよw
116デフォルトの名無しさん:2008/01/08(火) 19:19:07
宣伝乙^^
117デフォルトの名無しさん:2008/01/08(火) 19:23:13
>for VB Programmer

くせー!
118デフォルトの名無しさん:2008/01/08(火) 19:58:47
それを入れるなら併せてpinvoke.netも入れるべき。

ただ、俺は要らないと思うけどな。
せいぜい、それぞれVBとか.NET、C#のスレにでも置いておけばいいのでは、というくらい。
119デフォルトの名無しさん:2008/01/08(火) 20:05:44
むしろこのスレ的には猫をはずせよ! みたいな声があってもいい
120デフォルトの名無しさん:2008/01/08(火) 20:10:29
どうみても ピンぼけ.netにしか略
121デフォルトの名無しさん:2008/01/08(火) 20:29:01
指定のソフトだけの音を拾って出力したいんだけど、どんな風にプログラム書けばいい?
おおまかな流れだけでいいんで教えてください
122デフォルトの名無しさん:2008/01/08(火) 21:07:59
>>121
確かこの話題で前スレか前々スレが荒れたよなw
123デフォルトの名無しさん:2008/01/08(火) 21:32:53
>>121
まず録音をする方法をググるんだ。
その上で、プログラムを書くか決めろ。
124デフォルトの名無しさん:2008/01/08(火) 21:58:01
最初にWindowsのAPIができたころは構造体渡しは無理だったよ
125デフォルトの名無しさん:2008/01/08(火) 22:02:53
マイク出力にラジカセを繋ぐ

録音ボタンを押す

「おかあちゃんちょっと黙っててーな、声が入ってもうたやん」と言う。
126デフォルトの名無しさん:2008/01/08(火) 22:08:17
あるあ......ある?
127デフォルトの名無しさん:2008/01/08(火) 22:11:29
d とりあえず結構面倒なんだなw
ちょっとネットの海をさまよってくる
128デフォルトの名無しさん:2008/01/09(水) 00:24:28
DirectSoundとwaveOut系APIをフックする、というあたりでなかったっけ。
129デフォルトの名無しさん:2008/01/09(水) 01:04:49
それなら余裕だな
130デフォルトの名無しさん:2008/01/09(水) 01:25:41
>>125
ネットにつないだまま動画とってて、メッセの音が入ったことある
131デフォルトの名無しさん:2008/01/09(水) 03:12:56
しかしマイク出力というのが謎であることに書いた本人が今気づいた。
132デフォルトの名無しさん:2008/01/09(水) 15:00:34
SHFileOperation について教えてください。

これの .pFrom 引数に設定するものとして、ファイルもフォルダもOKとなっていましたが
仮に同名のものでファイルとフォルダの両方があった場合、そのどちらを使って操作して
くれるかは決まっているでしょうか、その場合はファイルの方でしょうか、フォルダ側の方
でしょうか?よろしくお願いします。
133デフォルトの名無しさん:2008/01/09(水) 15:03:59
有り得ない
134132:2008/01/09(水) 15:05:44
>>132 追記
FOF_FILESONLY を指定してファイルだけにすると、フォルダ名として存在するものが
あった場合でもそれは含まずに行う、ということなのでしょうか?

その場合は、逆に、ファイルは含まずにフォルダだけを操作したい場合はどのように
指定できるでしょう?すみませんがご指導をお願いします。
135132:2008/01/09(水) 15:07:36
>>133
ファイルもフォルダもどちらも操作してくれるということはないということでしょうか?
136デフォルトの名無しさん:2008/01/09(水) 15:13:48
試せば分かる。設問自体が無意味な事に。
137デフォルトの名無しさん:2008/01/09(水) 15:17:34
何冊か本を読んだところ画像処理はBMPの事しか書かれてなかったのですが、
jpgやgifを処理するのは圧縮の関係とかですごい上級者向けのことだったりするんでしょうか?
138デフォルトの名無しさん:2008/01/09(水) 15:33:49
ぐぐればすぐに見つかると思うが
圧縮ファイル形式は離散コサイン変換のような数学の知識が必要
簡単ではない
しかも一口にjpegといってもいくつかあるので
すべてに対応するのは現実的に難しい
139132:2008/01/09(水) 15:34:18
>>136
やってみました、わかりました!
ファイルとフォルダと別のものであっても同名とすることはできない
ようになっているのですね、ファイルシステムが。
助かりました、ありがとうございました!!
140デフォルトの名無しさん:2008/01/09(水) 15:35:41
上級者向けではないが初心者向けではないな
どうせライブラリか何かでBMPに変換しないと画像処理なんてできん
141デフォルトの名無しさん:2008/01/09(水) 15:41:51
なんでスレ違いなのに明後日の方向のレスをつけるのだろう……
142140:2008/01/09(水) 15:46:35
明後日の方向ではないと思うんだが
143デフォルトの名無しさん:2008/01/09(水) 15:46:35
世の中にはBI_PNGなんてのを入れたDIBファイルなんてのがあってな・・・

APIはあれを読めるんだろうか?
144デフォルトの名無しさん:2008/01/09(水) 15:51:57
Vistaのアイコンファイル形式ではPNGデータが入れられるようになったが、
あれはパックDIB(ヘッダ+生ビット列)の代わりにPNGデータが入ってるだけなんで
BI_PNGとはちと違うな。
145デフォルトの名無しさん:2008/01/09(水) 16:00:18
>>143
APIは対応してるけどメモリDCに送ってもGDI_ERRORになるらしい
プリンタとか用だってさ
146デフォルトの名無しさん:2008/01/09(水) 18:10:15
音量調節が出来ない音を出すアプリケーションの音量をいじりたいんですが
何か良い知恵無いですか?
WINMMを使ってる事までは分かったんですが
そっから先が、いくら調べても、全体の音量を変えるものばかりで
特定のアプリが発してる音量をコントロールする手段なんてのが無いんですが。

WINMMを乗っ取るとか、仮想サウンドデバイスを作って、とか
技術が無いのに実現が難しい事ばっかり思いつきます。

もっとこう簡単にいかないですかね?
147デフォルトの名無しさん:2008/01/09(水) 18:18:56
148デフォルトの名無しさん:2008/01/09(水) 18:20:05
Vistaならプロセスごとに、ユーザがいじれるが。
あれプログラマからもいじれるようになっているんだろうか。
149デフォルトの名無しさん:2008/01/09(水) 18:27:02
>>147
ありがとうございます。
が、これは全体の音量を変化させるものみたいっす。
特定のアプリの音量だけを変化させたいんですよ。

>>148
そう、正にそれです。
Vistaでいじれるかどうか分かりませんが
同じ事をXPで実現出来ないかなぁと。

対象のアプリが使用しているハンドルを捕まえて
そのハンドルに対して別アプリから音量を下げるメッセージ投げたら反応しますかね?
ハンドルの捕まえ方なんて知りませんけど...orz
150デフォルトの名無しさん:2008/01/09(水) 18:32:06
OSをVistaに変える。以上。
151デフォルトの名無しさん:2008/01/09(水) 18:36:55
>>149
Vista以外では、まっとうな方法では不可能だと思われ。
何らかの方法でPCMデータを横取りして、計算して全サンプルの音量を変
えるしかない。
152デフォルトの名無しさん:2008/01/09(水) 18:41:55
>>150
まぁ一番簡単なのはそれですよね。

>>151
PCMデータ横取りですか…
ラッパーを作れって事ですか。
難しそうですね。

とりあえず、真っ当な手段では無理っぽいって事ですね。
ありがとうございました。
153デフォルトの名無しさん:2008/01/09(水) 18:49:51
DirectSound使ってるアプリケーションならできんでもないが、
waveOutに直流ししてるのは無理だな
154デフォルトの名無しさん:2008/01/09(水) 18:57:49
なんで?
155デフォルトの名無しさん:2008/01/09(水) 20:09:28
単純に全レジストリのキーと値を列挙するだけのプログラムを書いているのですが、何故か RegQueryInfoKey() の返すキー名の最大長と実際のキー名の最大長が一致していないかのような動作をします。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5711.txt
例えば、↑のプログラムを実行しても私のPCの Win XP では "O.K. NO ERROR!" と表示されません。
UNICODE版、ANSI版ともにダメでした。

何が間違っているのでしょうか?
どうぞよろしくお願いします。
156デフォルトの名無しさん:2008/01/09(水) 21:04:26
まずANSIでやると、日本語関係の値について、長さの不足がぞろぞろ出てくる。
UNICODE版では出てこないから、値についてはANSI版がおかしいのは自明。

けど、UNICODE版でも、キー長さはいくつか不可解なキーは残るナー。
157デフォルトの名無しさん:2008/01/09(水) 21:05:40
パスは?
158デフォルトの名無しさん:2008/01/09(水) 21:15:22
自分のPC(WinXP SP2)だと、ANSI/Unicode共に普通にO.K.になるぞ。
Usersグループだからか?
159デフォルトの名無しさん:2008/01/09(水) 21:19:10
REG_SZ型以外のものもTCHARの数で数えたらおかしくなるに決まってるだろ
160デフォルトの名無しさん:2008/01/09(水) 21:31:14
>158
ALL_ACCESSでHKLMを見ようとしてるうえ、オープン時のエラーは黙殺だから。、
ほとんどレジストリを開いてないはず。
161デフォルトの名無しさん:2008/01/09(水) 21:50:35
一部のシェアウェアなんかが文字列の途中に\0を含むようなキーを
わざと登録して不正使用対策してるそうだが
162デフォルトの名無しさん:2008/01/09(水) 21:58:18
質問です

あるウィンドウの子ウィンドウを別のスレッドで作成しようと思っているのですが、
そもそも、こういう使い方ってWindows的に許されてる使い方なんでしょうかね?
実際に試してみると出来ることはできるのだけれど、
どうも怪しすぎる使い方な気がしてならないのですが…
163デフォルトの名無しさん:2008/01/09(水) 22:01:13
やめとけ。
164デフォルトの名無しさん:2008/01/09(水) 22:03:46
>>162
できるけど、いろいろ面倒だからやめたほうがいい。
165デフォルトの名無しさん:2008/01/09(水) 22:08:14
>>163
多分やめることになりそうです。
大変そうなんで…

>>164
面倒な点ってどんなことですかね?

俺が普段と違うなと思ったのが
子ウィンドウのメッセージループを回す時に
親ウィンドウのメッセージループが回ってないと止まる
ってことくらいですかね…
(メッセージの取得かディスパッチのどちらで時間食ってるかは調べてませんでしたが)

他にもまだ色々ありそうですが…
166デフォルトの名無しさん:2008/01/09(水) 22:29:49
メッセージが微妙に届かなかったりするw
167デフォルトの名無しさん:2008/01/09(水) 22:54:46
>>159
お前は何を言っているんだ?
168デフォルトの名無しさん:2008/01/09(水) 22:59:14
たしかに名前の長さに0が返ってくるのは異常だな。
169デフォルトの名無しさん:2008/01/09(水) 23:07:10
いろいろ変えながら試してみたけどうまくいかんなぁ。
なんじゃこりゃ?

>>158
KEY_ALL_ACCESS を KEY_READ に置換して試してみ。
170デフォルトの名無しさん:2008/01/10(木) 00:39:59
デュアルコアCPUのPCでどんだけ重い処理させてもCPU使用率50%ぐらいまでしか
いかないんだけど、マルチスレッドで書いたら100%ぐらいまでCPU使ってくれる?
171デフォルトの名無しさん:2008/01/10(木) 00:44:49
うん
172デフォルトの名無しさん:2008/01/10(木) 00:46:10
ありがとう。今から書き直してみる
173デフォルトの名無しさん:2008/01/10(木) 07:28:55
横からすまんがコア0とコア1が50%ずつ使われるのはなんでなんだろう。
174デフォルトの名無しさん:2008/01/10(木) 07:32:39
一つのスレッドを二つのCPUで取り合いをするから
175デフォルトの名無しさん:2008/01/10(木) 11:53:47
拡張子から関連づけられたexe名を知るにはどうしたらいいでしょう?
176デフォルトの名無しさん:2008/01/10(木) 12:33:36
レジストリを見る
177デフォルトの名無しさん:2008/01/10(木) 13:26:49
178デフォルトの名無しさん:2008/01/10(木) 14:29:33
C#スレから誘導受けてこちらに来ました、よろしくお願いします!!

レジストり内の 「拡張子」 の項目に Shellnewで新規作成できるファイルを追加しよう
と思うのですが、テンプレートファイルを複数用意しておいて、それらすべてを一つの拡張子
に割り付けて複数のファイルから選択できるようにしたいと思ったのですが、これは可能でしょうか?

何卒よろしくお願いします。
179デフォルトの名無しさん:2008/01/10(木) 14:50:21
ShellNewキーにCommand値を書くといいかもしんない
180デフォルトの名無しさん:2008/01/10(木) 15:42:25
>>179
ShellNewキー Command値 でググってみたのですが、どうすればよいか
わかりません。ヒントがありましたら教えてください。
181デフォルトの名無しさん:2008/01/10(木) 17:50:42
ShellNew CommandでぐぐってみたらShellNew内のエントリの解説に

Command = 新規作成時にウィザードを使いたい場合など、実行するファイル名を指定します。

と書いてあった。

つまり、テンプレートファイルを選択させるウィザード風のexeを作成しておいて
Commandにそのexeファイル名を指定するってことじゃないか?
182デフォルトの名無しさん:2008/01/10(木) 18:00:58
>>155
ソースコード的におかしなところは見つからないね。
API のバグじゃないかな。
列挙が目的なら RegQueryInfoKey の返却値にたよらず最低でもある程度のバッファを確保するようにすればいいと思う。
maxlen_of_valuename = max(255, maxlen_of_valuename);
maxlen_of_subkeyname = max(255, maxlen_of_subkeyname);
のようにすれば 9x についてはほぼ安全。
NTも滅多なことにはならないはず。
183デフォルトの名無しさん:2008/01/10(木) 18:04:04
>>174
キャッシュを無駄にしちゃうから、できれば同じぷろせっさにスレッドを割り当てて欲しいものだ。

NT4は片方のプロセッサが100%になったおぼえがある。NT4で同じプロセッサに割り当てられるように変更されたはずだったけど、いつから戻ったんだろう?発熱対策か?

184デフォルトの名無しさん:2008/01/10(木) 18:54:04
>>181
なるほど!!プログラムを使って別途表示するということですね、わかりました。
そのような感じで検討します!!ありがとうございました!!
185デフォルトの名無しさん:2008/01/10(木) 19:16:15
質問

ディレクトリエントリを再構成(ソート)するようなAPIない?
やっぱりクラスタ単位で読み込んで自分でしないと駄目?
186デフォルトの名無しさん:2008/01/10(木) 21:06:19
>>173
はHTみたいな論理プロセッサ環境だからだよ
純粋に2ソケットなら100%100%になる。
coreduoも50%50%だったかな?
187デフォルトの名無しさん:2008/01/10(木) 21:08:10
>>186
                |
                |
                |
                |
     /V\        ,J
    /◎;;;,;,,,,ヽ
 _ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'
188デフォルトの名無しさん:2008/01/10(木) 21:17:09
あれw まちがってたかww すまんね
189デフォルトの名無しさん:2008/01/10(木) 21:32:54
>>183
SetThreadAffinityMask
190185:2008/01/10(木) 21:46:33
うええー

汚いVFATだなあ
これ読むの???
191デフォルトの名無しさん:2008/01/10(木) 22:14:45
ワロタ
192デフォルトの名無しさん:2008/01/10(木) 22:43:01
>>185
あるディレクトリのエントリを任意の順に並び変える方法として、
一旦、同ドライブの別のフォルダにファイルを移動して、
そこから並べたい順にファイルを戻していくという手は使えない?

エントリがファイル名順に格納されるNTFSなんかでは使えないけど。
193デフォルトの名無しさん:2008/01/10(木) 22:46:09
ファイルサイズがあらかじめ想定できる状況じゃないと現実的じゃない気がする
194デフォルトの名無しさん:2008/01/10(木) 22:49:33
>>185
NTFS
195デフォルトの名無しさん:2008/01/10(木) 23:00:28
>>193
「同ドライブの」
196デフォルトの名無しさん:2008/01/10(木) 23:15:04
ああ、同ドライブって同じボリュームの意味ね
197デフォルトの名無しさん:2008/01/10(木) 23:26:08
>>185
つい最近同じ話を見たぞ。
http://pc11.2ch.net/test/read.cgi/tech/1047001533/833-
198デフォルトの名無しさん:2008/01/11(金) 00:24:03
>>191-197
情報ありがとう
とりあえずMoveFileでやってみる

移動すればエントリが書き換わる事に気付かない俺って('A`)
199デフォルトの名無しさん:2008/01/11(金) 07:37:06
>>185
UMSSortっていうエントリをソートするソフトがある。
フォルダ作ってその中にファイルをすべて移動、ソートしたい順に書き戻してる。
200デフォルトの名無しさん:2008/01/11(金) 09:05:32
初心者ですが質問です。
マウスの少し上にウィンドウを表示して
GetCursorPosでマウスの座標を取得しながら
MoveWindowでマウスの動きに合わせてウィンドウを移動させています。
ですが、実行してグリグリ動かしていると、
しばらくしたらウィンドウが動かなくなってしまいます。
これはなぜなんでしょうか?よろしくお願いします。

ちなみにVisualStudioでデバッグ開始して実行したら何も起きないんですが
exeファイルから実行するとこのエラーがでます。
201デフォルトの名無しさん:2008/01/11(金) 09:13:33
そういう場合は大抵初期化漏れだと俺は信じてる
202200:2008/01/11(金) 09:37:01
>>201
初期化漏れっていうのは調べてみたんですが
変数を初期化してないものがあるってことでいいんでしょうか?
でもやっている処理としたらこのぐらいしかないんですけど・・・
↓↓
switch (msg) {
case WM_PAINT:
POINT po;
while(1){
GetCursorPos(&po);
MoveWindow( hwnd , po.x-250 , po.y-150 , 300 , 300 , TRUE );
}
return 0;
}
203200:2008/01/11(金) 09:40:56
間違えました。正しくはこうしてます。

POINT po;
switch (msg) {
case WM_PAINT:
while(1){
GetCursorPos(&po);
MoveWindow( hwnd , po.x-250 , po.y-150 , 300 , 300 , TRUE );
}
return 0;
}
204デフォルトの名無しさん:2008/01/11(金) 09:51:50
その処理をWM_PAINTでやる理由は?
WM_PAINTからいつまでたっても戻らないから、システムが応答無しと判断して
おかしなことになってるんじゃね?
205デフォルトの名無しさん:2008/01/11(金) 10:04:29
>>203
CPU発熱ソフトでも作ってるのか?w
206デフォルトの名無しさん:2008/01/11(金) 10:13:11
>>203
すごい恐ろしいことやってるなw
突っ込みどころが多すぎるが、とりあえず

WM_PAINT で描画以外をやるな。
WM_PAINT でDefWindowProc呼ばないなら BeginPaint EndPaintは必須。
この辺から。
207デフォルトの名無しさん:2008/01/11(金) 12:08:48
       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \  今日もまた、WM_PAINTで
  |     (__人__)    |  ウィンドウ移動する
  \     ` ⌒´     /  仕事が始まるお…
208デフォルトの名無しさん:2008/01/11(金) 12:15:31
>>207
不覚にもワロタ
どんな仕事だよw
209200:2008/01/11(金) 12:27:24
回答ありがとうございます。
基礎から出直してきます…
210デフォルトの名無しさん:2008/01/11(金) 13:56:05
SetWindowsHookExでmouse messageをフックしてみたら?
211デフォルトの名無しさん:2008/01/11(金) 16:09:31
非クライアント領域でのマウスの移動を検出するにはどうしたらいいんでしょうか?
WM_NCMOUSEMOVEがそうだと思うんですが
WM_MOUSEMOVEと同じようにしか働かないんですが・・・
212デフォルトの名無しさん:2008/01/11(金) 16:14:10
同じならいいじゃん。
どうしたいのか、現状どうなって困ってるかを書いたらいいと思うよ
213デフォルトの名無しさん:2008/01/11(金) 16:20:27
クライアント領域の外でマウスが動いたときにいろいろ処理をしたいんですが
WM_MOUSEMOVEとかWM_NCMOUSEMOVEだと、
クライアント領域の中をマウスが移動したときにしか反応してくれないんで
どうしたらいいのかな〜と。
214デフォルトの名無しさん:2008/01/11(金) 16:25:17
マウスをキャプチャーしてやる。
具体的にはSetCaptureとReleaseCapture
WM_NCMOUSEMOVEは「ウィンドウの非クライアント領域」でマウスが動いた時に来るメッセージ。
タイトルバーの上とかスクロールバーの上とか。
215デフォルトの名無しさん:2008/01/11(金) 16:36:02
>>214
WM_NCMOUSEMOVEはやっぱだめなんですね〜。
キャプチャーですか。
やってみます。ありがとうございます。
216デフォルトの名無しさん:2008/01/11(金) 16:44:20
>>215
NC領域というのがいったいどこなのか調べてみ。
217183:2008/01/11(金) 18:49:48
>>186
なるほど、言われてみればその通りな気がする。今使ってるのはHTとduoだから。
quadを買ったので、4コア25%になるのか、2コアが50%に分散させるのか確認が楽しみ。
218デフォルトの名無しさん:2008/01/11(金) 19:00:34
んなアホな。Core2duoは、ちゃんと100%と0%になるぞ。1スレッドしか動かしていない状況なら。
219デフォルトの名無しさん:2008/01/11(金) 19:04:10
スレッドの使い方にもよるしね。
連休中、いろんなパターンで検証してみようかなあ
せっかく4コアなのに動画エンコ以外は全部100%にならんしなー
220デフォルトの名無しさん:2008/01/11(金) 19:08:02
>>219
ビジーループの関数を、4スレッド走らせるだけで実現できるぞ。
221デフォルトの名無しさん:2008/01/11(金) 19:52:48
すみません
ふらっとC#スレから誘導されてきました

お聞きしたいのですが
ブラウザ(IE)上に表示されたテキストボックスからテキスト取得ってできるんですかね?
サイトはJAVAアプレットで書かれているものです
参考サイト、ググるキーワードなどあればご教示下さい

宜しくお願いします
222デフォルトの名無しさん:2008/01/11(金) 20:08:34
IEのブラウザ画面に出るコントロールは、ウィンドウを持っていなくて自前描画だった希ガス
223デフォルトの名無しさん:2008/01/11(金) 20:55:45
パスワード横取りはやめましょう
224デフォルトの名無しさん:2008/01/11(金) 20:56:51
225デフォルトの名無しさん:2008/01/11(金) 20:59:20
>>221
HTML中だったらDOMを辿っていく方法が使えるけど、
アプレット内のテキストはわからない。
226デフォルトの名無しさん:2008/01/11(金) 21:30:15
>>221
Javaスレにいけば?
227デフォルトの名無しさん:2008/01/11(金) 21:34:25
>>222
そんな感じですね
>>223
ちがいますよw
>>224
難しすぎです><
>>225
なるほど
>>226
行ってきます
228デフォルトの名無しさん:2008/01/11(金) 22:47:40
>>207
ワロスww
229デフォルトの名無しさん:2008/01/11(金) 23:07:36
>>207
ワロス
DefWindowProcのことかと思ったら少し上のコードのことかw
230デフォルトの名無しさん:2008/01/11(金) 23:25:08
>>220
1スレッドで複数のコアにまたがるようなのは?
231デフォルトの名無しさん:2008/01/12(土) 00:10:23
Windowsのタスクバーとかサイドバーみたいに画面の端を占有して
他のウィンドウと重ならないようにしたいんですが、
どうやるんでしょうか?
232デフォルトの名無しさん:2008/01/12(土) 00:12:59
AppBarでぐぐるといいかも
233231:2008/01/12(土) 00:35:57
>>232
見つかりました。ありがとうございます。
234178:2008/01/12(土) 02:19:27
レジストリの ShellNew の件でもう一度お尋ねしますがよろしくお願いします。

レジストリエディタで、
 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew
の中の項目が、Explorerで右クリック時の「新規作成」で表示される各項目として
並んでいるものでしたが、

これの各「データ」に対応する実際のソフトウエアを探す場合、

たとえば、Excel2003 の場合ですと、
 HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excell
という場所を見つけて見てみると、そこにあるデータが該当することがわかりました。

たとえばこのような一致するデータを探して行って、どこかにあるExcelの拡張子が
.xls であることを突き止めてから、それをHKEY_CLASSES_ROOTからさが仕出して、
というように見つけていくのでしょうか?

その場合、具体的にどのように追跡してそこまで到達することができるか教えて
いただけないでしょうか?
235デフォルトの名無しさん:2008/01/12(土) 02:27:06
逆っしょ
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER\Software\Classes
から探すンしょ
236178:2008/01/12(土) 02:49:56
>>235
さっそくどうもです。

調べてみましたところ、Explorerで右クリック時の「新規作成」で表示される各項目
として並んでいるものが、レジストリエディタでは
 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew
の中の項目に対応しているのでした。

そこで、実際にこの新規作成と同じことをする場合には、やはりこの場所を先に
見てそのリストをつくり、そこからなんらかのルートで対応する拡張子を捜し、
それを
   HKEY_CLASSES_ROOT
から探してやって、そこで見つけたShellNewでテンプレートファイルを持ってくる
ということかと思われました。

とすると、この流れの中の、「ソフトウエアの使っている拡張子を知る」ということ
ができなければならないかと思いました。

ではまた明日にでも教えてください。何卒よろしくお願いします!!
237デフォルトの名無しさん:2008/01/12(土) 03:49:54
>>236
その 〜\Discardable\PostSetup\ShellNew キーは、削除しても正常に動くっぽいよ。
つまり、新規作成リストを作るのにそのキーは見てないってことだ。
HKEY_CLASSES_ROOT の拡張子キー全部から ShellNew をリストアップしてるんじゃない?
238デフォルトの名無しさん:2008/01/12(土) 06:27:21
>>230
「1スレッドで複数のコアにまたがるようなの」を定義してください。
普通は、二つのコアに跨る為には2スレッド必要ですから。
# 勿論、その2スレッドが両方ともユーザアプリのスレッドとは限らないわけだが。
239デフォルトの名無しさん:2008/01/12(土) 08:07:03
ファイバーって何でしょうか?プラットホームSDKは3個ほどのAPIの説明だけでよくわかりません。
それを読んだ限りだと、プログラムカウンタとスタックを保存して切り替えたりするぐらいの機能にしか感じられないんのですが、合ってるでしょうか。
ファイバーの再開が別のスレッドだとまずいですよね?
240デフォルトの名無しさん:2008/01/12(土) 09:05:18
241デフォルトの名無しさん:2008/01/12(土) 09:48:02
>>239
マイクロスレッドでググれ
242178:2008/01/12(土) 10:53:16
>>237
うわー、夜中なのに考えてくださってすみませんでした、ありがとうございます!

>HKEY_CLASSES_ROOT の拡張子キー全部からShellNewをリストアップしてるんじゃない?

あーそうだったんですか、ということはExplorerの右クリックのコンテキストメニュー
が出る直前であのたくさんの拡張子キーを全部見てまとめているということなのでしょうか!

びっくりです、それとあと一つですが、あの拡張子キーには、たとえば、Excelの場合などでは
 .xls のほかに .xlt とかもあり、それにも ShellNew があったりしてました。
そういうのは新規作成メニューに出てきていなかったのでなんらかのリストがどこかに
あるのではとも思ったのでした。

もしかしてレジストリのどこかに他にまだそのリストが存在しているのでしょうか・・・?
243デフォルトの名無しさん:2008/01/12(土) 11:06:59
244デフォルトの名無しさん:2008/01/12(土) 11:19:43
>>230
スレッド操作意識しないで全コア使い切りたいならOpenMPでいいんじゃないの?
245デフォルトの名無しさん:2008/01/12(土) 11:38:59
>>211
マウスがどうの言わなくてもお前のやりたことは

SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELONG(xPos, yPos));

でできると思うぞ。xPos, yPos は 0 でも良い。
246デフォルトの名無しさん:2008/01/12(土) 11:44:09
FlsAllocって一応2003カーネルのXP x64で使えるんだろうか
まあx86のXP SP3でサポートされない限りしばらくは使う気が起きないが
247デフォルトの名無しさん:2008/01/12(土) 11:45:39
>>245
何この的外れすぎるレスw
248デフォルトの名無しさん:2008/01/12(土) 11:57:37
>>211 == >>200
という想定なんじゃね?
249デフォルトの名無しさん:2008/01/12(土) 12:09:55
>>248
仮にそういう想定だとしても的外れだと思う
250デフォルトの名無しさん:2008/01/12(土) 12:14:02
>>238
タスクスイッチが頻繁に起きるようにすればいいんだよ
251デフォルトの名無しさん:2008/01/12(土) 12:16:03
>>249
動作としては同じになるからこういうやり方もある、とは言えるかもね
252デフォルトの名無しさん:2008/01/12(土) 12:41:55
同じ動作にはならないだろ・・・

というか>>200,>>211の求める回答が>>245なら>>245は物凄いエスパーだ
253デフォルトの名無しさん:2008/01/12(土) 14:22:59
本人
254178:2008/01/12(土) 15:02:00
>>237
わかりました!!

# >>236
# 「ソフトウエアの使っている拡張子を知る」ということ

これは、なんとそのDiscardable\PostSetup\ShellNewの各データ
の中に隠れているでした。。。いまやっとわかりました!!

どうもでした!!!
255デフォルトの名無しさん:2008/01/12(土) 15:36:07
Discardableを翻訳して見ろよ
256デフォルトの名無しさん:2008/01/12(土) 16:08:44
>>252
やってみたのかよ
やってないのばればれ
257デフォルトの名無しさん:2008/01/12(土) 16:17:13
>>255
破棄可能な
258デフォルトの名無しさん:2008/01/12(土) 16:17:56
>>256
ならねーよ
お前こそやってないのばればれ
259デフォルトの名無しさん:2008/01/12(土) 16:23:50
俺も今まで一度もヤッたことありません。
260デフォルトの名無しさん:2008/01/12(土) 17:01:56
俺も殺ったことありません。
261245:2008/01/12(土) 22:01:09
なんかちょっと荒れ気味だな。まぁ、これでこそWin32API質問箱って感じか。
>>200って>>203だろ?
マウスの位置とってそこにウィンドウ移動したいだけなら>>245で良い訳だが。
まさか何かの拍子にマウス位置にウィンドウがジャンプする機能を作りたい訳じゃあるまい。
262デフォルトの名無しさん:2008/01/12(土) 22:26:25
議場から抜け出したO沢が262ゲット
263デフォルトの名無しさん:2008/01/12(土) 22:26:39
Googleツールバーの単語翻訳みたいなマウスカーソルに追従するやつじゃないの?
>>203のwhile(1)の中身をWM_TIMERにでも書いて適当な間隔でSetTimerすればいいだけと思うが

クライアント領域をドラッグしてウィンドウを移動させたいのなら>>245だな
264デフォルトの名無しさん:2008/01/13(日) 00:56:32
ビットマップとDIBについて質問です。
現状のプログラムは、24bitのビットマップのデータ(ビットマップヘッダ無し)を受け取り、CreateDIBSectionで同じ大きさのDIBを作りデータをコピーし、文字を書き込んで、
最後に変更したデータを元のデータへ戻すという処理をしています。
この方法ではビットマップデータとDIBとのコピーが2回発生するのでメモリコピーに多くの時間がかかっています。
それでもう少し効率的にやりたいのですが、ビットマップ情報のヘッダがない24bitのビットマップのデータへ文字を直接書き込むことはできるのでしょうか? またはビットマップのデータからコピー無しでDIBを作るとかできますか?
どうか教えてください。
265デフォルトの名無しさん:2008/01/13(日) 01:28:04
>>264
ビットマップからDIBは作れるが。
DIBSectionは無理っぽいな。
266デフォルトの名無しさん:2008/01/13(日) 01:29:06
そもそもDIBでないなら選択されてるデバイスコンテキストのフォーマットに勝手に合わせられてる筈
267デフォルトの名無しさん:2008/01/13(日) 03:12:32
>>264
DIBの受け渡しをメモリマップトファイルで行うようにして
CreateDIBSectionの第5引数にメモリマップトファイルのハンドルを渡せば
直接更新できる
268デフォルトの名無しさん:2008/01/13(日) 03:19:19
>>264
DIBに文字だけ書いて、自分で元のビットマップと合成したら?
269デフォルトの名無しさん:2008/01/13(日) 07:09:30
>>264で思い出したんだけど、指定したDCに対するTextOutとかLineToとかGDI+の描画とか、どうやってるのか気になる。
さすがにSetPixelでポチポチ描いてるとは思わないし。そもそもSetPixelすらどういう処理をしているのか…
CreateDIBSectionで作ったものなら、ビットマップへのポインタがあるので、それで書き換えとかできるんだけど
270デフォルトの名無しさん:2008/01/13(日) 07:25:07
>>269
デバイスドライバはDDBに直接アクセスできる
271デフォルトの名無しさん:2008/01/13(日) 08:22:24
GPUに処理させるためのDDBだったもんな。
Vistaからは、GDIはすべてソフトウェア処理になったけどね。
272264:2008/01/13(日) 09:41:16
>>265-271
ビットマップに文字を直接書き込むことは無理で、
メモリマップトファイルを使う、または文字だけDIBに書いて自分で合成する、ということですかね。
かなり参考になりました。ありがとうございました。
273デフォルトの名無しさん:2008/01/13(日) 17:18:30
>>272
絵を表示したウインドウに文字を書いている例が、猫の始めの方にあった。
表示内容を DIB として保存すればいいんじゃね。
274デフォルトの名無しさん:2008/01/13(日) 17:43:21
一つ疑問なのだが、メモリコピーってそんなに時間かかるか?
なんだったら、更新範囲だけ転送するという方法もあるし。
275デフォルトの名無しさん:2008/01/13(日) 18:14:14
本当は他の部分でトチっていて時間かかってるんだろ
276デフォルトの名無しさん:2008/01/13(日) 21:20:39
>>274
最近でこそ普及帯のPCでも1000MB/sくらい。
ちょっと古いと100MB/s出ないくらい。
そんなPCでVGA画像を60FPSコピーしようとすると、26.4MB/S必要になる。
さすがにメモリコピーだけでCPU時間を26%消費するのは痛い。
277デフォルトの名無しさん:2008/01/13(日) 21:42:29
PropertySheet()で作成したダイアログの、
特定のタブを無効化するにはどうすればいいのでしょうか?
278デフォルトの名無しさん:2008/01/13(日) 21:48:34
>>276
GDIでfpsがどうとかって
頭悪すぎだろ
279デフォルトの名無しさん:2008/01/13(日) 21:58:14
>>278
GDIじゃなくてmemcpyね。純粋にHWの性能の問題。
DirectXだってmemcpyより速いなんてありえないっしょ。
280デフォルトの名無しさん:2008/01/13(日) 22:10:46
VGAのコピーってDMAじゃないの?
281デフォルトの名無しさん:2008/01/13(日) 22:39:36
100MB/sの帯域を26%消費するとCPU時間も26%消費することになるの?
282デフォルトの名無しさん:2008/01/13(日) 22:40:02
283デフォルトの名無しさん:2008/01/13(日) 23:18:57
>>281
やってみればわかる。
while(1){
Sleep(1);
memcpy(buffer0,buffer1,1024*1024*32);
}
284デフォルトの名無しさん:2008/01/13(日) 23:19:12
>>281
それ以上消費してるだろうね
285デフォルトの名無しさん:2008/01/14(月) 00:19:48
>>282
ばーか
そもそもがmemcpyの実装にも依るだろうが
せめてMMXかSSEでも使って実験しろよ
286デフォルトの名無しさん:2008/01/14(月) 00:22:17
無知って怖いね
287デフォルトの名無しさん:2008/01/14(月) 00:26:10
>>285
コメント先間違えてるぞ
288デフォルトの名無しさん:2008/01/14(月) 00:30:28
100MB/sはSDRAMレベルだけどね。
懐かしのCoreTest/99だと、K6-2(100x4.5)のmoveで100MB/s、
Celeron300A OC(100x4.5)だと190MB/sとなっている。
DDR以降で同程度の負荷を想定するのは流石に無茶な感じになってしまうな。

>>264の件だと、そもそも入出力部分のネックが一番大きい予感。
ファイル対象だとすると、DiskI/Oに一番時間食われてるとかありがち。
289デフォルトの名無しさん:2008/01/14(月) 00:31:56
>>287
すまん。>>283の間違いだ
290デフォルトの名無しさん:2008/01/14(月) 00:36:58
>>285
MMXやSSE使ってもCPU時間消費して転送するんじゃないのかね
CPU時間消費せずに転送できる方法があるなら教えてほしい
291デフォルトの名無しさん:2008/01/14(月) 00:39:23
明示的に転送するならCPU時間消費しないわけ無いだろ
292デフォルトの名無しさん:2008/01/14(月) 00:43:46
>>290
お前の頭の悪さはよく分かったからもう来なくていいよ
293デフォルトの名無しさん:2008/01/14(月) 01:07:55
http://park5.wakwak.com/~xelf/knowledge/MemoryCopy.html
コピーサイズ変えたりして今のマシンでやるとmemcpyでも結構速いのな。
294デフォルトの名無しさん:2008/01/14(月) 09:24:05
VC8以降のmemcpyって確かSSE2命令使っているんだよな
295デフォルトの名無しさん:2008/01/14(月) 14:55:11
コールバック関数にユーザーデータとしてポインタを(DWORD)で
キャストして渡してるケースが良くあるんだけど、64bit(Win64API?)
への移植時にはどうなるのかな?

WindowsではDWORDは32bitのままだよね。コールバックの
ユーザーデータ受ける部分のプロトタイプが変わってるのかしら?
296デフォルトの名無しさん:2008/01/14(月) 14:59:42
DWORD_PTR
297デフォルトの名無しさん:2008/01/14(月) 15:20:55
つまり古いソースは書き直しが要るってことか
298デフォルトの名無しさん:2008/01/14(月) 16:33:10
スレッドのコールバック関数はDWORDのままじゃなかった?
299デフォルトの名無しさん:2008/01/14(月) 19:04:34
>>298
CreateThreadのあれは、引数void*だぞ。
300デフォルトの名無しさん:2008/01/14(月) 19:58:47
返値の事だろバカ
301デフォルトの名無しさん:2008/01/14(月) 20:56:59
DefWindowProc(NULL, 0, 0, 0L); を呼ぶとどうなるですか?
302デフォルトの名無しさん:2008/01/14(月) 21:32:57
MessageBoxを呼び出すとデスクトップの真ん中に出ます。
アプリのウインドウの真ん中付近に出したいのですが、
どうしたらいいでしょうか?

最初のパラメータのウインドウハンドルにアプリ本体の
メインウインドウを渡しても、デスクトップの真ん中に出て
しまいます。
303デフォルトの名無しさん:2008/01/14(月) 21:44:39
フックする
304デフォルトの名無しさん:2008/01/14(月) 21:45:26
>>302
サブクラス化
305302:2008/01/14(月) 22:31:06
フックしてWM_INITDIALOGを捉まえ、挙動を調べてみました。

・確かに親ウインドウはアプリのメインウインドウになっている。
・SetWindowPosで移動させるとデスクトップの座標を基準にして動く。

MSDNには「子ウインドウの座標は親のウインドウのクライアント
座標の相対値」と説明にありますが、MessageBoxのウインドウは
少なくとも件のアプリでは、親があってもデスクトップの座標を基準
に動いてしまうようです。

親の座標から位置を計算することは可能ですが、ちょっと腑に
落ちませんでした。何か原因があるのか…?
306デフォルトの名無しさん:2008/01/14(月) 22:31:34
>>301
WTL?
307デフォルトの名無しさん:2008/01/14(月) 23:02:23
>>305
ヒント: 親とオーナーはフォーカスとアクティブとフォアグランドぐらい違う
308デフォルトの名無しさん:2008/01/14(月) 23:18:47
ダイアログみたいに親をアクティブにできない子ウィンドウを作りたいんだけどどうすればいい?
ウィンドウスタイルいろいろ試したけど駄目だった。
309デフォルトの名無しさん:2008/01/14(月) 23:21:19
>>308
だから親とオーナーは違う
310デフォルトの名無しさん:2008/01/14(月) 23:28:14
>>308
EnableWindow 使ってみたら?

311デフォルトの名無しさん:2008/01/14(月) 23:32:13
>>310
親ウィンドウを無効にしたら子ウィンドウも操作できなくなる。
所有されているウィンドウには影響しないが。
312デフォルトの名無しさん:2008/01/14(月) 23:35:31
>>311
そうなんだ。MessageBox() とかどういう仕組みなん?
313302:2008/01/14(月) 23:41:18
MessageBoxの最初のパラメータは親じゃなくてオーナーを指定するんですね。

ただ、フックした中でGetParent(ダイアログボックスのHWND)ってやると
アプリのメインウインドウを取って来れるんですよ。

それならダイアログボックスのHWNDに対する位置操作はアプリの
メインウインドウ相対になるんじゃないかと思うんですが。
314デフォルトの名無しさん:2008/01/14(月) 23:44:25
>>313
http://msdn2.microsoft.com/en-us/library/ms633510(VS.85).aspx
>The GetParent function retrieves a handle to the specified window's parent or owner.
名前に反してオーナーも返すらしーよ
315302:2008/01/14(月) 23:57:50
>>314
がーん。

よくよく考えるとメッセージボックスはアプリの子ウインドウじゃなくて
被所有ウインドウですね。

MFCみたいにアプリの真ん中に出したり、メインウインドをクリックしたら
チーンとか注意音を鳴らしたいんですが、簡単じゃなさそうですね。
316デフォルトの名無しさん:2008/01/15(火) 00:33:04
>>312
親とオーナー(所有者)は違うと何度言ったらわかる?
317デフォルトの名無しさん:2008/01/15(火) 00:39:17
>>316
違うのはもう良いから、どう違うのかとか、EnableWindow() では何故だめなのか教えてください。
318デフォルトの名無しさん:2008/01/15(火) 00:40:36
>>317
>>311ですでに説明した
頼むから直前のレスにだけ脊髄反射するな
319デフォルトの名無しさん:2008/01/15(火) 00:53:08
>>318
なんだ、ただの蛇足じゃねーかよ、あんたのレス。
煽りたかっただけかい。
320デフォルトの名無しさん:2008/01/15(火) 00:54:12
ここまでテンプレ
321デフォルトの名無しさん:2008/01/15(火) 01:03:46
>>319
理解してたら>>312のようなレスが付くわけないだろ
>>311で理解できない馬鹿につける薬はない
322デフォルトの名無しさん:2008/01/15(火) 01:11:22
あんたもういいよ^^;
323デフォルトの名無しさん:2008/01/15(火) 01:13:38
で、MessageBox()はどうしてるかわかったの
324デフォルトの名無しさん:2008/01/15(火) 01:32:53
ここまでおれの自作自演
325デフォルトの名無しさん:2008/01/15(火) 01:40:42
>>323
MessageBox()の逆汗でもしてろよ低脳
326デフォルトの名無しさん:2008/01/15(火) 02:11:35
MessageBoxは引数hwndのウィンドウをオーナーにして、
かつEnableWindowで無効にしている。

メッセージボックスはhwndの子ではないので、
hwndを無効にしてもメッセージボックスは無効にならない。
327デフォルトの名無しさん:2008/01/15(火) 03:43:28
CBTフックを使った例をよく見るな
328デフォルトの名無しさん:2008/01/15(火) 09:30:50
メッセージボックスとかモーダルダイアログは自分でメッセージループを持っている。
329デフォルトの名無しさん:2008/01/15(火) 09:43:35
>>315
WH_CBT を使えばできるよ。
俺は WH_CALLWNDPROCRET で実装しているけど。
330デフォルトの名無しさん:2008/01/15(火) 10:10:40
>>328
モードレスダイアログボックスの場合は、メッセージループでIsDialogMessageで分別しなきゃいけないんだっけ?
検索や置換ダイアログなんかはコレだよね。 
331デフォルトの名無しさん:2008/01/15(火) 11:07:32
現在、
 HDD1: Linux
 HDD2: Windows
となっており、Linux上からWindowsのファイルシステムがマウントできます。

これを逆にWindows側からLinuxのファイルシステムをマウントするものを作りたいのですが、
HDD1のデータはWindowsからどうすれば読み出せますか?(データの解析は自前でやるのでとりあえず生バイト列が読めればよいです。)
管理ツールの「コンピューターの管理」からは一台目のHDDのパーティションが見えるので、
何かそういうAPIが用意されていると思うのですが、見つかりません・・・
332デフォルトの名無しさん:2008/01/15(火) 11:09:17
バイト列が読めればいいならCreateFileに"\\.\ドライブレター:"を渡せばいい
333デフォルトの名無しさん:2008/01/15(火) 11:15:31
>>332
ありがとうございます。
しかしLinuxのパーティションはWindowsの管理下にないので、ドライブ文字が割り当てられていません。

具体的には、このようになっています。
ttp://up2.viploader.net/pic/src/viploader560041.jpg
(ディスク1の後ろ3つもLinuxパーティションですが、これは気にしないでください。あとVistaっぽいのはスキンだけで、OSはXPです)
334デフォルトの名無しさん:2008/01/15(火) 11:17:11
じゃあ↓
"\\.\PHYSICALDRIVE序数"

序数は最初のドライブが0、次が1
335デフォルトの名無しさん:2008/01/15(火) 11:20:16
>>334
即レスありがとうございます。CreateFileでできたんですね。
336デフォルトの名無しさん:2008/01/15(火) 11:24:30
CreateFileはオープンするものなら何でもありだなw
337デフォルトの名無しさん:2008/01/15(火) 11:41:35
とあるソースコードに
// this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used
::DefWindowProc(NULL, 0, 0, 0L);

と書いてあるのですが。コメントにしても動きます。何の役目をしているのでしょうか?
338デフォルトの名無しさん:2008/01/15(火) 11:42:40
>>337
It resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used.
339デフォルトの名無しさん:2008/01/15(火) 11:49:31
::DefWindowProc(NULL, 0, 0, 0L);とUnicodeに何の関係があるのかなと思うわけで。
340デフォルトの名無しさん:2008/01/15(火) 12:06:43
たぶん、うに牛のウィンドウプロシージャの位置をあれなんだと思う。
341デフォルトの名無しさん:2008/01/15(火) 12:20:45
win95で動かしてみれば?
342302:2008/01/15(火) 13:25:28
>>329
ダイアログの位置をメインアプリの中央にするのは、コールバック内で
オーナーの位置から計算して移動させること出来ました。

MFCみたいにモーダルのメッセージボックスが出てる時、親アプリを
クリックしたら警告音を鳴らしたり、アプリ全体を手前に持ってきたり
する方法が分かりません。

親アプリには一切メッセージが飛んできませんし、ダイアログにも
(外側のクリックなので)何もメッセージが来ないようです。

何かヒントください。よろしくお願いします。
343デフォルトの名無しさん:2008/01/15(火) 13:53:37
これもとの質問者は一人なの?
メッセージボックス風のモーダルダイアログ作れば簡単じゃないの?
344デフォルトの名無しさん:2008/01/15(火) 13:56:02
つーか変なスレッドから呼んでるんじゃないの
345デフォルトの名無しさん:2008/01/15(火) 13:57:21
亀レスをまとめてみる

>>246
XP x64 ではFLS使用可能
XP x86 ではSP3でも非対応

>>277
プロパティシートというか、そもそもタブコントロール自体が
「特定のタブを無効にする」ということをサポートしていない
解決するにはサブクラス化し、クリック検知と無効テキスト
描画を自前でやればOK(以前やったことがある)

>>298-299
スレッドの戻り値はそもそも64bit値を返す必要性が無いからDWORDだろ
GetExitCodeThreadやGetExitCodeProcessで扱う値が32bit(WinMainの戻り値がint)なのと一緒
346302:2008/01/15(火) 14:04:30
>>343
多分もとの質問者はおれかと…。

自前で作ったモーダルのダイアログボックスでも、親アプリを
クリックしたら警告音を鳴らしたり、アプリ全体を手前に持って
きたりは、一筋縄ではいかなそうです。

そもそもイベントが何も発生しないので…。親アプリと同じ領域の
イベントだけ取るための不可視のウインドウでも作って、そこで
監視するのかな…? あんまりスマートじゃないですね。

>>344
メッセージボックスは通常のメッセージループの中から呼んでます。
347デフォルトの名無しさん:2008/01/15(火) 14:10:52
まだよくわからない。
DialogBox() APIは使わないという条件?
348デフォルトの名無しさん:2008/01/15(火) 14:19:14
オーナーをきっちり設定して窓作っていれば、特別なことをしなくてもその動作になるよ。
349デフォルトの名無しさん:2008/01/15(火) 14:29:38
>>341
家ではNTしか使ったことないので持ってないんです。
350デフォルトの名無しさん:2008/01/15(火) 15:21:52
NTしか使った事の無い人間がプログラマになる時代になったのか

ある意味羨ましいな
9xなんて不正なハンドルをDestroyするだけで青画面だったからなw
351デフォルトの名無しさん:2008/01/15(火) 15:31:01
>>345
> スレッドの戻り値はそもそも64bit値を返す必要性が無いからDWORDだろ
CreateRemoteThreadでこんな事やあんな事をしたい時にポインタ型と同じサイズでないと困る事がある

ま、こんなウイルスの温床になってるAPIなんて64bit版で廃止してもいいと思うが
352302:2008/01/15(火) 15:54:25
>>347
DialogBox() API を使っても同じ症状です。

>>348
うーん、そうですか。そうなるとアプリ側のメインウインドウに
何かありそうですね。単純なプログラム作って差を見てみます。

ありがとうございました。
353デフォルトの名無しさん:2008/01/15(火) 15:59:49
これ以上は再現可能なコードを提示してもらわないとわからんな。
354デフォルトの名無しさん:2008/01/15(火) 16:57:38
CreateCompatibleDCで作るとサイズ1*1のモノクロで
CreateCompatibleBitmapで使いもしないビットマップ作って
SelectObjectで割り当てて使い物になる裏画面になる。

どうしてこんな面倒なことにしたの?
355デフォルトの名無しさん:2008/01/15(火) 16:59:16
ビットマップ割り当てて描画するだけがDCじゃない


時代もあった
356デフォルトの名無しさん:2008/01/15(火) 17:02:51
>>354
大人の事情です。(俺も分からんw)
357デフォルトの名無しさん:2008/01/15(火) 17:04:51
おい!鮎!どうせ俺に釣られて網で焼かれるんだ!はじめから、塩味でいろ!
358デフォルトの名無しさん:2008/01/15(火) 17:07:03
裏画面が同じサイズとは限らないんじゃね?
359デフォルトの名無しさん:2008/01/15(火) 17:12:14
>>354
DCが使途不明だから。
360デフォルトの名無しさん:2008/01/15(火) 17:20:09
変数の宣言だけじゃ初期値が代入されないようなものだと思っとけ。
361デフォルトの名無しさん:2008/01/15(火) 17:23:00
そのビットマップって使ってないことなくなくね?
362デフォルトの名無しさん:2008/01/15(火) 17:24:41
なくが一個多くなくね?
363デフォルトの名無しさん:2008/01/15(火) 17:31:11
>>361
捨てても動いたような気が
364デフォルトの名無しさん:2008/01/15(火) 18:04:03
Select中のビットマップは捨てれないかと
たぶん削除失敗でリソースリーク
365デフォルトの名無しさん:2008/01/15(火) 18:20:59
Win32の半分は不条理で出来ています。
366デフォルトの名無しさん:2008/01/15(火) 18:26:05
StockObject扱いだからリークにならんよ
367デフォルトの名無しさん:2008/01/15(火) 18:47:39
Do not delete a drawing object (pen or brush) while it is still selected into a device context.
368デフォルトの名無しさん:2008/01/15(火) 19:16:46
それが装置文脈の中にまだ選択される間に、図画オブジェクト(ペンあるいはブラシ)をデリートしないでください。

装置文脈って何?
369デフォルトの名無しさん:2008/01/15(火) 19:17:28
デバイスコンテキスト
370デフォルトの名無しさん:2008/01/15(火) 19:48:41
リストボックスをいくつかの行に分けて表示したいんだけんども、どうやればよかったでしょうかね
忘れちまってorz
case WM_CREATE:
hList = CreateWindow(TEXT("listbox"), NULL, WS_CHILD | WS_VISIBLE | (LBS_STANDARD ^ LBS_SORT),
0, 0, 0, 0, hwnd, (HMENU)ID_LIST, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
return 0;

こういう感じでリストボックスは作ってるんだけんども
371デフォルトの名無しさん:2008/01/15(火) 20:30:15
高さが足りない
有勝 卓
372デフォルトの名無しさん:2008/01/15(火) 21:49:57
画面に表示する内容を変更
InvalidateRect(hWnd,NULL,TRUE);
重い処理

って書くと重い処理が終わってからしか画面が書き換えられないんだけど、
InvalidateRectの直後(重い処理の前)に画面書き換えるようにできない?
373デフォルトの名無しさん:2008/01/15(火) 21:51:26
>>372
UpdateWindow で出来たはず。
374デフォルトの名無しさん:2008/01/15(火) 22:07:15
>>373
ありがとう。かなり助かった
375デフォルトの名無しさん:2008/01/15(火) 22:56:57
for(;;)
{
 HPEN pen = CreatePen(PS_SOLID, 1, RGB(255, 255, 255)));
 略
 DeleteObject(pen)
}

てなかんじでぐるぐるまわし続けると止まりますか?
376デフォルトの名無しさん:2008/01/15(火) 23:04:10
無限ループ
377デフォルトの名無しさん:2008/01/15(火) 23:06:10
>>375
ちゃんと解放してるから問題はないけど、
ループ内で何度も同じペンを作るのは無駄なんじゃないかと。
378デフォルトの名無しさん:2008/01/15(火) 23:08:59
実体がいつあぼーんされるか
379デフォルトの名無しさん:2008/01/15(火) 23:14:43
PenFactory
380デフォルトの名無しさん:2008/01/15(火) 23:39:07
そのペンだったらストックオブジェクトWHITE_PENで事足りる気がする。
381デフォルトの名無しさん:2008/01/16(水) 00:41:07
プロセスの起動時ってntdll.dllが読まれて、次にkernel32.dllが読まれて…っていきますよね
途中でDLLが無かったりするとエラー出して起動しなかったりもします

このdllをロードするって作業はnotepad.exeとか個別のバイナリに実装されてるのではないと思っているのですが、
やっているのはカーネルなんでしょうか?
カーネルがこういう処理をして、よきにはからったところで
WinMainCRTStartupとかをコールしてるのかなぁとおもっているのですが、間違ってますでしょうか

382デフォルトの名無しさん:2008/01/16(水) 00:44:32
Advanced Windowsとか読めばいいんじゃないかな
383デフォルトの名無しさん:2008/01/16(水) 00:46:34
それであっている。
384デフォルトの名無しさん:2008/01/16(水) 00:52:14
遅延ロードを有効にしてる場合はexeの側で一部の作業をやってることもあるけどな
385デフォルトの名無しさん:2008/01/16(水) 00:56:51
即レスありがとう。そういえば遅延ロードなんかはいかにもexe実装っぽいですね
どうもです
386デフォルトの名無しさん:2008/01/16(水) 05:56:32
LoadModuleの立場は・・・
387デフォルトの名無しさん:2008/01/16(水) 10:29:25
ドライブタイプを判定する「GetDriveType()」というAPIがありますが、
バッファローのリムーバブルハードディスク(USB接続)「HD-PSGU2シリーズ」
をつないで、そのドライブに対してGetDriveType()を呼び出すと、
「DRIVE_FIXED」が帰ります。
普通のUSBメモリなどでは「DRIVE_REMOVABLE」が帰ります。

これは仕様なのでしょうか?
バッファロー以外のリムーバブルハードディスクを持っていないので
他のメーカーでどのような値が帰るのかはわかりません。

もし、何かご存知の方がいましたら教えてください。
388デフォルトの名無しさん:2008/01/16(水) 10:31:47
リムーバブルってのはメディアがリムーバブル
389デフォルトの名無しさん:2008/01/16(水) 11:36:31
>>388
そうなんですか。
では、普通の内臓ハードディスクとリムーバブルハードディスクを判別する
方法というのはあるのでしょうか?

今、自作のアプリにリムーバブル動作モードを追加してるのですが、
この場合には異なる動作をさせたいので、自分が実行されているドライブの
種類を判別したいのです。
390デフォルトの名無しさん:2008/01/16(水) 11:41:02
くだ質ですが教えてください。
WM_PAINTでBitBltでピクチャーボックスに描画データ転送とそのままでは
他の領域が更新されないので空のBeginPaint/EndPaintを実行しています。

case WM_PAINT:
  hdc = BeginPaint(hPicBoxImage, &ps);
  BitBlt(hdc, 0, 0, 160, 120, hDrawDC, 0, 0, SRCCOPY);
  EndPaint(hPicBoxImage, &ps);
  hdc = BeginPaint(hwnd, &ps);
  EndPaint(hwnd, &ps);
  return (0);

なんとなくうまいやり方でないような気がするのですが、他の手段はありますか?
ダイアログベースのアプリでピクチャーボックスの位置をうまくとれなくて
こんなことしているんですが…
391デフォルトの名無しさん:2008/01/16(水) 11:52:14
>389
「ふつーの内蔵ハードディスク」ってのはどういう代物なんだ?
たとえば、最近のSATAコントローラはデバイスのホットプラグに
結構対応していたりして、ディスクがしかるべきエンクロージャに
入っていれば、取り外せるわけだが

>390
WM_PAINTで処理したいなら、そのピクチャボックスをサブクラス化すれば。
ダイアログ相対のピクチャボックスの位置は、
GetClientRect(hPicBox) -> ClientToScreen(hPicBox) -> ScreenToClient( hDlg)
あたりを呼べばとれるけど。
392デフォルトの名無しさん:2008/01/16(水) 11:58:35
ピクチャボックスにSTM_SETIMAGE送ればいいだけじゃないのか?
393デフォルトの名無しさん:2008/01/16(水) 12:01:24
>内臓ハードディスク
そんなの出たら暗記科目の試験はバッチリだな
394デフォルトの名無しさん:2008/01/16(水) 12:23:07
>>389
とりあえず、DeviceIoControl()でIOCTL_STORAGE_GET_MEDIA_TYPESでいけないかなあ。
395デフォルトの名無しさん:2008/01/16(水) 12:25:33
むしろIOCTL_STORAGE_GET_HOTPLUG_INFO
396デフォルトの名無しさん:2008/01/16(水) 12:27:42
>>391-392
ありがとうございます。
MapDialogRect/GetWindowRect/GetClientRectで悩んでたのが馬鹿みたいでした。
ClientToScreen/ScreenToClientって便利ですね。
397デフォルトの名無しさん:2008/01/16(水) 12:31:11
>>395
394だけど、それでいけるみたいですね。
DeviceHotplug がUSB接続のHDDは1になったわ。
398デフォルトの名無しさん:2008/01/16(水) 14:09:37
普通、HDDのプラッタは稼働中に簡単に出し入れできないかと。
ホットプラグで抜き差しするのはドライブそのものが居なくなる訳だし。
399デフォルトの名無しさん:2008/01/16(水) 19:51:57
プラッタが出入りするんじゃなくてヘッドが出入りするんだよ
400デフォルトの名無しさん:2008/01/16(水) 19:52:35
InsertMenuItem()でビットマップ型でサブメニューをもつものが作れないんですが、
これらは排他の制限があるんでしょうか?

MENUITEMINFOのfTypeにMFT_BITMAP。fMaskにMIIM_SUBMENUをつけるとビットマップが表示されず
変わりにビットマップサイズの巨大なアイコンの絵がでてきます。
MIIM_SUBMENUを取るとちゃんと表示されますが、ただのボタンになってしまいます。
401デフォルトの名無しさん:2008/01/16(水) 21:18:42
ウィンドウクラス登録時に指定したメニューを、消すことはできないんでしょうか?
SetClassLong(hwnd, GCL_MENUNAME, (LONG)NULL);
ではダメでした。
どうすればいいでしょう。
402デフォルトの名無しさん:2008/01/16(水) 21:20:50
ageてしまった。
すみません
403デフォルトの名無しさん:2008/01/16(水) 21:35:57
SetMenuで出来ることとは違うのか
404デフォルトの名無しさん:2008/01/16(水) 21:41:55
>>403
できました。
ありがとうございました。
405デフォルトの名無しさん:2008/01/16(水) 21:42:33
またageてしまったorz
406デフォルトの名無しさん:2008/01/16(水) 21:46:52
はじめまして。
ちょっと質問します。

あるソフトが使用しているwaveOutSetVolumeをフックして
別ソフトからボリュームをコントロールしたいんですが
どうすればいいんでしょう?

ものすごく大雑把な質問なんですが
何か取っ掛かりでも教えていただければ…
407デフォルトの名無しさん:2008/01/16(水) 21:50:37
>>406
「APIフック」でググる。
408デフォルトの名無しさん:2008/01/16(水) 21:56:06
kenji's
409デフォルトの名無しさん:2008/01/16(水) 22:03:09
教えてクンで悪いけど、
VC++6.0 でコンパイルが通る

BOOL is_Os_Vista(void)
{
}
の中を埋めてくれ。
410デフォルトの名無しさん:2008/01/16(水) 22:05:18
BOOL is_Os_Vista(void)
{
return MessageBox(0, TEXT("OsはVistaですか?"), 0, MB_YESNO) == IDYES;
}
411デフォルトの名無しさん:2008/01/16(水) 22:07:02
return MessageBox(NULL, "OS は Vista ですか?", "is_Os_Vista", MB_YESNO)==ID_YES;
412デフォルトの名無しさん:2008/01/16(水) 22:07:19
>>409
return MessageBox(NULL,"これはびすたですか?","はろー",MB_YESNO)==IDOK;
413デフォルトの名無しさん:2008/01/16(水) 22:24:30
BOOL is_Os_Vista(void)
{
  return GetTickCount() % 2;
}
414デフォルトの名無しさん:2008/01/16(水) 22:24:50
マジレスするとGetVersionEx。
http://msdn2.microsoft.com/en-us/library/ms724451.aspx
注意書きにあるように、「Vistaかどうか」ではなく、
「Vista以上かどうか」という比べ方にすること。
415デフォルトの名無しさん:2008/01/16(水) 22:26:18
upper camel に _ か・・・
416デフォルトの名無しさん:2008/01/16(水) 22:47:39
アプリを切り替えたり、メニューからダイアログボックスを呼び出したりすると、メインウィンドウはフォーカスを失いますよね?
このとき、新しくフォーカスを得る(というのかな?アクティブになる)ウィンドウが、自ウィンドウの子ウィンドウ(ダイアログなど)であることを知ることはできますか?

自分が今やってるのは
WM_KILLFOCUSで
if(GetParent((HWND)wParam) == hwnd)
としているんですが、なぜかうまく行きません。
417デフォルトの名無しさん:2008/01/16(水) 22:50:10
WM_ACTIVATE の lParam
418デフォルトの名無しさん:2008/01/16(水) 23:11:54
>>417さん。
ありがとうございました。
419デフォルトの名無しさん:2008/01/16(水) 23:19:09
>>414
しかし注意書きを真に受けて「XP以上かどうか」で判定していたアプリが
どれくらいVistaでまともに動いたか考えると
「XPかどうか」で判定したくなる気持ちもわからんではない
420デフォルトの名無しさん:2008/01/16(水) 23:58:12
>>419
それはまた別の問題だと思うが。
そのアプリは「XPかどうか」で判定していたとしても結局Vistaではまともに動かんのだし。
421デフォルトの名無しさん:2008/01/17(木) 00:06:28
BF2142というFPSゲームがありますが、適当にプレイして
アプリケーションを終了させると、C2D3GHz、メモリ2Gといった
環境でも、デスクトップや他のウィンドウが使えるようになる
復帰までの時間が十数秒ぐらい掛かり、異常に待たされます。
TerminateProcessで強制終了させても同じ様です。
メモリの消費量が多いアプリケーションですが、システムの
メモリの回収?にそんなに時間が掛かるものでしょうか?
一体何が起きてるんでしょう。
早く復帰させる方法がありましたら教えてください。

PunkBusterという不正行為防止のサービスが動いてる事と
関係があるのでしょうか。一緒に殺せばいいかな。
422デフォルトの名無しさん:2008/01/17(木) 01:05:37
知るかスレ違いじゃボケ
ディスクに退避してたキャッシュ読んでんだろハゲ
423デフォルトの名無しさん:2008/01/17(木) 01:12:50
どーせページアウトされてた連中を呼び戻すのに時間がかかってるだけでそ。
板違いだから言うけど、ページングでも切れば。副作用は関知しない
424デフォルトの名無しさん:2008/01/17(木) 01:16:02
>>421
限界までメモリつんでから出直して来い
425デフォルトの名無しさん:2008/01/17(木) 01:29:44
>>422
ハゲはお前だろハゲ

426デフォルトの名無しさん:2008/01/17(木) 01:31:48
>>425
なんで分かった?
427デフォルトの名無しさん:2008/01/17(木) 01:37:03
BOOL is_Hage(void)
{
 ReleaseHair();
 return NumOfHair();
}
428デフォルトの名無しさん:2008/01/17(木) 03:07:08
× return NumOfHair();
○ return NumOfHair() < YAKUYO_SUCCESS;
ぐらいじゃないか?
429デフォルトの名無しさん:2008/01/17(木) 07:08:50
>>420
動く保証がない(というか実際動かない)からXP以外での動作を拒否したくなるという
ことでしょ
430デフォルトの名無しさん:2008/01/17(木) 09:13:00
OSのバージョンチェックなんて互換モードで誤魔化せるからあまり意味無いだろ
431デフォルトの名無しさん:2008/01/17(木) 09:13:31
動く保証がない vs 全く動かない か。
微妙なトレードオフだな。
432デフォルトの名無しさん:2008/01/17(木) 19:11:26
既存のウィンドウを、メインウィンドウをオーナーとして所有させたいんだけど方法はない?
クグったらSetOwnerなんて関数があるらしいけど使い方もサンプルも見つからない…。
SetWindowLongでオーナーウィンドウのハンドルを設定したらできるかもしれないって書いてあるページがあったからやってみたけど効果なし。
433409:2008/01/17(木) 19:29:19
分かっている人には空ですぐ書けると思ったけど、心当たりの人は少ないんですねえ。
Vista 使っていると、これまでと環境が違うことが多く、皆も助かる話かなと
思ったけど、ダメですか。

私が今どうしようかと思っているのは、Program Files フォルダの中には一時ファイル
を生成できない制限です。起動 exe は user フォルダにあります。起動 exe も
Program Files へ移動すると動くのかはまだやってません。
文字の扱いを(面倒ながら) unicode にしたら、移そうかなと考え中。

余談ながら、word98, excel97 を動かして見たら、固まって終わり。もっと利口
な処理になってるんかと思ってたけど、ヒドイ。インストールからダメにしとけ
ばいいのにネ。
434デフォルトの名無しさん:2008/01/17(木) 19:35:25
相手にされないのは、バージョンの取得なんて
基礎中の基礎にすぎない事柄だからということに気付け。

本当に一時ファイルなら%TEMP%にでもおけばいいだろう。

プログラムが終了しても残っていなければならないようなファイルだったら、
そんなものProgram Filesに置くなというのがMicrosoftの主張。
従わないプログラム多すぎだから、Vistaでこんな仕返しに出た。
435デフォルトの名無しさん:2008/01/17(木) 19:38:51
>>432
ttp://msdn2.microsoft.com/en-us/library/ms632599(VS.85).aspx
>Owned Windows
>After creating an owned window, an application cannot transfer ownership of the window to another window.
436デフォルトの名無しさん:2008/01/17(木) 20:58:03
vistaの文句言うプログラマの大半が単なる無知の馬鹿なのが笑える
中にはそうじゃない人もいるけどね
437デフォルトの名無しさん:2008/01/17(木) 21:02:30
>>435
最初は独立しているウィンドウでも所有させることはできない?
438デフォルトの名無しさん:2008/01/17(木) 22:26:25
>After creating an owned window
439デフォルトの名無しさん:2008/01/17(木) 22:30:14
>>438
そう書いてあるから聞いたんじゃね?
440デフォルトの名無しさん:2008/01/17(木) 22:33:40
とりあえず
SetWindowLong(hWnd,-8,hMainWnd);
でオーナーとなるウィンドウを指定して
EnableWindow(hMainWnd,0);
で目的の動作ができたので解決とします。
441デフォルトの名無しさん:2008/01/17(木) 22:43:02
マジックナンバーにしてる意味はあるのだろうか。
442デフォルトの名無しさん:2008/01/17(木) 22:48:19
ブビ厨だろ
443デフォルトの名無しさん:2008/01/17(木) 23:26:38
-8はGWL_HWNDPARENTだな。
ttp://msdn2.microsoft.com/en-us/library/ms633591.aspx
>You must not call SetWindowLong with the GWL_HWNDPARENT index to change the parent of a child window.
>Instead, use the SetParent function.
444デフォルトの名無しさん:2008/01/17(木) 23:35:36
質問です。
[詳細] ボタンを押すとダイアログが広がってコントロール群とコントロール群の間に複数の追加コントロール群が現れるようなダイアログはどう作ればよいのでしょう?
イメージとしては、詳細ボタンが2つ並んでいて、上の詳細ボタンを押すと
 [詳細 >>]
 [詳細 >>]

 [詳細 <<]
  [ ] チェック項目 [ EditCtrl ]
  [ ] チェック項目 [ EditCtrl ]
 [詳細 >>]
のような感じで展開されます。
気になっている/考えているのは次のようなことです。

1. (プロパティシートの各ページがダイアログテンプレートを埋め込んでいるのと同じような仕組みで)
  ダイアログの一部にコントロール群を定義したテンプレートを埋め込む方法があるか?
2. (コントロール群が 1. で定義したものかどうかに関わらず)コントロール群を階層化して一括管理(移動や無効化、非表示など)できる方法があるか?
3. (1.2.が無理の場合)複数のコントロール群の各々に一つ一つ対応する ShowWindow(), EnableWindow(), MoveWindow() を書く以外の方法があるか?

です。
お願いします。
445デフォルトの名無しさん:2008/01/17(木) 23:43:38
1.2.3. ともに解決策に心当たり無しだが、もし MoveWindow() を複数回一度に呼び出すようなことを考えているなら BeginDeferWindowPos(), DeferWindowPos(), EndDeferWindowPos() を使った方がよいと思う。
あと、ボタンは [詳細 >>] <-> [詳細 <<] より [詳細 >>] <-> [<< 詳細] のが普通かな?
446デフォルトの名無しさん:2008/01/18(金) 03:54:49
>>440みたいな奴ってWindowsのバージョンが上がって自作ソフトが動かなくなったらOSのせいにしてキレるんだろうなぁ・・・
Vista叩いてる奴も>>433みたいな馬鹿が多いし・・・
447デフォルトの名無しさん:2008/01/18(金) 04:08:21
また常時admin厨が.iniファイル書けずに文句言ってるのか
448デフォルトの名無しさん:2008/01/18(金) 05:57:34
>>446
もう10年もVistaやってるようなモノ言いだな
449デフォルトの名無しさん:2008/01/18(金) 06:28:43
日本語でおk
450デフォルトの名無しさん:2008/01/18(金) 06:38:29
Delphi使用
アプリ起動時にIEをSW_HIDEでCreateProcessし、あるEventをキーに表示。
を行いたいのですがIEだとSetForegroundWindowが正常終了にも拘らず、表示されません。
Close処理SendMessage(handle,WM_CLOSE,0,0)もIEの場合正常に動作しません。
NOTEPADだと正常に動作(非表示Process生成→表示)しているので、指定ハンドルもあってると思うのですが。

ヒントでも良いのでお願いします。
451デフォルトの名無しさん:2008/01/18(金) 06:57:43
>SetForegroundWindowが正常終了にも拘らず、表示されません。

この時点でターゲットウィンドウが間違ってる以外の答えは無いだろ
452440:2008/01/18(金) 07:26:05
>>446
親ウィンドウを変更する時はSetWindowLong使わずにSetParent使えって書いてあるけどオーナーの変更もすべきでないか?
453450:2008/01/18(金) 08:14:07
>>451
EnumWindowsProc見直します
ありがとうございました
454デフォルトの名無しさん:2008/01/18(金) 08:34:43
>>444
1.はダイアログ内に子ダイアログを作れれば出来そうかも?
455433-409:2008/01/18(金) 09:14:57
↓でいいみたいだな。
たった4行書けば済むものを、あれこれたくさん意見を頂いたもんだ。

BOOL IsWindowsVistaOrLater(void)
{
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx (&osvi);
return (osvi.dwMajorVersion >= 6);
}
456デフォルトの名無しさん:2008/01/18(金) 10:59:06
まだやってたんかい
457デフォルトの名無しさん:2008/01/18(金) 11:06:54
>>452
お前が日本語と英語を理解していない事は分かった
458デフォルトの名無しさん:2008/01/18(金) 11:12:59
>>409,433,455
横柄な奴だな
459デフォルトの名無しさん:2008/01/18(金) 12:41:46
それがMe脳クオリティ
460デフォルトの名無しさん:2008/01/18(金) 12:52:20
>>455は詐称で答え書いてやってるツンデレと見たが
461デフォルトの名無しさん:2008/01/18(金) 13:01:36
元の阿呆の質問はis_Os_VistaであってIsWindowsVistaOrLaterではないしな
462デフォルトの名無しさん:2008/01/18(金) 13:04:30
本人は>>414のレスもらって無言で消えて、あとは全部釣りだろ
463デフォルトの名無しさん:2008/01/18(金) 14:01:47
私は例えばThemeが使いたかったらOSチェックじゃなくてuxtheme.dllがロードできるかで判定してるし、
DWMが使いたかったらVista以降かじゃなくてdwmapi.dllのロードで判定してる。
何のためにチェックするかによっても多少違うんじゃないかと。
464デフォルトの名無しさん:2008/01/18(金) 17:53:20
俺はkernel32.dllのアドレス
465デフォルトの名無しさん:2008/01/18(金) 18:38:20
俺はsystem32への書き込みが成功するかどうかでXPだと判断し、
Program Filesへの書き込みが仮想化されるかどうかでVistaだと・・・
466デフォルトの名無しさん:2008/01/18(金) 18:41:04
アプリのダイアログを国際化しようとおもい、
1、リソースのみのDLLを作成。
2、LoadLibrary->FindResource->LoadResource->LockResourceして
3、それをDialogBoxIndirectに渡したんですが、
なぜかEXEに埋め込みのリソースが使われてしまいます。

何がおかしいのでしょうか?お願いします。
467デフォルトの名無しさん:2008/01/18(金) 19:05:30
C#のstringに相当するものはないのでしょうか?
468デフォルトの名無しさん:2008/01/18(金) 19:06:44
>>466
リソースに埋め込んでるのにDialogBox()を使わない理由って何?
469デフォルトの名無しさん:2008/01/18(金) 19:30:47
>>467
プログラミング言語次第。
470デフォルトの名無しさん:2008/01/18(金) 20:00:49
C++だけでも少なくともstd::string CString AnsiStringくらいはすぐに出てくる
471デフォルトの名無しさん:2008/01/18(金) 20:12:30
>>467
C#でP/Invokeやってるのかな?
「文字列のマーシャリング」でぐぐったら
472デフォルトの名無しさん:2008/01/18(金) 20:16:31
つうか質問の意図が不明すぎ
473デフォルトの名無しさん:2008/01/18(金) 20:22:48
LPCWSTR
474デフォルトの名無しさん:2008/01/18(金) 21:24:14
「ブリーフケース」を作ろうとしてレジストリで .bfc という拡張子のところの
ShellNewのCommandが

%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\syncui.dll,Briefcase_Create %2!d! %1

であることから、次のようなコマンド

C:\WINDOWS\system32\rundll32.exe C:\WINDOWS\system32\syncui.dll,Briefcase_Create "D:\Tmp" ブリーフケース"

をコマンドプロンプトから入れてみましたが、メッセージなどは出ませんでしたが、
ブリーフケースは作成されませんでした。このコマンドラインをどのように修正すれ
ばいいでしょう?よろしくお願いします。
475デフォルトの名無しさん:2008/01/18(金) 22:14:34
全然Win32APIの話じゃないな
476デフォルトの名無しさん:2008/01/18(金) 23:01:06
>>475
そうですね、すみません。どこに行って訊くべきでしょう
誘導のほどお願いします。
477デフォルトの名無しさん:2008/01/18(金) 23:17:56
Windows板で聞けばいいんじゃね
478デフォルトの名無しさん:2008/01/18(金) 23:19:57
>>477
わかりました。ありがとうございました。
479デフォルトの名無しさん:2008/01/18(金) 23:49:48
ちょっと聞かしてください。
win32apiをクラス化しようとしたんですが
後々の拡張性を考えるとどういう風な設計
がベストなのかわかりません。
C++自体未熟なのもありますのでその点に
関してもまだまだなのですが、みなさんは
どういう風に組み立てているのでしょう
C言語でサブクラス化を駆使して作ってらっしゃる
方もいらっしゃるでしょうが、C++で組んでる方も
いると思うわけです。
みなさんは、どこか参考になるサイトも見て組んでる
んでしょうか、それとも自らの経験値を積むのみなのでしょうか
愚鈍な質問ですいませんがご教示お願いします。

ちなみにfastcopyのソースを見てもクラクラするだけでした
480デフォルトの名無しさん:2008/01/18(金) 23:54:02
ReadDirectoryChangesWの使い方解説してるサイトない?
ググってみたが資料少ない。

↓ここのはなんかうまく動かないし・・・
http://nienie.com/~masapico/api_ReadDirectoryChangesW.html
481デフォルトの名無しさん:2008/01/18(金) 23:54:13
一体何の話なんだ。
何で唐突にサブクラス化って言葉が出てくるのか理解できない
482デフォルトの名無しさん:2008/01/19(土) 00:07:39
483デフォルトの名無しさん:2008/01/19(土) 00:13:09
>>479
MFCとかwxWidgetsとか既存のツールキットを調べてみるといいんじゃないか
ソース見なくてもドキュメント読んでれば設計なんかは読み取れるかと
484デフォルトの名無しさん:2008/01/19(土) 00:13:39
>482

MSDNにサンプルあったんすね。英語ですけど・・・
がんばってソース追ってみます。ありがとうございます。
485デフォルトの名無しさん:2008/01/19(土) 00:15:01
>>446
-8を直書きする馬鹿を擁護する気は全くないが
バイナリ互換性がなくなるからマクロの定数値が変わることは実際にはあり得ない
486デフォルトの名無しさん:2008/01/19(土) 00:15:33
>>463
俺はVirtualAllocExのエントリが存在するかどうかで使えるかどうか判断してる
そしたらなぜかWin98で動かないんだぜ
487455-409:2008/01/19(土) 00:39:12
>>458-462
横柄にまた出てきましたヨ。逃げも隠れもしませんヨ。

IsWindowsVistaOrLater() にしたのは、この語でぐぐると例が
たくさん出るから。Is_Os_Vista() じゃダメって分かったから
だヨン。
488デフォルトの名無しさん:2008/01/19(土) 00:41:39
消えろ
489デフォルトの名無しさん:2008/01/19(土) 00:43:31
逃げも隠れもしてくれ。誰も止めん。
むしろ隠れてくれたほうがへんなレスがつかなくて結構だ。
490デフォルトの名無しさん:2008/01/19(土) 00:44:49
TerminateProcess(>>487, -1);
491デフォルトの名無しさん:2008/01/19(土) 02:45:15
>>474
デスクトップにできてるだろ
492デフォルトの名無しさん:2008/01/19(土) 04:10:48
vista の取得・・・c:\windows\media\tada.wav のファイルハッシュを比較すればとれそうじゃね?
493デフォルトの名無しさん:2008/01/19(土) 06:18:01
サービスパックでハッシュが変わってたらどうするんだよ
494デフォルトの名無しさん:2008/01/19(土) 09:59:35
GDI+のEffectはVistaから使えるの?
495デフォルトの名無しさん:2008/01/19(土) 22:43:56
Visual Studio Std 2005 で Win32API を勉強中です。

ウィンドウを表示して、その中にMoveTo や LineTo で線を書くことはできました。
そこで、その書いた線上にマウスを持って行くと
マウスポインタが変更できるようにしたいのですが、
どんな感じに作っていけばいいのでしょうか?

マウスの位置を調べる関数があるのですが、
マウスが動くたびにその関数を呼び出して、
その値を、先ほど書いた2点間の線上の一次方程式に入れて判断していくとか、
そんな感じになるのでしょうか?
それとも、もっと簡単な方法とかあるのでしょうか。

教えてください。
496デフォルトの名無しさん:2008/01/19(土) 23:00:05
GetPixelで調べるとか
497デフォルトの名無しさん:2008/01/20(日) 00:05:27
498デフォルトの名無しさん:2008/01/20(日) 00:35:49
OSの電源設定の名前(コントロールパネルの電源オプションから設定できるもの)を取得できる
APIはありませんか?

EnumPwrSchemes()
では全ての電源設定名が取れてしまうっぽいので、
できれば現在設定されているものの名前が取得できたらいいのですが。。
499デフォルトの名無しさん:2008/01/20(日) 01:55:37
ACPI
500デフォルトの名無しさん:2008/01/20(日) 02:19:35
>>495
WM_SETCURSORの中でカーソル位置を取得してSetCursor()で変更かな?
線の色が決まってるなら>>496のようにGetPixel()で色を取得して判断とか。
501デフォルトの名無しさん:2008/01/20(日) 05:09:28
Vistaの「ファイルを開く」コモンダイアログボックスで
ファイル名を入力するコンボボックスのハンドルを取りたいのですが

GetDlgItem(hDlg, edt1)

では取得できませんでした
(XPでは取得できます そもそもedt1はエディットボックスの名前だから 取れなくて当然なのかも)

edt1から別の名前に変わったのかと...

ご存知の方いますか?
502デフォルトの名無しさん:2008/01/20(日) 06:48:39
>>501
Spy++で確認するのだ。
503デフォルトの名無しさん:2008/01/20(日) 10:19:19
>>498
GetActivePwrScheme()で取得したIDと
EnumPwrSchemes()の第一引数とを比較して一致したときの第三引数。
名前以外の設定値ならIDとReadPwrScheme()で取得できるようだけど
POWER_POLICYに名前を格納したメンバが無いしな。

あと、Vista/WindowsServer2008以降では別の関数群が推奨されてるよ
504503:2008/01/20(日) 11:04:43
分ると思うけど、ちょっと書き方悪かったので訂正。

(誤) >EnumPwrSchemes()の第一引数とを比較して一致したときの第三引数。
(正) EnumPwrSchemes()のコールバック関数の第一引数とを比較して一致したときの第三引数。
505デフォルトの名無しさん:2008/01/20(日) 11:53:08
>>501
ヒントは整合性レベルだ。
506デフォルトの名無しさん:2008/01/20(日) 14:50:46
Win32APIが次のWindowsで.NETに置き換わるので
今からWin32APIプログラムなんてバカのやること
なんて書いてあったんですが本当でつか?
507デフォルトの名無しさん:2008/01/20(日) 14:53:51
MSも一応そのつもりだったが、結局諦めた。
で、書いた奴が馬鹿を見ただけ。
508デフォルトの名無しさん:2008/01/20(日) 14:55:48
.NETの方が高速なら.NETでもいいけどな。
509デフォルトの名無しさん:2008/01/20(日) 15:00:31
>>506
ここでも同じようなことを言ってるのがいるな。真相はこれのはず。
http://pc11.2ch.net/test/read.cgi/tech/1200033660/331

WPF/WCF/WFがそれ。WFSはぽしゃった。
COMベースのAPIって日本語訳されてないのが多いよな。
510デフォルトの名無しさん:2008/01/20(日) 15:01:18
その.NETにおいてですが、現在ファイルのプロパティを表示するために ShellExecuteEx 
を使っていました。そのとき、通常のファイルやフォルダの場合ではOKだったのですが、

たとえばブリーフケースのような特殊なフォルダの場合、Explorer ではそれ用の専用のタブ
も追加されて表示されていました。それと同じように表示するためには、構造体 ShellExecuteInfo 
のメンバをどのように指定すればよいでしょうか?現在しているものはこれらでした、

.cbSize = Runtime.InteropServices.Marshal.SizeOf(udtInfo)
.fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
.hWnd = Me.Handle
.lpVerb = "properties"
.lpFile = FilePath

この他に指定が必要な項目と値を知りたく思いました。ご指導のほど何卒よろしくお願いします!
511デフォルトの名無しさん:2008/01/20(日) 15:27:26
なんでwin32スレで.netの質問をする馬鹿がいるのかね
ドトネト厨は日本語が読めないのか?
512デフォルトの名無しさん:2008/01/20(日) 15:59:30
>>502>>505
d

Spy++でウィンドウクラス名調べて子ウィンドウ辿っていったら取れたよ
多分別の方法があるっぽいけど今回はコレで誤魔化す事にした
513デフォルトの名無しさん:2008/01/20(日) 17:11:37
winsockに関する質問はここでいいですか?
514デフォルトの名無しさん:2008/01/20(日) 17:11:58
int、LONG、DWORDなどの数値を、
LPCSTR、char配列などの文字列にするにはどうすればいいんでしょうか?
515デフォルトの名無しさん:2008/01/20(日) 17:13:44
sprintf
std::stringstream
516デフォルトの名無しさん:2008/01/20(日) 17:17:54
itoaとかさ
517デフォルトの名無しさん:2008/01/20(日) 17:20:30
このスレ的にはwsprintf
518デフォルトの名無しさん:2008/01/20(日) 17:23:14
TCHAR 使ってないからそれは避けといた。
519510:2008/01/20(日) 17:26:26
>>511
と言いますか、>>510はWin32APIの ShellExecuteEx() についての質問なのですが、
なんとかご指導を頂ければありがたいと思いました。

何卒よろしくお願いします!
520514:2008/01/20(日) 17:30:39
>>515
とりあえず、sprintfでできました。ありがとうございます。
<stdio.h>をインクルードしないとできなかったんですが、
普通これは入れるものですか?

521デフォルトの名無しさん:2008/01/20(日) 17:32:35
>>517
他にはwnsprintf,StringCbPrintfとかいくつかあるよな。

>>518
wsprintfA
522デフォルトの名無しさん:2008/01/20(日) 17:42:37
_TCHARに対応するbasic_stringのtstring作ってほしい(Microsoftが作るなら_tstringかな)

typedefするだけじゃんって言われればその通りなんだけどさ
523デフォルトの名無しさん:2008/01/20(日) 17:43:44
typedefするだけじゃん
524デフォルトの名無しさん:2008/01/20(日) 17:50:35
うるせーばか
525498:2008/01/20(日) 18:47:26
>>503,504
教えていただいた方法でできました。
レジストリを直に見に行くしかないのかとあきらめかけてたところで、助かりました。
ありがとうございました。

Vistaのほうも探してみます
526デフォルトの名無しさん:2008/01/20(日) 22:56:03
例えば
 //testclass.h
 class CTESTCLASS { public : int the_method( void ); };
 extern "C" __declspec( dllexport ) CTESTCLASS* CreateTestClass( void );
 //testclass.cpp
 #include "testclass.h"
 int CTESTCLASS::the_method( void ) { return 1; }
 CTESTCLASS* CreateTestClass( void ) { return new CTESTCLASS(); }
これで bcc 使って DLL 作成して、下のソースコンパイルしようとしても
 //dlltest.cpp
 #include "testclass.h"
 #include <windows.h>
 < 中略(LoadLib() と GetProcAddress()) >
 CTESTCLASS *TestClass = CreateTestClass();
 TestClass->the_method(); //エラー
実体無いから当然ながらメンバ関数呼ぶ時点でコンパイルエラーになるんです
DirectX8 だと LoadLibrary() で DLL 読んで Direct3DCreate8() で作成するだけで
IDirect3D8 のメンバ関数呼べてるんですけど DirectX の実装はどうなってるんだろう
これって DLL そのものの機能で解決できるでしょうか
メンバ関数全部 export してメンバに手動でバインドしてやるような方法しかないのかな
527デフォルトの名無しさん:2008/01/20(日) 23:07:41
クラス全体をエクスポートすることが出来たような
class __declspec(dllexport) CTESTCLASS
とか

DirectXのインタフェイスは全部抽象メンバだから元々呼ぶ実体は(派生クラスにしか)ない
528デフォルトの名無しさん:2008/01/20(日) 23:13:03
>>526
DLLを作る側と使う側で同一のコンパイラを使うなら、
CTESTCLASSに__declspec(dllexport)/__declspec(dllimport)を付ければいい。
クラスのメンバ関数や静的メンバが一括してDLLから公開される。

しかし、DirectXはそうせず、COMを使っている。
簡単に言ってしまえば、全部仮想関数。

このPDF立ち読みしてみろ。
ttp://www.ascii.co.jp/books/books/detail/4-7561-3066-6.shtml
529デフォルトの名無しさん:2008/01/20(日) 23:31:54
宣言に足すだけでクラスごとエクスポートできるんですね
COMも名前だけで実体はさっぱりだったんで、良い機会だし時間できた時に勉強してみます
>>527-528 ありがとう
530デフォルトの名無しさん:2008/01/20(日) 23:38:14
リアルタイムにメモリ使用量(物理とページファイル)を取得したいのですが
GlobalMemoryStatus以上に処理的にスマートな方法ってありますか?
531デフォルトの名無しさん:2008/01/20(日) 23:47:32
QuerySystemInformation

532デフォルトの名無しさん:2008/01/21(月) 00:34:32
ツリービューについて質問です。
キーボード操作からコンテキストメニューを出すために、
現在選択されているアイテムの座標を取得したいのですが、
使えそうなAPIを知っている方いませんか?
533デフォルトの名無しさん:2008/01/21(月) 00:37:00
何故ドキュメントを読まない?
534532:2008/01/21(月) 01:04:26
すいません、解決しました・・・
GetItemRectで大丈夫そうです、
お騒がせしてすいませんでした。
535デフォルトの名無しさん:2008/01/21(月) 23:02:07
>>533
暇な奴だな。もう少し有意義に時間使ったらどうだ?
536デフォルトの名無しさん:2008/01/21(月) 23:07:09
そんなレスに時間を使う暇な535
537デフォルトの名無しさん:2008/01/22(火) 05:45:24
「Delphiで無料でプログラミングしてみるお」からきました。
MsgrObject.Logon('ID','PASS',IMsgrService);
上のようにやるとエラーがでて、先にConnectを呼べとでます。たぶん三番目の引数が間違っているのかもしれないですが、
まったくお手上げでよくわからないので、ご教授してくださる方いましたら、おねがい致しますm(_ _)m
538デフォルトの名無しさん:2008/01/22(火) 07:05:11
まずはスレタイ見るところから始めてみては。
539デフォルトの名無しさん:2008/01/22(火) 10:49:13
ウィンエイピーアイのLPSTRとかの型を全部教えてください
540デフォルトの名無しさん:2008/01/22(火) 11:01:06
型なんてコンパイラ用の情報なんだからリソースが許す限り作れる

つまり「全部」という問いがナンセンス
541デフォルトの名無しさん:2008/01/22(火) 11:12:26
ゼンブゼンブ
542デフォルトの名無しさん:2008/01/22(火) 11:26:34
ExitWindowsEXについて引数にEWX_SHUTDOWNとEWX_POWEROFFが
ありますが、通常WinXPの終了オプションで「電源を切る」と同じ動作は
EWX_POWEROFFでオッケー?
543デフォルトの名無しさん:2008/01/22(火) 12:30:00
544デフォルトの名無しさん:2008/01/22(火) 12:47:56
Windowsの標準メニューの描画が止まるような障害ってありますか?
原因と対策、または、原因調査方法があれば教えて頂けないでしょうか?
545デフォルトの名無しさん:2008/01/22(火) 12:58:35
WM_DRAWITEMとかWM_MEASUREITEM握りつぶしてたりとか
546デフォルトの名無しさん:2008/01/22(火) 14:36:19
>>539
試しにWindows SDK V6.1のヘッダファイルをtypedefで検索してみたら4万件弱あったが
547デフォルトの名無しさん:2008/01/22(火) 14:47:36
主だったものはここに載っている。
http://msdn2.microsoft.com/en-us/library/aa383751(VS.85).aspx

これ以外にも、構造体、インタフェースやそれらへのポインタ、
コールバック関数へのポインタで、WinAPIの型なんて無限に存在するがな。
548デフォルトの名無しさん:2008/01/22(火) 15:31:38
DECLARE_HANDLE(hoge)
549デフォルトの名無しさん:2008/01/22(火) 17:42:13
>>539
C#からきた俺も同じようなこと考えてたから気持ちはわかる
550デフォルトの名無しさん:2008/01/22(火) 19:57:59
通常のフォント関連のAPIで扱えて、そのアプリ内だけで使用する
独自フォント(アプリが起動している時のみ有効)のインストール
方法ってないでしょうか?

要するにシステムのフォントフォルダにインストールさせたくない
アプリ独自の外字などを通常のフォント用APIで扱いたいのです。

よろしくお願いします。
551デフォルトの名無しさん:2008/01/22(火) 20:21:38
何故ドキュメントを読まない?
552デフォルトの名無しさん:2008/01/22(火) 20:37:45
DQN面子だから
553550:2008/01/22(火) 21:16:20
>>551
キーワードのヒントいただけないでしょうか。

手持ちのドキュメントやググっても、キーワードが悪いのか
見つけられないのです。
554デフォルトの名無しさん:2008/01/22(火) 21:21:15
MSDNライブラリのフォント関連の関数が並んでいるところを見れば、それらしいのあるだろ。
555550:2008/01/22(火) 21:31:59
ありました。どうもありがとう
556デフォルトの名無しさん:2008/01/22(火) 23:07:46
すべてが万事「何故ドキュメントを読まない?」で終わってりゃこのスレいらんな。
557デフォルトの名無しさん:2008/01/22(火) 23:17:01
ドキュメント読まない人間に限ってこういう詭弁を振るいます
558デフォルトの名無しさん:2008/01/22(火) 23:19:12
質問の多くはその程度の内容だから仕方がない。

ただ、それらしいのあるだろって言う位なら、
素直に教えてあげてもいいんじゃないかとは思うが。
559デフォルトの名無しさん:2008/01/22(火) 23:19:26
自分の存在こそがいらない人間に限ってこういう受け答えをします
560デフォルトの名無しさん:2008/01/22(火) 23:20:35
VisualBasic初心者ですが、早くも自作のゲームなど
開発しています。


ところで、VBで作ったプログラムをMacで動作させるには
どうしたら良いでしょう?
そのままではダメだという話ですが、なるべく低コストで
手っ取り早い方法がありましたら教えてください。
561デフォルトの名無しさん:2008/01/22(火) 23:22:05
>>560
1.エミュレータを使う
2.Windowsをインストールする(Intel Mac)
562デフォルトの名無しさん:2008/01/22(火) 23:22:16
頭のおかしい人間がたまにこんなネタも投下します
563デフォルトの名無しさん:2008/01/22(火) 23:28:34
>>561
やってみたけど、駄目でした。
他に何かないでしょうか?

>>562
あの〜(笑) あなたには聞いていません。
分からないなら書き込まないでください。
564デフォルトの名無しさん:2008/01/22(火) 23:30:43
>>560
はどこかで昔みたネタだな

565デフォルトの名無しさん:2008/01/22(火) 23:31:21
>>561
3.頑張ってRealBasicに移植する
566デフォルトの名無しさん:2008/01/22(火) 23:34:32
ピンときたら1行目でググればだいたいコピペだと判明します
567デフォルトの名無しさん:2008/01/22(火) 23:43:47
>>563
何がどうダメだったの?
568561:2008/01/22(火) 23:45:58
すまん、コピペと知らなかった
エミュレータは最後に勧めないとネタが成り立たなかったのか
569デフォルトの名無しさん:2008/01/23(水) 00:54:28
しかしあの程度のガイキチなら今どき2chでごろごろ見かけるよな
昭和は遠くなりにけりだぜ
570デフォルトの名無しさん:2008/01/23(水) 00:54:57
ドキュメント読んだら負けかなと思っている
571デフォルトの名無しさん:2008/01/23(水) 00:55:55
Mac用のエロゲが少ないのはなぜですか?
572デフォルトの名無しさん:2008/01/23(水) 01:00:27
質問の前と後にサーをつけろ。
Macユーザーはホモのアカだからだ。
573デフォルトの名無しさん:2008/01/23(水) 01:23:01
つーかM女史って「勘違いしたDQN系初心者」じゃなくて
マジの電波だったんだよね。
ttp://redroses.hp.infoseek.co.jp/diary.htm
574しらかわよふね:2008/01/23(水) 01:23:55
>560
呼んだ?
575デフォルトの名無しさん:2008/01/23(水) 01:43:57
タスクトレイアイコンがメイン?なアプリケーションを作っています。

で、タスクトレイアイコンを右クリックして、ポップアップメニューからモーダルダイアログをだしても
またタスクトレイアイコンを右クリックして〜って出来てしまいます。

タスクトレイアイコンに登録されてるウィンドウに二つモーダルダイアログができてしまう
っていうのはなんか変な気がします。
なにが起きているのか教えてください。
576デフォルトの名無しさん:2008/01/23(水) 01:54:54
よくパッケージソフトにある推奨スペックや必要スペックとかってどうやって計算してるの?
577デフォルトの名無しさん:2008/01/23(水) 02:42:30
電卓
578デフォルトの名無しさん:2008/01/23(水) 05:12:12
いまどきなら
Pentium1GHz以上
メモリ512MB以上
WindowsXP以上
HDD80GB以上
くらいにしとけば医院で内科医
579デフォルトの名無しさん:2008/01/23(水) 08:52:07
1GHzでも、Pentiumじゃダメだろw
580デフォルトの名無しさん:2008/01/23(水) 09:46:27
>>575
君の書いたとおりに動作してるだけだと思うが。
オレはタスクトレイのアプリはモードレスのダイアログを作って
ポップアップメニューからの選択では、表示非表示を切り替えるようにしてる。
581デフォルトの名無しさん:2008/01/23(水) 12:55:53
>タスクトレイアイコンに登録されてるウィンドウに二つモーダルダイアログができてしまう
っていうのはなんか変な気がします。
普通。
メニューが表示される時点で気がつけ。
582デフォルトの名無しさん:2008/01/23(水) 14:06:31
>>578
>HDD80GB以上
80GBも喰らうソフトを見てみたい
583デフォルトの名無しさん:2008/01/23(水) 16:01:08
CreateIcon等で作ったアイコンをWM_SETICONでセットしたら後始末はどうしたらいいの?
すぐにDestroyIconしてOK?それとも保持しておくべき?

で、すぐDestroyIconしてOKならコピーがWindows側に保持されるということだから
元々設定されていた戻り値の旧アイコンはDestroyIconすべき?
584デフォルトの名無しさん:2008/01/23(水) 16:36:13
試せば?
585デフォルトの名無しさん:2008/01/23(水) 18:44:43
やだね
586デフォルトの名無しさん:2008/01/23(水) 18:45:19
そんなこと言わずにお願いしますよ
587デフォルトの名無しさん:2008/01/23(水) 20:49:45
WM_DESTROY で WM_SETICON 無効にしてからDestroyIconすれば?
588デフォルトの名無しさん:2008/01/24(木) 01:20:20
WM_MOUSEWHEELメッセージを取得したいんだが
case WM_MOUSEWHEEL:って書くと定義されていない識別子とか言われて
怒られるんだがどうすればよいですか?
589デフォルトの名無しさん:2008/01/24(木) 02:01:13
_WIN32_WINDOWSあるいは_WIN32_WINNT
590デフォルトの名無しさん:2008/01/24(木) 02:46:59
日本語のWindows95〜Meで動かす場合
_MBSCは指定しますか?
591デフォルトの名無しさん:2008/01/24(木) 03:26:07
日本語Windowsで動かすかどうかより、
_tcsマクロが_mbsへ展開されてほしいかどうかの問題。
ややスレ違い気味。
592デフォルトの名無しさん:2008/01/24(木) 15:45:56
HMENU hmenuTop = LoadMenu( instance, MENU ); // 親めにゅー
HMENU hmenuSub = GetSubMenu( hmenuTop, index ); // サブメニュー
RemoveMenu( hmenuTop, index, MF_BYPOSITION ); // サブメニューを親から分離する
DestroyMenu( hmenuTop ); // 親だけ破棄
hogehoge( hmenuSub ); // 分離されたサブメニューは破棄されていない?
DestroyMenu( hmenuSub ); // 分離したサブメニューは別々に破棄する必要がある?

といった流れでサブメニューだけ読み込んで扱おうとしていますが、何か間違いがありますか?
593デフォルトの名無しさん:2008/01/24(木) 16:51:18
DestroyMenuは配下のメニューを再帰的に破棄するのでサブメニューも死ぬ
親メニューは常に保持する必要あり
594デフォルトの名無しさん:2008/01/24(木) 18:14:32
>>592
RemoveMenu does not destroy the menu or its handle, allowing the menu to be reused.
595デフォルトの名無しさん:2008/01/24(木) 18:22:49
RemoveMenuされた時点でサブメニューは親メニューから切り離される。
だから親メニューを殺しても切り離されたサブメニューだけは残る。
よって再利用可能。
596デフォルトの名無しさん:2008/01/24(木) 19:50:27
わざわざRemoveMenuして切り離す理由が分からんが
デスクトップヒープやシステムリソースを節約したいのか?
597デフォルトの名無しさん:2008/01/24(木) 20:06:52
Windows3.1時代を思い出すな
598デフォルトの名無しさん:2008/01/24(木) 20:19:25
main.cpp

(略、自動的に生成されたコードのまま)
LRESULT WndProc(...){
switch(message){
case WM_INPUT:
while(1){} //メッセージを受け取る
break;
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDM_DLG:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DLG),hWnd,Dlg::Proc);
(略)
}
return DefWindowProc(hWnd,message,wParam,lParam);
}

dlg.h
(略)
namespace Dlg {
int init(HWND hDl);
INT_PTR CALLBACK Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
(略)
};


599デフォルトの名無しさん:2008/01/24(木) 20:20:17
続き

dlg.cpp
(略)
LPCTSTR lstStr = {"0","1","2"};
int lstNum = 0;
int Dlg::init(HWND hDlg){
int i;
for(i=;i<3;i++) ListBox_InsertString(GetDlgItem(hDlg, IDC_LST1),i,lstStr[i]); // return FALSE
ListBox_SetCurSel(GetDlgItem(hDlg, IDC_LST1));
return 0;
}

INT_PTR CALLBACK Dlg::Proc(HWND hWnd){
switch(message){
case WM_INITDIALOG:
init(hDlg);
break;
case WM_INPUT:
while(1){
} // メッセージ受け取れない
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam){
case IDOK:
EndDialog(hDlg,IDOK);
break;
(略)
}

600デフォルトの名無しさん:2008/01/24(木) 20:21:50
メニューからダイアログボックスを開いて、リストボックスから項目を選択できるようにしたいのですが、リストボックスに項目が追加されません。
また、ダイアログプロシージャでWM_INPUTメッセージを受け取ることができません。
原因が分かりません。どうか解決作をご教示下さい。
よろしくお願いします
601デフォルトの名無しさん:2008/01/24(木) 20:33:41
>>596
コンテキストメニューを表示するときの常套句。
サブメニューの読み込み部分を関数化してみる便利さが分かる。
602デフォルトの名無しさん:2008/01/24(木) 20:46:03
>>601
LoadMenu→GetSubMenu→DestroyMenu(親)だけでいいだろ
603デフォルトの名無しさん:2008/01/24(木) 21:03:46
>>602
>LoadMenu→GetSubMenu→DestroyMenu(親)
めんどう。
エラー処理まで考えると無駄に分岐も多いし、
メニュー呼び出しが何種類もある場合はコピペになりがち。

長期的に見れば、一度
LoadSubMenu{ LoadMenu(); GetSubMenu(); RemoveMenu(); DestroyMenu(親); return sub; }
と関数化してしまえば
LoadSubMenu→DestroyMenu(サブ)
だけで呼び出せるようになる後者のが圧倒的に楽で保守性も高い。
604デフォルトの名無しさん:2008/01/24(木) 21:28:17
あ〜、そうやりゃよかったのか。
今までずっと親メニューもいっしょに保持してたよ。
馬鹿みたい。

605デフォルトの名無しさん:2008/01/24(木) 21:54:55
>>603
俺はCMenuみたいなクラス作って

class CMainWindow { private: CMenu menu; ... };
とでもしておいてmenu.GetSubMenu()して使い回すけどなあ

オーナードローとかすると毎回LoadMenuから行うのは結構コストが大きいし
606デフォルトの名無しさん:2008/01/24(木) 22:58:20
親メニューが要らないのにいつまでも引っ張り回すのはマヌケ。
親メニューを使いたいのに親メニューを解放する奴は気が狂ってる。
違うことをするのに一つの方法だけでなんとかしようとする奴は頭が弱い。
607デフォルトの名無しさん:2008/01/24(木) 23:30:54
FormatMessageってメモリに書き込まずに事前に文字数調べることは出来ないの?
FORMAT_MESSAGE_ALLOCATE_BUFFERじゃなくて。
608デフォルトの名無しさん:2008/01/24(木) 23:39:23
無理なんじゃないかな。
609デフォルトの名無しさん:2008/01/24(木) 23:40:11
ないんじゃね? 
610デフォルトの名無しさん:2008/01/24(木) 23:41:22
思いつかなかったから
FORMAT_MESSAGE_ALLOCATE_BUFFER
なんか作ったんだと思われ。
611デフォルトの名無しさん:2008/01/24(木) 23:41:44
>>600
LB_ADDSTRINGだったかで、追加してあげないと、項目は追加されない

と思った
612デフォルトの名無しさん:2008/01/24(木) 23:44:01
>>607
長いから二回も書きたくないw
613デフォルトの名無しさん:2008/01/24(木) 23:52:07
そういやLoadStringとかも事前に文字数調べられないよな
自前でFindResource/LoadResourceしろってか?
614デフォルトの名無しさん:2008/01/25(金) 01:07:11
脆弱性リストに毎度毎度がバッファオーバーフロー入っているのを見れば言わずもがな
615デフォルトの名無しさん:2008/01/25(金) 01:08:29
>>614
意味不明
616デフォルトの名無しさん:2008/01/25(金) 01:25:48
そこでDEPですよ。
617デフォルトの名無しさん:2008/01/25(金) 01:36:53
おれの DEP はダイヤモンドより堅いぜ!
618デフォルトの名無しさん:2008/01/25(金) 01:43:31
malloc((size_t)-1)くらい用意しとけばめったにあふれないよ。
619デフォルトの名無しさん:2008/01/25(金) 01:44:32
初歩的な質問ですまんが、
主スレッドと副スレッドのプログラムで
主スレッドから副スレッドを強制終了かけるときはExitThreadでよかったっけ?
副スレッド内のループの奥底で、副スレッド自身を終了させたいときは、c標準のkillthreadだっけ?
620デフォルトの名無しさん:2008/01/25(金) 02:05:50
逆、自分を終わらせるのがExitThread (_endthread/_endthreadex)
他人を殺すのがTerminatThread。

killthreadは知らん。Win32にはないし、VC++あたりに存在するものでもないし。
621デフォルトの名無しさん:2008/01/25(金) 02:06:15
そもそも強制終了してはいけない
622デフォルトの名無しさん:2008/01/25(金) 02:19:11
>>620 >>621
トンクス
そうでした
TerminateThread関数でした。Terminateって思い浮かびにくいな
でも危険な関数って書いてあるね>>psdk

>>621
副スレッド稼動中に、主スレッドで終了メニューが選択されたときに
単に主スレッド内でDestroyWindowを呼び出すだけのほうが良さそうですね
プロセス終了時に副スレッドも勝手に終了してくれる?はず?なので

レスどもども
623デフォルトの名無しさん:2008/01/25(金) 04:21:28
>>616
DEPと言えばWindows Server 2008で(おそらくVista SP1にも)
SetProcessDEPPolicyという関数が追加されるらしいが
プロセスがDEPの動作を変更できちゃっていいのか?
>>622
> でも危険な関数って書いてあるね>>psdk
だからそもそも強制終了してはいけない
624600:2008/01/25(金) 05:56:07
コンボボックスをリストボックスだと勘違いしてた/(^o^)\
625デフォルトの名無しさん:2008/01/25(金) 09:14:56
>>622
>プロセス終了時に副スレッドも勝手に終了してくれる?はず?なので

プロセス終了時にリソースは回収されるとは言え、テキトーだなあ。
副スレッドに「自殺してね」ってお願いして死ぬのを待ってから、
主スレッドも終了するのが、副スレッドの終了処理ができるから良くね?
626デフォルトの名無しさん:2008/01/25(金) 09:22:34
オーバーフローは問題ない
オーバーランがいくない
627デフォルトの名無しさん:2008/01/25(金) 09:22:48
>>618
違うものが溢れます
628デフォルトの名無しさん:2008/01/25(金) 11:39:08
Sleepって例えば10秒間寝てる間に高負荷がかかったとしても
最後の一秒以降にそのPCに負荷がかかってなければ
おおむね正しく動くものなんですか?
629デフォルトの名無しさん:2008/01/25(金) 11:43:00
何秒高負荷になろうとも正しく動きます
630デフォルトの名無しさん:2008/01/25(金) 11:51:44
特殊フォルダのパスを取得するときに使用するCSIDLというものに関するリファレンスを読んでると、
version6.0とかversion5.0という番号がCSIDL_MYPICTURESとかCSIDL_MYVIDEOなんかの箇所に出てくるんですが
これはどういう意味なんでしょうか・・
また何かプリプロセッサの定義の部分に付け加えないといけないとか?
631デフォルトの名無しさん:2008/01/25(金) 12:33:47
>>629
どんな状況だろうが正しく動きません かと
632デフォルトの名無しさん:2008/01/25(金) 12:38:49
633デフォルトの名無しさん:2008/01/25(金) 13:49:05
餅の乳成分でショック起こすような奴は明らかに出来損ないで
種の存続のためにも劣勢として淘汰されるべき遺伝子なのだよ
結論「死ねばよかったのにね。」
634デフォルトの名無しさん:2008/01/25(金) 14:30:48
 
  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄
635デフォルトの名無しさん:2008/01/25(金) 14:42:48
哺乳類失格だな
636デフォルトの名無しさん:2008/01/25(金) 19:11:37
書き込むサイズ指定するから
文章切れるけどOFはしないよ。
637デフォルトの名無しさん:2008/01/25(金) 19:24:33
LoadStringのバッファオーバーランって無印95の時代だろ
何年前の話だよ
638デフォルトの名無しさん:2008/01/25(金) 19:55:06
>>632
ありがとうございます。
ここで質問させていただく前に、ググって調べたときにそのページは読みましたが・・よくわからないです。
ソースの頭に、#define _WIN32_IE 0x0600 と付け加えても、かわらないですorz
639デフォルトの名無しさん:2008/01/25(金) 20:10:07
>>638
もうめんどくさいからOSのバージョン依存の定数だと思っとけよバカチン
640デフォルトの名無しさん:2008/01/25(金) 20:49:10
>>638
ソースの頭ってどこだよ?
その前にincludeしてしまっていたら駄目だぞ
641デフォルトの名無しさん:2008/01/25(金) 22:30:46
>>638
何がよくわからんのよ。

Another method is to add a line similar to the following in your source code "before including the Shell and Common Control header files"
が答えでしょ?

PrecompileHeaderの頭に書くとか、プロジェクト設定のプリプロセス定義に書くとかでOK
642デフォルトの名無しさん:2008/01/25(金) 22:31:38
ageて質問してる人ってロクなのがいないね
643デフォルトの名無しさん:2008/01/25(金) 23:51:32
STDAFX.H
644デフォルトの名無しさん:2008/01/26(土) 00:24:38
typedef struct _Hage {
UINT uType;
union
{
  LPWSTR pStr;
  ...(省略)...
} DUMMYUNIONNAME;
} Hage

みたいなのって
32bit環境だとunionメンバーって4バイト目から始まりますよね?
64bitだと8byteから始まるの?
645デフォルトの名無しさん:2008/01/26(土) 00:28:40
>>644
コンパイラによって変わる
#pragma で指定できる

64bit環境でポインタサイズが64bitになるなら
デフォルトのままだとポインタは多分8byte境界におかれると思う
646デフォルトの名無しさん:2008/01/26(土) 00:31:20
64bitといってもAlpha21064から最新CPUまでピンきりでは。
windowsに限定しても、Alpha IA64 AMD64
647デフォルトの名無しさん:2008/01/26(土) 00:33:26
>>644
UINTはx64でも32bit
ポインタサイズの整数型が欲しければ、UINT_PTR、
明示的にサイズを指定したければ、UINT32, UINT64を使うといい。
648デフォルトの名無しさん:2008/01/26(土) 00:40:29
>>645
やっぱそうですか。

>>646
ども。

>>647
ですよね。
でもバイト境界とかいう摩訶不思議なものが存在するらしいんですが
どうなんでしょ。

ぶっちゃけると
STRRETを.netで使いたいんです。.netだと言うと即座に却下されそうで
隠しました。ごめんなさいm(_._)m

[StructLayout( LayoutKind.Explicit, Size = 264 )]
internal struct STRRET
{
    [FieldOffset( 0 )]
    public UInt32 uType;
    [FieldOffset( 4 )]
    public IntPtr pOleStr;
    [FieldOffset( 4 )]
    public IntPtr pStr;
    [FieldOffset( 4 )]
    public UInt32 uOffset;
    [FieldOffset( 4 )]
    public IntPtr cStr;
}
が64bitWindowsで使えるか、ということなんです。
構造体サイズ変わりますよね
649デフォルトの名無しさん:2008/01/26(土) 00:49:00
>>648
.netじゃなくてもスレ違い。
650デフォルトの名無しさん:2008/01/26(土) 00:58:14
>>641
そうしてる・・
CSIDL_PERSONAL をSHGetFolderPathに渡すとマイドキュメントフォルダへのパスが取得できるんだけど
CSIDL_MYDOCUMENTS では何も返ってこない
ソースの頭、いろんなヘッダーファイルをインクルードする前に、#define _WIN32_IE 0x0600を置いてもだめ
プリプロセッサ定義に_WIN32_IE=0x0600としてもダメ
OSはXPなんだけどな
651デフォルトの名無しさん:2008/01/26(土) 01:02:20
あなたそれ話のレベルが違う。

CSIDL_MYDOCUMENTSは「マイドキュメントという仮想フォルダ」のアイテムIDを取得する。
だからファイルシステムとしてのパスは取得できないよ
652デフォルトの名無しさん:2008/01/26(土) 01:05:13
#define CSIDL_MYDOCUMENTS CSIDL_PERSONAL // Personal was just a silly name for My Documents
やで〜
653デフォルトの名無しさん:2008/01/26(土) 03:56:59
そもそも、CSIDL_MYDOCUMENTSはSHGetFolderPathでサポートされていない。
MSDNにサポートしているCSIDLが書かれているから、参考にしてみて。
654デフォルトの名無しさん:2008/01/26(土) 04:05:21
というか、CSIDL_MYDOCUMENTSは無かったことにされてるので、
使わない方向でOKなんじゃないかと。
655デフォルトの名無しさん:2008/01/26(土) 04:20:04
>>651-654
ホントだ
サポートされてる定数は限られてるみたい
またアホなことでズルズルと悩んでまった
みなさんありがとうございました。
656デフォルトの名無しさん:2008/01/26(土) 05:18:24
>CSIDL_MYDOCUMENTSは無かったことにされてる
そうなの?いつの間に・・・。
657デフォルトの名無しさん:2008/01/26(土) 07:05:02
>>633
劣勢遺伝子は単に発現しにくいだけで種の存続にとって不利なものとは限らない
658デフォルトの名無しさん:2008/01/26(土) 09:37:38
VBScriptのIsFolderメソッドのような働きをするAPI関数ってありますか?
659デフォルトの名無しさん:2008/01/26(土) 12:13:53
「VBScriptのIsFolderメソッド」なんてないぞ
FolderItem.IsFolderのことかね?
内部でIShellFolder.GetAttributesしてSFGAO_FOLDER見てるんじゃまいか
660デフォルトの名無しさん:2008/01/26(土) 21:36:20
起動から〜時間後ごとに指定の処理を実行ってどうやればできますか?
SetTimerしかない?
661デフォルトの名無しさん:2008/01/26(土) 21:37:51
SetTimerでは何が困るのかを書いてもらえば代案を出せるかもしれん
困らないならSetTimerでいいかと
662デフォルトの名無しさん:2008/01/26(土) 21:43:45
>>661
ごめんSetTimerだと何だか重くなりそうで嫌だなと思っただけなんだけど、そんなことない?
663デフォルトの名無しさん:2008/01/26(土) 21:57:32
何を根拠に重くなると考えてるのかがさっぱり分からない
664デフォルトの名無しさん:2008/01/26(土) 22:42:25
敢えて挙げるならWaitableTimerかなあ。
これならメッセージキューは不要だし。
665デフォルトの名無しさん:2008/01/26(土) 22:45:45
やる意味がわからんけど副スレッドでSleep待機
666デフォルトの名無しさん:2008/01/26(土) 23:24:18
プロパティなどで使われるテキストコントロールに似た、
背景が灰色のコピーはできるが書き込みやペーストはできない
コントロールは何というのでしょうか。
667デフォルトの名無しさん:2008/01/26(土) 23:29:49
Edit
668デフォルトの名無しさん:2008/01/26(土) 23:31:02
ツールバーのリソースって 16色のビットマップしか使えないのでしょうか?
Jpeg や png で書いたアイコンを ツールバーに反映させたいのですけど。
669デフォルトの名無しさん:2008/01/26(土) 23:35:38
一旦イメージリストに読み込んでから使えば
670デフォルトの名無しさん:2008/01/27(日) 00:25:08
Win32API の質問というよりは、リソースファイルの質問なんです。適当なスレに誘導していただければありがたいです。
環境は WindowsXP, 処理系はcygwin(gcc3.4.4+mingw-20050522-1 です。
以下のプログラムは、とある Win16 初心者本の例題を Win32 にあわせて書き直したものです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5926.zip

プログラムでは、ひとつのダイアログボックスを出現させて(DialogBoxマクロ)います。
DialogBoxの第二引数で指定するリソースでは、次のようにアイコンを定義しています。

KEKKA_XXXX DIALOG DISCARDABLE 100, 100, 130, 80
BEGIN
CONTROL "IDI_XXXX", IDI_XXXX, "STATIC", SS_ICON | WS_CHILD, 10, 25, 16, 16
END
ところが、このアイコンがダイアログに表示されません。
これはどこに原因があるのでしょうか。
特殊な環境ですみませんが、もしご存知の方がおられましたらよろしくお願いいたします。
671デフォルトの名無しさん:2008/01/27(日) 00:34:16
static コントロール
672デフォルトの名無しさん:2008/01/27(日) 01:51:18
>>668
PNGは分かるが、JPEGをツールバーに使うのか・・・?
673670:2008/01/27(日) 02:01:14
674デフォルトの名無しさん:2008/01/27(日) 04:07:35
DLLを作成しています。
DLL内の関数内から呼び出す関数を同じソース上に作成し、その関数はDLL外からは呼び出すことができないようにするにはどうすればいいですか?
privateステートメントのような・・ものってありません?
675デフォルトの名無しさん:2008/01/27(日) 04:16:01
>>674
関数名を無しにすればいい
関数を static 修飾すれだけでいいはず
676デフォルトの名無しさん:2008/01/27(日) 06:22:27
>>675
関数名を無しに?っていうトコロがよくわりませんが、static修飾子でいきます
トンクスm9

関数名無しっていうのは、番号でアクセスするとかいう感じの?
677デフォルトの名無しさん:2008/01/27(日) 06:46:39
エクスポートしなけりゃいいだけだろ
678デフォルトの名無しさん:2008/01/27(日) 10:14:28
質問です。ダイアログのボタンから、メニューウィンドウを同時に2つ出したいのでが、
確かに2つ出るのですが、同じウィンドウになってしまいます。
どうしたら良いですか?
異なるリソースIDは付けています。
679デフォルトの名無しさん:2008/01/27(日) 10:30:09
ウィンドウを出してる部分のコードさらせ
680デフォルトの名無しさん:2008/01/27(日) 14:34:24
HANDLEってよく出てくるんですが、これはポインタだすよね。
でも、何を指しているポインタなんだすか?
681デフォルトの名無しさん:2008/01/27(日) 14:52:18
カーネル内オブジェクトとかUSER32内オブジェクトとか・・・
682デフォルトの名無しさん:2008/01/27(日) 14:54:09
ポインタじゃないよ ただの整数IDだよ!

というかそのように解釈すべきという意図で不透過な構造体へのポインタとして定義されてる
本当の意味で何を指してるかは知らない ハンドルテーブルとかいう奴かな?
683デフォルトの名無しさん:2008/01/27(日) 14:54:09
APIごとに必要な情報のつまった構造体とかでしょ。
詳細は2kのソースを読むべし(嘘
684デフォルトの名無しさん:2008/01/27(日) 15:06:38
ポインタテーブルのインデックスだったり
685デフォルトの名無しさん:2008/01/27(日) 15:09:50
ポインタとOS起動時にランダムに決めた数値との排他的論理和ってのもあったな
686デフォルトの名無しさん:2008/01/27(日) 16:18:50
突然だけど、質問。
LoadBitmapで読み込んだ画像を、適当な座標・大きさで
分割してそれぞれHBITMAPにするにはどうすればいい?
初歩的な質問で申し訳ない
687デフォルトの名無しさん:2008/01/27(日) 16:31:13
別にビットマップを用意してDCに割り当ててBitBltとかするんじゃね?
688デフォルトの名無しさん:2008/01/27(日) 17:10:02
ウィンドウAのプロシージャがタイマーによって発生させる情報をウィンドウBで同期表示したいのですがうまくいきません
現在は別々のプロシージャを用意してグローバル変数で情報のやりとりを行っています
ウィンドウBでの表示はウィンドウAと同じ周期(1秒)のタイマーを用意して定期的に画面更新を行っています
この方法では数回に一回起動時にウィンドウAの画面更新が止まったままになってしまうのですが処理が重すぎるのでしょうか?
もっと簡単な同期方法がありましたらご教授ください・・・

Bではウィンドウ操作で表示内容が変わるので別々のプロシージャにしています
689デフォルトの名無しさん:2008/01/27(日) 17:15:34
タイマ処理時にウィンドウAからウィンドウBにメッセージ投げるだけでいいんじゃね?
690デフォルトの名無しさん:2008/01/27(日) 17:22:15
>>686
LoadBitmapは読み込んだ画像のHBITMAPを返しそれが読み込んだ画像を指すが、
分割してそれぞれを別のHBITMAPに入れるには、新しく画像を指すHBITMAPを作成しなければならない。
CreateCompatibleBitmap(hdc_b, 幅, 高さ) で新たな画像を指すHBITMAPを作る事が出来る。
引数、hdc_bには読み込んだ画像と互換性のある、新しいHBITMAP用に用意されたデバイスコンテキストハンドルである必要がある。
読み込んだ画像のデバイスコンテキストハンドルはCreateCompatibleDC(NULL)の返り値 = hdc_aを受け取り、
SelectObject(hdc_a, 読み込んだ画像のHBITMAP)で設定できる。
読み込んだ画像のデバイスコンテキストハンドルと互換性のある新しいデバイスコンテキストハンドルは、
CreateCompatibleDC(hdc_a)の返り値で取得できる。
CreateCompatibleBitmapで新たにHBITMAPを作成したあとは、そのHBITMAP hBitmapと作成に使用したhdc_bを使い、
SelectObject(hBitmap, hdc_b)しなければならない。別にしなくてもいいけど。
その後、分割前の画像のhdc_aと分割された画像を受け取るhdc_bを使い、BitBltなどで画像を分割するために転送して分割を行い分割は完了する事によって分割ができる。
691デフォルトの名無しさん:2008/01/27(日) 17:32:54
680です。我有至極感謝!
結局、HANDLEって大先生でもよく解らないまか不思議なものなんですね。
windowsを操作するために使う車のハンドルみたいな物程度の理解でOKって感じですかね。
それが何であるか追い求めるな、それはWindwsの知ってはならない秘密の一つである。
>>690には素敵なハンドルがいっぱい
692デフォルトの名無しさん:2008/01/27(日) 17:36:49
駐車場の券のようなもの
693デフォルトの名無しさん:2008/01/27(日) 17:40:05
>>691
マジレスすると冗談ではなく本当にそういう認識でいい。
ハンドルの目的は、リソースの直接的な管理をOSが全て自動でやりプログラマが直接手出しできないように
抽象化するためのものだから、その実体がなんなのか考えなくてもいいし、考える必要も無いように設計されている。
OSがエミュレータで動いていようがなんだろうが、ハンドルからであればリソースを利用できる。
694デフォルトの名無しさん:2008/01/27(日) 17:43:50
ハンドルはリソースに対して割り振られた固有番号のようなもんだと思っておけば。
いや、事実そうなんだが。
695688:2008/01/27(日) 17:49:02
>>689
メッセージは
InvalidateRect(ウィンドウBのハンドル, NULL, FALSE );
UpdateWindow(ウィンドウBのハンドル);
で、いいのでしょうか?

画面更新がされない;;
696デフォルトの名無しさん:2008/01/27(日) 17:50:13
ハンドルが何に対して固有かにもよるし
OSのバージョンによって実装が変わってたりするから
一概には言えないな

そういうgdgdしたことを考えずにすむための仕組みなんだよ
697デフォルトの名無しさん:2008/01/27(日) 18:11:56
>>695
アプリケーション定義の任意のメッセージでおk。

PostMessage(ウィンドウBのハンドル, 更新されたよ, 0, 0);

メッセージを受けたウィンドウBの中で好きなことをすればいい。
698デフォルトの名無しさん:2008/01/27(日) 18:24:35
>>690
>SelectObject(hBitmap, hdc_b)しなければならない
ここは引数が逆のような気がするが、キャストをするのか?

それとBitBltをしたあとは、分割された画像はhBitmapに入ってる?
何も画像が描画されないのだが…
教えてもらっている立場なのに、色々うるさくてすまない
699デフォルトの名無しさん:2008/01/27(日) 18:27:30
でもGetModuleHandleの返り値はポインタだよな。
(公式な使い方かどうかは知らんが。)
700デフォルトの名無しさん:2008/01/27(日) 18:38:39
今でこそポインタだけど、WIN16の頃はそーでもなかった、
みたいな話がまたぞろTheOldNewThingsのあたりから・・・
701デフォルトの名無しさん:2008/01/27(日) 19:00:38
ポインタにせよ整数値にせよ、なんらかの識別子という意味では同じなんだし
OS側でちゃんと処理されてるんなら気にする必要は無いやね
失敗時は NULL だったり INVALID_HANDLE_VALUE だったりで紛らわしくて気持ち悪いけど
702デフォルトの名無しさん:2008/01/27(日) 19:10:33
GetModuleHandleの返り値を隠蔽されたものでなく
モジュールを指すポインタとして使いたいときがあるって
話なんだって。
703デフォルトの名無しさん:2008/01/27(日) 19:34:33
PSAPIのGetModuleInformationを使えばいい。
704デフォルトの名無しさん:2008/01/27(日) 21:26:24
>>698
俺は>>690じゃないが。

1、元となるhBitmapをDC1に関連付ける。
2、分割サイズのBitmapを作って、そのハンドルをDC2に関連付ける。
3、DC2に対して、DC1から必要領域をBitBltする。
4、分割Bitmapを所持したDC2の完成。

って言ってるんじゃ?
705デフォルトの名無しさん:2008/01/27(日) 21:30:57
ファイラのようなアプリで大量の、最悪数千個位のアイコンをロードする場合
片っ端からロードして行って大丈夫ですか?
画面に表示し終わったら片っ端から捨てていったほうがいいですか?
それとも100個くらいキープしておくキャッシュ機構を作ったほうがいいですか?
そのあたりの方針をどうすればいいのか教えてください。
706デフォルトの名無しさん:2008/01/27(日) 22:03:15
OSのアイコンキャッシュがあるから別に気にしなくても良いんでないかと思う
707デフォルトの名無しさん:2008/01/27(日) 22:04:16
単純計算だと、16pxの32bppで1KB、32pxで4KB。
今の搭載メモリなら数千個保持してもまあ大丈夫なんじゃね?
それよりも、表示されているアイテムのアイコンだけを
非同期に読み込むような処理が重要な気がする。
708デフォルトの名無しさん:2008/01/27(日) 23:09:39
>>704
代弁ありがとうございます。
教えられた方法をとっても、黒いものが描画されるだけでした

いくら考えても良い解決策が見つかりません
「画像をHBITMAPに分割する」方法を知っている人がいたら是非教えてください
709デフォルトの名無しさん:2008/01/27(日) 23:14:53
ちょっとコード出せ
710デフォルトの名無しさん:2008/01/27(日) 23:22:06
FormatMessageの戻り値が1024文字超えることはありますか?
711デフォルトの名無しさん:2008/01/27(日) 23:25:37
決まってないようだ
だからnSizeがあるんだろうけど
712デフォルトの名無しさん:2008/01/27(日) 23:28:24
>>708
提示された方法はダメって決め付けてるけど、
自分のコーディングにミスがあるとは思わないの?

とりあえず>>709
713デフォルトの名無しさん:2008/01/27(日) 23:30:03
マルチスレッドについて勉強しているのですが、
whileの無限ループの中で繰り返し1回毎に同じ関数を別スレッドで実行させたいのですが
その場合は毎回CreateThreadする必要があるのでしょうか?
714デフォルトの名無しさん:2008/01/27(日) 23:31:08
コードは出せないけど…

@LoadBitmapでリソースから画像(キャラチップ)を読み込む
AImageList_AddMaskedで透過設定しつつイメージリストを作る(このときHBITMAPが必要)
B背景にごちゃごちゃ描画したあと、肝心のキャラは裏画面に一度ImageList_Drawで全体を
描画して、そこで適当な大きさ・座標で表画面にBitBltする
C裏画面で透過しちゃってるから、透過されずに四角で描画されてる

こんな感じの流れです
708の方法だとAがうまくいかないんです…
715デフォルトの名無しさん:2008/01/27(日) 23:34:06
708を実装したときのコードがまちがってるんでねーの
716デフォルトの名無しさん:2008/01/27(日) 23:34:50
>>713
俺だったら仕様を見直すかな
状況がよくわからないけど本当に必要でなければスレッドの多用は避ける
負荷が大きいからね
717デフォルトの名無しさん:2008/01/27(日) 23:35:38
708の方法だとうまくいかないんじゃなくて708の実装方法を誤っているから
うまくいかない、と>709とか>712とか俺は思っているんだが。
718デフォルトの名無しさん:2008/01/27(日) 23:37:56
>713
スレッドプールはお嫌い?
719デフォルトの名無しさん:2008/01/27(日) 23:37:57
>>710
処理系依存だがsprintf系が1024文字までだったような
720デフォルトの名無しさん:2008/01/27(日) 23:39:29
>>713
その通り
でもCreateThreadより_beginthreadとか_beginthreadexの方がいいお
>>716
練習で書いてるだけかと
721713:2008/01/27(日) 23:50:36
色々なアドバイスありがとうございます
DirectXを用いた3D描画なのでスレ違い気味ですが、現行ではシングルスレッドで1ループに
シーン間に描画キュー→頂点座標などの変更→Presentとしていたのをどちらかを別スレッドで行って処理を最適化しようと考えていました
でも出来るだけシングルスレッドでやった方がいいみたいですね
722デフォルトの名無しさん:2008/01/28(月) 00:04:09
もしゲーム絡みなら、素人が手を出せるレベルの話ではない予感。
ロストプラネット関係の記事を読めば、何か参考になるかもしれんね。
723デフォルトの名無しさん:2008/01/28(月) 00:11:45
>>720
_beginthreadよりはCreateThreadのほうがまだましだ。
724デフォルトの名無しさん:2008/01/28(月) 00:13:33
さだまさしに見えるから困る
725デフォルトの名無しさん:2008/01/28(月) 00:14:02
マルチスレッドで分散なんて、適当に処理データを分けて並列化するだけだぞ?
726デフォルトの名無しさん:2008/01/28(月) 00:25:16
>>723
CRT使わなければね。
727デフォルトの名無しさん:2008/01/28(月) 00:30:10
CRTだって最近はDLL版使う流れだから、実はあまり問題ない気もする。

DLL版CRTならDLL_THREAD_DETACHで解放できる。
Advanced Windowsあたりに載っていなかったっけ?
728デフォルトの名無しさん:2008/01/28(月) 00:36:25
スレッドあたり何十バイトか漏れててもキニシナイ
729デフォルトの名無しさん:2008/01/28(月) 00:54:36
>>724
このスレで久々にワロタw
730704:2008/01/28(月) 01:00:59
>>714
http://www-2ch.net:8080/up/download/1201449261462200.ab44ER
Pass:704

やりたい事は上記サンプルみたいな感じだよね?
1つの元画像からImageListに分割して追加→表示してみた。


>>704の4で作成できたBitmapの所有権はDC2にあって、
それを直接、ユーザが外部から扱うことは出来ません。
hBitmapをImageList_AddMasked()に与えるのであれば、
事前に所有権を消滅させてから行いましょう。
731デフォルトの名無しさん:2008/01/28(月) 01:19:51
>>730
所有権を消すってReleaseDCとかをするってこと?
ソースがあればうれしい
732デフォルトの名無しさん:2008/01/28(月) 01:28:49
>>705
Win9x だと数千個あたりからアイコンが表示されなくなる。
1画面分だけ読み込むか、アイコンの画像データをメモリにコピーして」アイコンは解放する方がよいかもね。
元ファイラ制作者より。
733デフォルトの名無しさん:2008/01/28(月) 01:45:41
ファイラみたいなの作るんならシェルのイメージリスト使わない?普通。
それともシェルそのものをぶっ殺したいのかな
734デフォルトの名無しさん:2008/01/28(月) 02:22:28
>>732
それの原因、昔調べた事あるなぁ。

イメージリストって内部でアイコンを連結して一枚のビットマップにして管理していて
そのビットマップの縦or横が32767を超えると、Win9xの場合int=16bitだから
CreateCompatibleBitmapなんかが失敗して管理用ビットマップの生成に失敗する。

横方向はアイコンを4列固定で作ってるみたいで、32x32のアイコンだと理論上4096個目ぐらいから
イメージリストにアイコンが追加できなくなる。
当然シェルのイメージリストでも同じように失敗する。
735デフォルトの名無しさん:2008/01/28(月) 03:06:27
最大最小ボタンが「?」になったり数字になったりするバグのこと?
736デフォルトの名無しさん:2008/01/28(月) 05:10:52
指定のパスのフォルダのウィンドウを開くにはどうすればできる?
例えばC:\(省略)\デスクトップ\新しいフォルダ ならデスクトップの「新しいフォルダ」
をダブルクリックして開いた状態にしたいんだけど
737デフォルトの名無しさん:2008/01/28(月) 05:28:19
>>736
ShellExecuteで
738デフォルトの名無しさん:2008/01/28(月) 06:00:39
>>737
ありがとうございます。できました
これは他にも応用ききそうで便利だ
739デフォルトの名無しさん:2008/01/28(月) 06:37:36
応用効くというか常套手段なんだが・・・
740デフォルトの名無しさん:2008/01/28(月) 07:01:40
ShellExecute(Ex)でExplorer指定してパラメータにパス渡すって手もあるな。
explorer /n,/e,PATHでフォルダツリーつきにしたり。
741688:2008/01/28(月) 08:10:19
PostMessage(ウィンドウBのハンドル, 更新されたよ, 0, 0);
でやってみたのですが、なぜかメッセージが受け取られていないみたいです

ウィンドウBのハンドルをグローバルにしてみたり
SendMessage((HWND)FindWindow("ウィンドウBのクラス名",NULL),更新されたよ,0,0);
でやってみてもだめでした
ウィンドウBのハンドルの取得方法が間違っているのでしょうか?・・・
742688:2008/01/28(月) 08:29:04
書き間違えました・・・
PostMessage((HWND)FindWindow("ウィンドウBのクラス名",NULL),更新されたよ,0,0);
でした
743デフォルトの名無しさん:2008/01/28(月) 09:39:25
実際のコードを貼らない理由は何?
744デフォルトの名無しさん:2008/01/28(月) 09:42:06
考えられる理由

・ポスト先のウィンドウのメッセージキューが詰まってる
・ポスト先のウィンドウがメッセージを潰してしまっている
・メッセージが届いてない
745デフォルトの名無しさん:2008/01/28(月) 09:49:58
・メッセージループが回ってない
746デフォルトの名無しさん:2008/01/28(月) 09:50:21
FindWindowの結果がNULLかどうかくらいチェックしようぜ。
あとHWNDが戻り値の関数なのにキャストしてるのは何で?
747デフォルトの名無しさん:2008/01/28(月) 11:16:08
>>742
PostMessage((HWND)FindWindow("ウィンドウBのクラス名",NULL),更新されたよ,0,0);

これのコンパイルが通らないけどなんで?
> test.c(5) : error C2018: 文字 '0x8d' は認識できません。
> test.c(5) : error C2018: 文字 '0x90' は認識できません。

つー冗談はさておき、FindWindowとPostMessageのエラーチェックとLastErrorぐらい調べてから書けよ
748デフォルトの名無しさん:2008/01/28(月) 14:02:42
Spy++とか使えば
749デフォルトの名無しさん:2008/01/28(月) 14:09:37
>>747
まさかとは思うが、「更新されたよ」が剥き出し(=""で括られていない)って落ちじゃない……
いや、SJISで「更」の1バイト目は0x8dだからそのまさかか……
750デフォルトの名無しさん:2008/01/28(月) 14:55:52
マジレスとネタレスくらい区別しような
751678:2008/01/28(月) 15:03:51
質問です。ダイアログのボタンから、メニューウィンドウを同時に2つ出したいのでが、
確かに2つ出るのですが、同じウィンドウになってしまいます。
どうしたら良いですか?
>>679
>ウィンドウを出してる部分のコードさらせ
異なるリソースIDは付けています。
です。ソースコードを晒せと言う事なので、
関係する所を晒します。
752678:2008/01/28(月) 15:04:42
WNDCLASS wc;
WNDCLASS wc2;
wc.style =0;
wc.lpfnWndProc =WindowProc;
wc.cbClsExtra =0;
wc.cbWndExtra =0;
wc.hInstance =hInstance;
wc.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor =LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName =MAKEINTRESOURCE(IDR_MENU1);
wc.lpszClassName="MainWindowClass";
return 0;

hwnd=CreateWindow( "MainWindowClass",
"Chapter6",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
(HMENU)NULL,
hInstance,
0);
if(hwnd==NULL)
return 0;
753678:2008/01/28(月) 15:05:37
hInstance2=hInstance;
wc2.style =0;
wc2.lpfnWndProc =WindowProc2;
wc2.cbClsExtra =0;
wc2.cbWndExtra =0;
wc2.hInstance =hInstance;
wc2.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wc2.hCursor =LoadCursor(NULL,IDC_ARROW);
wc2.hbrBackground=GetStockObject(LTGRAY_BRUSH);
wc2.lpszMenuName =MAKEINTRESOURCE(IDR_MENU2);
wc2.lpszClassName="MainWindowClass";
wc2.lpfnWndProc =WindowProc2;
hwnd2=CreateWindow( "MainWindowClass",
"Chapter6",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
(HMENU)NULL,
hInstance2,
0);
if(hwnd2==NULL)
return 0;
if(RegisterClass(&wc2)==0)
return 0;
ShowWindow(hwnd,CmdShow);
ShowWindow(hwnd2,CmdShow);
UpdateWindow(hwnd);
UpdateWindow(hwnd2);
754デフォルトの名無しさん:2008/01/28(月) 15:06:19
馬鹿者www

圧縮してアップローダーか何かに上げんかいwww
755デフォルトの名無しさん:2008/01/28(月) 15:11:33
メニューウィンドウとか同じウィンドウになる、のところがわからん。
そのコードで再現可能?
756688:2008/01/28(月) 15:15:26
さすがにそれはないです・・・
しっかり定義してます

と言いたいところですが、、、
#define UPDATE WM_APP+1とすべきところを
#define UPDATE 適当な数字としていたのが原因でしたorz
ネタと思われても仕方がないですね;;
お手間をとらせてすいませんでした。
757デフォルトの名無しさん:2008/01/28(月) 15:19:59
ちょwww
758デフォルトの名無しさん:2008/01/28(月) 15:24:49
異なるアプリケーション間なら、RegisterWindowMessage()が望ましいがな。
759デフォルトの名無しさん:2008/01/28(月) 19:48:51
質問する奴ってプログラミング初心者っていう以前に2ちゃんねる初心者が多いな
760714:2008/01/28(月) 22:24:35
730で丁寧にもexeで作ってくれたので、実際に言われたとおりに
所有権を消しつつ、コードを作ってみた。

hbit=元画像 chara=イメージリスト

hdc=BeginPaint(hwnd,&ps);
hdc2=CreateCompatibleDC(NULL);
hdc3=CreateCompatibleDC(hdc2);
hbit2=CreateCompatibleBitmap(hdc3,32,45);

SelectObject(hdc2,hbit);
SelectObject(hdc3,hbit2);

BitBlt(hdc3,0,0,32,45,hdc2,0,0,SRCCOPY);

DeleteDC(hdc3);

ImageList_AddMasked(chara,hbit2,RGB(145,210,255));
ImageList_Draw(chara,0,hdc,0,0,ILD_NORMAL);

しかしながら、未だにプログラムは成功しません。
かなりしつこいようですが、どうしても作りたいので
迷惑だと思いますが、誰かご教授お願い致します。
761デフォルトの名無しさん:2008/01/28(月) 22:30:10
SelectObjectjの返値を無視しちゃう奴は、
GDIオブジェクトリークの刑であります。
762デフォルトの名無しさん:2008/01/28(月) 22:36:25
>>760
一つだけ言えるのは、現時点での君のスキルでは無理ってこと。
どうしても作りたいならスキルを磨いてからに汁
763714:2008/01/28(月) 22:53:57
戻り値を受け取って、元のオブジェクトに戻しましたが、
やはり結果は変わりません
どうしてでしょうか??
764デフォルトの名無しさん:2008/01/28(月) 23:01:22
    /          )))
   /   /// /―――-ミ
   / 彡彡 // /      ヽ))
   / 彡彡 iiiiiiiiiiiiiii  iiiiiiiiii|
   / 彡彡 < ・ > 、<・ >l
  /    |       ヽ   〉
  /  ( | |      __)  |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  /   | ≡  /, ―――  |ゝ < 馬鹿にWin32APIを触らせるな!
  /   |   |  L ___」 l ヾ  \_________
_ミ  l   ______ノ ゞ_
  |  l ヾ    ー   / |  l
  |  |   \ー    ‐/  |  |
765デフォルトの名無しさん:2008/01/28(月) 23:01:52
766デフォルトの名無しさん:2008/01/28(月) 23:06:16
イメージリストなんて使わず自分でスプライト処理ぐらい書けや
767デフォルトの名無しさん:2008/01/28(月) 23:11:28
みんなインストーラってVSではなく他のソフトで作ってるの?
そろそろインストーラ作ってみたいと調べてみたけど他の人が作ったソフトを
利用して作る方法しか載ってない…
768デフォルトの名無しさん:2008/01/28(月) 23:19:36
VSのmsi生成は、なんつーか、今ひとつだからなー。
769デフォルトの名無しさん:2008/01/28(月) 23:34:05
URLで示されたWEBサイトをローカルのファイルに保存するっていう関数があったように思うんですが
だれか知りませんか?
770デフォルトの名無しさん:2008/01/29(火) 00:24:18
urldownloadtofileとかいう奴だと思う
771704:2008/01/29(火) 00:28:44
>>760
既に>>761-762で言われてるけど、作ることに執着する前に、
構想を実現するだけのスキルを先に身に付けた方がいいと思う。
GDIオブジェクトの後処理とかは基本的なことなので、
その辺が理解出来てないとなると、今後もトラブルになりそう。

>>730で言った"所有権を消滅"というのは、
DCを削除するのではなく、別のBitmapを所有させるということ。
新たに所有させるBitmapはDC作成時に初めから所持していたもの、
すなわち現Bitmapを所有させた時の、SelectObject()の戻り値が適切。
その後に不必要なDCを削除するのは言わずもがな。

それでも成功しないというのは、他にも問題があるから。
hbit2=CreateCompatibleBitmap(hdc,32,45);
これで、黒く描画されることなく、希望通りになるはず。
772デフォルトの名無しさん:2008/01/29(火) 00:30:41
WM_PAINTが来ないときに
GDI使って画面描き換えるのは禁止ですか?
1秒間に60回とか
773デフォルトの名無しさん:2008/01/29(火) 00:34:19
ビットマップを読み込んでそのサイズにWindowをリサイズし、BitBltで表示する関数(RBF関数)を、WM_PAINTの中に入れていたのですが、
PAINTをそこそこの頻度で呼んでいたので「毎回ビットマップを読み込むのは頭悪いなぁ」と思い、PAINTの中のRBF関数をBitBltに替え、
GetSaveFileNameを使ってビットマップが選択された時だけ、RBF関数を呼び出すようにしました。

すると、今まで上手く動作していたのにいきなりBMPを選択してもWindowがリサイズされるだけでビットマップが表示されなくなりました。
PAINTの中で読んでいた時もGetSaveFileNameでファイルを選択できるようにしていたので、GetSaveFileNameが原因ではないはずです。
DeleteDC、DeleteObjectもきちんとできているはずなのですが・・・
なんどソースを見返しても原因が分からないのですが、何が問題か分からないでしょうか?
774デフォルトの名無しさん:2008/01/29(火) 00:35:44
別に書き換えたっていいけど更新が必要になった時点でWM_PAINTが来るし
来ないならバックグラウンドで書き換える意味がないと思う

WM_PAINTを定期的に発生させるほうがいいんじゃないの?
775デフォルトの名無しさん:2008/01/29(火) 00:45:30
>>772
書き換えてもいいけど、普通はInvalidateしたりして、WM_PAINTが来るようにする。
776デフォルトの名無しさん:2008/01/29(火) 00:48:14
>>772
書き換えても良いよ。毎秒20回でもそこそこスムーズに見えるよ。30回もあれば十分。
777デフォルトの名無しさん:2008/01/29(火) 00:54:38
同じものを表示し続けるのに書き換えなんて必要ない。
778デフォルトの名無しさん:2008/01/29(火) 02:54:17
DirectXだと普通にやってるけどな>必要のあるなしにかかわらず書き換え
779デフォルトの名無しさん:2008/01/29(火) 03:48:43
それは必要があるから更新内容がなくても更新してるんだと思うが
780デフォルトの名無しさん:2008/01/29(火) 04:30:28
タイミングをとるためとか?
781デフォルトの名無しさん:2008/01/29(火) 07:07:21
OpenGLでの描画は、WM_TIMERだな
あとPeekMessageでデッドタイムに描画するとか(コレは俺は嫌い)
782デフォルトの名無しさん:2008/01/29(火) 07:09:40
InvalidateRect(hwnd, NULL, TRUE);を一秒間に20回もやると、パチクリしまくりング
783デフォルトの名無しさん:2008/01/29(火) 08:29:48
アニメーション表示だろ。
Invalidaterectはアニメーション表示には不向きだろ。
普通はダブルバッファかな。
784デフォルトの名無しさん:2008/01/29(火) 09:34:25
メニュー項目を選択して、ダイアログボックスなんかを出すと
WM_KILLFOCUS と WM_ACTIVATEなんかはどういう順番で送られてくるの?
どっちも処理するってのはお勧めできない方法なんでしょうか?
785デフォルトの名無しさん:2008/01/29(火) 09:43:09
       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \  今日もまた、誰も呼んでないのに
  |     (__人__)    |  60fpsで描写する仕事が始まるお…
  \     ` ⌒´     /  
786デフォルトの名無しさん:2008/01/29(火) 09:44:10
つ[Spy++]
787デフォルトの名無しさん:2008/01/29(火) 09:50:50
>>786
そうだった
トンクスベリーハヤマ
788デフォルトの名無しさん:2008/01/29(火) 09:52:13
ChooseColor関数で表示する色の変更コモンダイアログボックスのタイトルの変更ってできないですかね?
789デフォルトの名無しさん:2008/01/29(火) 14:36:54
ChooseColorを呼ぶ前にWH_CBTしといてウィンドウ生成を捕まえる
790デフォルトの名無しさん:2008/01/29(火) 17:25:43
ゲームじゃね?
791デフォルトの名無しさん:2008/01/29(火) 18:24:47
はぁ?
792デフォルトの名無しさん:2008/01/29(火) 18:24:51
WH_CBTをきちんとComputer Based Trainingのために使ってるアプリってあるのかね?
793デフォルトの名無しさん:2008/01/29(火) 18:37:22
>>792
そういう目的ならWH_JOURNALPLAYBACKも一緒にインストールしろって事だろ
794デフォルトの名無しさん:2008/01/29(火) 20:27:10
フックプロシージャでできないか
795デフォルトの名無しさん:2008/01/29(火) 20:32:42
>>785
ドンマイ
796デフォルトの名無しさん:2008/01/29(火) 22:16:24
WM_MOUSEWHELLにおけるHIWORD(wParam)が正の値にしかならないんだが
if(HIWORD(wParam)<0)って比べ方は間違ってる?
797デフォルトの名無しさん:2008/01/29(火) 22:18:44
Use the following code to obtain the horizontal and vertical position:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
798デフォルトの名無しさん:2008/01/29(火) 22:19:35
>>771
言われた通り、hbit2の第一引数をhdcにしたところ
正常に画像が描画されました。本当にありがとうございます!

また、762や764のおっしゃる通り、自分がいかに勉強不足だったか
ということを深く痛感致しました。
一から勉強し直します、迷惑をおかけし申し訳ありませんでした。

しかしこういう板って敬語を使うべきか迷う…
799デフォルトの名無しさん:2008/01/29(火) 22:25:04
>>797
間違ってるぞ。
GET_WHEEL_DELTA_WPARAM(wParam)だよ。
つまり、((short)HIWORD(wParam))
800704:2008/01/29(火) 22:36:19
>>798
成功したという結果に満足して終わるのではなく、
ちゃんと理由を理解した上で、今後に活かして下さいな。
801デフォルトの名無しさん:2008/01/29(火) 23:31:18
HWNDから実行ファイルのフルパスを取得したいのですが、
そのようなことができるAPIってありませんか?
802デフォルトの名無しさん:2008/01/29(火) 23:37:00
>>801
GetWindowThreadProcessId→OpenProcess→NtQueryInformationProcess→ReadProcessMemory

とか言ってみる
803デフォルトの名無しさん:2008/01/29(火) 23:38:05
>>796
HIWORDで得られるのは符号無しなんだから、正の値にしかならんわな。
804デフォルトの名無しさん:2008/01/29(火) 23:39:42
>>802
おかげで、なんとかなりそうです
ありがとうございます!
805デフォルトの名無しさん:2008/01/29(火) 23:53:48
>>801
自分で実装することが目的でないなら先人の残したものを利用するのが賢い
http://techtips.belution.com/ja/vc/0022/

実装するのもわりと楽しいけどね
806デフォルトの名無しさん:2008/01/30(水) 00:00:17
なんかこのサイト、ここ数ヶ月つながらなくなってるらしい
すまんね とりあえずうp
http://www.hsjp.net/upload/src/up10301.txt
807デフォルトの名無しさん:2008/01/30(水) 00:15:52
GetWindowModuleFileNameは違う?
808デフォルトの名無しさん:2008/01/30(水) 00:24:59
>>805-806
なんとかなりそうと言った手前、実装できませんでしたとは口が裂けても言えなくて
txtからコードを引っこ抜いて移植したところ、思ったとおりの動作をしてくれました
本当にありがとうございます

>>807
レスありがとうございます
そんな素敵なAPIあったんですね
ただ、ちょっと試してみましたが、どうやらEXEだけでなく、DLLも拾ってしまうようで・・
またそのようなことがしたくなったときに、使ってみます
809773:2008/01/30(水) 00:45:25
本当に原因が分からなくて困っているので教えてほしいです。
2つの違いはReadImageFile関数をWM_PAINTで呼んでいるかGetOpenFileNameで呼んでいるかだけです。
醜いソースですが、どなたかお願いします。

http://u1.nsns.jp/src/up0565.zip.html
810デフォルトの名無しさん:2008/01/30(水) 00:46:39
GetWindowThreadProcessIdの後はToolhelp32かPSAPI使ったほうが楽
811デフォルトの名無しさん:2008/01/30(水) 02:26:49
>>809
原因が分からないとか言う前にデバッガで追えよ。
追ってみたら簡単に判明するじゃないか。

表示されない=WM_PAINT内のBitBlt()が失敗しているってこと?
なら失敗した原因は何?もしかして不正な引数があるから?
・・・とか、そういう風に手順を追って確かめてはみないのか?

それはそうと、猫を参考にしたようなソースだな。
必要以上にグローバル変数はあるし、基本設計からやり直した方が良いと思うが。
今回のバグは、これに起因する訳で。
812デフォルトの名無しさん:2008/01/30(水) 03:20:02
デバッガって使い方わからん
訳ワカメなアセンビリの記号みたいな羅列みせられたって分かんねーよ、ってのが初心者の俺の叫びです
813デフォルトの名無しさん:2008/01/30(水) 03:33:58
使ってるデバッガは何かわからんけど

Visual Studio であれば、
デバッグ開始すると、なんか謎のウィンドウがたくさんでてくるよな。
"ウォッチウ", "自動変数", "ローカル", "コマンド ウィンドウ" とか。
「デバッグ」メニューには "ステップイン", "ステップオーバー" とか出てくる。

これらを MSDN で調べれば何をするものかわかろう。

他のデバッガでも同様のステップを踏めばわかってくるだろう。
814デフォルトの名無しさん:2008/01/30(水) 04:06:29
それ以前にGetLastErrorシヨウヨ
815デフォルトの名無しさん:2008/01/30(水) 04:46:39
デバッガが使えるのと使えないのでは、糸電話と光ファイバーくらい違うから
デバッガの使い方を解説してる本でも買った方がいいかと。
816デフォルトの名無しさん:2008/01/30(水) 04:54:41
>>812
それは実際にアセンビリを読んでいるのだろう
817デフォルトの名無しさん:2008/01/30(水) 09:58:27
アセンビリかよ
818デフォルトの名無しさん:2008/01/30(水) 12:59:10
>>812
LSIC-86 の時代からデバッガーなんぞ使ったことがない。
全部自分で欲しい中間状況は、printf() で取る。
変なトレースは繰り返しのときはかえって不便。

以前は、DrWatson が逆アセを出してくれていたけど最近は
出なくなって不便。
819デフォルトの名無しさん:2008/01/30(水) 13:10:36
DLLで動的にポップアップメニューを生成しているのですが、
グローバル変数にHMENU g_hPopupMenuを置き、#pragma data_segで囲っても、
なぜかリセットされてしまいます
DLLでの値共有にはファイルマッピングオブジェクトを使用するしかないのでしょうか?
820デフォルトの名無しさん:2008/01/30(水) 13:13:07
アッセンビラーと聞いて
VisualStudioならF10ポチポチ押してステップ実行すりゃいいよ
821デフォルトの名無しさん:2008/01/30(水) 13:23:07
シンタックスハイライトってどうやって実装するんだろう。
822デフォルトの名無しさん:2008/01/30(水) 13:30:10
>>819
メニューハンドルってプロセス跨いで使えたっけ?
823デフォルトの名無しさん:2008/01/30(水) 13:54:00
>>821
リッチエディットでも使ってフォントと色変えればいい
予約語の登録はパターンマッチでも使って自力でやれ
824デフォルトの名無しさん:2008/01/30(水) 13:57:41
>>821
オーナードロー
825デフォルトの名無しさん:2008/01/30(水) 14:04:51
グローバルフックを特定プロセスでだけ無効にしたい場合に

DllMainで自プロセス名を見る→DllMainでFALSEを返す(ロードさせない)

という実装は正当?
826デフォルトの名無しさん:2008/01/30(水) 14:13:37
実行されている時点でロードは完了しているんだが・・・
827819:2008/01/30(水) 14:15:20
#pragma comment(linker, "/section:MYDATA,rws")
で共有セクション設定してないだけでしたごめんなさいごめんなさい

>>822
なんか問題なく表示できてます
HMENUとか共有使ったの初めてだからよくわからないけれど・・
828デフォルトの名無しさん:2008/01/30(水) 14:19:22
>>823
やっぱりリッチで自力か・・・。
829デフォルトの名無しさん:2008/01/30(水) 14:19:46
というかカーネルオブジェクトハンドル以外はプロセス跨げないんじゃ
830デフォルトの名無しさん:2008/01/30(水) 14:21:14
>>826
正当性はわからんが、DllMainを失敗させればフック自体は無効になるんでは?
831デフォルトの名無しさん:2008/01/30(水) 15:40:14
Direct3Dに使うウィンドウはWM_ERASEBKGND呼ばれますか?
832デフォルトの名無しさん:2008/01/30(水) 15:46:31
>>831
自分で調べろよ
833デフォルトの名無しさん:2008/01/30(水) 15:58:05
ここで聞くことを調べることだと勘違いしてないか?
834デフォルトの名無しさん:2008/01/30(水) 16:07:21
聞いたほうが速いだろ
835デフォルトの名無しさん:2008/01/30(水) 16:13:09
返事待つより自分でやってみたほうが早そうな
836デフォルトの名無しさん:2008/01/30(水) 16:14:11
わからないなら黙っていろよ。お前らに質問を邪魔する権利はない。
837デフォルトの名無しさん:2008/01/30(水) 16:16:01
いいから早く答えろよ
838デフォルトの名無しさん:2008/01/30(水) 16:16:15
「表現の自由」という権利があるもん
839デフォルトの名無しさん:2008/01/30(水) 16:19:47
自己解決しました、ありがとうございました。
840デフォルトの名無しさん:2008/01/30(水) 16:51:56
                           -――――-  、
                     '": : : : : : : : : : : : : : : : :丶
                  /: : : : : : : : : : : : : : : : : : : : : : :\
                 /: : : : : : : : : : : : : : : \: : : ヽ: : : : : :ヽ
                /: : : :./: : |: : : : : : : ヽ: : : :\ : : : : : : : : : : .
            _ _/ : : /: : l : : :l : :.|: : :{ : :.:|\:__: :ヽ: : :.<\/ 〉: ヽ
             ` /.: : : :| : : |: : : |: :j:l : : |\':l ̄\. :!ハ: :|: :\ く: : : ヘ
             |: :/: : | : : レ'⌒l: :八: : |  ヾ   ヽ| |.:l: : //\>. :│
             l: :! : : | : : |:.{ィてヘ \l    __  j/: :</: : : : : :.:トヽ
             l:/! : : | : : lVハi:::::ハ      〃 ̄ ` /: : : : : : : : : :.l:|
             l:∧ : :lヽ :ヽ ! Vr圦      /// /: : : : : : : : : : : リ
               \∨ハ:\ ゞ'´  ' _     /: : /: :/: :∧: /
              f゙ヽ      /: : : j:∧    ∨)   ∠: :./l: /イ : :/ V
             | }.    厶-= ア: : ゝ          イ_/^l |/     宿題だよ♪
          /ヽ |/^)     l: /V!: :/二7 弋r<   人  ヘ
       __/ ヽ| l /       '´   V/::::/{__/_j:_xj  / /:::::::::>,
       (_ _ ヽ ノ  }         /7::::::// ヾル' レ' /::::::::::/^\
      ヽ   ヽ  ノ          //::::_//  //|  /::::::::::/  / ヽ
       \   /ヘ       /l ヾ_:: ヾ、_ //l | 「:::`ヽ〃   /   l
         ∧/   ヘ       { :| /::/O::::://::l├┴―-{{.  /     |
       rく/     ∧     /  /::/:::::::::〈/::::Ll:::::::::O::/:|ヽ∨    │
       \     / ∧.   /   {:::{ :::::::::::::::::::::::::::::::::::/:: | ∧     ハ
841デフォルトの名無しさん:2008/01/30(水) 19:19:04
Sleep(INFINITE); って使い道あるのかね
842デフォルトの名無しさん:2008/01/30(水) 19:34:50
あるよ。
843デフォルトの名無しさん:2008/01/30(水) 20:17:37
お前を一生眠らせる効果があるんだ
844デフォルトの名無しさん:2008/01/30(水) 20:59:35
WaitForSingleObject(GetCurrentThread(), INFINITE); って使い道あるのかね
845デフォルトの名無しさん:2008/01/30(水) 21:11:12
>>841
自スレッドでは見た目上の無期限の間停止させておいて、
他のスレッドからそのスレッドをSleepから回復させるという
846デフォルトの名無しさん:2008/01/30(水) 21:43:05
>>826
>>830が正しい
普通はロードされても機能しないように実装すればOKだと思う
どうしてもというのならDllMainでCreateThreadしてその中でFreeLibraryAndExitThreadを撃てばアンロードはされる
ただし、フックでロードしたDLLをFreeLibraryするという事実がどう影響するかは知らない
847デフォルトの名無しさん:2008/01/30(水) 21:44:37
>>825宛てですた。。。
848デフォルトの名無しさん:2008/01/30(水) 22:18:52
> DllMainでCreateThreadして
> DllMainでCreateThreadして
> DllMainでCreateThreadして
849デフォルトの名無しさん:2008/01/30(水) 22:38:53
DLLMainではやっちゃいけない事が色々あってだな
850デフォルトの名無しさん:2008/01/30(水) 22:39:26
846だが何かまずい?
851デフォルトの名無しさん:2008/01/30(水) 22:42:36
orz レスのタイミングかぶった
これってスタティックリンクの場合、APIが依存するDLLをまだロードしてない可能性があるのでアクセス違反が起きますよー
って理屈ではないの?
852デフォルトの名無しさん:2008/01/30(水) 22:42:38
DllMainでCreateThreadとかフックDLLをFreeLibraryとか言っちゃうゆとり世代はWin95で開発してみればいいと思うw

てかXPSP2とかVISTAとかで自作ソフトが誤動作してキレるのって大抵そういう輩だからなー
853デフォルトの名無しさん:2008/01/30(水) 22:44:09
ゆとり世代はWin95のとき生まれてないだろwwwwwww
854デフォルトの名無しさん:2008/01/30(水) 22:44:44
ゆとり発見
855デフォルトの名無しさん:2008/01/30(水) 23:36:12
グローバル領域で LPSTR *test; int count;
関数内{
count=確保する数;
test =new LPSTR[count];
}
他の関数{
delete[] test;
}
とするとコンパイル時はエラーでないですが、実行するとdeleteしたところで
アクセス違反のエラーがでてしまうんですが何故でしょうか?
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)); というところでエラーが
でてしまいます。
test =new LPSTR[count];した関数内でdeleteしたらエラーはでないんですが
856デフォルトの名無しさん:2008/01/30(水) 23:44:33
>>807
そいつはNT系だとプロセスをまたいでは機能しないという問題があったような
857デフォルトの名無しさん:2008/01/31(木) 00:02:14
>>855
スレ違いもいい加減にしろよ?
858846:2008/01/31(木) 00:26:52
番号振るのでうzって人はNGしてください

DllMainでCreateThreadがまずいのは、
1.DllMainはシリアライズされる
2.CreateThreadはDllMainが制御を返さないと完全に開始しない(これはDisableThreadLibraryCallsを事前に使っていても同じ)
3.なのでDllMainで2.のスレッドでWaitするとデッドロックする
これがひとつ、拙い原因なのは解りました。

もうひとつがたぶん、
>アタッチの際、開発者が作成した DLL エントリポイント関数の本体は、スレッドローカル記憶域(TLS)の作成、
>オブジェクトの作成、ファイルのオープンなど単純な初期化作業だけを行うべきです。
のくだりで、その根拠としてLoadLibraryの問題を挙げているのですが、これは
>システムが自らの初期化コードを実行する前に使われる DLL で、このような不適切な呼び出しが発生する可能性があります。
のとあるので、フックのように動的にリンクされるDLLは当てはまらないのではないですか?

859773:2008/01/31(木) 00:30:01
>>811
これを機にデバッガを使ってみました
これでまた一つ賢くなれました
ありがとうございました
860デフォルトの名無しさん:2008/01/31(木) 00:56:33
>>859
でもWM_PAINT以下のデバッグって結構面倒なんだよな

ブレークポイント抜けたら、またWM_PAINTが飛んできてブレークポイントで止まったりとかw
デュアルモニタ環境とかにすればいいのかも
861デフォルトの名無しさん:2008/01/31(木) 01:19:41
テキストボックスから指定の行の文字列を取り出すのってどうやるの?

SendMessage(テキストボックスのハンドル,EM_GETLINE,取り出す行数,"ここがよく分からない");

調べたら「文字列を格納するバッファ」と書いてあったのでLPSTR型の変数を
入れてみたりもしたけどエラーでてしまう…
862デフォルトの名無しさん:2008/01/31(木) 01:42:39
>>861
バッファの先頭WORD(16bit)に、TCHAR単位でのバッファサイズを入れておく必要がある。
エディットコントロールのメッセージではたまにあるパターンなので覚えておくこと。
863デフォルトの名無しさん:2008/01/31(木) 02:09:09
WORDってことは64KB以上の行は途中で切れるのかな
864デフォルトの名無しさん:2008/01/31(木) 02:24:55
65536文字超える行ってすごいな
865デフォルトの名無しさん:2008/01/31(木) 03:25:20
>>862
ありがとう。バッファサイズを入れてから入れないといけないのね
調べてやってみたけどやっぱり上手くエディットボックスの文字が入ってくれない
勉強しなおしてきます
866デフォルトの名無しさん:2008/01/31(木) 09:08:54
アホ丸出しな質問かも知れんのでスマンけど
MCIでmp3を再生させてるんすけど、mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mop);てな感じで・・
これでも問題なく動くんですが、ファイル名に「〜」ていう文字が入ってると、エラーが起きるて再生できないんす。
一応mciGetErrorString関数でエラーの内容を表示させると、「MCIの初期化で問題が発生しました。」ってなってます。
なんでですやろ?wmpやその他のメディアプレーヤーでは再生できるんですが。
867デフォルトの名無しさん:2008/01/31(木) 09:11:30
>>865
windowsx.hをインクルードしてEdit_GetLineマクロ使えよ

> Edit controls: The copied line does not contain a terminating null character.
マジカよ・・・つーか何だその設計w
868866:2008/01/31(木) 09:13:45
866っす。
ちなみにANSIビルド、UNICODEビルドでも同じ症状です。
ファイル名はGetOpenFileName関数でダイアログを出して取得してます。

MCIって、ファイルによって再生完了後のMM_MCINOTIFYメッセージの内容(wParam)が
MCI_NOTIFY_ABORTEDになってたりするんですが、これも何でかわかりません。

MCIって邪道なんでしょうか・・・
869デフォルトの名無しさん:2008/01/31(木) 09:44:16
自分が使いこなせないものはバグがあるか邪道に決まってるよな
870デフォルトの名無しさん:2008/01/31(木) 12:06:05
PCの時計を設定するAPIって何でしょうか?
871デフォルトの名無しさん:2008/01/31(木) 12:10:26
SetLocalTime
872デフォルトの名無しさん:2008/01/31(木) 12:50:35
>>860
っAeroGlass

逆にWM_PAINTがなかなか飛んでこない(リサイズか最小化する必要がある)
873デフォルトの名無しさん:2008/01/31(木) 13:02:10
>>871
ありがとうございました。
874デフォルトの名無しさん:2008/01/31(木) 13:49:29
>>872
レイヤードウィンドウにすると2000/XPでもそうなるよ
875デフォルトの名無しさん:2008/01/31(木) 15:51:37
ドキュメントにそれらしき記載が見つからなかったので教えてください。

あるウィンドウが、WM_hogehogeの処理で非常に時間のかかる処理を行っていたとします。
その途中で、別スレッドがそのウィンドウに対してWM_nantokaを送った場合、そのメッセージ
処理はどのように動くのでしょうか。

1.
WM_hogehogeの処理と別のスレッドでWM_nantokaを伴ったウィンドウプロシージャが呼び出される

2.
WM_hogehogeの処理が終わるまでSendMessageがブロッキングされる
876875:2008/01/31(木) 15:52:44
書き忘れましたが、WM_nantokaを送る方法はSendMessageです。
877875:2008/01/31(木) 15:54:47
一応自前調査も書いておくと

>>複数のスレッド間で送信されたメッセージが処理されるのは、受信側スレッドがメッセージ取得コードを
>>実行したときだけです。送信側スレッドは、受信側スレッドがメッセージの処理を終えるまで、ブロック
>>されます(待機状態になります)。

とのことなので2.だろうとは思うのですが。
878デフォルトの名無しさん:2008/01/31(木) 16:03:39
例えSendMessageだろうと、いったんメッセージキューを経由する。
つまり受け取り側がGetMessageを呼ばない限りブロックされる。
879デフォルトの名無しさん:2008/01/31(木) 17:01:34
GetMessageだけではない。
詳しくは ttp://msdn2.microsoft.com/en-us/library/ms644927(VS.85).aspx
のMessage Deadlocksあたりに書いてある。
880デフォルトの名無しさん:2008/01/31(木) 17:48:01
>>875
3.
WM_hogehogeの処理が終わるまでWM_nantokaの処理がブロックされ、WM_nantokaの処理が終わるまでSendMessageがブロックされる
881デフォルトの名無しさん:2008/01/31(木) 21:00:29
フォルダの作成日時を得るにはどうしたらいいの。
882デフォルトの名無しさん:2008/01/31(木) 21:04:05
なんか最近似たような質問が多いなあ

>>881
GetFileTime
883デフォルトの名無しさん:2008/01/31(木) 21:10:41
ブロックされるからPostMessageで投げるんだ
884デフォルトの名無しさん:2008/01/31(木) 21:43:28
SendMessageTimeoutはマイナーAPI ?
885デフォルトの名無しさん:2008/01/31(木) 22:02:26
IsHungAppWindowの方がマイナーだと思う
886デフォルトの名無しさん:2008/01/31(木) 22:12:03
ほんとにマイナーAPIというか隠しAPIだな
887デフォルトの名無しさん:2008/01/31(木) 23:51:00
大好きなあの子を振り向かせるにはどうしたらいいの。
888デフォルトの名無しさん:2008/01/31(木) 23:55:58
C++ならfriend指定すればおk
889デフォルトの名無しさん:2008/01/31(木) 23:57:48
C++のfirendは相手にprivateな部分をみせるだけ

つまりあの子にちんこ晒す事ができるだけ
890デフォルトの名無しさん:2008/01/31(木) 23:58:23
じゃあファイルマッピングでstd::mapを共有するにはどうしたらいいの
891デフォルトの名無しさん:2008/02/01(金) 00:03:38
continueで人生をやり直したらおk
892デフォルトの名無しさん:2008/02/01(金) 00:13:37
ごめんちょっとふざけた

data_segだとSTLクラスの共有はできないと知ってファイルマッピングでやってみようと思ったんだけど、
std::map<int,char*>* hoge = MapViewOfFile(g_hFMhWndMap , FILE_MAP_ALL_ACCESS , 0 , 0 , 0);
hoge = new std::map<int,char*>;
でマップ作っても次アクセスするとエラーが出るんだ
893デフォルトの名無しさん:2008/02/01(金) 00:15:50
std::mapのアロケータも指定して、ファイルマッピングから
確保するようにする。別のプロセスでも、同じ仮想アドレスに
マッピングされるように工夫する、といけるような気がする。
894デフォルトの名無しさん:2008/02/01(金) 00:18:33
そこはplacement new使うとこじゃね
895デフォルトの名無しさん:2008/02/01(金) 00:23:41
>>893-894
ありがとう、やってみます
placement newとかはじめて知った・・奥が深い
896デフォルトの名無しさん:2008/02/01(金) 00:27:32
waveIn系で複数サウンドカード対応出来た奴いる?
(俺の環境はCreativeとHD Realtek)

ノイズ混じるかいきなりWIM_CLOSE送られるかで散々だ。
規定のデバイス使う分には問題無いんだけど
それ以外の使うとボロボロだよ

助けてママン
897デフォルトの名無しさん:2008/02/01(金) 00:53:17
>>895
お互いまったく同一のSTL実装じゃないとダメだよ。
898デフォルトの名無しさん:2008/02/01(金) 06:29:13
馬鹿な私にインスタンスハンドルとはどういうものか教えてください
インスタンスハンドルを必要とする処理(ウィンドウ生成等)が含まれるプロシージャ内で
static HINSTANCE hInst;

case WM_CREATE:
hInst = ((LPCREATESTRUCT)lParam)->hInstance;
ボタン生成;

と記述してボタンが押されたら新規ウィンドウを生成するプログラムなんですが
hInst=〜;が邪魔と言われてコメントアウトすると正常動作するのです
中身を定義しなくても正常動作するのが不思議でならないのですがどうしてでしょうか?
899デフォルトの名無しさん:2008/02/01(金) 06:49:26
>>898
たぶんインスタンスハンドルの知識は必要ない。
C/C++が理解できていないだけ。
900896:2008/02/01(金) 08:23:35
あれ?起きたら直ってた・・・
いろいろいじくったし俺の環境限定だったのかな?

すまん忘れてちょ
901デフォルトの名無しさん:2008/02/01(金) 12:41:00
質問です。

別のプロセスによってロックされて読み込み実行中のファイルを、
実行中に別のファイルとすりかえる機能を実現したいのですが、
具体的にどうすればよいのでしょうか?
902デフォルトの名無しさん:2008/02/01(金) 12:46:31
>>901
無理です。
903デフォルトの名無しさん:2008/02/01(金) 12:53:36
>>902
やっているソフトがあるのでできるはずです。ですが、方法が分かりません。
904デフォルトの名無しさん:2008/02/01(金) 12:55:48
通報しました。
905デフォルトの名無しさん:2008/02/01(金) 13:00:11
>>904
ウイルスではありません。
真っ当なソフトです。
906デフォルトの名無しさん:2008/02/01(金) 13:10:39
真っ当な方法では無いだろうな。
簡単にできたら問題だ。
907デフォルトの名無しさん:2008/02/01(金) 14:48:41
具体的にソフト名は何よ
実現できてもカーネルドライバのレベルだと思われる
908デフォルトの名無しさん:2008/02/01(金) 15:19:36
やろうと思えば普通にフックで実装できるよ。
適当なことを書いて誤魔化さないでくださいね。
909デフォルトの名無しさん:2008/02/01(金) 15:23:42
>>908
馬鹿発見
910デフォルトの名無しさん:2008/02/01(金) 15:27:23
お前らこの程度の事もできないのか?どんだけゆとりなんだよ!
911デフォルトの名無しさん:2008/02/01(金) 15:27:38
外部からコードを注入するだけならフックで可能だが
プログラム全体を完全に入れ替えるのは無理だろ

注入じゃねえぞ。「すり替え」だぞ
912デフォルトの名無しさん:2008/02/01(金) 15:32:25
>>907
Process Explorerというソフトです。
913デフォルトの名無しさん:2008/02/01(金) 15:33:33
>>912
それがやってることと君が言ってることは別の事なんだよ
914デフォルトの名無しさん:2008/02/01(金) 15:37:43
>>913
そうなんですか・・・
では、ちょっと視点を変えてみます。
別のプロセスでロックされたファイルにアクセスするにはどうすればよいでしょうか?
915デフォルトの名無しさん:2008/02/01(金) 15:40:12
>>912
Process Explorerでできるのって、そのプロセスが開いているファイルハンドルを強制的に閉じることだけじゃない?
「すり替え」なんて機能はProcess Explorerに無かったと思うけど。
916デフォルトの名無しさん:2008/02/01(金) 15:44:03
917デフォルトの名無しさん:2008/02/01(金) 15:45:50
アホな質問者が現れるとアホな回答者が自爆するのを見れて面白いね
>>908>>910とか
918デフォルトの名無しさん:2008/02/01(金) 15:47:39
という事にしたいのですね:-)
919デフォルトの名無しさん:2008/02/01(金) 15:54:31
ここの人には簡単すぎてあくびものの質問かもしれないけれど、
WM_USER使って作ったメッセージをSendMessageやPostMessageで送る場合、
第2引数と第3引数のWPARAM、LPARAMには何入れてもいいの?
920デフォルトの名無しさん:2008/02/01(金) 16:04:41
>>919
自分で決めておk
921919:2008/02/01(金) 16:11:16
ありがとうございます
922デフォルトの名無しさん:2008/02/01(金) 17:00:05
デスクトップのスクリーンショットをbmpに保存するには、
どうしたらいいのでしょうか?
923デフォルトの名無しさん:2008/02/01(金) 17:04:10
>>922
GetDesktopWindow
924デフォルトの名無しさん:2008/02/01(金) 17:06:49
キーボードのPrtScのボタン押す。
925デフォルトの名無しさん:2008/02/01(金) 17:15:10
デスクトップのDCを得て、デスクトップのサイズでBITMAPを作り
メモリDCに選択してデスクトップのDCからBitBltして
DDBをGetDIBits等でDIBに変換してファイルに保存

って今はもっと簡単なやりかたあるかな?
926デフォルトの名無しさん:2008/02/01(金) 17:19:28
画面サイズのDIBSectionをCreateしてBitsにアクセスしながらファイルに吐き出したらいいんじゃないかな
ていうかこのスレこんな質問の仕方でも真面目に答える人多いのな
927デフォルトの名無しさん:2008/02/01(金) 18:14:19
こういう質問の仕方をする場合、大抵GDIの扱い自体を知らないから、
>>925-926みたいなヒントを貰っても理解出来ないんじゃね?
928デフォルトの名無しさん:2008/02/01(金) 18:58:19
理解できなきゃ調べろ、でOK。
少なくとも具体的な方法は教えてもらったわけだし。
方法がサッパリ判らない状況よりは大分ましになっただろ。
929デフォルトの名無しさん:2008/02/01(金) 19:11:45
LoadLibraryでもらったHMODULEはCloseHandleで開放できますか?
930デフォルトの名無しさん:2008/02/01(金) 19:13:15
何のためにFreeLibraryがあると(ry
931デフォルトの名無しさん:2008/02/01(金) 19:26:06
敢えてFreeLibraryを使わず、CloseHandleで開放できないかって聞いてるんじゃまいか?
932デフォルトの名無しさん:2008/02/01(金) 19:29:44
ATLのCHandleをつかいたいのです。
933デフォルトの名無しさん:2008/02/01(金) 19:35:36
あんな程度のラッパなら、CLibraryでもCDllでもすぐ書けるだろ。
934デフォルトの名無しさん:2008/02/01(金) 20:00:55
int i;
int * pi;

i=10;
pi = &i;

ってやるとエラーが。
なんでintのアドレスがintのポインタに入らないんでしょうか?
935デフォルトの名無しさん:2008/02/01(金) 20:13:51
スレ違いです
936デフォルトの名無しさん:2008/02/01(金) 20:23:09
>>934
普通にエラーでないし文法的な問題はない。
スレ違いだからこれ以上は書かないでね。
937デフォルトの名無しさん:2008/02/01(金) 20:27:07
>int i;
>INT_PTR * pi;
>
>i=10;
>pi = &i;
>
>ってやるとエラーが。

どうでもいいが、これならスレ違いではないかもなw
938デフォルトの名無しさん:2008/02/01(金) 21:25:31
0を入れるとS_OKみたいな
エラーの名前が出てくる関数はないですか?
939デフォルトの名無しさん:2008/02/01(金) 21:27:00
FormatMessage
940デフォルトの名無しさん:2008/02/01(金) 21:57:31
DXGetErrorString9
941デフォルトの名無しさん:2008/02/02(土) 00:24:36
>>914
Volume shadow copyのことかな?
942デフォルトの名無しさん:2008/02/02(土) 00:31:53
さすがにそんな事は聞いてないだろ
943デフォルトの名無しさん:2008/02/02(土) 02:47:21
MSDNライブラリに cchSize is the number of characters とか書いてある場合、
「文字数」と訳せるけど、サロゲートペアの場合は2つのTCHAR(WCHAR)で1文字という計算になるの?
944デフォルトの名無しさん:2008/02/02(土) 03:27:57
WinAPIの関数を逆引きできる本かサイトあったら便利なんだけど、何か無いですか?
945デフォルトの名無しさん:2008/02/02(土) 03:38:35
www.google.com
946デフォルトの名無しさん:2008/02/02(土) 03:48:00
そのあたりの文字数は、要するにWCHARの数のこと。
947デフォルトの名無しさん:2008/02/02(土) 06:42:23
>>944
PSDKではダメなん?
948デフォルトの名無しさん:2008/02/02(土) 16:41:13
第一条
機動刑事ジバンは、いかなる場合でも令状なしに犯人を逮捕することができる
第二条
機動刑事ジバンは、相手がバイオロンと認めた場合、自らの判断で犯人を処罰することができる
(補足)場合によっては抹殺することも許される
第三条
機動刑事ジバンは、人間の生命を最優先とし、これを顧みないあらゆる命令を排除することができる
第五条
人間の信じる心を利用し、悪のために操るバイオロンと認めた場合、自らの判断で処罰する事ができる
第六条
子どもの夢を奪い、その心を傷つけた罪は特に重い
第九条
機動刑事ジバンは、あらゆる生命体の平和を破壊する者を、自らの判断で抹殺することができる
949デフォルトの名無しさん:2008/02/02(土) 22:07:57
で?
950デフォルトの名無しさん:2008/02/02(土) 22:28:33
あれくまたんありがとーーーーー><
私女だけど今度カレー作りに行ってあげるよ
951デフォルトの名無しさん:2008/02/02(土) 22:32:25
誤爆☆
952デフォルトの名無しさん:2008/02/02(土) 23:16:09
>>950なんという技術者ネカマ・・・
953デフォルトの名無しさん:2008/02/02(土) 23:40:03
timeSetEvent()使って10ms周期に決まった処理させてるんですけど
PCに負荷かけて10ms周期だと処理が間に合わなくなった場合、タイマってどう動作するんですか?

間に合わなかった場合その周の処理は破棄されるか、数ms遅れでも実行されるかのどっちかだと思うんですけど…。
954デフォルトの名無しさん:2008/02/02(土) 23:53:02
OSによる。
955デフォルトの名無しさん:2008/02/03(日) 00:05:51
NT系統は、平均発生数を満たすように、
遅れて連発実行される、ってどっかで聞いた。
956デフォルトの名無しさん:2008/02/03(日) 00:07:50
LPSTRってchar*のポインタ演算や*test='a'みたいな変更出来ない版?
参考書見てもcharやTCHARで済ましててLPSTR使ってないからどういう時に使えばいいのか
わからないんだけど、例えばどういう風に使うものですか?
957デフォルトの名無しさん:2008/02/03(日) 00:09:22
ファイルをコピーするときのバッファサイズを設定する方法ってWin32APIの中にありますか?
958デフォルトの名無しさん:2008/02/03(日) 00:19:20
>>956
参考書順繰りに読めよ
LPSTRをcharやTCHARで済ましてるって所が全てを物語ってるだろ
959デフォルトの名無しさん:2008/02/03(日) 00:28:11
つーか、LPSTRってchar*のtypedefだし。
960デフォルトの名無しさん:2008/02/03(日) 00:33:13
>>956
LPSTRって何をtypedefしたものか知ってる?
さらにLPCSTRやらLPTSTRやらLPCTSTRやら色々あるけど
その中の「C」「T」「LP」が何を意味しているかも。
961960:2008/02/03(日) 00:35:31
先に答え書かれてたorz
962デフォルトの名無しさん:2008/02/03(日) 00:44:30
LPはロングポインタ
Cはコンスト
TはUNICODE
STRは文字列

でおk?
963デフォルトの名無しさん:2008/02/03(日) 00:47:23
LPSTR : long pointer to string
LPWSTR : long pointer to wide string
LPTSTR : long pointer to text string
LPCSTR : long pointer to const string
LPCWSTR : long pointer to const wide string
LPCTSTR : long pointer to const text string
964デフォルトの名無しさん:2008/02/03(日) 00:50:22
>>962
Unicode は W (Wide)
965デフォルトの名無しさん:2008/02/03(日) 00:51:12
Tはテキストか
966デフォルトの名無しさん:2008/02/03(日) 00:52:29
ロングって何がロングなんだろ、って人もいるのかね。
最近は 64 ビット環境があるからそうでもないか。
967デフォルトの名無しさん:2008/02/03(日) 00:54:02
時々WPARAMとLPARAMについて質問が出るな
968デフォルトの名無しさん:2008/02/03(日) 00:54:46
もう Word サイズじゃないのに WPARAM
969デフォルトの名無しさん:2008/02/03(日) 01:19:01
ありがとうございます。LPSTRってchar型のポインタの構造体なんですね
未だにどういう時に使うのか分からないけどとりあえず解決しました
970デフォルトの名無しさん:2008/02/03(日) 01:21:51
どこから構造体が出てきたんだw
971デフォルトの名無しさん:2008/02/03(日) 01:31:55
char型のポインタの再定義をしてるのか!
やっと分かりました。ありがとう
972デフォルトの名無しさん:2008/02/03(日) 01:33:06
SZ
973デフォルトの名無しさん:2008/02/03(日) 01:43:40
char *p;
LPSTR lp;
と宣言したとすると*をとった「p」と「lp」が同じ意味
*lpとするとポインタ演算も一文字単位の代入もできる
974デフォルトの名無しさん:2008/02/03(日) 03:52:51
ボタンにアイコンを描写したくていろいろ調べた結果
ボタンにメッセージを送れということで

リソースにボタン(アイコン表示チェックボックスチェック)とアイコンを作ってWM_INITDIALOGで
::SendMessage(GetDlgItem(hWnd, IDC_BUTTON1),
          BM_SETIMAGE, IMAGE_ICON, (LPARAM)GetDlgItem(hWnd, IDI_ICON1));
とやったんだが出ないのはなぜでしょうか?

VC++ 6.0, OSはXPです。
何が間違っているかさっぱりなので誰か指摘お願いします。
975デフォルトの名無しさん:2008/02/03(日) 04:22:16
描写とか言っちゃうプログラマって・・・w
976デフォルトの名無しさん:2008/02/03(日) 04:30:59
いいからさっさと教えろよ
977デフォルトの名無しさん:2008/02/03(日) 05:25:21
お前がさっさと教えろよ
978デフォルトの名無しさん:2008/02/03(日) 05:26:09
GetDlgItemでアイコン取れんの?
979デフォルトの名無しさん:2008/02/03(日) 07:51:15
HWND GetDlgItem(HWND,int);
~~~~
(HICON) SendMessage(GetDlgItem(hWnd, IDI_ICON1),BM_GETIMAGE,IMAGE_ICON,0);
980デフォルトの名無しさん:2008/02/03(日) 15:54:11
&rha
981デフォルトの名無しさん:2008/02/03(日) 22:49:48
通知領域のアイコンをクリックしたときにメニューを表示させたいと思っています。
下のようにメニュー項目の1個がサブメニューを持っていて、

項目A
項目B --> 項目D
項目C 項目E
項目F

こんな感じで、項目ABCは固定の文字列で、DEFはそのつど変わる感じなのですが。
これを作るとなると、ABCも含めてInsertMenu()あたりを使わないと実現できないのでしょうか?

できれば固定のABCはリソースファイルで持っておけたらいいなと思うのですが
982981:2008/02/03(日) 22:54:32
orz..

こんな感じのを書きたかった。

A
B → D
C   E
    F
983デフォルトの名無しさん:2008/02/03(日) 23:06:48
CreateWindowで指定するウィンドウサイズは、
タイトルバーやウィンドウの縁の幅も含んでいるのでしょうか?
984デフォルトの名無しさん:2008/02/03(日) 23:09:42
>>981
ABCはリソースでできるでしょ。
「いいなと思うのですが」なんて言わずに
実際やってみればいいのに。
985デフォルトの名無しさん:2008/02/03(日) 23:09:48
  〜皿


    只只  只只只只
    只只  只只只
      |

      凸
986デフォルトの名無しさん:2008/02/03(日) 23:14:53
>>983
含むよ
987デフォルトの名無しさん:2008/02/03(日) 23:23:00
DrawTextで最初の が表示されないですが。
どうすればそのまま表示できますか?
988デフォルトの名無しさん:2008/02/03(日) 23:50:59
証券会社が作ってるソフトがあって、
それに自動ログインさせるソフトを作ろうとしてます。

ログインID  [ ]
パスワード  [ ]
                  OK

みたいな画面です。

「ログインID」って文字列はspy++で見たところ、
staticだったのでFindWindowでウィンドウハンドルを取得して、
書き換えることが出来たのですが、
その横のEditの部分のウィンドウハンドルを取得することが出来ませんでした。
どうすればいいのでしょうか
989デフォルトの名無しさん:2008/02/03(日) 23:53:00
>>988
何がやりたいのか書かないと意味不明
990デフォルトの名無しさん:2008/02/04(月) 00:01:05
>>989
やりたい事はウィンドウハンドルを取得して、文字列を突っ込みたいのです。

ログインID  [   ]
↑       ↑
Static  Edit

となっていて、
「ログインID」の方のウィンドウハンドルを取得してSetTextで文字列を変更するのは出来る。

でもEditの方はウィンドウハンドルが取得出来ないので、
Editの場合は、ウィンドウハンドルを取得するのに何かコツがいるのか知りたいのです。
991デフォルトの名無しさん:2008/02/04(月) 00:03:55
ダイアログボックスにエディットボックスを乗せCreateDialogで表示させた時
エディットボックスに来てるキー入力のメッセージを取得するにはどうすれば良いのでしょうか?

環境はOSがXPで、VC++6.0を使ってます
m(_ _)m
992デフォルトの名無しさん:2008/02/04(月) 00:06:46
WM_INITDIALOGあたりでEditBoxをサブクラス化すれば。
993デフォルトの名無しさん:2008/02/04(月) 00:09:37
GetWindowText
GetDlgItem
994デフォルトの名無しさん:2008/02/04(月) 00:15:52
>>990
spyでウィンドウハンドル取れないなら、自前で取れる気がしないな。
子ウィンドウ含めて取れるだけのウィンドウハンドル取ってみて、
セットテキストしてみて調べる。
それでもダメだったらSendInputぐらいしか思いつかない。

マルウェア対策で疑似Editを自作してるのかもね。
995デフォルトの名無しさん:2008/02/04(月) 00:48:54
>>968
64bit環境のWPARAMは64bitだな。
WPARAMにポインタを入れてるメッセージがあるから
996デフォルトの名無しさん:2008/02/04(月) 02:38:38
時期も時期なので、次スレ立ててきますね。
997デフォルトの名無しさん:2008/02/04(月) 02:46:53
Win32API質問箱 Build62
http://pc11.2ch.net/test/read.cgi/tech/1202060403/

立てたのはいいんだけど、過去ログリストが貼れない…
998デフォルトの名無しさん:2008/02/04(月) 12:27:24
手伝ってあげないんだからね!
999デフォルトの名無しさん:2008/02/04(月) 12:36:46
ツンデレキター
1000デフォルトの名無しさん:2008/02/04(月) 12:50:44
カレーに1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。