トップページ⇒tech
1001コメント347KB

Win32API 質問箱 Build6

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。

過去スレ
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html

参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0002デフォルトの名無しさんNGNG
2ゲットし放題!
0003デフォルトの名無しさんNGNG
前スレの>>968
是非お願いします。

http://210.153.114.238/cgi-bin/upbbs2/imgboard.cgi
ここにUPして頂けますか?
0004デフォルトの名無しさんNGNG
>>3
猫でも〜にもあったが、あれじゃいかんの?
0005デフォルトの名無しさんNGNG
>>前スレ973

それが出来ないから困ってるんですよ
たとえばMSゴシック11ptだと全角の幅=半角*2にならないので、
GetTextExtentPoint32等を含む通常のAPIでは描画結果がずれるのです。

なので、手動で補正もしくはExtTextOutで強制的に幅を指定しないといけないのですが、
自前で調整するには文字が半角か全角かを判別しなければなりません。
で、SJISだけなら問題なかったのですが、UNICODE(UCS2)だと、
すべての文字が2byteで表されるわけで、困っちゃったな、ということです。

プロポーショナルだと楽なんですが、そういうわけにも行かないので。
0006前スレ959NGNG
取得したいのは論理単位でです。
おなじ12ptでもフォントによってTEXTMETRICのtm.tmHeightは異なるので
上限があるのかなと思ったのですが…

高さの上限は決められていないのでしょうか。
わかる方お願いします。
0007デフォルトの名無しさんNGNG
>>3
http://210.153.114.238/img-box/img20020921043840.zip
うぷした。
パスワードはsplitterね。

ウインドウクラスにControlを継承させてからSetControlする。
それから、HandleMessageに適切なメッセージを渡せば使えるはず。
0008デフォルトの名無しさんNGNG
>>5
Unicode文字をANSIに変換してバイト数を得るのはまずいのか?
でもあんただったらそのくらい分かりそうから、ボツなんだろうな。
0009デフォルトの名無しさんNGNG
>>4
あの方法で、3つや4つに分割できますか?
0010デフォルトの名無しさんNGNG
>>7
どうもありがとうございます
早速DLさせてもらいます
0011デフォルトの名無しさんNGNG
>>6
フォント作成時にサイズを-xとかにしたら?
0012デフォルトの名無しさんNGNG
>>8
UNICODE化の目的は似非I18nなので、
UNICODE->ANSI(SJIS)にマッピング出来ない文字もあるわけでして…
0013デフォルトの名無しさんNGNG
スクロールバーをつまんでで移動したとき
漏れのアプリだとボタンを話すまで再描画されないのだが
他のアプリは バーが動くとすぐ描画されてる気がする

なんか指定しないといかんの?
0014デフォルトの名無しさんNGNG
SetScrollInfoでSIF_TRACKPOSを指定してないとか
0015 NGNG
>>5
固定ピッチなら、明らかに半角であると分かっている文字の幅より
広ければ全角とみなして構わないのではないか?
0016デフォルトの名無しさんNGNG
ListViewで、特定の行だけ色を変えたいんですが
どうすればいいでしょうか。
ListView_SetTextColorとかだと全体が色変わっちゃうし。
0017デフォルトの名無しさんNGNG
>>15
なんかしょぼ〜んだけど、以外とそれが正解クサイかも
全角半角の整合が取れなくても、それぞれ半角同士全角同士は整合取れてるはずだから。
サンクス!
0018デフォルトの名無しさんNGNG
>>5
Unicodeの半角全角の表。これ使ってみる?
http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt
説明はこれ。
http://www.unicode.org/unicode/reports/tr11/
0019デフォルトの名無しさんNGNG
>>前976 >>18
どうもです。
しかし、これを見ると文字幅は一意に決定することが出来ないようですね。
emacsのように独自の多言語コードに変換するのがスッキリしているみたいです。
FIXED PITCHという文化とWin(覗くXP)のフォントが憎くなってきました。
0020デフォルトの名無しさんNGNG
>>6
LOGFONTの説明を見れ。フォントマッパは指定されたサイズを越えない
最大のフォントを探すとある。だから、12ptと指定したなら最大のサイズは
12ptなんじゃないの? 論理単位で。
0021ねこまNGNG
CreateFile についてなのですが,以下に
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_createfile.htm
1.ハードディスク x を開くには、lpFileName パラメータで \\.\PHYSICALDRIVEx と指定します
2.フロッピーディスク x や、ハードディスクのパーティション x を開くには、lpFileName パラメータで \\.\x: と指定します
と書かれています.

1.の,「ハードディスク x を開く」
2.の,「ハードディスクのパーティション x を開く」
という違いがわからないのですが,このあたり明るい方教えてください.
ここ読めとかでもいいです.

やってみると,うちでは
\\.\PHYSICALDRIVEx はハードディスクのすべてで失敗し,フロッピードライブである A と B で成功する
\\.\X: ハードディスクのすべてで成功する
となりました.
0022デフォルトの名無しさんNGNG
1.はMBRを含むハードディスク全体
2.はその中の各パーティション
どうして失敗するのかは知らん
0023デフォルトの名無しさんNGNG
>>21
\\.\PHYSICALDRIVE0 なら一台目のハードディスクという意味では
0024デフォルトの名無しさんNGNG
976 :デフォルトの名無しさん 本日のレス :02/09/21 11:21
>>970
Unicodeか・・・ちなみにギリシア文字(アルファとかベータとか)は全角だと思いますか?半角だと思いますか?
0025デフォルトの名無しさんNGNG
>>21
2. の方は日本語訳が間違ってるよ。英語版の方では...

When opening a volume or floppy drive, x, the lpFileName
string should be of the form \\.\x:.

となっていて、パーティションと言う言葉は出てこない。
参照: ttp://msdn.microsoft.com/library/en-us/fileio/base/createfile.asp

ただ日本語訳のほうもその後を読めば、\\.\X はドライブ指定であること
は、普通わかるはず。

失敗する時は、エラーコードぐらい示したら ?
どうせ、Windows 9x でやってるか、Windows NT の一般ユーザー権限で
やっていると言うオチだろうが...。
0026デフォルトの名無しさんNGNG
Win32APIの書籍でお勧めなのってありませんか?
0027ねこまNGNG
>>22さん
DISK_GEOMETRY の内容を表示すると,確かにそうですね!なるほど
同じハンドルしか返ってこないし

>>23さん
MSDN より
>\\.\PHYSICALDRIVE2
>ユーザーのコンピュータの 3 番目の物理ドライブのハンドルを取得します。
なのでその通りでした.勘違いしてました.

どうもありがとうございます.
0028デフォルトの名無しさんNGNG
>>26
Windows95 APIバイブル1,2
0029デフォルトの名無しさんNGNG
\\.\X: ハードディスクのすべてで成功する

と書いているのですから,読めばそんなオチではない事
は、普通わかるはずでは?
0030デフォルトの名無しさんNGNG
>>29
> 読めばそんなオチではない事は、普通わかるはずでは?
これは、Windows9x の方か ? 権限の方か ?
確かに Windows9x は、\\.\x もダメみたいだな。ちょっと勘違いしてた
よ。

でも、そんなことぐちゃぐちゃ言ってる暇あったら...
> 失敗する時は、エラーコードぐらい示したら ?
の方をやってみたらどうよ。
0031デフォルトの名無しさんNGNG
Windowの画面全体をメニューバー(マウスでドラッグすると移動できる)
みたいにするにはどうすればいいんでしょうか?

Tcalenderのようなメニューバーはなくて画面表示のみ、
それで、画面をクリックしながら動かせば移動が可能、とやりたいのです。
0032デフォルトの名無しさんNGNG
メニューバー?タイトルバー?
003331NGNG
すみません。
タイトルバーのことです。
タイトルバーもメニューもない、内容だけのWindowを作って、
なおかつそれをドラッグで移動させたいのです。
0034デフォルトの名無しさんNGNG
>>33
case WM_NCHITTEST: return HTCAPTION;
0035デフォルトの名無しさんNGNG
WM_NCHITTESTでHTCAPTIONを返す
FAQだな
003634NGNG
かぶった
0037デフォルトの名無しさんNGNG
>>16
NM_CUSTOMDRAWを調べよう。

>>33
WM_NCHITTESTに対して常にHTCAPTIONを返すとか。
003831NGNG
>>34さん、>>35さん、
できました!
2時間悩んでいたので感激です!!!
どうもありがとうございました。
003937NGNG
さらにかぶった。鬱。
004031NGNG
>>37さん、ありがとうございます。
FAQだったのですね。検索が甘く失礼しました。
0041デフォルトの名無しさんNGNG
>>11
そのxをどうやって求めるかを知りたいのですが・・・
0042デフォルトの名無しさんNGNG
>>41
xは自分が作りたいフォントのサイズなのだが。
0043デフォルトの名無しさんNGNG
>>42
いやあの、あるサイズのフォントを作りたいのでは無くて、高さを知りたいんです。
例えば12ptの任意のフォントで描画された文字列を矩形で囲むとしたら
その矩形の高さをどう求めたらよいのかということです。
矩形の高さはポイントによって固定したく、
12pt→RECT rc12;
13pt→RECT rc13;
 :
 :
と対応させて矩形を表します。
rc12内へ12ptサイズのフォントを表示させれば、どんなフォントでも上下が
はみ出さずに表示できるようにするには、rc12の高さをどう設定すればよいのでしょうか。 
0044デフォルトの名無しさんNGNG
>>43
ねぇねぇ、もしかしてポイントサイズからドットサイズへ変換する式がわからないとか言う話?
0045デフォルトの名無しさんNGNG
フォントサイズといえば、CreateFontのnHeightパラメータの説明、

0 指定された値をデバイス単位に変換し、それを利用可能な各フォントのセルの高さと比較します。
<0 指定された値をデバイス単位に変換し、その絶対値を利用可能な各フォントの文字の高さと比較します。

これ、思いっきり謎なんだけど、誰か解説出来る人いますか。
昔、本で高さには負数を入れろと書いてあったのを覚えているんだけど、
絶対値で比較されるなら差がないと思うんだけど、どうだんでしょ。
0046デフォルトの名無しさんNGNG
>nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

ちなみに、MSDNの例では負数を入れてますね。

旧スレが上がっているのでage
0047デフォルトの名無しさんNGNG
>>45
正だったらフォントの (* セル *) の高さ。
負だったらフォントの (* 文字 *) の高さ。

文字の高さ (em height としても知られている) とは、文字セルの高さ
から内部レディング (アクセント記号などのためのスペース) の高さを
引いたものです。
0048デフォルトの名無しさんNGNG
>>47
レスどうもです。
文字の大きさを基準にスペースを決定したい場合は負数で、
スペースを基準に文字を収めようとする場合には正の数ということですね。
0049デフォルトの名無しさんNGNG
>>48
ちょっと違う、 Á, Ö みたいにアクセント/ウムラウト等の文字の上につ
く記号のためのスペースを含むかどうか。(もちろん、文字としては含まな
い、セルとしては含まれる。)
ttp://amalfi.dis.unina.it/~carlosan/F3+BD/chap2/default.htm
の真中辺の Fig. 2-3 を参照のこと。
0050デフォルトの名無しさんNGNG
>>49
えっと、混乱してきました。
文字の高さ = otmMacAscent + otmMacDescent
セルの高さ = otmMacAscent + otmMacDescent + otmMacLineGap = tmHeight + tmExternalLeading
ですよね?

# 記号のスペースがtmInternalLeadingって事ですよね。
tmHeightにはtmInternalLeadingが含まれますが、
tmHeightを基準にするか(セル)、tmHeight - tmInternalLeading(文字)を基準にするかと言うことでしょうか?

そうだとすると、US ASCIIとかSJISの文字を表示するときはスペースの利用効率で負数を使って、
ウムラウト文字を含むような西欧文字を表示するときには正の数を使う、ってことですか。
0051デフォルトの名無しさんNGNG
最後の2行はなんか違う気がしてきました、
読み捨てて下さい
0052デフォルトの名無しさんNGNG
>>43
君がッ
LOGFONTのヘルプを見るまでッ
僕はッ
LOGFONTのヘルプを見ろと言うのをやめないッ!!
0053デフォルトの名無しさんNGNG
>>50
> セルの高さ = otmMacAscent + otmMacDescent + otmMacLineGap
> = tmHeight + tmExternalLeading
これは、違う。
セルの高さ = 文字の高さ + tmInternalLeading
 = otmMacAscent + otmMacDescent + tmInternalLeading
詳細は、
ttp://www.topposystem.co.jp/DL/Win32API/font/Font09.htm
の下のほうの図を参照のこと。
0054デフォルトの名無しさんNGNG
>>53
馬鹿におつきあい頂きありがとうございました。
それぞれの値が意味する物はわかりましたが、使い分けがさっぱりだったりします。
0055デフォルトの名無しさんNGNG
>>44
矩形の高さは
 MulDiv(m_nFontSize, pDC->GetDeviceCaps(LOGPIXELSY), 72)
で計算したのですがArial Blackなどの一部のフォントだと下が切れてしまうんです。
フォントは
 lf.lfHeight = -MulDiv(m_nFontSize, pDC->GetDeviceCaps(LOGPIXELSY), 72);
で高さを指定しています。

lf.lfHeightに入れる値を正数にすれば矩形内には収まりますが、
それだとワードパッドで表示した同じポイントのフォントより明らかに小さく描画されてしまいます。

というわけでこの方法ではうまくいかないものだと思い、ここで質問させていただきました。
0056デフォルトの名無しさんNGNG
それはつまりワードパッドと同じ大きさのフォントにすると下が切れるってことだろ
ここで聞いて解決するような問題なのか?
0057デフォルトの名無しさんNGNG
AGEテオキマス
0058デフォルトの名無しさんNGNG
クソスレageんなヴォケ
0059デフォルトの名無しさんNGNG
>>56
ワードパッド(に限らずIEや他のペイントソフトなど)と同じポイントを指定してるので
できれば同じ大きさで描画されて欲しいです。
0060デフォルトの名無しさんNGNG
スライダーコントロールの色を指定したいのですが、やり方がわかりません。
システム色ではなく、赤とか青とかいろいろな色で作りたいのです。
ご存知の方、教えてください。

よろしくお願いします。
0061デフォルトの名無しさんNGNG
Win95以降に使えるようになったコモンコントロールの
リファレンスみたいなのが載ってる本はないでしょうか?

MSDNはその部分日本語化されてないし、
ネットで探しても、ごく一部分だけの解説とかしか
見つからないのです。
0062デフォルトの名無しさんNGNG
検索しても見つからんなら大人しく英語版読むのが吉。
あと具体的にどのコントロールのことを知りたいのか書けば
知ってる奴が教えてくれると思う。
0063デフォルトの名無しさんNGNG
>>59
で、切れてもいいのか?
お前が何をやりたいのかさっぱりわからんのだが。
006461NGNG
たしかに、具体的にやりたいことがあってそのやり方が分からない
という時なら、それで事足ります。

でも、たまに暇な時に何となく説明を読んでたら
「おお、このコントロールにはこんな機能があったのか!」
みたいな便利機能発見して嬉しくなることができないなぁと。
0065デフォルトの名無しさんNGNG
>>61
MFCのドキュメント。
SDKとの対応がだいたい想像付く。その逆も。
006661NGNG
>>65
成程!
それは盲点でした。
ありがとうございます。
0067デフォルトの名無しさんNGNG
>>64
なんとなく読むだけの暇があるんなら最初から英語版に目を通せや・・
0068デフォルトの名無しさんNGNG
>>7
うまく出来ました!
とても参考になりました。
ありがとう。
0069デフォルトの名無しさんNGNG
>>63
切れないように。矩形内に収まるように。と書いてあるが。
0070デフォルトの名無しさんNGNG
自作でエディットコントロール見たいな奴を作ろうと思ったんですが、
WM_CHARを取ろうと思っても親にSendMessageしてもらわないとできません。
標準のエディットコントロールでは、そんなことせずにできるんですが、
どうやったらいいのでしょうか。
RegistClassあたりでそういうのがあるんでしょうか。
0071デフォルトの名無しさんNGNG
>>70
サブクラス化すればいいだけじゃないの?
007270NGNG
>>71
サブクラス化とは何でしょうか?
007370NGNG
>>72
そこまでバカではない。
>>71
エディットコントロールをですか?
それじゃ意味が無いような。
0074デフォルトの名無しさんNGNG
意味無いならやめろ。
0075デフォルトの名無しさんNGNG
>>70
ダイアログに置いてあるなら WM_GETDLGCODE をヘルプで見てみるとよいよ
自作のウィンドウクラスの中に置いてあるなら何もしないでも来るはず
007670NGNG
ありがとう御座います。見てみますね。
0077デフォルトの名無しさんNGNG
>>70
WM_GETDLGCODEあたりの問題ですか?
007877NGNG
げふぉ。
0079デフォルトの名無しさんNGNG
>>69
そしたらワードパッドと大きさが違ってくるんだろ。
ようするに要求が矛盾してるんだよ。
奴がやりたいことを整理して出直してくるまで放置だな。
0080デフォルトの名無しさんNGNG
>>79
やりたいこと。
・固定高の矩形内におさめる
・表示はワードパッドやIEで表示したものと同じ大きさで
これだけです。
この条件で「(矩形の高さの)上限は求められますか?」ということと、
「可能ならその方法を教えてください」というのが元の質問の意味です。
0081デフォルトの名無しさんNGNG
固定高にワードパッドやIEと同じ大きさというが、
固定高の高さによって表示が切れるのは当然だと思うが
0082デフォルトの名無しさんNGNG
上限があるかって質問なんだから「ありません。」で終わるやんか。
何をぐだぐだ言っとんねん。
0083デフォルトの名無しさんNGNG
まあ、アレだ。
その部分のソースを出せば解決するんじゃないのか?
0084デフォルトの名無しさんNGNG
http://www.forest.impress.co.jp/article/2002/09/20/goostick.html
こういうツールバーってどうやって作るの?
どこかに資料ありませんかぁ?
0085デフォルトの名無しさんNGNG
理論的には、unicodeの1〜10万いくつまでGetTextExtent32Wを
発行すればできるんでないか。まあ、表示文字列に対して
GetTextExtを発行した方が速いけどナ
0086デフォルトの名無しさんNGNG
何言ってるんだ?
0087デフォルトの名無しさんNGNG
ちょっと聞きたいのですが。
C言語でプログラムを書いたんですが、バックグラウンドで
動かす(MS-DOSプロンプトウインドウを出さないで動かす)には、どんなAPI
を使えばよいのでしょうか?
ご教授いただきたいですが^^
0088デフォルトの名無しさんNGNG
mainをやめてWinMainで作ればコンソール出なくなるよ
0089デフォルトの名無しさんNGNG
>>85
カーニングがあるからすべての2文字の組み合わせで
やらなければいけない≒事実上不可能
0090デフォルトの名無しさんNGNG
どこかにIMEで再変換するサンプルコードがありますでしょうか?
RECONVERTSTRING 構造体を「どーにか使う」というところまで辿りついたのですが、
まったく使用例が見つからず、肝心の「どう使うのか」が分からず行き詰まってしまいました。
どなたか、お助けいただけますでしょうか。
0091デフォルトの名無しさんNGNG
ウィンドウアプリケーションから
標準出力(coutとか)に文字列とか吐き出すと
どう処理されるんですか?
0092デフォルトの名無しさんNGNG
Win2Kですが、非同期シリアル通信で、
SetCommMask( ,0)で
別スレッドでの受信待ちのWaitCommEventをキャンセルしているのですが、
処理が戻るまでに数秒〜数十秒かかってしまいます。
なにか、心当たりある方いらっしゃいますでしょうか?
0093素人ですが。NGNG
教えて君ですみません。

過去にVBA(Access97)で組んだGetSaveFileNameの記述なんですが、Windows 2000になってから
動かなくなりました。
OPENFILENAME構造体が拡張されてサイズが変わったらしいこと、拡張された部分まではわかったんですが、
構造体の拡張部分をVBでどのように宣言したらいいのかわかりません。
つーのも、pvReservedがvoid*らしいのですが、VBにはどうやら該当するデータ型が見当たらないのです。
(試しにVariantで宣言したらダメでした。)
うまく動かないのは、ここの宣言が間違っているからと睨んでいます。
TypeからEnd Typeまでの記述はどうすればいいのでしょうか??
0094デフォルトの名無しさん NGNG
>>91
標準出力に相当するハンドルが標準では存在しないため、
未オープンファイルへ書いた場合と同様にEBADFとなる。
0095デフォルトの名無しさん NGNG
>>93
lStructSizeの値が76に設定されていれば、古い定義のままで動くはずだ。
どうしても新しいのが使いたければLongで宣言しておけ。
0096デフォルトの名無しさんNGNG
>>84
ttp://www.codeproject.com/useritems/toolband.asp
0097デフォルトの名無しさんNGNG
>94
了解しました
ありがとー
0098デフォルトの名無しさんNGNG
>89
カーニングは高さを変化さすのか?初耳だが。
0099デフォルトの名無しさんNGNG
>>92
その別スレッドの処理がものすごいことになってるのでは?
0100デフォルトの名無しさんNGNG
ソケット通信なんですが、
Java側で

 ObjectOutputStream oout = new ObjectOutputStream(socket.getOutputStream());
 PrintWriter out = new PrintWriter(new OutputStreamWriter(oout, "SJIS"));
 out.println("hogehoge");
 out.flush();

と送って来て、それを recv しているんですが、
文字化けしてしまいます。

unicode変換とかが必要なんでしょうか?
0101デフォルトの名無しさんNGNG
マルチポスト
http://pc3.2ch.net/test/read.cgi/tech/1016065855/893
0102デフォルトの名無しさんNGNG
>>100
とりあえず、受信側でデータがSJISできてるか確認してみれば?
(スレ違いだと思うけど)
0103質問はここでも受け付けてるよNGNG
【マルチ】ぼるじょあ(・3・)のマルチ質問箱【大好き】
http://pc.2ch.net/test/read.cgi/pcqa/1032847313/l50
0104デフォルトの名無しさんNGNG
教えて君ですみませんが

アプリケーションから(「に」ではありません)エクスプローラ,デスクトップ
orETCにドラッグ・アンド・ドロップしてファイルコピーをしたいのですが・・・
SimpDNDサンプルだとコピー先のファイル名がスクラップになってしまいます
どうしたらいいのでしょうか?
参考のURLがありましたら教えてください
0105デフォルトの名無しさんNGNG
ageます
だれかおながいします
010693NGNG
>>95
ありがとうございます。
今日さらに突っ込んで調べてみたら、確かにlStructSizeは拡張前76、拡張後88でした。
でも76じゃ、CommDlgErrorExの値が構造体サイズ不正だったんです。
おっしゃる通りlongで定義(←他でヒント見つけました)したら、構造体サイズエラーは回避できました。
が、今度は初期化失敗のエラーが。
原因がわかりそうになかったら、また質問させて下さい。
010793NGNG
× CommDlgErrorEx
○ CommDlgExtendedError
010892NGNG
>99
単に受信待ちしてて、受信後にメッセージ送るだけです。
通信せずに終わると比較的早く、何度か通信してからだと大抵遅くなります。

0109デフォルトの名無しさんNGNG
>>104
DoDragDrop()に渡すIDataObjectで、CF_HDROPフォーマット
に対応しろ。DROPFILES構造体あたりを調べてみろ。
あとは必要に応じてCF_IDLISTにも対応(コピーだけなら不要)。
コピーだけなら CF_FILECONTENTSというのもあるが
これはあまりおすすめできんぞ、ボケナス。
0110デフォルトの名無しさんNGNG
>>109
ありがたうごじゃいます
やってきます
0111デフォルトの名無しさんNGNG
104ではないですが。

DragFinish() って内部では何をやっているんでしょうか?
GlobalFree()? GlobalUnLock()?
0112111NGNG
自己レス。GlogalFlags() で調べたら GlobalFree() のようでした。ども。
0113デフォルトの名無しさんNGNG
windowsのコンソールアプリでパイプ使いたいんですけど
どうすればいいんですか?
0114113NGNG
あ、これだけじゃわかりませんね。
アプリからコプロセスを起動して、その標準出力を取りこみたいのです。
0115113NGNG
あ、popenってwindowsにもあるみたいですね。
お騒がせしました。
0116113NGNG
でもMSDNのpopenのサンプルがフリーズしてうまく動かない。
これはどうしたことか。
0117デフォルトの名無しさんNGNG
PerlやPHPをやってるとWindowsプログラムをやりたくなくなる・・
一度甘い汁を吸うと駄目ですね・・
0118デフォルトの名無しさんNGNG
>>92
漏れはそんなことにならなかったから、イマイチ分からない。
ここからサンプルを落として、ttyというサンプルを読むといいかも
http://download.microsoft.com/download/vstudio60pro/Utility/6.0/W98NT42KMeXP/EN-US/vs6samples.exe
0119デフォルトの名無しさんNGNG
ログファイルに書き込むときに、排他的に開くと起動中にログファイルが読めなくなるので
FILE_SHARE_READで開こうかと思うんですが、これって書き込み中に他のアプリが
ログファイルを読み込んだりしてもファイルが壊れたりはしないですよね?
0120デフォルトの名無しさんNGNG
>>119
壊れないとは思うけど、LockFileを使うとイイ!
0121デフォルトの名無しさんNGNG
疲れたので寝ます。。。。。。。。。。
0122デフォルトの名無しさんNGNG
>>113-116
GetStdHandle(STD_INPUT_HANDLE)はどうよ
0123122NGNG
よく読んだら、外してる
0124SevenTH ◆BI2EKkq. NGNG
>>116
Win98 と NTでは、パイブの挙動が違う。
0125113NGNG
>>124
今Win98SE上で作ってます。
NTだとうまく機能するのかもしれませんね。
実際、さっき試したら自分で作ったEXEの標準出力は取りこめたので。
DIRとかのcommand.comのシェル関数を使うと駄目っぽいです。
0126デフォルトの名無しさんNGNG
このスレッドで良いのかわかりませんが、質問させてください。
AccessのMDB形式のデータベースをC言語でのWin32SDKとかから
VBの様にSQL発行したりしてアクセスしたいんですが、方法は
あるでしょうか。(このためだけにVB使うのは気が引けるので)
ExcelみたいにCOM経由ででもできればいいんですが。
0127デフォルトの名無しさんNGNG
IMEの入力モードについてなのですが...
ローマ字入力/かな入力の切換え関数を教えて下さい。

Win2K+VC6+MS-IME2000です。

...出来れば、入力モードの取得関数もお願いします。m(_ _)m
0128デフォルトの名無しさんNGNG
まさか、popen("dir",...)な口ではなかろうな、、、
0129デフォルトの名無しさんNGNG
>126
ADOをCOM経由で叩いたり、DAO使ったり、ODBC叩いたり
すればいいとは思うけど。
0130デフォルトの名無しさんNGNG
>>127
ImmSetConversionStatus とかかなぁ
0131127NGNG
レスどーもです。

>ImmSetConversionStatus とかかなぁ
↑は半角/全角とかの入力モードの変更関数です。

知りたいのはIME2000プロパティ上の
「入力設定」-「ローマ字入力/かな入力」の変更方法と取得方法なんです...

よろしくお願いします。m(_ _)m
013293NGNG
解決したので、一応ご報告しときます。
全然違う所で引っかかってたようです、すみません。

Win95で開発当時、OPENFILENAME構造体を次のように定義していたのですが…
  Type
   …
   lpstrFilter As String
   …
  End Type
2000では、こうするとまともになりました。
  Type
   …
   lpstrFilter As Long
   …
  End Type
95でも、これで大丈夫みたいです。

ここはVBではStringにするようになってたはずだと思うんですが、なぜLongに変える必要があったんでしょうか?
結果オーライでは今一つ不安なので、どなたか理由を教えて下さいです。
0133訂正@93NGNG
>>132は間違い、
lpstrCustomFilter As String
 ↓
lpstrCustomFilter As Long
です。
0134デフォルトの名無しさんNGNG
lpstrCustomFilterに自分で値をセットしない限りは、
どっちでもまったく同じ。
0135134NGNG
つまり、このメンバを使わないのなら という意味ね。
0136126NGNG
ODBCが簡単そうなので、これでいってみます
ありがとうございました。
0137デフォルトの名無しさんNGNG
>>131
それって、カナロック?
0138名無しさん@EmacsNGNG
>>90
レスがつかないようなので。
HPは、なくなっているようだけど
ImeReconvでぐぐってみそ。
013993NGNG
>>134
いかにも、lpstrCustomFilterに0だのNullだの入れるとおかしくなったけど、無視したらまともでした。
でも、なんでLongだと問題が解決したのか知りたいです。
0140134NGNG
>>139
Long型の初期値(宣言後に何も入れてない状態)は 0。
これにコード内で明示的に0を入れても元の値のまま。

String型の初期値はvbNullString。(他の言語で言えばNULLポインタ)
これをAPIに渡すのと、Long型の 0を渡すのはまったく同じ。
しかしコード内で "" を入れてしまうと、この値は変化し、
長さゼロの文字列へのポインタとなる。
明示的に初期化したいのであれば vbNullString を入れろ。

API呼び出し以外の場面では、(普通は)両者の違いを意識する必要はない。
0141デフォルトの名無しさんNGNG
>>94
ナラネーヨ
なにげに存在してるぞ。コンソールに反映されないだけで
0142127NGNG
>>137
レスどーもです。
そです。「Alt+ローマ字」キーで切替えるトコです。

入力モード/変換モードは変更出来るんですが、
ローマ字入力/かな入力の切替えが出来なくて...

よろしくお願いしますm(_ _)m
0143デフォルトの名無しさん NGNG
>>141
バッファリングって知ってる?
0144デフォルトの名無しさんNGNG
>>143
関係ないよ
コンソールが存在してないんだから
0145デフォルトの名無しさんNGNG
質問させていただきます。
マルチスレッドを勉強しているのですが、
クリティカルセクションとミューテクスの違いがわからなくて困っています。

両方、フラグがOFF(他のスレッドで排他処理を行っていない)状態になるまで
待機するものと思うのですが、なにか使い分けはあるでしょうか。
0146デフォルトの名無しさんNGNG
Mutexはプロセスを超える
0147デフォルトの名無しさんNGNG
>>142
keybd_eventじゃダメなの?
0148デフォルトの名無しさんNGNG
>>143-144
コンソールアプリでなくてもリダイレクトすると
ちゃんと標準出力の内容をファイルに落とせる。
つまりコンソールがないから見えないだけで
標準出力はちゃんと存在するんだな。
0149127NGNG
>>147
キーボードイベントでも変更出来るんですけど、
ON/OFFの状態が判らないと、必要が無いのにイベントを投げちゃいそうで...
0150127NGNG
モードがローマ字入力の時に「Alt+ローマ字」のイベントを投げたら、
モードはかな入力になりますよね?
それだと、困るんですよ...色々と

諦めるって訳にも逝かないし...脳味噌から煙が...
0151デフォルトの名無しさんNGNG
今さら??
というような問題で悩んでおります。
MessageBox("テスト",NULLL,MB_YESNO|MB_ICONQUESTION);
見てのとおりのメッセージボックスなのですが、
MB OKなら「ポン♪」って音がなりますよね?
↑のコードじゃならなくて困ってます。
直前にMessageBeep入れてもできるとは思いますが、
どうも根本的な解決じゃないような。。
ご指導よろしくおねがいします。
0152 NGNG
>>148
すまんが、確認したOSは?
0153デフォルトの名無しさんNGNG
>>151
キミの環境ではサウンドのプロパティのメッセージ(問い合わせ)が
設定されてないだけだと思ふ。
0154デフォルトの名無しさんNGNG
>>152
98と2000とXP
9xだと常駐ソフトの絡みか何かでファイルに落ちないことは
あるけどそういうときはコンソールアプリも落ちない(リダイレ
クトしてるのにコンソールに吐かれる)から単なるバグだと思う。
あと処理系によってはGUIアプリのとき標準出力の準備を
省略することがあるかも(>>148を確認したのはVC++ 6.0)
0155 NGNG
>>154
変だね。当然、標準出力をわざわざ作ってはないよな?
0156154NGNG
GUIアプリのprintfデバッグによく使ってる手なんで
幻を見てるって事はないはずなんだけど…
0157154NGNG
>>155
スタートアップコードが標準出力を作ってるかもしれないけど
プログラム内で明示的に作ったりはしてないです
0158147NGNG
>>149
GetKeyStateで取得すれば?
0159 NGNG
>>157
は、リダイレクトを指定しないとき、ハンドルが存在するか確認はしてないわけだな?

リダイレクトすると、自動作成されるってのが結論なのかねぇ。
0160デフォルトの名無しさんNGNG
>>159
DOS窓から実行させればリダイレクトしなくても表示されますが?
0161127NGNG
>>158
以下のよーな感じですよね?GetKeyState関数の使い方は
引っ掛かりませんでしたけど...ね

if(GetKeyState(VK_KANA) & 0x0001){
  // かな_ON
}else{
  // かな_OFF
}
指定してる仮想キーを間違えてるのかなぁ...
0162デフォルトの名無しさんNGNG
160age
0163デフォルトの名無しさんNGNG
LoadLibraryでDLLをマップしようとすると、NT系ではOKですが、
9x系ではGetLastError「このアプリケーションの実行に必要なライブラリ ファイル
のうちの 1 つが見つかりません。」と返してきます。

MSDNには、
「DllMainがWin32 関数の Unicode 版を呼び出そうとした場合も、LoadLibrary は失敗します。」
とあるので、これが気になっているのですが・・・。

DLLはCOMサーバで、unicodeプログラムになっています。
0164デフォルトの名無しさんNGNG
>>160
表示されないぞ
0165デフォルトの名無しさんNGNG
>>163
何のDLL使おうとしてるんだか知らんが、そのDLLがリンクしてるDLLがNT系固有なんじゃないか?
Dependency Walkerでも見ろ。
0166147NGNG
>>161
合ってるよ。
それで取得できるはずだけど。
0167147NGNG
>>161
あ、IME2000固有のカナモード切換のこと?
だったら多分無理だよ。
(ごめん、キーボードのカナロックかと思った)

以前にMSのサポート技術情報ページで、
IME97かIME98あたりからAPIでの変更が不可能に
なったというのを読んだことがある。
0168127NGNG
>>167
むぅ...「Alt+ローマ字」で切替えるヤシは
APIで変更が出来ないのか...

(゚д゚)マズーだな...こりゃ...
さて、どーしよ
016993NGNG
>>140
ありがとうございます。
Stringで宣言していた時は、Chr(0)だのvbNullCharだので初期化してたのですが、
あちこちコードをいじり倒したので、今となってはよくわからなくなってしまいました。
今後の参考にさせて頂きます。
0170名無し@沢村NGNG
皆様方、ボタンなのですが、ボタンは子ウインドウなのでマウスでクリックしたとき、そのウインドウのハンドルを取得したいのですが、どうすればできますか?
いろいろなボタンをクリックしたときに、そのボタンに応じたハンドルを取得できますか?
0171デフォルトの名無しさんNGNG
>>170
GetDlgItem
0172デフォルトの名無しさんNGNG
>>168
keybd_event で何か入力させてみて、何が入力されたか調べる・・・とかいう最終手段もなきにしもあらず
0173名無し@沢村NGNG
コントロール(ボタン)上で、マウスボタンが押されたときと離されたときで、違う処理をさせたい場合は?
0174デフォルトの名無しさんNGNG
>>173
サブクラス化したほうが早いんじゃない?
0175名無し@沢村NGNG
>>174
サンキュー、サブクラス化したらなったよ。
でもCallWindowProcをしたら1番目の引数がlong (__stdcall *)(void *,unsigned int,unsigned int,long)' から 'int (__stdcall *)(void)' に変換できません。(新しい機能 ; ヘルプを参照)とエラーが出たよ。
本に書いてあるようにしたのにどうして?
どうやって解決するの?
017692NGNG
>118
ありがとうございました。
サンプルを参考にWaitCommEventの最後の引数をNULLにしたら直りました。
理由は不明ですが・・
0177デフォルトの名無しさんNGNG
>>176
CallWindowProcのヘルプ嫁

STRICTを定義するのはデフォルトと思ってたがなあ・・・
0178177NGNG
しもうた176じゃなくて175だ
0179デフォルトの名無しさんNGNG
K&R本によるとfgetcは内部でgetcを使って一文字ずつ読んでいるようですが、
Win32APIには一行ずつを読むAPIは無いので同じような関数を作るとすれば、
ReadFileで一文字ずつ読み込んでいくのが妥当ですよね?
それとも他に便利なAPIありますか?
0180sageNGNG
同じような関数を作るくらいなら、fgets使ったほうがいいんじゃない?
0181デフォルトの名無しさんNGNG
>138
ありがとうございます。参考にします。
0182デフォルトの名無しさんNGNG
>>179
おいおい、ReadFileで1文字ずつ読んだら
めちゃくちゃ時間かかると思うよ。
何のためにストリームがあると思ってんの?
0183デフォルトの名無しさんNGNG
fgetsだと行末がバッファからはみ出てたら、やばくね?
0184デフォルトの名無しさんNGNG
>>183
やばいね。

>>182
ReadFileってバッファリングしなかったっけ?
0185デフォルトの名無しさんNGNG
ReadFileで一気にバッファに読み込んでそのバッファで1行処理
やって処理がバッファの終わりまで来たらまた読み込んでじゃ駄目なの?
0186デフォルトの名無しさんNGNG
メモリマップしてが――っと読んでイケ。
0187デフォルトの名無しさんNGNG
この話題って、定期的に出ますな。で、いっつも
 1文字ずつ読むんですか?→バッファに少しずつまとめて読め→メモリマップ使え
の流れ。
0188デフォルトの名無しさんNGNG
>>187
で実際メモリマップ最強ってことでええの?
0189デフォルトの名無しさんNGNG
>>188
だめ。少なくとも、windowsではローレベルI/O汁
windowsのメモリマップは直接マッピングしてくれずに勝手にキャッシュするから。
0190デフォルトの名無しさんNGNG
ではこの質問がきたら
「バッファに少しずつまとめて読め」
ということね。FAQ認定
0191デフォルトの名無しさん NGNG
>>189
キャッシュされるとなにがまずい?
少なくともNT系ではマップした方が速いのだが。
0192デフォルトの名無しさんNGNG
よくでる質問の割に定石って無いわけ?
0193デフォルトの名無しさんNGNG
>>191
ディスク>キャッシュ>マップされたメモリ となる。
キャッシュの分オーバーヘッドが掛かり、遅くなる。
0194デフォルトの名無しさん NGNG
>>159
まともな知識のある奴は一人もいないのかね。
ウィンドウズアプリでは標準出力のハンドルが割り当てられない。
GetFileType(GetStdHandle(STD_OUTPUT_HANDLE))してGetLastError()
を取ると、ERROR_INVAID_HANDLEが返ってくることからも分かる。
ランタイムのstdoutやcoutは存在するため、一見出力できるように思えるが、
バッファがフラッシュされたタイミングでエラーになる。
ただしリダイレクトされている場合は別だ。親プロセスが標準出力に
正しいハンドルを割り当てた状態をリダイレクトと呼ぶのだから、
出力できるのがあたりまえだ。
0195 NGNG
>>194
半日かけて、よく調べた。感動した。
0196151NGNG
>153
さんの言う通りでした。
いつの間に設定がなくなったんでしょう。
XPでは始めは設定されてないのかな。
とにかく無事解決しました。
ありがとうございました。
0197デフォルトの名無しさんNGNG
>>193
PAGE_NOCACHEしても?
0198デフォルトの名無しさんNGNG
>>194
試してみたらちゃんとハンドルが返ってきましたが?
もちろんリダイレクトなんかしてませんが?

と思ってたらようやく原因が分かった。
エントリをmainにしていて/subsystem:windows /entry:mainCRTStartupで
リンクするとコンソール用のスタートアップが走るせいか標準出力の
ハンドルが準備される。
エントリをWinMainにしたら0(INVALID_HANDLE_VALUEじゃない。MSDNの嘘つき)
が返ってきてGetLastError()もERROR_INVALID_HANDLEになりますた。
0199デフォルトの名無しさんNGNG
って今テストしたら0(FILE_TYPE_UNKNOWN)が返ってきた。何か勘違いしてたらしい。
0200デフォルトの名無しさんNGNG
じゃ結局、AllocConsole()を使え。という結論でよろしいか。
0201デフォルトの名無しさんNGNG
既に起動済みの他アプリ(自作ではない)のボタン等のコントロールを非表示にする
ことは可能でしょうか?
0202デフォルトの名無しさんNGNG
FindWindowとかWindowFromPointとかでどうにかハンドルを手に入れれば
あとはなんとでも
0203デフォルトの名無しさんNGNG
スタートボタンとウィンドウズキーを使用不可にするジョークソフト
作りたいんですが検索キーワードを教えて下さい
プラットフォームSDKが英語で嫌になりました
0204デフォルトの名無しさんNGNG
まず英語勉強しろ
0205デフォルトの名無しさんNGNG
>>203
マウスメッセージとキーメッセージをフックしたら?
0206デフォルトの名無しさんNGNG
>>205
NC(非クライアント)関係をやれば出来ますか?
0207デフォルトの名無しさんNGNG
EM_SETSELで指定できる値の上限を知りたいのですが、
私の環境(Win98SE)では0x7FFFまでのようなのですが、
NT系ではどうなんでしょうか?
0208201NGNG
>>202
FindWindowでハンドルを得て、CaptionやIconの変更は出来たのですが,,
申し訳ありませんが、もう少しご助言いただけませんでしょうか?
0209デフォルトの名無しさんNGNG
>>208
FindWindowで得られるのは親ウィンドウのハンドル。
そのハンドルを元にGetDlgItemやFindWindowExや
GetWindow等を使って、対象のコントロールの
ウィンドウハンドルを取得。
そしてそれをShowWindowかSetWindowPosで非表示にする。
0210名無し@沢村NGNG
皆様方、私はボタンが押されたときと、離されたときで違う処理をしたいと思ってここで聞いたら、
サブクラス化したらいいと教わったので、サブクラス化したところ、ちょっとうまういったんです^^;
違う処理についてはちょっとうまういったんですが、ボタンが押されたときも離されたときもじっとして動かない(見た目が)のです。
またボタンの上のフォントも作ったフォントではなく、普通のフォントが表示されるのですが、どうしたらいい?
0211デフォルトの名無しさんNGNG
>>210
意味がワカラン

ボタンを持つ主体は自分なのか他人なのか、
フック内でどんな処理を行っているのか
フォントを作った後にどうしているのか

これくらい書け
0212201NGNG
>>209
試行錯誤しながらやってみたのですがうまくいきません。
具体的にはMSOffice上のボタンを非表示にしたいのですが、もう少し
ご助言いただけないでしょうか。

現在
HWND thehwnd = FindWindow( "XLMAIN", NULL );
thehwnd = FindWindowEx( thehwnd, NULL, "Button", "ヘルプ(&H)" );

とやっていますが、thehwndにはNULLが入ってしまいます。
0213209NGNG
>>212
その前に、そのコントロールは間違いなくウィンドウなの?

Office系では単に親ウィンドウ内にコントロールの絵を
描画しているだけのことが多いよ。
具体的にはExcelのどの部分のボタンですか?
0214201NGNG
>>209
プレビュー画面の各ボタンです。
0215デフォルトの名無しさんNGNG
教えてほしいっす。
ウインドウズプログラムではスレッドごとにカーネルとユーザーモードの
スタックを持っていますが、これはスレッドごとにメモリ上に実際に確保される
スタックの位置が違うと解釈していいのでしょうか?
0216209NGNG
>>214
Excel2000で確認してみたところ、
子ウィンドウの子ウィンドウ(孫)だから

HWND thehwnd = FindWindow( "XLMAIN", NULL );
thehwnd = FindWindowEx( thehwnd, NULL, "EXCELC", "" );
thehwnd = FindWindowEx( thehwnd, NULL, "Button", "ヘルプ(&H)" );
のような感じで取得できると思う。
0217デフォルトの名無しさんNGNG
>>215
> ウインドウズプログラムではスレッドごとにカーネルとユーザーモードの
> スタックを持っていますが、

こっちの真偽は、よく知らんが...

> これはスレッドごとにメモリ上に実際に確保される
> スタックの位置が違うと解釈していいのでしょうか?

これは、正しい。
0218201NGNG
>>209
ありがとうございました!期待通りの操作ができました。
わかりやすい説明に確認までしていただきまして感謝しています。

あと、図々しいかと思いますが、もうひとつ。
EXCEL2000で確認とありましたが、それはどのように調べるものな
のでしょうか?
0219209NGNG
>>218
Excel2000の印刷プレビューの画面を確認したという意味です。
俺はVC++に付属している SPY++というツールで確認しました。
ただ、EnumChildWindows等を使えばツールがなくても
比較的簡単に調べられます。
0220名無し@沢村NGNG
皆様方、私はボタンが押されたときと、離されたときで違う処理をしたいと思ってここで聞いたら、
サブクラス化したらいいと教わったので、サブクラス化したところ、ちょっとうまういったんです^^;
違う処理についてはちょっとうまういったんですが、ボタンが押されたときも離されたときもじっとして動かない(見た目が)のです。
またボタンの上のフォントも作ったフォントではなく、デフォルトのフォントが表示されるのですが、どうしたらいい?
フック内ではボタンが押されたときと、離されたときで違う処理だけ行なっています。
フォントはメインウインドウ内でつくった後なにもしていません。
0221デフォルトの名無しさんNGNG
>フォントはメインウインドウ内でつくった後なにもしていません。
オモロイ
0222215NGNG
>>217
わかったっす。ありがとー
0223名無し@沢村NGNG
皆様方、大変初歩的な質問で申し訳ないのですが、
コンボボックスをつくったのですよ。
そしてfor(i=0;i<100;i++)
SendMessage(hwnd,CB_ADDSTRING,2,(LPARAM)szbuffer[i]);
としたのですがコンボボックス内に何も字が表示されないのですよ。
本に書いてあるとおりにしたのに、どうしてでしょう?
どう考えてもわかりません…
0224デフォルトの名無しさんNGNG
>>223
wParamの2って何?
とりあえずダイアログエディタで、コンボボックスの矢印の部分をクリックして、
出てきた枠を下にぐ――――んと広げてみれ。
0225名無し@沢村NGNG
>>224
ヌヒよ、ダイアログじゃねーよ、ヌヒよ。
0226名無し@沢村NGNG
皆様方、コンボボックスですが、解決しました。
コンボボックスをつくるとき高さを充分にとってやればよかったのね…。
でも矢印をクリックしないと字が出てこないのですが…。
つまり一番上のスペースに字が最初から出ていないのですが…。
よくソフトなんかでは一番上のスペースに字もが最初から字が出ていますが、あれはどうするの?
0227デフォルトの名無しさんNGNG
>>226
CB_SETCURSEL
0228デフォルトの名無しさんNGNG
Windows のマクロで 9x 系か NT 系かを判定する方法ってありませんかね?
具体的には、プリプロセッサーの処理の時点で NT 系だけに存在する関数を
#ifdef で条件コンパイルしたいんです。
関数でなら GetVersionEx() というものを使えばいいらしいんですが、
これだと条件コンパイルできませんし。よろしくお願いします。
0229デフォルトの名無しさんNGNG
>>228
もう一度頭の中を整理したほうがいいぞ
0230デフォルトの名無しさんNGNG
>228
コンパイルしている環境のOSと、
動かすべき環境のOSは違うかもしれないんだが。
0231228NGNG
>229-230
あっ、そういえば……ありがとうございました。
解決できたので吊ってきます。
0232名無し@沢村NGNG
>>227
ありがとうございました。
CB_SETCURSELとしたところ、初めから字がコンボボックスに出ました!!
それからもうひとつ質問ですが、コンボボックスをつくるとき高さをだんだん低くしてやってみたのですが、
いくら低くしてもこれ以上低くならないというのが何かあるみたいなのです…。
よくソフトなんかでは、もっと低くてカッコいいコンボボックスを見かけるのですが、
よく見かけるソフト並みにコンボボックスの高さを低くするにはどうしたらいいの?
またそんな方法があるの?
0233デフォルトの名無しさんNGNG
自アプリに限らない登録済みホトッキー一覧を取得するにはどうすればよいのでしょう?
0234デフォルトの名無しさん NGNG
>>233
 const int id = 123;
 bool used[8][256];
 for (int mod = 0; mod < 8; mod++){
  for (int vk = 0; vk < 256; vk++){
   used[mod][vk] = !::RegisterHotKey(hWnd, id, mod, vk);
   ::UnregisterHotKey(hWnd, id);
  }
 }
0235デフォルトの名無しさんNGNG
現在webブラウザを作っています。
レンダリング結果を自然にするため、
文字のカーニングを行いたいのですが、
フォントから情報を取得する方法が分かりません。

参考になるサイトなど教えて下さい
0236デフォルトの名無しさんNGNG
GetKerningPair っつう API があるけど?
0237デフォルトの名無しさんNGNG
MFCでダイアログベースのHTTPクライアントを作っています。
InternetReadFileで読み込んでいるのですが、読み込み中は
ダイアログの何処をクリックしても反応がありません。
他に良い方法は無いでしょうか・・・
0238名無し@沢村NGNG
皆様方、コンボボックスの高さの件ですが、誰にも聞かずに解決しましたヨ!!
CB_SETITEMHEIGHTとすれば良かったのね!!
あと皆様方、コンボボックスにたくさんデータを入れたのですが、
データの一番下までスクロールすると、データの一番下の字のもっと下の部分に空白ができるのですが、この空白のなくす方法はないものでしょうか?
良くソフトなんかでは、データの一番下の字までで終わりになっていてカッコいいので、あんなふうにしたいのですが…?
0239デフォルトの名無しさんNGNG
>>238
CBS_NOINTEGRALHEIGHTを外すのだ外すのだ外すのだ
0240デフォルトの名無しさんNGNG
>>237
INTERNET_FLAG_ASYNCで開け。
またはスレッドを作る。
0241デフォルトの名無しさんNGNG
>>240
async・・というと非同期ですか。
ちょいとやってみます、thx!
0242名無し@沢村NGNG
皆様方、私は我ながらすごいこと発見いたしましたので、皆様方にお教えいたします。
それは{mciSendStringなんですが、{mciSendStringでopenとやってplayとやると、
演奏が終わったあと再びボタンを押しても演奏されないんです。
しかし停止ボタンで演奏途中で停止した場合は、もう一度演奏ボタンを押しても演奏されるんですね…^^;
私はこの事実に注目して演奏がひとりでに終わったあと再びボタンを押しても演奏されるようにする大発見をしたんです!!
それは皆様方、まず、{mciSendStringでcloseとやったあとopenとやってplayとやるといいんですよ!!
何故なら停止ボタンはmciSendStringのcloseから成り立っているからなんですねっ!
ちょっと邪道のような気もしますが何も問題は発生しないのでいいと思うんですが…。
皆様方はどう思われます?
いつも教わってばかりなので、たまには私が教えたのですが、いかがでしたでしょうか?
0243デフォルトの名無しさんNGNG
>>242
ここに書き散らすよりも、ホームページにTipsとして書いたほうが
後の人のためだと思う。
0244デフォルトの名無しさんNGNG
>>243
いや、どう見てもネタだろ・・・
0245デフォルトの名無しさんNGNG
>>244
うるせえ黙れオナニーならホムペでやってろ
とやんわりと言ってるのだと思われ
0246デフォルトの名無しさんNGNG
>>242
一つだけ言わせてもらえれば、馴れ合いたいだけなら
どっか他所でやってくれ。
0247デフォルトの名無しさんNGNG
Tips かよ?
0248デフォルトの名無しさんNGNG
アプリケーションモーダルなダイアログを自前で作りたいんですが
親ウィンドウを設定したあと子ウィンドウが閉じられるまで
親ウィンドウにフォーカスを移さなくするにはどうすればいいんですか
EnableWindow()ではなんか違うよう気がするんですが…
0249デフォルトの名無しさんNGNG
何が違うんだよ。EnableWindow()でいいんだよ。
0250デフォルトの名無しさんNGNG
違う気がする…
0251デフォルトの名無しさんNGNG
おまえの脳内妄想なんかには付き合ってらんねーよ。
そのまま一生悩んでろ。
0252デフォルトの名無しさんNGNG
>>248
DialogBox()使ってるの?
Win95以降MFC使ってるからDialogBox()の動作よくしらへんけど
0253デフォルトの名無しさんNGNG
親にフォーカスが来たタイミングでダイアログにフォーカスを移してやれば
いいと思うんだがダメかね。
0254デフォルトの名無しさんNGNG
MessageBox(hWndParent,"","",MB_OK);
としたときのメッセージボックスと
hWndParentの関係のようなものにしたいんですが
なんとかいっぱつでできるような方法はないでしょうか
0255デフォルトの名無しさんNGNG
>>252
自前でって書いてるからアプリケーションモーダルの
ふるまいをエミュレートしたいって解釈したんだけど
>>254
違うんだったらDialogBox()
つーか>>252は無視か? とっとと首くくって氏ね
0256デフォルトの名無しさんNGNG
MFCは、DoModalすると、modelessでdialogつくって、
親をEnableWindow(FALSE)してるが。

つか、何がどう違うんだよ。釣れた、とかいうのは勘弁な。
0257252NGNG
>>255
>自前でって書いてるからアプリケーションモーダルの
>ふるまいをエミュレートしたいって解釈したんだけど
書き込んでから248を読み直してきがついた。249が正解とオモタ
でも、どうやってダイアログを表示してるか書いてないんで
一応252の書き込みしててもいいかとオモタ
0258デフォルトの名無しさんNGNG
ポップアップメニューって、位置とアラインを指定(TPM_XXALIGN)してやると、
領域が画面内に収まるように位置が自動調整されるじゃないですか。

これを普通のウィンドウでやりたいんですが、位置を計算してくれる APIなど
ありますか?やっぱ、自分でしこしこ計算するしかないんですかね?
0259248NGNG
ウィンドウを2つCreateWindow()で作成して
それを>>254のような関係にしたいんです。
言葉足らずですみません…
0260252NGNG
ところで、EnableWindow()やけどOLEオートメーションの動作に関係する?
Visio2002をオートメーションで制御使用として、オートメーションで取得したHWNDを
EnableWindow(FALSE)したら、それ以降オートメーションでの操作ができなくなったけど
ちなみにVisio2000までのバージョンなら正常に動作します。
オートメーションの仕様に変更か何かありました?
スレ違いかもしれませんし、別に困ってもいないんでほんとはどうでもいいです。
もし知ってる人が答えてくれたら夜ぐっすり眠れます(いまでもぐっすりですが)。
0261248NGNG
>>255
それです。。。
ウィンドウを自前で作成して
アプリケーションモーダルの動作をエミュレートしたいです
0262デフォルトの名無しさんNGNG
>>261
249,256でいいと思うが253でもできる
というか、アプリケーションモーダルで意識のずれがある?
0263デフォルトの名無しさんNGNG
NT系のOSではwaveOutOpenの引数にコールバック関数ではなく
スレッドを使用すべきという事を聞いたことがあるんですが
本当なんでしょうか?
0264名無し@沢村NGNG
皆様方、私はボタンが押されたときと、離されたときで違う処理をしたいと思ってここで聞いたら、
サブクラス化したらいいと教わったので、サブクラス化したところ、ちょっとうまういったんです^^;
違う処理については処理のようになったんですが、ボタンが押されたときにへこまないのです。
ボタンのプロシージャ内では、その処理についてだけ書いていますが、ボタンがへこむようにするには何か別なことも書かなくちゃいけないの?
ボタンが押されたときにへこむようにするにはどうすればいいのでしょう?
0265デフォルトの名無しさんNGNG
>>264

もとのウィンドウ関数を実行している?
0266デフォルトの名無しさんNGNG
恥をしのんで聞くけど、うまういったってどういう意味?
0267名無し@沢村NGNG
>>265
はい、 return (CallWindowProc(lpfnProc[i],hwnd,uMsg,wParam,lParam));とすれば
残りの処理はもとのウインドウ関数がやってくれると本で読んだので、一応書いています。
それ以上のことはさっぱりわからないです…^^;
0268デフォルトの名無しさんNGNG
>>263
どこで聞きましたか?(void風)

以下俺の感想。

waveOutのコールバックが呼びだされるコンテキストって結構怪しかったと思う。
コールバックの中から呼び出せるAPIに限りがあったりするし。
↑こういうのをキモいと思うなら、別スレッドでEventをWaitForすると
スッキリするぜ、みたいな。
0269デフォルトの名無しさんNGNG
>>267
(1) WM_LBUTTONDOWNの処理をした後にも元のウィンドウ関数を呼ぶ
(2) ネタと思われないよう、ちゃんとした日本語を書く
0270248NGNG
ごめんなさい>>251の言うとおりでした…
GetParent()を繰り返して一番親にあたるウィンドウを探して
それをEnableWindow()で無効にしていたんですが
親ウィンドウを探す処理でミスがあって
別のウィンドウを無効にしていたようです
0271デフォルトの名無しさんNGNG
( ´,_ゝ`)プッ
0272デフォルトの名無しさんNGNG
外部EXEからEXCELを操作しています。
プレビューを表示させようとして調べた結果(winshght32使用)

(親)XLMAIN->(子)XLDESK->(子)EXCEL7(キャプション=book1.xls)というウィンドウが

WM_SYSKEYDOWN Dispatched 12h 18d VK_MENU Scan 38h Alt Down
WM_SYSKEYDOWN Dispatched 46h 70d VK_F Scan 21h Alt Down
WM_SYSKEYUP Dispatched 46h 70d VK_F Scan 21h Alt Up
WM_KEYUP Dispatched 12h 18d VK_MENU Scan 38h Alt Up

上記のようなメッセージを受け取っていたので、次のようにコーディングしました。

HWND Hwnd = FindWindow( "XLMAIN", NULL )
Hwnd = FindWindowEx( Hwnd, NULL, "XLDESK", NULL );
Hwnd = FindWindowEx( Hwnd, NULL, "EXCEL7", "book1.xls";

PostMessage( Hwnd, WM_SYSKEYDOWN, VK_MENU, 0 );
PostMessage( Hwnd, WM_SYSKEYDOWN, 'f', 0 );
PostMessage( Hwnd, WM_SYSKEYUP, 'f', 0 );
PostMessage( Hwnd, WM_KEYUP, VK_MENU, 0 );

しかし、実行してみるとプレビューを表示できず、なぜか"6666"という文字が送信されてしまいます。

試行錯誤しながらやってみましたが、原因が私にはわかりません。
どなたか解決のためのヒントやアドバイスをいただけないでしょうか?
0273デフォルトの名無しさんNGNG
>>272
keybd_event()使え
0274デフォルトの名無しさんNGNG
>>273

フォーカスの問題をどうするのよ?
0275デフォルトの名無しさんNGNG
プレビューするのにフォーカス関係あるのか?
フォーカス設定したいなら AttachThreadInput() でスレッドをアタッチしてから SetFocus() すればいい
0276デフォルトの名無しさんNGNG
>外部EXEからEXCELを操作しています。
オートメーション使う手もあるが
0277デフォルトの名無しさんNGNG
はじめまして。詳しい方にお聞きしたいのですが、
Win32APIのReadDirectoryChangesWはファイルの変更等を検知することが
できるらしいのですが、不正アクセスなど特殊な手法を用いることで、
この監視を逃れ、見事ファイルの改ざんを行うことが可能なのでしょうか?
皆様方よろしくお願いいたします。
0278デフォルトの名無しさんNGNG
>> プレビューするのにフォーカス関係あるのか?

keybd_event() はフォーカスのあるウィンドウに対して送られる

>> AttachThreadInput() でスレッドをアタッチしてから SetFocus() すればいい

そんなら、本質問のようにメッセージを送って解決する方が簡単だね
0279デフォルトの名無しさんNGNG
>そんなら、本質問のようにメッセージを送って解決する方が簡単だね

解決してないんじゃないの?解決してるの?
どっちだよ
0280デフォルトの名無しさんNGNG
>> 解決してないんじゃないの?解決してるの?

解決してないんじゃないかな。

> PostMessage( Hwnd, WM_SYSKEYUP, 'f', 0 );

これが意味不明だし。
たんに ALT+F でメニュー項目を選択させたいんだから
WM_KeyDown/Up でいいんじゃないか?
0281デフォルトの名無しさんNGNG
仮想キーコードは、アルファベットは大文字だったような…
0282デフォルトの名無しさんNGNG
質問です。

現在ミュージックプレイヤーを作っているのですが
プレイヤーがすでに起動されている状態で
もういちどプレイヤーが起動したときに
もういちど起動された実行ファイルの引数(ファイル名)を
もともと起動していたほうのプログラムに渡し、
・多重起動の防止
・引数を渡してその引数が示す曲を再生させる
がしたいのですが
たいのですが
どうすればよいでしょう?

1日考えたり調べたりして
FindWindowをつかい同じ名前のウィンドウがあれば
SendMessageでファイル引数をchar*として渡す、

という方法でやったのですが
Win98ではうまくいってもWin2000だとうまくいきませんでした。
具体的には、文字がうまく渡されてないようで
表示させてみると変に表示されました。

方法が根本的に間違っているような気がしましたので質問させていただきました。
どうかよろしくおねがいします
0283デフォルトの名無しさんNGNG
>>SendMessageでファイル引数をchar*として渡す、

メッセージは何を送ったの?
0284デフォルトの名無しさんNGNG
MediaPlayer のラッパークラスってないの?
0285248NGNG
WM_USERは危険…
0286デフォルトの名無しさんNGNG
>>282
NT系では特別に設計されたメッセージ以外は
プロセス境界をまたいでポインタを渡せない。
WM_COPYDATA使え。
0287デフォルトの名無しさんNGNG
>>286

9x系だって渡せない
0288デフォルトの名無しさんNGNG
>>287
はずだが>>282では何の偶然か渡せてるみたいだな
まあ何の保証もないからどちらにせよWM_COPYDATAを
使うように書き換えたほうがいいな
0289デフォルトの名無しさんNGNG
>どちらにせよWM_COPYDATAを
>使うように書き換えたほうがいいな

どちらもプログラム可能なら苦労しないはず
いっそ一つにまとめれば

そうじゃないんでしょ?
0290デフォルトの名無しさんNGNG
>>289
自作のミュージックプレイヤー同士での通信だろ、これ。
0291282NGNG
ここで皆さんが教えてくださった
"WM_COPYDATA"
を使ってさっそく書き換えてみたところ
2000と98で両方確かめましたがどっちもうまく行きました。

>>283-289さん
どうもありがとうございました、ほんとに助かりました。
0292デフォルトの名無しさんNGNG
298 だが取り消し。アフォだった。すまん。

> もともと起動していたほうのプログラムに渡し、

これだね。288 さんに賛成
0293デフォルトの名無しさんNGNG
>>291

ちなみに 98 では何のメッセージを送って成功してたの?
0294デフォルトの名無しさんNGNG
WM_SETTEXT なら NT 系でも 9X 系でも必ず成功するよ。
0295282NGNG
最初はメッセージ
uint wm_id = RegisterWindowMessage("アプリケーション固有の文字列");
って感じで取得したウィンドウメッセージIDを使ってました。

98でうまくいったのは偶然かもしれないですけどね。
0296デフォルトの名無しさんNGNG
>>295

回答ありがとう。

>98でうまくいったのは偶然かもしれないですけどね。

あり得ない、と思うけどねぇ。アドレス空間が別なんだから。

テキスト渡すだけなら、Width と Height がゼロの EDIT かスタティック
に WM_SETTEXT を送るのが簡単。親で通知メッセージを受け取って、その
変化を認識できる。WM_COPYDATA は、テキストに限らずどんなバイトブロック
でも送れるので、一度覚えてしまうと便利だね。
0297デフォルトの名無しさんNGNG
ほかのアプリのウィンドウに貼りつくアプリを作っています。

対象アプリの移動やサイズ変更時追従することは出来るようになりま
した。

そこで、使用者に外部アプリによる貼り付けとわからないように、対
象アプリのタイトルバーの真下に表示させたいのですが、ウィンドウ
のタイトルバーの高さはどのようにして得るのでしょうか?
0298297NGNG
すいません、
GetSystemMetrics( SM_CYCAPTION )
でできました。
0299名無し@沢村NGNG
>>269
ありがとうございました。
(1) WM_LBUTTONDOWNの処理をした後にも元のウィンドウ関数を呼ぶ
これでやってみたら、ちゃんとなりました。
もうひとつ質問ですが、オーナードローボタンに付けたビットマップの絵柄をボタンが押されたときに描きかえるにはどうしたらいいのですか?
またそのようなことは可能ですか?
0300デフォルトの名無しさんNGNG
>>299

元のウィンドウ関数を処理の<前に>呼んで実行しておく。そしてその後
WM_LBUTTONDOWN でビットマップをボタン表面に描く
0301デフォルトの名無しさんNGNG
>>299
普通にWM_DRAWITEMの処理の中でビットマップを切り替えればいいのでは。
ボタンが押されている状態かどうかは、BM_GETSTATEを送ればわかる。
0302263NGNG
亀レスすいません。
265さん回答ありがとうございます。やはりマルチスレッド関係を
勉強しなければいけないみたいですね。

ちなみにこの話の元ねたは某SPCプレイヤーのReadmeからです。
0303デフォルトの名無しさんNGNG
デスクトップのアイコンをツリービューに表示させたいのですが、
上手くいきません。違うアイコンが表示されてしまいます。

// アイテムIDリストを取得
LPITEMIDLISTpidl;
::SHGetSpecialFolderLocation( NULL, CSIDL_DESKTOPDIRECTORY, &pidl );
// イメージリストを作成
HIMAGELIST himagelist;
SHFILEINFO fileinfo;
himagelist = (HIMAGELIST)::SHGetFileInfo( (LPCSTR)pIDList, FILE_ATTRIBUTE_DIRECTORY, &fileinfo, sizeof(SHFILEINFO),
                  SHGFI_PIDL|SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON|SHGFI_SYSICONINDEX );
m_ImageList.Attach( himagelist );
CTreeCtrl &ctrl = GetTreeCtrl();
ctrl.SetImageList( &m_ImageList, TVSIL_NORMAL );

// ツリービューのルートにデスクトップを追加
TVINSERTSTRUCT TvItem;
TvItem.hParent = ctrl.GetRootItem();
TvItem.hInsertAfter = TVI_ROOT;
TvItem.item.mask = TVIF_CHILDREN|TVIF_TEXT|TVIF_IMAGE;
TvItem.item.pszText = pLabel;
TvItem.item.iImage = fileinfo.iIcon;
ctrl.InsertItem(&TvItem);

こんな感じのコードですけど、どこが悪いのでしょうか?
0304デフォルトの名無しさんNGNG
>>302
> 某SPCプレイヤー

アレか...まあいいけど鵜呑みにするのはやめとき。
0305名無し@沢村NGNG
皆様方、midiの再生やループや停止の方法はわかったのですが、
ボリュームを上げたり下げたりする方法がわかりません…^^;
またテンポを上げたり下げたりする方法もわかりません。
よくホームページなどでmidiを聞くと、プレイヤーらしきものがホームページの左上についていて、
それを右クリックすると、ボリュームを上げたり下げたり、テンポを上げたり下げたりできるようになっているのですが、
あの機能はどうやって実現するのですか?
0306デフォルトの名無しさんNGNG
現在起動中の他ウィンドウを最前面に持ってこないでアクティブにす
るにはどうすればよいのですか?

その時点で他のウィンドウの下にあればそのままの状態でそのウィン
ドウにフォーカスを移したいのですが。
0307デフォルトの名無しさんNGNG
>306
そんな事ができるアプリを今まで見たことある?
0308デフォルトの名無しさんNGNG
>>306 自分より手前のウィンドウを全部 TOPMOST にした後に...とか(w
0309デフォルトの名無しさんNGNG
>>305
::MidiOutShortMsg()
::MidiOutLongMsg()
::SetTimeEvent()
で直接制御すればなんでもできるけど、まぁむずいわな・・・
0310デフォルトの名無しさんNGNG
>>303
> CSIDL_DESKTOPDIRECTORY
シェルのネームスペースのルートなら
CSIDL_DESKTOP
0311デフォルトの名無しさんNGNG
>>307
PowerToysに入ってたXMouse
0312デフォルトの名無しさんNGNG
>>306
SetWindowPosでSWP_NOACTIVATEは付けないで
SWP_NOZORDERを付けるとか
0313デフォルトの名無しさんNGNG
今後.NETが流行してAPIの知識が必要なくなったりしないのか?
そこら辺が良く分からんので漏れはわざわざプログラミングWindowsと
C#によるプログラミングWindowsを両方買ってしまったのだが。
0314デフォルトの名無しさんNGNG
今からやるならC#だけとりあえずマスターすればいいんでないの。
OSの機能に直にアクセスしたくなったりしたら、
その都度必要なAPIをInterop使って呼び出せばいい。
0315デフォルトの名無しさんNGNG
> 今後.NETが流行してAPIの知識が必要なくなったりしないのか?

CLR を使ってみれば分かるが、このライブラリはかなり良くできては
いる。その中だけでできることで済む場合は幸せになれる。ちょっと
こみいったことやカスタマイズをしようとするとすぐ限界が見えてくる。
Win アプリを作るなら、API の知識は絶対無駄にはならないと思うよ
0316デフォルトの名無しさんNGNG
タスクバーから任意のアイコンを消去(アプリのウィンドウは表示したまま)す
るにはどうしたらよいですか?
0317デフォルトの名無しさんNGNG
DLLについて質問です

例えばDLL側に下記のようなクラスがあるとして、
struct A
{
  static smartptr< hoge > a;
};

アプリケーションからこの"a"にインスタンスを代入しました。
するとアプリケーション終了時にこの"a"のデストラクターでアクセス違反が
起きてしまうんですが、このような場合はどうすればいいのでしょうか?


0318デフォルトの名無しさんNGNG
関連するコードを全て書け
0319317NGNG
>>318
どういう風に書こうか考えてたら原因がわかりました。

//a.dll
struct A
{
  static smartptr< B > a;
};

struct B
{
  .....
};

//b.dll
struct C :B
{
  static C *createInstance();
};

//app.exe
smartptr< B > ref( C::createInstance() );

てな感じなんで、b.dllはLoadLibraryしてるものなんですが、
デストラクター呼ばれる前に、app終了時FreeLibraryしてるのが原因ですた!
0320デフォルトの名無しさんNGNG
まともにプログラムを作るのであれば、APIの知識は無駄に
ならないというよりも、絶対に必要なものだよ。
0321デフォルトの名無しさんNGNG
>>320
そこまで要求されている人ってほとんど居ないと思う
0322デフォルトの名無しさんNGNG
>> そこまで要求されている人ってほとんど居ないと思う

それはレベルの低いプログラマのはなし

「まともにプログラムを作るのであれば」という前提に注目
0323デフォルトの名無しさんNGNG
まともにプログラムを作るという要求自体がほとんどないという
意味だと思われ

趣味ならまともに作るヒマがあるだろうけどねぇ・・・
0324デフォルトの名無しさんNGNG
「まともなプログラムを書くには機械語の知識は絶対必要」
とかいうヨタと同レベルだな
0325デフォルトの名無しさんNGNG
>> 機械語

うふっ、今どき「機械語」なんていう?
0326デフォルトの名無しさんNGNG
しょーもないことでレスのばすな。
必要ならやる。それだけ。
0327デフォルトの名無しさんNGNG
まともっつーのは用はいろんな環境でもバグなしで動くっていうことでしょ。
動かなかったらいくらかっこいい/高機能でも始まらんから。
で、そういうつぶしていくような作業にはどうしたっていろんな知識が必要でしょ。
APIなんてライブラリーを後ろから支えているわけだし。
0328デフォルトの名無しさんNGNG
> まともっつーのは用はいろんな環境でもバグなしで動くっていうことでしょ。

思い込みの押し付けカッコワルイ
0329デフォルトの名無しさんNGNG
D&Dされたオブジェクトがファイルか
ディレクトリかを判断するには、どのようにすればいいのでしょうか?宜しくお願いします。
0330デフォルトの名無しさんNGNG
ファイル名を取り出してからGetFileAttribute
0331デフォルトの名無しさんNGNG
おい、お前ら!
>参考
>MSDN Online
>http://www.microsoft.com/japan/msdn/default.asp
ここにAPIのリファレンスなんてあるんですか?
見つからないのですが。
0332デフォルトの名無しさんNGNG
>>330
このまま無視されて沈んでゆくのかと思ったよ(ワラ
こちらもMSDNで確認しました。
どうもありがとう。
0333デフォルトの名無しさんNGNG
>>331 あるよ
0334331NGNG
>>333
嘘ついてんじゃねーぞ、ゴラー!
0335本物の331NGNG
>>334
氏ね
0336デフォルトの名無しさんNGNG
>>331
http://www.microsoft.com/japan/developer/library/default.asp
の、プラットフォームSDKドキュメント>プラットフォームSDKドキュメント(日本語)

ウィンドウ関連はユーザーインターフェースサービスのウィンドウイングとか

どこに何があるのかサパーリ見当が付かないのもあるので
がんばってほじくりかえせ カス
0337本物の331NGNG
>>336
ありがとうございました!
0338名無し@沢村NGNG
皆様方、質問があります。
windowsにはボタンがありますよね?
ボタンなんですが、大きいボタンと小さいボタンをつくって、
小さいボタンを大きいボタンの上に重ねてつくり、
小さいボタンは押しても常に大きいボタンの上にある状態にしておくことは可能ですか?
また大きいボタンは小さいボタンの下に隠れている部分は押せずに、
見えている部分だけを押すようにすることはどうすればできますか?
0339デフォルトの名無しさん NGNG
>>338
そのセンスはどうかと思うが、小さいボタンの親を大きいボタンにすればできる。
0340デフォルトの名無しさんNGNG
Win32APIで分割ウインドウをつくるのって猫でも分かる〜にあるような方法でしか
出来ないものなのでしょうか。
ほかに何かいい方法があれば教えて欲しいです。
0341デフォルトの名無しさんNGNG
だからスプリタのソース嫁よ、、
0342デフォルトの名無しさんNGNG
>>341
ソースってどこにあるんでしょうか。
(開発環境はBC++5.5.1です)
0343デフォルトの名無しさん NGNG
>>340
あんなもんだと思うが、何が気に入らんのだ?
0344デフォルトの名無しさんNGNG
>342
http://www.gnomedia.com/cw/wtl/wtldocs/atlsplit_8h-source.html
0345デフォルトの名無しさんNGNG
>>343
境界の上のほうや、下のほうにマウスで行くと斜めカーソルに変わって、ドラッグすると
一時的に子ウインドウの高さが変更されて汚くなるんです。
あと、スクロールバーが水平・垂直両方出ると、サイズ変更出来てしまう部分が出てしまったり。

そういうのを回避する方法とかってありますでしょうか?
0346デフォルトの名無しさんNGNG
>>344
ありがとうございます。
ちょっと見てみます。
0347デフォルトの名無しさん NGNG
>>345
WM_NCHITTESTを適切に処理したらどうかね?
0348デフォルトの名無しさんNGNG
>>347
ありがとうございます。
それもちょっと調べてみます。
0349名無し@沢村NGNG
>>339
>小さいボタンの親を大きいボタンにすればできる

う〜ん、それは私のレベルでは難しい…他に方法はないでしょうか?
0350デフォルトの名無しさんNGNG
それが難しいなら、他に方法はない。
0351デフォルトの名無しさんNGNG
フリーのBorland C++ Compilerをダウンロードしてみたんですが、
早速ウインドウの作り方がわからずDOSのアプリケーションしか作れません。
Borland C++ Compilerに関数の 解説(Cライブラリのマニュアル?)
みたいものはないんでしょうか?
0352デフォルトの名無しさんNGNG
猫でも読んでろ。
0353名無し@沢村NGNG
>>350
ボタンをリージョンにして大きいボタンをポリゴンにして小さいボタンを四角にして並べて、
小さいボタンが大きいボタンの上にか乗っかってるように見せかけるという方法なら私のレベルでもできそうです…。
しかしいままでリージョンのボタンはひとつしか作ったことないですが、
リージョンのボタンをたくさんつくって並べることは可能ですか?
またちょんと押せますか?
この方法でよろしいですか?
0354デフォルトの名無しさんNGNG
メモ帳などの外部アプリのエディットコントロールで使用されているフォントの
サイズを取得したいのですが、どのようにすればよいのでしょうか?
どなたかご指導ください。
0355デフォルトの名無しさんNGNG
Win32APIでHTML表示させるのは自力で解析しないとむりなんでつかね?
0356デフォルトの名無しさん NGNG
>>354
WM_GETFONT -> GetObject
0357デフォルトの名無しさんNGNG
>353
なぜSetParent使わないんだよ。
0358354NGNG
>>356
ありがとうございます。
Win標準のエディットコントロールはこれでいけるのですが、
独自に実装しているエディタの場合はどうすればいいでしょうか?
0359John ◆Re0z.4Is5E NGNG
今でもAPIいじらなきゃならんのは、かわいそうだな。
アプリケーションが作りたいのに、
アセンブラの環境しかないのと似てる。
0360デフォルトの名無しさん NGNG
>>358
無理。
0361354NGNG
>>360
そうなんですか。
どうもありがとうございました。
0362デフォルトの名無しさんNGNG
>>355
無理。ATL使ってもいいならAtlAfxWinInit()して
CreateWindow("AtlAxWin", "Shell.Explorer", ...)
でIEコンポが使えるけど。
0363デフォルトの名無しさんNGNG
おはつにおめにかかります。名無しともうします。
実は(今は)VB6.0使いなのですが、勉強で
floppyのdumpをとりたい&FileSystemを介さずにかきこむrawrite.exe
の二つのプログラムをかきたいのです。

ところが、VB6.0のFileSystemObject、C言語のfopen(),fprint()など、
すべてWindowsのFileSystemObjectをつかってるわけですよね。

floppyのセクタに直接アクセスできるAPIはないでしょうか?
みなさま、かってなお願いですが、よろしく教えていただけないでしょうか?
0364デフォルトの名無しさんNGNG
エディットボックスをログの出力に使用しています。
それで、スクロールバーをプログラムで一番下に移動させるために、
エディットボックス内の垂直スクロールバーのハンドルを得たいのですが、うまくいきません。

hChild = GetWindow(hEdit, GW_CHILD);
dwStyle = GetWindowLong(hChild, GWL_STYLE);
while(dwStyle & SBS_VERT == 0){
  hChild = GetWindow(hChild, GW_HWNDNEXT);
  dwStyle = GetWindowLong(hChild, GWL_STYLE);
}
GetScrollRange(hChild, SB_CTL, NULL, &iMaxPos);
SetScrollPos(hChild, SB_CTL, iMaxPos, TRUE);

こんな感じで作りました。
どなかたか教えてください。お願いします
0365デフォルトの名無しさんNGNG
素直にエディットコントロールに
WM_VSCROLL投げて、wParamにLOWORD(SB_BOTTOM)で良いんじゃない。
0366デフォルトの名無しさんNGNG
>363
CreateFile, ReadFile
0367デフォルトの名無しさんNGNG
>>363
DeviceIoControl
0368デフォルトの名無しさんNGNG
>>364
EM_SETSELの方が簡単だと思うが。
0369364NGNG
>>365
どうもありがとうございました!

なんか違う方向逝ってたみたいですね・・・
こんなシンプルにできたのかぁ
0370364NGNG
>>368
どうも。
それは試しましたが、スクロールされなかったです。
0371デフォルトの名無しさんNGNG
>>363
rawrite.exeのソースを参考に、
ftp://ftp.jp.freebsd.org/pub/FreeBSD/tools/srcs/rawrite/rawrite.c
0372363NGNG
皆様、情報ありがとうございます。
>366さん、367さん
書き忘れていたのですが、これはWindows2000でもつかえますか?

>371さん
以前、勉強に確認したのですが、
中でつかわれているBIOSをいじる関数が
たしかTurbo-Cのだったので、構成だけ参考にしたのです。
どうもありがとうございます。
0373デフォルトの名無しさんNGNG
http://www.fdos.org/ripcord/rawrite/readme.html
http://ntrawrite.sourceforge.net/
0374363NGNG
>>373
ばかかおめーら、おれはVBでって言ってるだろうが。
0375デフォルトの名無しさんNGNG
殺伐の予感
0376デフォルトの名無しさんNGNG
>>372
> 書き忘れていたのですが、これはWindows2000でもつかえますか?
使える。Win9xでは使えないけど。
0377363NGNG
374さん、かってに私のまねをしないでください。
373さんには非常に感謝しております。
いろんなOSで参考になります。

VBでもAPIはつかえます。
今はVBしかもってないので、VBからAPIをつかうしかないのです。

376さんも情報ありがとうございました。

ちかごろ機械に近いところの勉強の必要性を痛感しておりまして、
いろいろとWebでさがしているのですが、FATの説明は海外の方がくわしかったですね。
私も集めた情報をもとにWebページをたちあげたいです。

この課題がおわったら、Formatとpartitionの設定プログラムを作ろうと
かんがえていますが、そのときも、もちろん自分でもしらべますが、
どうしてもわからないときはおしえてください。
それでは、ありがとうございました。
0378名無し@沢村NGNG
>>357
>なぜSetParent使わないんだよ。
小ウインドウと親ウインドウの関係だけでもややこしいのに、
そのまた子ウインドウをつくったら、ややこしすぎてフック関数をどう書けばいいか、
混乱してしまって、私の手に負えないからです…^^;
0379デフォルトの名無しさんNGNG
>>377 >FATの説明は海外の方がくわしかったですね。
これ読んだか?
http://www.vector.co.jp/soft/data/prog/se044198.html
0380デフォルトの名無しさんNGNG
>>372
NT系が >>366 で 9x系が >>367 だな。
0381デフォルトの名無しさんNGNG
>フック関数
って何さ。
0382名無し@沢村NGNG
フック船長ですた。
0383363NGNG
>>>379
そこも調べたのですが、
あらためてdownloadしてみて、勘違いしてたことがわかりました。
LFN_TUT.DOCではなく、LFN.TUTをよむのですね。

ちなみにわたしが参考にしたのは、
日本のものでは、
ttp://www.geocities.co.jp/SiliconValley/7773/fs/fat.html
ttp://homepage2.nifty.com/railway_pc/pc_saguru_fd.htm

海外のものでは、
ttp://www.systweak.com/fat32/fat12.htm
ttp://averstak.tripod.com/fatdox/fatintro.htm

では、そろそろこのスレの趣旨にもはんするので、
FAT話はこれでおわりにします。
0384デフォルトの名無しさんNGNG
>>383
>趣旨にもはんするので、
そうか?

本家のも見とけ
http://www.microsoft.com/hwdev/hardware/fatgen.asp
0385名無し@沢村NGNG
皆様方、ちょっとした発見をしたのでぜひ聞いてください!!
私は先日大きいボタンと小さいボタンをつくり、小さいボタンを大きいボタンの上に置いて、
ボタンを押してもそのままの状態で見える方法をここでお聞きしたんですよ。
そうしたら、小さいボタンを大きいボタンの子ウインドウにする以外方法はないとの答えでした。
しかし皆様方m私はとても簡単な方法を見つけたのですよ。
それは上になるボタンを初めにつくっておき、
下になるボタンをそのあとつくってそこのCreateWindowでWS_CLIPSIBLINGSを指定するだけでいいんですよ!!
そうしたら、どっちのボタンを押してもボタンの上下関係はそのままの状態になるんですよ。
いやあこんな簡単な方法があったなんて…!!
これで面倒な処理は一切なしにピアノの鍵盤がつくれました!!
皆様方、どうもありがとうございました♪
0386デフォルトの名無しさんNGNG
うむ、ちゃんと解決方法まで報告したのは褒めてつかわす。
「解決しますた」しか書かないで消える奴多いからな。
0387デフォルトの名無しさんNGNG
ピアノの鍵盤が作りたかったのか。
用途が一番気になってたので、わかってよかった。
0388デフォルトの名無しさんNGNG

accept で取得した socket から
IPアドレスを取得するにはどうすればいいのですか?
0389デフォルトの名無しさんNGNG
でも、鍵盤だと押した時に鳴るんじゃないの?
標準のボタンコントロールだと離した時に鳴る事になるのでは?
そこまで求めていないのかな?
0390デフォルトの名無しさんNGNG
>>388
getpeername()
0391デフォルトの名無しさんNGNG
> 標準のボタンコントロールだと離した時に鳴る事になるのでは?
そりゃ実装によるだろ。
0392デフォルトの名無しさんNGNG
>>385
だれかZオーダー教えてやれよ。
0393388NGNG
>>390

レス thx です。

こんな感じでやったら OK ですた

sockaddr_in another_addr;
int len = sizeof(another_addr);
getpeername( s, (sockaddr*)&another_addr, &len );
ShowMessage(AnsiString(inet_ntoa(another_addr.sin_addr)) + "|" + AnsiString(ntohs(another_addr.sin_port)));
0394デフォルトの名無しさんNGNG
マルチスレッドで質問です

ログをテキストファイルに出力する部分を別スレッド化したいのですが
具体的にどうして良いのか悩んでいます

一応考えついたのは、メインのスレッドでログをバッファへ溜めていって
出力スレッドはそれをクリティカルセッションで受け取って順次書き出すのかなぁという程度なんですが
それだと出力している間はバッファに書き込めなくなっちゃいますよね?

また、ログバッファに数値型を突っ込んだ場合に文字列に変換するような部分も
できれば別スレッド化したいのですが、これに関してはさっぱりアイデアが浮かびません・・・

何か検索ワードかヒントでも良いので教えて下さい
0395デフォルトの名無しさんNGNG
SHFileOperationでファイルのコピーをおこなっているのですが、
直後に、転送されたであろうファイルのフルパスをFindFirstFileしても、
その時点ではファイルが見つかりません。Sleep等で待機してみましたが
どうも関数を抜けた後でないとコピーが完了しないみたいなのです。
SHFileOperation処理の完了を待つにはどうしたらよいのでしょうか?

ハンドルは自分のウインドウで、フラグは
FOF_SILENT | FOF_NOCONFIRMMKDIRとしています。
よろしくお願いします。
0396395NGNG
書き忘れましたOSはWindows2000です。
今思ったのですが、ライトキャッシュされているのかも。
でも解決策がわからない・・・
0397デフォルトの名無しさんNGNG
>>395-396
さすがにファイルの存在・内容についてはキャッシュされていようと
一貫性は保たれてるはずだぞ。

ところで395の二行目の「直後」って、いったいどの時点なんだ?
4行目で関数を抜けた後とあるが、ということは抜ける前なのか?
0398395NGNG
どうもです
int test(〜)
{
 int result = ShFileOperation( 〜;

→私の言った直後はここです
}

CopyFile API でもだめでした・・・
0399デフォルトの名無しさんNGNG
fopenもできない?
0400デフォルトの名無しさんNGNG
>>398
……ありゃ、ほんとだ。
うちの環境でも再現できますた。
ちと驚き。
0401デフォルトの名無しさんNGNG
>>389
>>264-267 >>299-301 あたりだな。結局あれで解決したのか?
0402デフォルトの名無しさんNGNG
>>394はスレ違いですか?
マルチスレッド相談室ではWin環境依存な話題はWin32APIスレに書けとあったのですが・・・
0403デフォルトの名無しさんNGNG
>>398
俺のWin98SEでは再現できなかった。
0404デフォルトの名無しさんNGNG
この事象は、処理がatomicだから
0405???NGNG
この不景気の中、財布がホクホクです♪
先月は21万、ネットで稼がせて頂きました�
半信半疑始めたサイトでまさか生活できるとは
思ってなかったから実感があんまりないけど
とにかくうれしい!!!
はっきりいってなめてました
初心者の私もできた
なせばなる�
諦めないこと�
お陰さまで
来月ハワイへいってきま〜す
http://plaza15.mbn.or.jp/~u_club/
0406デフォルトの名無しさんNGNG
>>395
FindFirstChangeNotificationでどうよ
0407名無し@沢村NGNG
>>389
>標準のボタンコントロールだと離した時に鳴る事になるのでは?

一応サブクラス化して押したときに鳴るようにしています。
で離したときにストリームに書き込むと…。
少し胸を張りたい気分です♪
0408デフォルトの名無しさんNGNG
>>394
>ログをテキストファイルに出力する部分を別スレッド化したいのですが
明確な理由が無ければしないほうがよい

>それだと出力している間はバッファに書き込めなくなっちゃいますよね?
クリティカルセクションを使っている場合は、その時点でバッファに
書き込もうとしたスレッドがスリープの状態になるはず、出力している
スレッドがリーブクリティカルセクションした時点でスリープ状態が
解除される。
そもそも、書き込めないようにするためクリティカルセクションを使う

>また、ログバッファに数値型を突っ込んだ場合に文字列に変換する
わるいが何が言いたいのかわからん
0409デフォルトの名無しさんNGNG
>>408
>明確な理由
ゲームエンジンのサブクラスなので、ファイルアクセスなどでイチイチ引っかかりたくないのです
そういう理由で
>バッファに書き込もうとしたスレッドがスリープの状態になる
のは困るのですが、うまい回避方法は無いのでしょうか

>>ログバッファに数値型を突っ込んだ場合に文字列に変換する
というのは、現在の実装だと

class ログ管理クラス
{
 std::string ログバッファ;
 template<class T> ログ管理クラス& operator <<(const T& arg)
 {
  std::ostringstream 型の違いを吸収してstd::stringにするための一時クラス
  一時クラス << arg;
  ログバッファ.append(一時クラス.str());
  return (*this);
 }
};

みたいな事やってるんです
で、operator <<()の部分がボトルネックになりそうだから
ここも別スレッド化できたらなぁという意味でございまする
0410デフォルトの名無しさんNGNG
>で、operator <<()の部分がボトルネックになりそうだから
そんなもんなるかよハゲ。
0411デフォルトの名無しさんNGNG
>>410
じゃあそっちはどうでもいいので
ファイルの書き込みを別スレッド化する方法を教えて下さい

もしかしてfopenのたんびに_beginthreadするだけですか?
0412デフォルトの名無しさんNGNG
fopenも別スレでやればいいだろ。つーか普通そうする。
0413名無し@沢村NGNG
皆様方、私は初めてスクロールバーというものをつくってみたのですよ。
そして本に書いてあるとおりにしたら、動かないのですよ…^^;
本に書いてあるというのは、次のようなことでした。

switch(LOWORD(wParam))
{
case SB_LINERIGHT:
hpos++;SetScrollPos(hScroll,SB_CTL,hpos,TRUE);Debug(hwnd,hpos);
break;
}
つまり、スクロールバーを動かしたとき、hposの値を増やして、それでスクロールバーの位置をセットするというものですが、
何故かスクロールバーは元の位置に戻ってしまうのですが…。
上のプログラムで何か欠けてる部分がありましたら、ご指導の程よろしくお願いいたします。
0414デフォルトの名無しさんNGNG
>>411

OutputDebugString 使っておけば?
0415デフォルトの名無しさんNGNG
>>409
> >バッファに書き込もうとしたスレッドがスリープの状態になる
> のは困るのですが、うまい回避方法は無いのでしょうか

FIFO とか、リングバッファって知ってるか ?
0416409=394NGNG
>>415
FIFOバッファは桁溢れしたら溢れた分を一時待避するようなバッファでしたっけ?
リングバッファはバッファの末尾がバッファの先頭に繋がってるバッファですよね

それを実装しろという事ですか?
バッファがクリティカルにロックされててpushできなかったら
どっかに待避しとけと

わかったようなわからないような・・・
0417デフォルトの名無しさんNGNG
>>416
デバグ用のログならこの程度でよいのでは?

書き込み側:
void Log(char* szFormat, ...)
{
char szMessage[MAX_MESSAGE_LEN];
va_list arglist;
va_start( arglist, szFormat );
vsprintf( szMessage, format, arglist );
va_end( arglist );

char* pszMsg = strdup(szMessage);
PostThreadMessage(idThread, MSG_LOG, 0, (LPARAM) pszMsg);
}

受け側スレッド:
FILE* fp=foprn(...);
BOOL bRet;
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 && bRet != -1)
{
switch(msg.message) {
case WM_LOG:
fprintf(fp, "%s", (char*) msg.lParam);
free((char*) msg.lParam);
break;
case WM_QUIT;
return 0;
}
}
0418デフォルトの名無しさんNGNG
>>416
> FIFOバッファは桁溢れしたら溢れた分を一時待避するようなバッファでしたっけ?

違う。ググルなりしてちゃんと勉強した方がいい。

ちなみに、リングバッファは FIFO を実現する手段の一つ。
0419デフォルトの名無しさんNGNG
>>413
hposをstatic変数にしる。
0420394NGNG
>>418
>>バッファに書き込もうとしたスレッドがスリープの状態になる
>のは困るのですが、うまい回避方法は無いのでしょうか

への回答が、つまりFIFOバッファを使えっていう事ですか?

>>417
なるほど、だいたい感じは掴めました
(ofstreamとstringで実装してるのでもうちょっとややこしそうだけど・・・)
0421名無し@沢村NGNG
>>419
あなた様、スクロールバーが動かなかった件、めでたく解決いたしました!!
というのもWM_COMMANDでスクロールバーのIDをcase スクロールバーのID:break;としたところ、
突然スクロールバーが動くようになったのであります。
もちろんcase スクロールバーのID:とbreak;の間には何も書いていません。
ただcase スクロールバーのID:とbreak;と書いただけで動くようになったのは実に不思議…?
わけわからん…?
まあしかし動くようになったのでめでたしめでたしであります。

>hposをstatic変数にしる。

それも一案かもしれませんが、またの機会に…。
とにかくあなた様ありがとうございました!!♪
0422デフォルトの名無しさんNGNG
Visual Fortran version 6.6でコンパイルしたアプリケーションが起動しません.
”C:\......exe は有効な Win32 アプリケーションではありません.”
と,言われてしまいます.
大きな配列を定義すると,怒られます.
この計算のために2GBのメモリを積んだPCを使ったのですが
どう考えても2GBも使用されてないと思われます.
Win32アプリケーションにはメモリの制限が何かあるのでしょうか?
また,メモリ2GBをフルに一つのアプリケーションで使うにはどうすればいいのでしょうか?
0423デフォルトの名無しさんNGNG
>>422
確か静的には確保できる上限があった記憶。
メモリを動的に確保してみてください。
0424デフォルトの名無しさんNGNG
>>422
積んであるメモリを全部アプリで使う?
簡単だろ。OSの機能を全てアプリに入れてしまえばいい。
そうすれば全てのメモリはお前のものだ。
0425デフォルトの名無しさんNGNG
エクスプローラー等で表示される
自分自身のアイコンを書き換えるのはリソース書き換え以外には
方法無いんでしょうか?
0426デフォルトの名無しさんNGNG
自分自身というのがexeファイルで、
自分のアイコンだけを変えたいということ?

シェル拡張用DLL(アイコンハンドラ)を作ればできるかもしれないが...
普通はできないと思った方がいいな。
0427デフォルトの名無しさんNGNG
簡易的なアンインストーラを作ろうと、
GetModuleFileNameで自分自身のフルパスを取得し、
DeleteFileをやってみましたが、アクセスを拒否されます。
自分自身を削除する実行ファイルを作るには、
どうしたらいいでしょうか?
0428デフォルトの名無しさんNGNG
>>427
ムリでしょ。
0429デフォルトの名無しさんNGNG
wshで消す
0430デフォルトの名無しさんNGNG
427ではないですが、興味アリなので。

一般的なアンインストーラはどうやって
自分自身を消しているのでしょうか?
0431デフォルトの名無しさんNGNG
>>430
削除ツール専用の自分削除プロセスを立ち上げるんじゃないの?
それ自身はワケワカラントコロにインストールしておいて。
0432デフォルトの名無しさんNGNG
一般的には
自分をTEMPフォルダ等にコピーして起動
元の自分自身を削除
WININIT.INI(9x系)かMoveFileEx(NT系)でTEMPの自分を消す
かな。

他にはバッチファイルを吐き出して実行とか
アンインストールはinfファイルで起動するとか
0433デフォルトの名無しさんNGNG
ワンポイント・レッスン
最新Windowsプログラミングテクニック

という本にそんな話題が載ってたなぁ
0434デフォルトの名無しさんNGNG
>>432
XPで試したところ、
MoveFileExで逝けました。ありがとうございます。
0435427NGNG
434=427です
0436デフォルトの名無しさんNGNG
他のマシン(Win2000等)にメッセージボックスを
表示させるAPIってなんでしたっけ。
リモートデバッグとして使うように紹介されてた記憶があるのですが。
記憶違いですかね。
0437デフォルトの名無しさんNGNG
>>436
APIは知らんけど、
NT系にはMessengerサービスが走ってるから、
net send でメッセージを送れる。
0438デフォルトの名無しさんNGNG
>>436
NetMessageBufferSendのこと?
0439436NGNG
む、
かなり早いレスにびっくりです。

まだ、はっきりとわからないけど
NetMessageBufferSend
だと思います。
net send も遊んでみました。
どうも
ありがとうございました。
0440425NGNG
む〜、DelphiのTIconとかどーなってるんだ(;´Д`)
0441デフォルトの名無しさんNGNG
>>425
> む〜、DelphiのTIconとかどーなってるんだ(;´Д`)

Delphi でも TApplication のアイコンはリソース(*.res) となっていて
exe に取り込まれてる。>>425 の問題は、リソース書き換えればいいのでは?
もちろん、リソースには複数のアイコンをいれられるよ。エクスプローラに
表示されるのは最初のやつなのかな。
0442デフォルトの名無しさんNGNG
すいません。APIの質問というかWinアプリ全般についての相談なんですが・・・
皆さんWinアプリを作成する場合にどのように作成していますか?

コンポーネント化とやらを行って拡張性の高いアプリケーションを
作成したくなったのですが、いまいち道が見えません。

現状の自分のレベルとしては
1:WinMainから始まるような通常のアプリケーションは作成できる。
2:C++はそれなりにわかる。
3:超単純な独自インターフェイスのCOMコンポーネントは一応作成できる。
4:ActiveXはよくわかっていない。
5:ATLはよくわかっていない。
6:.NETとやらはこれから勉強する。
VS.NETはほとんど触ってない、VC++6.0とUI違いすぎでいまいちわからんです(^^;)
0443442NGNG
つづき

とりあえず考えているのはMDIアプリ風で外側のフレームだけ通常のWinMainのexeにして
実装等はすべてコンポーネント化したいのです。
イメージ的にはMicrosoftWebBrowser(IWebBrowserとか持ってこれるやつ)
みたいにある程度コンポーネント単体でほぼ実装が完結されているような
ものを作成していきたいのです。

そこでこれからのどの道に進んでいけばよいのかわからなくなっています。
今考えているのは
1:ActiveXを自力で作成する勉強をはじめる。
既存のインターフェイス(IOleXXですかね?)から派生してC++でゴリゴリ書く。
2:ATLを勉強してActiveXを作成する。
3:.NETを勉強する。
4:その他?
0444442NGNG
つづき

上記4つの方法についていろいろ悩んでいます。
疑問1:ActiveXはもう時代遅れなのだろうか?
これからは.NETというものが主流?
疑問2:ActiveXを自力で作成するのは無意味?
勉強にはいいかもしれないけど、普通はATLで作成するもの?
疑問3:ATLはもう時代遅れなのだろうか?(.NET?)
疑問4:.NETとやらはちゃんと主流になるのか?
(なんかいまいち普及してない感じがしてますが)
疑問5:それいぜんにActiveX、ATL、.NETのどれも普及していない?

どのような道を進むべきか皆さんのご意見をご教授願います。





0445デフォルトの名無しさんNGNG
>>442-444

以下に、あおりでも荒らしでもなく、まじめに答えるつもりです。
是非、Delphi をお試しください。簡単な WebBrowser なら
人にもよりますが、入門して1週間で作れるようになります。
また、将来、来年 .NET にも対応する予定です。C#.NET への
移行も言語やライブラリの構造が似ているため簡単です。

Delphi と C++ と C# ユーザからのアドバイスです。
0446デフォルトの名無しさんNGNG
ATLなら1日で作れるけどね
0447デフォルトの名無しさんNGNG
445です。

追加しますと、Delphi では API レベルの細かなカスタマイズも簡単ですし、
たとえば MDI にもプロパティーをひとつ変更することです容易に対応できます
し、タブコントロールなどのコンポーネントも豊富にありますし、Delphi 自体で
コンポネントを作成して拡張できますし、ActiveX の取り込みもできます。
0448デフォルトの名無しさんNGNG
コンポーネント化といっても程度によりけりですよね。

部品を他のプログラムからも利用したい
→VB、ATL、MFC、etc…汎用を目指す
 →ActiveX
→Borland開発環境に限定してOK
 →VCLコンポーネント
→C#、VB.NET、etc…マネージド言語から使えればいい
 →.NETコンポーネント
→静的リンクできればそれでいい
 →単にC++のクラスとして作る

えとせとら
0449デフォルトの名無しさんNGNG
質問させていただきます。
検索はかけましたが相応しくないかもしれません。その際はご容赦ください。

最近フルカラー640*480で、D3DもDirectDrawも使わないのに高速半透明をするゲームが増えてきました
半透明というとDIBで1ドットずつ計算くらいしか思いつかないのですが、
こんな方法ではろくなスピードがでません(実際作りました)

あのゲームたちはどのような方法を使っているのでしょうか
VRAMを直接いじる方法は存在しなかったと思いますが…。
0450デフォルトの名無しさんNGNG
DiBSectionは試した?
0451デフォルトの名無しさんNGNG
>>450
ええ、もちろんです
CreateDIBSectionで関連づけて

ついでに透明度を256段階と決めて、1バイトでの混ぜ合わせテーブルをつくりました
120と64を、透明度128でまぜあわせたら92 などのテーブルです
3バイトの混ぜ合わせテーブルはつくるの不可能ですから…。

それを使ってforループでまわして書き換え
でもこれではそんなにスピードでないんですよ…
0452デフォルトの名無しさんNGNG
>>449

GDI+ ライブラリをつかってアルファブレンドしてるとか
0453442NGNG
レスありがとうございます。
>>445
>>447
Delphiに関してはまったく知識がないのですが、
どちらかというとコンポーネントを
「使う」のではなく「作る(再利用可能&汎用性あり)」方が主な目的です。
Delphiで作成したコンポーネントをVCに取り込むことは可能でしょうか?

>>448
>→VB、ATL、MFC、etc…汎用を目指す
目的としては汎用的なコンポーネントを目指したいなと考えています。
ActiveXが有力候補でしょうか?
ActiveXはやはりATLで作成するのが普通なのでしょうか?

>Borland開発環境に限定してOK
出来ればVC等MS系開発環境でも使用できる方がいいと考えています。

>→C#、VB.NET、etc…マネージド言語から使えればいい
現状マネージド言語(すいませんまだあまり理解していません)を使用している人が
自分の周りにいないので、普及度とかがよくわからないのですが・・・・
今後はその方向にむかっていくのでしょうか・・・

>→静的リンクできればそれでいい
一応動的なものを考えています。

0454デフォルトの名無しさんNGNG
>>Delphiで作成したコンポーネントをVCに取り込むことは可能でしょうか?

それはできません。ActiveX にすると良いのかも知れませんが面倒です。
Delphi のなかで使うのならラクチンですけど。

>> 出来ればVC等MS系開発環境でも使用できる方がいいと考えています。

こういう場合は、Delphi をおすすめいたしません。

しかし、言語や開発環境は道具です。良いものをなるべく容易に迅速に
つくれるのなら、道具にこだわるべきではないとも思うんですが。
0455デフォルトの名無しさんNGNG
>>453
> 今後はその方向にむかっていくのでしょうか・・・

これはいまのところ誰にもわからないのではないでしょうか。
もし、否定/肯定いずれでも断言する方がいたとしても
現状では信じない方が無難です。
0456デフォルトの名無しさんNGNG
>Delphiで作成したコンポーネントをVCに取り込むことは可能でしょうか?
一応DelphiでもActiveXは作れるので、その機能を用いて
ラッパーを一枚噛ませればできますけどね。
でも、素直にATLの方がいいかも(って僕はATL知りませんけれど)

作ったコンポーネントを、どういう風に活用するつもりですか?
それがわかれば絞れるかも。
0457デフォルトの名無しさんNGNG
>>451
単にお前がヘボなだけ
0458名無し@沢村NGNG
皆様方、私はいまmidiシーケンサーに取り組んでいるところですが、
初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!

0459デフォルトの名無しさんNGNG
>>449
ゲームは画像ファイルにアルファデータくっついてることが多いので
>>449が言ってるゲームもアルファ合成じゃないかと思います。

んで、以前アルファデータについて検索かけたとき
intelのパフォーマンスライブラリ(Image Processing Library)が引っかかりました。
http://www.intel.co.jp/jp/developer/software/products/perflib/ipl/index.htm
intelがMMX以降のPentium系CPUの実力を発揮させるために作ったライブラリのようです。
これ使ってみてはどうでしょう?

現在、本家英語サイトはIPPβ3.0に吸収されたようでIPLのページがありませんでした。
0460デフォルトの名無しさんNGNG
>>457
へぼいのでこの程度の方法しか思いつかないのです。
よろしかったらご教授をお願いいたします。
ループ部分をアセンブラで書くことによって、1.5倍程度の処理速度UPはできましたが、
それでもゲームでリアルタイムに使うのはきつかったです。

>>459
αデータつきの画像というと、DDSなどのD3D用画像が思いつきます。
でもとりあえずWin32APIにはαブレンディング合成の関数は存在しませんよね。

おもしろいライブラリを教えていただきありがとうございます。
Intel系PCのみの動作となっていますが、研究する価値はありそうですね。
近くまとまった休みがとれたら使用して報告させていただきます。

<->
自前で高速αブレンディング合成を作成された方、アルゴリズムをご存知の方、解説サイトを
ご存知の方がいらっしゃいましたらご一報くださると幸いです。
0461デフォルトの名無しさんNGNG
>>452さんのおかげで気付かせていただきました

大変申し訳ありません。
GDIにAlphaBlend()という関数が存在するのですね。
Win98以降のみサポートだそうです。

抜き色転送もめんどうなBitBltくらいしかないので、そんなものはあるはずないと
決め付けておりました。

近く実験を行い報告させていただくことでおわびとさせていただこうと思います
スレ汚し失礼いたしました
0462デフォルトの名無しさんNGNG
使ったことないから知らんけどAlphaBlend()つっても
結局内部ではCPUでシコシコやってんじゃないの?

俺もDIBで32ビット処理とか一応やってるけどMMX使うくらいしか思いつかないな。
アセンブラで組んでるとこにMMXまだ使ってないのなら適用してみれ。

実験するんなら事後報告よろしく>>461
0463デフォルトの名無しさんNGNG
マルチスレッドで
メインスレッドからPostThreadMessageして
ワーカースレッドでGetMessageする場合
ワーカースレッドをコールバック関数にしたりする必要ありますか?

あとワーカースレッドにメッセージキューを実装しなければならない
というようなことがMSDNに書かれていたのですが
具体的にどういう事なんでしょうか?
0464デフォルトの名無しさんNGNG
>VCLとか言ってる話題
Delphi氏ランなら
BorlandC++Builder使ったら?
言語がC++だから
簡単に入れると思うよ。

>DIBで重い言ってる
バックバッファとしてDIB作って
普通にCでソフトウエアレンダリングして
それをBitBltしてるだけでも、結構な速度が出ますよ。
そりゃSIMD使うともっと速くなるけど。
普通に640x480 8bit で、
画面全体を塗りつぶすだけ
for(i=0;i<(640*480);i++)p[i]=255; // わざと遅く書いた。
で
余裕で60fps切るようだったら、DIB生成かBitBltあたりに何か問題があると思う。

0465デフォルトの名無しさんNGNG
>>464
8bitならかなり速いです。
あらかじめ合成用のテーブル持てるし。
問題は16や32なわけでして

早く家に帰ってためしたいです。はい…
0466デフォルトの名無しさんNGNG
>>462
> 使ったことないから知らんけどAlphaBlend()つっても
> 結局内部ではCPUでシコシコやってんじゃないの?

アクセラレーションが有効ならドライバが直に実行するんでない?
0467名無し@沢村NGNG
皆様方、私はいまmidiシーケンサーに取り組んでいるところですが、
初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!
0468デフォルトの名無しさんNGNG
>>467
音源はなに?
0469デフォルトの名無しさんNGNG
つーか板違い
0470名無し@沢村NGNG
>>469
板違い ではありませんぞ。
素で音色をならすときは、WinAPIのMidiOutShortMessageを使ってますし、
ファイルに書き込むときは、同じくWinAPIのWrightFileを使ってますから…。
>>468
それが私は音源にうとく、音源が何かはわからないのですよ…。
ただファイルが壊れることと、音源とはあまり関係なさそうに思うのですが…。
0471デフォルトの名無しさんNGNG
MIDIに詳しくないのにMIDIシーケンサ作るの?
0472デフォルトの名無しさんNGNG
微妙にスレ違いかもしれませんがご容赦を。
CDの自動再生機能でhtmlを表示したいのですが、
「標準のブラウザ」で開くにはどうすればいいのでしょうか?
open=IEXPLORE.EXE ***
ではネスケ等に対応できません。

ShellExecute()させるだけの実行ファイルを作るといのが考えられますが。
ヨロシコ
0473デフォルトの名無しさんNGNG
>>466
試してみたいけど過去スレに実質WinMe/2000以降限定とか書いてあるから
俺の環境じゃ試せねー。
まあ実際問題としてOS限定するなら使いづらいAPIだな。少なくとも俺は使いたくない。
0474名無し@沢村NGNG
>>471
そう、わかった部分だけでとりあえずつくって、新しいことがわかるたびに機能をつけたす。
0475デフォルトの名無しさんNGNG
>>473
俺は必要になったら使うだろうなあ。
家のPC、2000とXPだし。
0476デフォルトの名無しさんNGNG
>>472
open=rundll32.exe url.dll,FileProtocolHandler index.html
0477472NGNG
>>476
即レスありがとうございます。
0478名無し@沢村NGNG
皆様方、私はいまmidiシーケンサーに取り組んでいるところですが、
初歩的なところでつまずいているのでぜひ教えてください♪
それはmidiファイルに保存するとき、音色指定で、
32 の Guitar harmonics まではプレイヤーで聞いてみると音が出るのですが、
33 の Acoustic Bass 以降の音は出ないのですよ。
バイナリエディタで開いてみると、33 の Acoustic Bass 以降の音を指定した場合、
どうもファイルがこわれているようなのですよ…?
皆様方、これは一体どういうことなのでしょうか?
32 の Guitar harmonics までと33 の Acoustic Bass 以降とでは音色の指定の仕方が違うのでしょうか?
ちなみにMidiOutShortMessageでは同じように指定して同じように音が出るのですが…?
ぜひ教えてください!!
0479デフォルトの名無しさんNGNG
>>478
> 皆様方、これは一体どういうことなのでしょうか?

ファイルが壊れているのなら、MIDIうんぬんではなく
ファイル(またはメモリ)操作にバグがあるということでしょ。
0480デフォルトの名無しさんNGNG
MIDIの知識を身につけるまで書き込むな馬鹿
0481デフォルトの名無しさんNGNG
>>465
素直にやねうらお氏のWebページか書籍を読むべし。
0482デフォルトの名無しさんNGNG
>>478
いいかげんにコピペやめれ
0483デフォルトの名無しさんNGNG
ディスクドライブのデバイス名を取得する方法はありませんか?
HDD,CD-ROM、リムーバブルなどです。
ボリューム名の取得ならわかるのですが。。。
0484デフォルトの名無しさんNGNG
デバイスタイプしか分からないんじゃない?
0485デフォルトの名無しさんNGNG
プログラム上からモニタの自動電源オフ機能を無効にするにはどうすれば
いいのでしょうか?
長時間何も入力がなくても画像を提示し続けるプログラムを作りたいのですが。

SystemParametersInfo() の SPI_SETPOWEROFFACTIVE を試してみたら
正常終了したという返事が返ってくるにも拘わらず電源は切れてしまいます。
これはうちのマシンだけの現象なのでしょうか?

どなたか教えてください。環境はWindows98および2000です。
0486デフォルトの名無しさんNGNG
SetThreadExecutionStateでどうよ
0487デフォルトの名無しさんNGNG
>>483
Win98ならレジストリのHKEY_LOCAL_MACHINE\Enum辺りに記録してある。
あとSCSIならInquiryコマンド使うとか。
0488デフォルトの名無しさんNGNG
>>483
エクスプローラで表示されてるものと同じものが得たいならSHGetFileInfo()
0489デフォルトの名無しさんNGNG
Microsoft WindowsのインクルードヘッダはC++で使いにくくて仕方がありません。
例えば、winuser.hの以下の部分。

WINUSERAPI HWND WINAPI CreateWindowExA(…);
WINUSERAPI HWND WINAPI CreateWindowExW(…);
#ifdef UNICODE
#define CreateWindowEx CreateWindowExW
#else
#define CreateWindowEx CreateWindowExA
#endif // !UNICODE

なぜ、#defineでやってしまうのでしょうか?こうすると

MyClass::CreateWindowEx(…);

などがまともにコンパイルされないではありませんか!
これをせめて

WINUSERAPI HWND WINAPI CreateWindowEx(…)
{
#ifdef UNICODE
 return CreateWindowExW(…);
#else
 return CreateWindowExA(…);
#endif // !UNICODE
}

等とやってくれればまだ使い物になると思うのですが、どうでしょう?
このようなヘッダがどこかに存在するということはないでしょうか?
0490デフォルトの名無しさんNGNG
>489
とりあえず引数も正確に書いてみろや。
0491デフォルトの名無しさんNGNG
>>490
ハア?
0492デフォルトの名無しさんNGNG
名前がぶつかる悲劇か・・・
0493デフォルトの名無しさんNGNG
>>491
> ハア?

とか言ってる暇合ったら、>>490 の言うように CreateWindowExW() と CreateWindowExA() の引数の型をちゃんと書いてみなよ。
あんたの書いてる CreateWindowEx() の引数をどうすればいいか悩むと思うから。
0494デフォルトの名無しさんNGNG
>>493
ハア?

WINUSERAPI HWND WINAPI CreateWindowEx(
#ifdef UNICODE
 …
#else
 …
#endif
)
{
 …
}
0495デフォルトの名無しさんNGNG
>>493
ハア?

WINUSERAPI HWND WINAPI CreateWindowEx(
  DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName,
  DWORD dwStyle, int X, int Y, int nWidth, int nHeight,
  HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
{
 …
}
0496デフォルトの名無しさんNGNG
>>494-495
lccやmingwのヘッダはそうなってるけど
それだと#define UNICODEして明示的にANSI版を呼び出したいとき
(あるいはその逆)ではまる罠
0497デフォルトの名無しさんNGNG
> それだと#define UNICODEして明示的にANSI版を呼び出したいとき
> (あるいはその逆)ではまる罠

CreateWindowExWかCreateWindowExAを呼べばいいだけ。
0498デフォルトの名無しさんNGNG
>>494
ププッ、やっとわかったか。
で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。
0499デフォルトの名無しさんNGNG
まあ実際のところは、関数定義をヘッダに入れるなんて嫌だな。
実体はLibファイルにでも入れて、それを切り換える方がいいかも。
0500デフォルトの名無しさんNGNG
>>498
> ププッ、やっとわかったか。

( ´,_ゝ`) プッ

自分の勘違いは素直に認めた方がいいよ。
0501デフォルトの名無しさんNGNG
>>500
> 自分の勘違いは素直に認めた方がいいよ。

それ >>494 に言ってんの ?

>>489 で引数書かなかったのは、不問にしても、>>490 に対して「ハァ?」って返した時点で、勝負決まったと思うけどね。

慌てて、>>494 書いたかと思ったら、逆切れですか ?
0502494NGNG
>>501
省略した引数の部分を書いてみろと言われたので
書きましたが、それがどうかしました?

で、書いたはいいが、その後はどうなったんでしょう。
是非ともアドバイスを承りたいんですが。
0503489 ◆CPP8mJMMbA NGNG
皆さん、早速のレスありがとうございます。(2回目のカキコです)

>>492
そうなんですよ。せめて#defineじゃなければ名前空間を分けて衝突は避けられるんですけど。

>>494-495
私も最初は全てそのように書き換えようと考えました。それこそ全てのヘッダまで。
定数の#defineも含めて。ただ、そこまでの労力が…
かと言ってその場で必要なものだけ宣言しなおすのも癪でして(^^;

>>496さんが仰っている状況に関しては、私も>>497さんのような解決方法でよいと思います。
lccやmingwからヘッダだけ抜き出して他の環境で、ってのはアリなんでしょうか?

>>499
確かにヘッダに定義を入れるのは気持ち悪いところですが…
0504デフォルトの名無しさんNGNG
>>502
> 省略した引数の部分を書いてみろと言われたので
> 書きましたが、それがどうかしました?
で、>>491 はどうなったん ? 都合の悪いところは、無視ですか ?

> で、書いたはいいが、その後はどうなったんでしょう。
> 是非ともアドバイスを承りたいんですが。

>>498 で、デメリット書いてますが必死すぎて見えてないのね。
0505デフォルトの名無しさんNGNG
おまえらがんばりすぎ
0506デフォルトの名無しさんNGNG
>>505
反論できなくなった時の、逃げ口上...
0507デフォルトの名無しさんNGNG
必死だな
0508デフォルトの名無しさんNGNG
>>507
ププッ、それしか書けないんならもうやめたら ? ちょっとカッコ悪いよ。

それとも、>>504 に対してなんか言うことある ?
0509494NGNG
>>504
491って何の話ですか? 私は494ですが491ではありません。

> >>498 で、デメリット書いてますが必死すぎて見えてないのね

↓これのことですかね。
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。

必死以前に、これは
省略した引数をすべて書いてみることと
何のつながりがあるんでしょう?

引数を書けと言った意味がまずわからないのですが。

それと、「ラップ関数を経由するから嫌」なんて
質問者さんはそんな事書いてませんよね。
勝手に妄想されたのでしょうか?

納得のいくアドバイスをお願いします。
0510デフォルトの名無しさんNGNG
>>508
え?
0511デフォルトの名無しさんNGNG
508は自分に都合の悪い発言は全部494の仕業だと思ってるようだな
0512494NGNG
>>504
あれ? 意味が伝わりにくかったでしょうか。
まずは「引数を省略せずに書いてみる」というアドバイスに
どういう狙いがあったのかを教えてください。お願いします。

ちなみに >>493では
> あんたの書いてる CreateWindowEx() の引数をどうすればいいか悩むと思うから。
とありますが、どの辺で悩んでいいのかわかりませんでした。
0513デフォルトの名無しさんNGNG
こんばんは。最近お世話になった半透明に挑む者です。
Pen3 850MHz Win2kによる実験ができましたので、報告させていただきます。
世の中に計測ページは沢山ありますけどね(^^;

・24bitBMP
・1〜3はCreateDIBSectionで領域を確保。全て640*480
・4はmallocで領域を確保
・5はCreateCompatibleBitmapで領域確保

<1>
BitBltで背景を描画
テーブルを参照して半透明画像を重ねあわせ
透明色指定に基づき、1ドットずつ色を調べて指定されたものなら転送しない
(今回は指定しておいたものの、画像内にその色は一度もでてきません)

<2>
1の透明色指定できないバージョン(if文がない分だけ速い)
0514デフォルトの名無しさんNGNG

<3>
BitBltで背景を描画
画像重ね合わせのところをアセンブラで
テーブル参照ではなく、素直に計算する

<4>
memcpyで背景転送
画像重ね合わせのところをアセンブラで
テーブル参照ではなく、素直に計算する

<5>
BitBltで背景を描画
画像重ね合わせのところをAlphaBlendで

<1>21.085ms
<2>20.187ms
<3>13.417ms
<4>13.691ms
<5>速すぎ

何度やっても4のほうが3より遅い。
純粋にメモリー書きかえしかしていない4の方が早そうなものなんですが…。
0515デフォルトの名無しさんNGNG
>>481さんのアドバイスのもと、やねうらお氏のページを覗いてみました。
かなり参考になりますね。

でもちょっと気になったことがひとつ。
やねうらお氏がさらりと

>16bpp(RGB555,565)の半透明(α3bit)でWORDテーブル持ってます。
>だもんで、半透明もバリバリ速いです。(16bppのときだけ^^;)

とおっしゃっているのですが、意図するところが読めないのです。
馬鹿な私は即座に
((1 + 65536) * 65536 / 2)通りのテーブルなんて持てるわけねぇ(;´Д`)
と思ってしまったのですが、やねうらお氏の言うテーブルとはどんなものなのでしょう。
目を通しても「テーブルを持っています」としか書かれていなかったので…。
思いつくものがあったら、教えていただけると嬉しいです。
0516デフォルトの名無しさんNGNG
>>509
> 491って何の話ですか? 私は494ですが491ではありません。

あっそ、まあどうとでも言えるから。違うって言うなら、一応そう思っとくよ。

> 引数を書けと言った意味がまずわからないのですが。

>>489 は、少なくとも CreateWindowExA() と CreateWindowExW() の引数の違いは考慮してないから、それを考慮しなよ。って言う意味だよ。

> それと、「ラップ関数を経由するから嫌」なんて
> 質問者さんはそんな事書いてませんよね。

だって気付いていさなそうだからね。

> 勝手に妄想されたのでしょうか?

妄想 ? 具体的なデメリットがわかってないの ?
0517デフォルトの名無しさんNGNG
>>497
いやだからLPTSTRとかがLPWSTRとかに展開されちゃっててはまるの
説明めんどくさいからどうでもいいや
0518494NGNG
>>516
> >>489 は、少なくとも CreateWindowExA() と CreateWindowExW()
の引数の違いは考慮
> してないから、それを考慮しなよ。って言う意味だよ。

考慮していないのでなく、重要でないから
省略しただけとかもしれませんよね。

まあ仮に考慮してなかったとしましょう。
アドバイスの通りそれを考慮して書いてみました。

で、結局どんな進展があったのでしょうか?
ラップ関数を経由する話とどうつながっていくのでしょう?

> 妄想 ? 具体的なデメリットがわかってないの ?

妄想と書いたのはラップ関数のデメリットの話ではなく、
そのような意図の質問ではないということです。

同じことを書きますが、
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。

質問者は名前の衝突等を気にしているのであって
「ラップ関数を経由するから、それが嫌」なんてことは
書いていませんね。妄想でしょうか?
0519デフォルトの名無しさんNGNG
>>516
> だって気付いていさなそうだからね。

お前、言ってることがハチャメチャだぞ
0520デフォルトの名無しさんNGNG
>>518
> 考慮していないのでなく、重要でないから
> 省略しただけとかもしれませんよね。

それがダメだって言ってるの。まだわからない ?

> で、結局どんな進展があったのでしょうか?
> ラップ関数を経由する話とどうつながっていくのでしょう?

一つヒントをあげよう。
引数が違うと言うことは、別の関数が必要と言うことだよ。

> 質問者は名前の衝突等を気にしているのであって
> 「ラップ関数を経由するから、それが嫌」なんてことは
> 書いていませんね。妄想でしょうか?

あんた、ヴァカじゃないの ?
衝突を気にするからと言って、>>489 みたいなこと (=ラップ関数を作る) やると、余計面倒だ (=デメリットがある) 。って言ってんだよ。
>>489 が書いてないのは、気付いてないからだと思うよ。

で、デメリットはわかったの ? それとも、>>494 みたいに書けば全て解決と思ってるの ?
0521デフォルトの名無しさんNGNG
この見事な殺伐っぷり、たまらんねぇ。
0522489 ◆CPP8mJMMbA NGNG
>>517
あっ、確かに…もっと手前の方で#ifdefとtypedefを山ほどかまして何とかなりませんかねぇ…

他にもラップ関数を使った場合には、

・ヘッダ内に関数定義が入る
・関数呼び出しオーバーヘッドがかかる(インラインじゃだめかなぁ)
・引数の違う場合、違いの吸収が面倒くさい

って感じになるんでしょうか。(他にも思いついたら列挙お願いします)
このくらいの範囲ではデメリットを考えましたが、後はそれと名前の衝突を
天秤にかけるしかないですかね…
0523494NGNG
>>520
> 一つヒントをあげよう。
> 引数が違うと言うことは、別の関数が必要と言うことだよ。

実体が2つ必要になるが同じ関数名では実体を2つは
作れないということでしょうか?
が、それだと引数を書かせることとは関係がないので
外れですかね?

ちょっとわからないのでヒントでなく具体的に
教えていただけないでしょうか。

> で、デメリットはわかったの ?
> それとも、>>494 みたいに書けば全て解決と思ってるの ?

デメリットは承知しているつもりです。
が、何度も言ってるように、その話をしているわけではありません。

> >>489 が書いてないのは、気付いてないからだと思うよ。

そうですか。ということは、上で書かれた
> で、あんたの方法だとラップ関数を経由するから、それが嫌だったんだろ。

というのは妄想だったということでよろしいですね。
0524493NGNG
>>522
> 他にもラップ関数を使った場合には、

と言うか、CreateWindowExA() と CreateWindowExW() の引数が違うと言うことは、ラップ関数の引数も必然的に変える必要があると言うこと。
つまり、ラップ関数も二種類持つしかない。で、

> ・ヘッダ内に関数定義が入る

と言うのが一番問題だと思う。
CreateWindowEx() をグローバルにすると当然複数ファイルにインクルードされたら二重定義になるし、static にすると、実体を複数個持つこととなる。
CreateWindowEx() だけならまだいいかもしれないけど、他にも色々あるしね。
まあ、メモリーも安いからそれでもいいやって言う人もいるかもしれないけど、あまり誉められた設計じゃないよね。

ちなみに、もし CreateWindowExA() と CreateWindowExW() の引数が同一なら、その関数はライブラリに入れて、実行時に CreateWindowExA() か CreateWindowExW() に振り分けることもできる。
だから、引数が同一かどうかはかなり重要。
0525493NGNG
>>523
> 実体が2つ必要になるが同じ関数名では実体を2つは
> 作れないということでしょうか?
> が、それだと引数を書かせることとは関係がないので
> 外れですかね?

引数が一緒だったら、ラップ関数の実体は一つにする (=ライブラリに入れておく) ことができるよ。
そんなこともわからないの ?
0526489 ◆CPP8mJMMbA NGNG
いっそのことMSに
「C++向けに#defineを極限まで減らしたヘッダ激しくキボンヌ( ゚ρ゚)」
とでも要望出してみるかなぁ…
無視されるだろうなぁ…MSだし…
0527デフォルトの名無しさんNGNG
>>526
自分で書くという発想は無いのですか ?
0528494NGNG
>>525
> 引数が一緒だったら、ラップ関数の実体は一つにする (=ライブラリに入れておく) ことができるよ。

すみませんが、意味がよくわかりません。
名前も引数も同じ関数の実体を1つにできるんでしょうか?

(ちなみに、私が書いた実体というのはライブラリ単位の
 話ではありません)
0529リバーコントロール?NGNG
レバーコントロール"ReBarWindow32" の質問です。
ツールバー"ToolbarWindow32"(hwnd_tool)、ボタン"BUTTON"(hwnd_ok)、それぞれの為の帯を2本用意しました。

ボタンは帯のサイズで自動的にサイズ変更されます。
(帯サイズに合わせられる用にコードしておいたからです)
これはこのままでイイのですが(変えたくなったら帯サイズを変えるつもりです)、
ツールバーのサイズは自動的にサイズ変更されることはありません。
ということで、帯をツールバーのサイズにあわせようと思います。

で、試したソースの一部です

REBARBANDINFO rebarbandinfo = { 0 };

memset( &rebarbandinfo, 0x00, sizeof( REBARBANDINFO ) );
rebarbandinfo.cbSize = sizeof( REBARBANDINFO );
rebarbandinfo.fMask = RBBIM_STYLE | RBBIM_CHILD;
rebarbandinfo.fStyle = RBBS_BREAK | RBBS_GRIPPERALWAYS;
rebarbandinfo.hwndChild = hwnd_tool;
RebarBandCreateIndirect( -1, &rebarbandinfo );
// ↑RB_INSERTBAND を SendMessage しているだけの自作関数です

memset( &rebarbandinfo, 0x00, sizeof( REBARBANDINFO ) );
rebarbandinfo.cbSize = sizeof( REBARBANDINFO );
rebarbandinfo.fMask = RBBIM_STYLE | RBBIM_CHILD;
rebarbandinfo.fStyle = RBBS_BREAK | RBBS_GRIPPERALWAYS;
rebarbandinfo.hwndChild = hwnd_ok;
RebarBandCreateIndirect( -1, &rebarbandinfo );
// ↑RB_INSERTBAND を SendMessage しているだけの自作関数です
0530リバーコントロール?NGNG

これではレバー帯が2本ともまったく表示されません。

どちらか片方の帯に マスク RBBIM_CHILDSIZE と rebarbandinfo.cyMinChild = xx を足すと2本とも表示されました。
しかし、ツールバー帯のサイズが合わなくて困ってます。

同様に両方に足した場合、帯のサイズはどちらも最初に指定した帯の方のサイズになってしまいます。
こっちは更に問題で、ボタンが帯のサイズと合ってくれません。


そこで質問です。
�@帯を2本用意したときに、サイズをそれぞれ別管理できますか?
�Aツールバーのサイズに合わせて帯サイズを変更する方法はありますか?
�Bツールバーボタンのサイズを得る方法はありますか?

0531デフォルトの名無しさんNGNG
>>528
>>524 は、見てくれてる ?

> 名前も引数も同じ関数の実体を1つにできるんでしょうか?

名前も引数も同じなら、実体は一つでいいでしょ ?
もちろん機能が違うから、内部で実行時に振り分ける必要があるけどね。

でも、実体が一つでいいということはライブラリに入れることができるから、>>524 に書いた「ヘッダ内に関数定義が入る弊害」を避けることができる。
また、lcc とかは、引数の型の定義変えることでヘッダファイル上は同一に見せてるけど、これも実体は一つにはできない。
更に、>>517 の問題もあるしね。

とにかく、>>526 もそうだけど、一度実装してみればいろいろわかっていいと思うよ。
マイクロソフトの技術者だってヴァカじゃないんだからさ。
0532489 ◆CPP8mJMMbA NGNG
>>527>>531
一度自力で何とかしてみます。
0533デフォルトの名無しさんNGNG
座標x、yの色の値を取得するにはどうしたらいんでしょうか?
0534デフォルトの名無しさんNGNG
GetPixel
指定された座標のピクセルの RGB(赤、緑、青)値を取得します。

COLORREF GetPixel(
HDC hdc, // デバイスコンテキストのハンドル
int nXPos, // ピクセルの x 座標
int nYPos // ピクセルの y 座標
);
0535533NGNG
できました。ありがとうございました。
0536デフォルトの名無しさんNGNG
プロパティシートの特定のページのみ使用不可にするにはどうすればいいんでしょうか?
0537デフォルトの名無しさんNGNG
_beginthreadexで起動したスレッドって
スレッドが実行している関数内部で一切メッセージにタッチしてなくても
WM_QUITが来ると勝手に閉じちゃったりするんですか?

ウィンドウプロシージャでESCが押されたか判断して終了するプログラムなんですが
ESCが押された時点でスレッドから応答が無くなるのか、ビジー状態でフリーズしてしまいます

コードの流れは以下のような感じ

_beginthreadex
CreateWindowEx
message loop
{
 //WM_QUITが来たらbreak
 do something
}
//ここでフリーズ(WaitForSingleObjectまで到達していないのに...)
いろいろ終了処理
WaitForSingleObject
CloseHandle
return 0;
0538デフォルトの名無しさんNGNG
>>537
> WM_QUITが来ると勝手に閉じちゃったりするんですか?

んなこたあない。

ところでこれは別スレッドでCreateWindowしてるの?
よくわからない。
0539デフォルトの名無しさんNGNG
>>537 激しく既出

http://pc3.2ch.net/test/read.cgi/win/1021192107/
0540デフォルトの名無しさんNGNG
>536
たぶん標準の機能では出来ない。
『Best of MSJ Vol.8 ワンポイントレッスン 最新プログラミングテクニック』の
1069p に解決策が載っている。
0541デフォルトの名無しさんNGNG
Rebarで、あるBarのみ単独一行にしたら高さ(Height)を変えるって出来ますか?

・この時は一番高いBarにあわせる(例:20px)
| bar1 | bar2

・この時はbar2は高さを変える(bar1:20px、bar2:16px)
| bar1
| bar2
0542デフォルトの名無しさんNGNG
>>538
別スレッドではメッセージキュー越しに文字列を受け取って
ファイルに書き出しているだけです

メインスレッド
 _beginthreadex;
 ウィンドウ作る;
 メッセージループ開始
 {
  WM_QUITでbreak;
 }
 メッセージループから抜けた事を別スレッドに知らせる(PostThreadMessage);
 ワーカースレッドへ終了メッセージを送る(PostThreadMessage);
 WaitForSingleObjectしてから、終了処理;
お終い

ワーカースレッド
 メッセージキューを作る;
 終了メッセージが来るまでループ
 {
  文字列を受け取ってファイルへ書き出す(GetMessage);
 }
 _endthreadex;
お終い

こんな流れなんですが、メインスレッドのメッセージループを抜けたところで
ビジー状態から抜け出せなくなります
ところが、原因究明の為にデバッガでループ終了からずんずんトレースしていったら
なんと完走してしまいした・・・まったくもって意味不明です
0543542NGNG
怖ろしいのでデバッガでしか起動してなかったんですが
思い切って直接起動したら完走しました・・・

デバッガのバグなんですかね?
0544デフォルトの名無しさん NGNG
>>543
99%プログラムのバグ。
0545542NGNG
>>544
つまり「デバッガで起動した場合ハングアップしてしまうバグ」を作り込んだということでしょうか・・・?
「実行に時間がかかりすぎるとハングアップしてしまうバグ」かな

初心者がマルチスレッド関係いじくると良くあるバグなんでしょうか?
0546デフォルトの名無しさんNGNG
なんとなくだけど、メインスレッドのメッセージループは
ほかのスレッドが終わるまで待ったほうがいいような
気がせんでもない。

なんとなくだけど。
0547デフォルトの名無しさんNGNG
>>542
関係ないけど_endthreadexは使わないほうがいいかも...
少なくともC++で使うとデストラクタが実行されないし
0548デフォルトの名無しさんNGNG
メインスレッドが終了するとほかのスレッドもすべて終了するけど
0549デフォルトの名無しさんNGNG
>547
なんのデストラクタ?
そして、何を代わりに使うんだ?
0550542NGNG
>>547
ワーカースレッド内では何もnewしてない(何もインスタンス化してない)のですが
それでもマズいんでしょうか?

>>548
メインスレッドが終了するというのは
AとBどっちの事でしょうか・・・
ウィンドウはWinMainで作られた1つのみで、ワーカースレッドはどのウィンドウにも属さず
ウィンドウプロシージャでは、ESCを検出してWM_CLOSEをPOSTしています

int APIENTRY WinMain(略)
{
 _beginthreadex略;
 CreateWindow略
 while(GetMessage略) {

 } // A→ウィンドウが破棄されてWM_QUITがPOSTされ、メッセージループから抜けた
 return static_cast<int>(msg.wParam);
} // B→WinMainから抜けた
0551デフォルトの名無しさんNGNG
>>549
作成したオブジェクト。
例外を投げてmainでcatchする。
0552デフォルトの名無しさんNGNG
>>550
もちろんBのことだが
0553542NGNG
>>552
自分のプログラムは「デバッガでStep実行すると」AのところでRUNNINGから復帰しなくなります・・・
AでBREAKして、そこからTraceでずんずん中に入っていくと無事完走します・・・
0554名無し@沢村NGNG
皆様方、ひとつ教えてください。
APIのmidioutShortmessageで0x90C07Fを指定すると音が鳴り、
0x80C07Fかまたは0x90C000を指定すると音が止まるのはわかるのですが、
同時に二つの音を鳴らすときはどうするのですか?つまり和音ですね。
ぜひ教えてください!!
0555デフォルトの名無しさんNGNG
1つのチャンネルでいいから、違うノートナンバーのノートオンを出せばよろしかろ。
0556デフォルトの名無しさんNGNG
>>555
同意。ステップ入力できるMIDIシーケンスソフトでも使ってもうちょっとMIDIのこと勉強した方がいいと思われ。
0557デフォルトの名無しさんNGNG
>>514
VRAMと普通のRAMの違いとか?
ビデオカードの種類やVRAMの容量で結果変わるんじゃない?
0558デフォルトの名無しさんNGNG
>>554
http://www.pluto.dti.ne.jp/~daiki/Midi/Midi.html
ここ読みゃぁじゅうぶんだべ
0559デフォルトの名無しさんNGNG
IEの履歴をプログラムから操作できますか?
できるならそれは何というAPIでしょうか?
0560デフォルトの名無しさんNGNG
書いた直後に発見。
WinInetのほげほげCacheEntryがキャッシュだけでなくて
履歴やCookieも扱うんですね。
0561駆け出しの名無しNGNG
検索エンジンGoogleを使っても("WNDCLASS", "インスタンス"で検索)見つけられ
なかったので、教えて下さい。

APIを使ってプログラムを作るとき、ウィンドウクラスを定義した後、
登録(RegisterClass(Ex)関数)して生成(CreateWindow(Ex)関数)しますよね。

そのとき、インスタンスハンドルをWNDCLASS(EX)構造体のメンバhInstanceと
CreateWindow(Ex)関数の引数で使用しますけど、なぜこの両方で指定しなければ
ならないのでしょうか。WNDCLASS(EX)構造体のメンバhInstanceとCreateWindow(Ex)関数
の引数で指定するインスタンスハンドルの違いは何?両方とも同じ目的で使われる
のであればどちらか一方で指定するだけで十分だと思うのですが…

インスタンスハンドルの意味は
  http://www.kab-studio.com/Programing/Dictionary/Words.html#Instance
が最も詳しかったです。

どうぞよろしくお願いします。モウ、オレヒトリデハ ゲンカイポ...
0562デフォルトの名無しさんNGNG
さあねぇ・・インスタンスハンドルはWin3.1時代の遺物っぽいが
WinNT では 0 で無視してるみたいだし よくわからんが・・
0563駆け出しの名無し(=561)NGNG
ちなみに、
 ・WNDCLASS(EX)構造体のメンバhInstanceにNULLを代入
    RegisterClass(Ex)関数実行時に失敗
 ・WNDCLASS(EX)構造体のメンバhInstanceに正しい値(WinMain()関数の最初の引数)
  を代入し、CreateWindow(Ex)関数でインスタンスハンドルにNULLを代入
    ShowWindow(Ex)で表示可能 (@_@)?!!!
という実験結果ですた…

# >>561でageたんで今度はsageで
0564駆け出しの名無し(=561)NGNG
ぐぉ、即レス!!どうもありがとうございます。

>>562
それはいわゆるhPrevInstanceのことでしょうか?あれはWin9Xでも常にNULLになる
って本に載ってました。
0565デフォルトの名無しさんNGNG
>>563
Win95ではそうなります WinNTは、ってことだから・・
もしかしてNTでもダメなんですかね
0566デフォルトの名無しさんNGNG
>>564
http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_createwindowex.htm
ここの hInstance の解説で、「無視されます」ってあるでしょ
たぶん NT はプロセス管理をシステムで完全にコントロールしてるけど
9x は不完全というか、ごちゃまぜというかいっしょくたというか(w
そんなんで hInstance が必要なんじゃないのかなぁ・・ってことです

思っただけなので信憑性ない スマ
詳しい人がレスくれるといいね
0567563NGNG
>>565
あ、>>563の実験結果はWin2000上でコンパイル・実行したときのものです。
実行環境書くの忘れたスミマセン...
0568駆け出しの名無し(=561)NGNG
>>566
あー、それ僕も読みました。他にRegisterClassEx関数
  http://www.microsoft.com/japan/developer/library/jpuipf/_win32_registerclassex.htm
の説明も…。しかしWNDCLASS(EX)に関する記述は結局見つけられなくてmicrosoft.comの
サイトから探すのはあきらめますた…。
0569デフォルトの名無しさんNGNG
>>568
英語版ならあるよ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/WindowClasses/WindowClassReference/WindowClassStructures/WNDCLASSEX.asp

少なくともリソースIDを指定しないといけない時は
インスタンスハンドルも不可欠だね。
0570デフォルトの名無しさんNGNG
hInstanceに間違ってランダムな値が入ってたらどうなるんでしょうか
0571デフォルトの名無しさんNGNG
COMを使ったプログラムで、定期的にポーリング処理を行いたいのですが、

SetTimer/KillTimerを使ったところ、精度が悪いのはまだしも、
COMオブジェクトのメソッドを呼び出している中でさらにタイマー処理が呼び出される
事が有り、困っています。

それではと、マルチスレッド化したところCOMオブジェクトが対応していないため(?)
クラッシュしてしまいます。

何か、良い解決方法は無いでしょうか?
おながいします。
0572デフォルトの名無しさんNGNG
COMオブジェクトのメソッド呼び出す前にタイマ止めとけば
あるいはちゃんと再入のチェックをするとか。
0573571NGNG
なるほりょ。
COMよく知らん不束者ですが、
マルチスレッドで何とかするのは無理なもんでしょうか?
0574 NGNG
>>573

別スレッドからインタフェイスを呼ぶのなら、
CoMarshalInterThreadInterfaceInStream と
CoGetInterfaceAndReleaseStream で
インタフェイスをマーシャルしてあげれば良いんだよ。

ex.

IStream* g_pStm;

// main thread
IYourInterface pYourInterface <- これにinterface取得済み;
CoMarshalInterThreadInterfaceInStream(IID_IYourInterface,
   pYourInterface, &g_pStm);

..

// worker thread
IYourInterface pYourInterface;
CoGetInterfaceAndReleaseStream(g_pStm,
  IID_IYourInterface,
  (LPVOID*)&pYourInterface);
pYourInterface->DoWhatEverYouLike();

worker thread でも CoInit するのを忘れずに。
0575571NGNG
>574
あんが�d。
試してみます。

>worker thread でも CoInit するのを忘れずに。
全然 頭に有りませんでした。
0576駆け出しの名無し(=561)NGNG
>>569
ありがとうございます!

該当個所は
   Handle to the instance that contains the window procedure for the class.
となっていますね。日本語訳するなら、
   ウィンドウクラスを制御するウィンドウプロシージャを含むインスタンス
   へのハンドル
ってところでしょうか。

一方、CreateWindow(Ex)関数については、>>566のURLにもありますように、
   ウィンドウに関連付けられたモジュールのインスタンスハンドル
となっています。この「ウィンドウに関連付けられた」ってどういう意味
でしょう?原文(英語版)では"... associated with ..."となってます…。

Win9Xと違い、WinNTでは無視されるようですが、その理由なども教えていただけ
ればと思います。

よろしくお願いします
0577571NGNG
マーシャリングするのは面倒なので、とりあえずCoInitだけやってみたら、
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
をスレッドの最初でやったら動きました!
とりあえず、これでやってみます。

CoInitializeEx(NULL, COINIT_MULTITHREADED);
では、やっぱりクラッシュしますた。

因みに、SetTimer(NULLウィンドウハンドル指定)よりtimeSetEventの方が
パラメータを渡せるし、精度も良いのでつかってみたところ、timeSetEventは
別のスレッドを使用しており、やっぱりクラッシュしますた。
0578デフォルトの名無しさんNGNG
サウンドカードがあるかは、waveOutGetNumDevsで再生デバイスの数>0で
判断できるけど、カメラがついているかどうか判断する方法って無いでしょうか?
0579デフォルトの名無しさんNGNG
質問です。Exploer等でファイルをドラッグ中なのか、
そうでないのかを判別するにはどうしたら良いのでしょうか?
理想では、こんな感じのがあれば良いのですが…

if( IsDrag()) {
  ドラッグ中
} else {
  それ以外
}

よろしくお願いします。
0580デフォルトの名無しさんNGNG
>>578
カメラというデバイスについて特に言及したプロトコルが無いので無理
デジタルスチールカメラとか限定していけばどっかに規格があるかもしれんが
それでもUSB接続なのか独自なPCIカード経由なのかシリアルポート経由なのか(あるのか?w)
その辺が曖昧だったら無理

「○○社の○○というカメラが接続されているかどうか」は判断できる
0581デフォルトの名無しさんNGNG
vbから現在ログオンしているユーザーのグループ名を
取得するにはどうしたらよいでしょうか?
0582デフォルトの名無しさんNGNG
>>518
VB触ったことも無いけど
NetUserGetInfo()

WinMain()で、return に MSG.wParam を返せと書いてあるのですが、
warning C4244: 'return' : 'WPARAM' から 'int' に変換しました。データが失われているかもしれません。
と怒られてしまいます。
何が悪いのでしょうか...
0583デフォルトの名無しさんNGNG
>>582
WPARAM は unsigned だからでは?(見当違いだったらスマソ)
0584582NGNG
誤 > WinMain()で、return に MSG.wParam を返せと書いてあるのですが、
正 > MSDNに、WinMain()ではreturn に MSG.wParam を返せと書いてあるのですが、
0585582NGNG
>>583
そうなんですが、MSDNを見ると

> 関数が WM_QUIT メッセージを受け取って正常に終了する場合は、メッセージの wParam パラメータに格納されている終了コードを返してください。関数がメッセージループに入る前に終了する場合は、0 を返してください。
って書いてあるんですよ...
プログラミングWindowsでもそうなっていますし
0586583NGNG
今定義を見たら、

__w64 unsigned int ですた。64ビットかな?

ちとかっこ悪いですが、return (__w64 unsigned int) 0 ってやってみては?
0587583NGNG
書き込んでしばらくして気づいた…。
return (WPARAM) 0; ってやったらいいじゃん…。
0588デフォルトの名無しさんNGNG
char file[256];
OPENFILENAME ofn;
memset(&ofn,0,sizeof(OPENFILENAME));
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.lpstrFile=file;
ofn.hwndOwner=hWnd;
ofn.nMaxFile=MAX_PATH;
ofn.lpstrTitle="ファイルの保存";
ofn.lpstrFilter="files\0*.*\0\0";

if(GetSaveFileName(&ofn)!=0){
// ほげほげ
}
r=CommDlgExtendedError();

でr=0x02になってしまいます。
ちょっと探したところ時々ある現象のようなのですが
回避方法が見つからないです。
ご存じの方教えてください。
0589583NGNG
ぎゃー! 間違いすぎー! 逆だった…。 return (int) MSG.wParam;
0590デフォルトの名無しさんNGNG
>>588
CDERR_INITIALIZATION = 0x0002
初期化の際にコモンダイアログボックス関数が失敗しました。たとえば、メモリ不足の場合に発生します。
0591デフォルトの名無しさんNGNG
>>588
  *file = '\0';
も入れなきゃ。
0592デフォルトの名無しさんNGNG
だな。
あと、MAX_PATHは260だったと思われ。
fileを大きくした方が・・・
0593デフォルトの名無しさんNGNG
>>589
それをキャストしてしまっても本当にいいのかって事です。
0594デフォルトの名無しさんNGNG
>>593
問題なし。
0595593NGNG
>>594
その一言が聞きたかったんです。
どうもありがとうございます。
0596デフォルトの名無しさんNGNG
どこで聞けばいいのかよくわからんが。
Ruby で書いた壁紙変更スクリプトを
cygwin の cron で定期実行させたところ壁紙が変更されない。
cron がサービスとして動いているので、壁紙変更スクリプトが
LocalSystem のユーザコンテキストで実行されるのが問題っぽい。

平たく言えば、サービスとして動く壁紙チェンジャーは作成可能か、かな。
何か方法知っていたら教えてくれくれ。

壁紙変更は SystemParametersInfo を使ったよくある方法。
コマンドラインから実行した場合には問題なく変更される。
0597デフォルトの名無しさんNGNG
> LocalSystem のユーザコンテキスト

こいつはデスクトップにアクセスできるのか?
0598588NGNG
うぉ、いろいろ勘違いしていたみたいだ。
char []のサイズとかnMaxFileとかいじって解決しマスタ。
0599デフォルトの名無しさんNGNG
>>542
私も>>546に同感。
ちなみにMFCアプリの場合はメインスレッドのメッセージループが
先に終わっちゃってるとASSERT出たと思います。
APIのレベルでもなにかあるんじゃないですかね。

メッセージループがWM_QUITを受け取った後で複雑な処理を
していることがなんかまずいのかも、かも、かも。
0600デフォルトの名無しさんNGNG
そんな俺の600に乾杯!
0601デフォルトの名無しさんNGNG
>>596
CreateProcessAsUser
LoadUserProfile
つーかCygwinのcronには特定ユーザーのアカウントで
プログラム実行する機能ないの?
タスクスケジューラにさえあるんだけど
0602デフォルトの名無しさんNGNG
ビットマップを表示するクラスをつくるとき
メンバ変数はint x, yとビットマップとして
ビットマップのメンバ変数は型をどうしたらいいでしょうか?
ファイル名にしておいて描画のたびに
読み込むのはつらいとおもうのです
HBITMAP型にすればよいのでしょうか(コンストラクタでLoadBitmapで初期化)?あと このビットマップは複数のインスタンスから
使われると想定しています
0603デフォルトの名無しさんNGNG
YaneSDK(↓) が参考になるかも >>602
//
// Device Independent Bitmap
//
#ifndef __yaneDIBitmap_h__
#define __yaneDIBitmap_h__
// DIBitmapはGDIと同じく、下位からR,G,B,α
class CDIBitmap {
public:
LRESULT Load(string szFileName,int nBpp=24);
LRESULT Load(HDC hDC,LPRECT lpRect,int nBpp=24);
LRESULT Save(string szFileName,LPRECT lpRect=NULL);
LRESULT CreateSurface(int nSizeX,int nSizeY,int nBpp=24);
LRESULT Release();
// LoadBitmap/CreateSurface以降、いつでもDCの取得は可能
HDC GetDC() { return m_hDC; }
HBITMAP GetHBITMAP() { return m_hBitmap; }
LRESULT GetSize(LONG& x,LONG& y);
BYTE* GetPtr() { return (BYTE*)m_lpdwSrc; }
CDIBitmap();
virtual ~CDIBitmap();
protected:
DWORD m_lpdwSrc; // ソースバッファ
LONG m_nSizeX;
LONG m_nSizeY;
int m_nBpp;
HBITMAP m_hBitmap;
HDC m_hDC;
};
#endif
0604602NGNG
>>603
ありがとうございます
参考になりそうです
ソースに当たってみます
0605デフォルトの名無しさんNGNG
現在のユーザーがHKEY_CLASSES_ROOTに書き込み権限があるかどうかを
知るにはどうすれば良いでしょうか?
それ用のAPIがあるでしょうか?
0606デフォルトの名無しさんNGNG
>>605
俺、前に同じ質問したことあるけど、「実際に書き込みでOpenしてみれ」
って言われたんで、そうしてる。
0607デフォルトの名無しさんNGNG
どうしても解決できない問題があります
もし知ってる方がいらっしゃいましたらお教え願えませんでしょうか?

一度ビットマップをCreateFile() ReadFile()で読み込み
ファイルハンドルを閉じ
読み込んだデータに加工をして保存をしようとすると
なぜかCドライブ直下に保存されます。


そしてこれがまた変なところで
読み込んだビットマップの名前をプログラム内で直接書き込んで指定してやると
カレントディレクトリに新しいファイルが生成されるのですが
コマンドライン引数(アイコンにドラッグアンドドロップ)で
ファイル名を指定すると
Cドライブ直下に新しいファイルが生成されてしまいます。
指定しているのは読み込むファイル名であって、書き出すファイル名は
test32.bmpなど、固定です。

わかりやすく言うと
自作関数(といいますかクラスになっています)
LoadBMP("test.bmp")
で読み込むとカレントディレクトリにファイルが出力され
LoadBMP(lpCmdLine); //lpCmdLineはコマンドライン引数
だとCドライブ直下にファイルが出力されます。
このクラスでは、必ずファイルハンドルはCloseHandle()で破棄しています。

保存をするのはまた別クラスで、メモリに入ったデータだけを移動させています
クラス間にはなんの依存もありません

いったいなんなのでしょうか……
0608607NGNG
↑に書いたものですが
さらに調べてみたところ、なんでかどこかでカレントディレクトリが
C:\になっていました。
GetCurrentDirectory()
を使って2箇所で見てみたのですが、最初に実行(プログラムが開始してからすぐ)
は正常なカレントディレクトリでしたが、2度目(ファイル保存寸前)
ではC:\でした。

カレントディレクトリが変わってしまうことというのはありえるのでしょうか?
0609607NGNG
すいません 嘘すいてました(汗)
コマンドライン引数を指定するとc:\になるみたいです
謎です……
0610デフォルトの名無しさんNGNG
>>607
コモンダイアログとか使ってるんじゃないの?
0611デフォルトの名無しさんNGNG
> すいません 嘘すいてました(汗)
> コマンドライン引数を指定するとc:\になるみたいです

カレントディレクトリが途中で変わるというのが嘘?
だったら起動時からカレントが違ってるだけでは?
何が不思議なのかわからん。
0612579NGNG
>>579 です。
ええっと、ドラッグ中なのか、そうでないかの判定は
難しいのでしょうか?それとも、超簡単なので
「そんな厨房の質問は無視だ( ´Д`)σ)Д`)」
って感じなのでしょうか?

ヒントでも教えて貰えるとありがたいのですが…。
0613デフォルトの名無しさんNGNG
なんのためにそういう判定がいるんだ?
IDropTargetを実装してRegisterDragDropするのでは不足か?
0614デフォルトの名無しさんNGNG
>>613
イベントドリブンという発想が出来ない素人なんだろ
0615デフォルトの名無しさんNGNG
>>612
システム全体の話?
それとも自分自身のプロセスの話?
0616579NGNG
>>613
DragAcceptFilesやDragQueryFile等のAPIや
WM_DROPFILESみたいなメッセージがあると思って
OLEは全然思いつきませんでした。なるほど。OLEですね。
ありがとうございました。これで試してみます。

>>614
イベントドリブンは理解してますが…
何故、そういう発想に………煽り………ですか?
流石、2chですね。あ、レスは不要です。問題解決したので。

>>615
自分自身です。ウィンドウにドラッグした場合等に
自前でキャレット表示等をしているアプリケーションの
真似事をしたかったのです。
0617デフォルトの名無しさんNGNG
ウィンドウを最大化したいんだけど、WM_SIZE送っても変わらない。。
どうすればいいのれすか?
0618デフォルトの名無しさんNGNG
ShowWindow
0619デフォルトの名無しさんNGNG
イベントドンブリー
0620デフォルトの名無しさんNGNG
やさしいお兄さんに質問なんですが、ipconfigなどで見ることが出来る、
DNSサーバ、デフォルトゲートウェイなどの情報を取得したいです。
さくっと出来る関数なんぞを教えてください。
0621デフォルトの名無しさんNGNG
>>620
WSA系。
0622デフォルトの名無しさんNGNG
>>620
ShelExecuteでcommand.comを使って、
ipconfigの出力をファイルにリダイレクトとか言ってみるテスト
0623 NGNG
>>620

どっかでも答えたような気がするけど、
素の Win95 サポートする必要があるなら SNMP API で MIB でオブジェクト指定して取り出せる。
iphelper.dll が使えるなら GetNetworkParams とかそのへんの IP Helper API でアレコレする。
0624デフォルトの名無しさんNGNG
ShellExecute 香ばしい
0625620NGNG
皆さん、レスありがとうございます
いろいろと調べてみましたが、簡単&綺麗な方法はないようですね…
さすがにShellExecuteはいかがなものかと…
ユーザに入力させることにします

>>623
vbスレの奴は私宛だったんでしょうか…
>SNMP API で MIB でオブジェクト指定して
その当たりの知識が全くないので、時間とかを考えて、今回は使わないことにしました
情報ありがとうございます
0626アフォルトの名無しさんNGNG
>>625
ShellExecute() はさすがにアレだが、それでも 「簡単」 に済ませるために
処理を外部コマンドに任せて、その出力を拾うのはよくある手法だぞ。
その場合は CreatePipe() + CreateProcess() を使う。
何を敬遠する?
0627デフォルトの名無しさんNGNG
UNIXではほとんど問題にならないけど
Windowsだとコマンド出力がローカライズされているという罠があったり
0628デフォルトの名無しさんNGNG
レジストリから取得じゃいかんの?
0629デフォルトの名無しさんNGNG
あほすぎる質問しますが・・・
APIってなんですか?
0630デフォルトの名無しさんNGNG
アプリケーションプログラムから、
システムの機能を呼び出すための方法のこと。
0631デフォルトの名無しさんNGNG
>>605です。
>>606の回答のようにRegOpenKeyExでKEY_ALL_ACCESSを指定して
HKEY_CLASSES_ROOTを開いたところ、書き込み権限が無いにも関わらず
RegOpenKeyExが失敗しませんでした。

書き込み権限が無いときはレジストリオープンに失敗して欲しいのですが、
どうすればよいでしょうか?
0632デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/pcqa/1035087406/
スクリプト教えてあげて
0633デフォルトの名無しさんNGNG
>620
PlatformSDKにIpConfigのサンプルコードがなかったけ?あったか自信はないけど探してみたら!
0634デフォルトの名無しさんNGNG
>>631
ごめん。俺も最初、素直に RegOpenKeyExで実装して、うまくいかなくて
下みたいにしたんだった。Openではなく、サブキー"*"(普通、すでに存在
している)を Createするという考え方。

HKEY hKey;
if(RegCreateKeyEx( HKEY_CLASSES_ROOT, "*", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, NULL ) == ERROR_SUCCESS )
 書きこみ権あり
else
 書きこみ権なし
0635デフォルトの名無しさんNGNG
>>634
あ、あと ERROR_SUCCESS になったら、RegCloseKey(hKey) を忘れずに。

過去スレ見たら
http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
の 973,974,976 にあった。
0636デフォルトの名無しさんNGNG
>>634
HKEY_CURRENT_USER\Software\Classes\* が存在していたらどうしますか
というかRegOpenKeyExが失敗しないのも
HKEY_CURRENT_USER\Software\Classes が統合されてる関係のような気がする
0637デフォルトの名無しさんNGNG
だからOpenじゃなくてCreateだってばさ
0638デフォルトの名無しさんNGNG
OpenでもKEY_ALL_ACCESS指定では開けないはずでしょ。
それが開けちゃうという話ではないの
0639デフォルトの名無しさんNGNG
>>637
前スレ読ませてもらったけど俺はOpen(KEY_WRITE)でやってて、
うまくいってるよ。
0640デフォルトの名無しさんNGNG
>>636
明示的にHKEY_CLASSES_ROOTを開いてもHKEY_CURRENT_USER\Software\Classes
を開いたことになる??マジで?

>>639
OSとどのユーザーグループで確認したのかと、実際の引数を求む。
0641デフォルトの名無しさんNGNG
>>634から読ませてもらってこんな関数にしたんですがどうでしょう?
// HKEY_CLASSES_ROOTに書き込み権限がある場合はTRUE、無ければFALSEを返す
BOOL IsWriteReg(void)
{
LONG lRes;
HKEY hKey;
TCHAR szKey[] = _T("*");
DWORD dwDisposition;

// レジストリオープン
lRes = RegCreateKeyEx(
HKEY_CLASSES_ROOT, szKey, 0, NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition
);

// レジストリオープン失敗
if(lRes != ERROR_SUCCESS)
return FALSE;

// HKEY_CLASSES_ROOT\* を新規作成した場合は削除
if(dwDisposition == REG_CREATED_NEW_KEY)
RegDeleteKey(HKEY_CLASSES_ROOT, szKey);

// レジストリクローズ
RegCloseKey(hKey);

return TRUE;
}
0642アフォルトの名無しさんNGNG
HKEY_CURRENT_USER\Software\Classes キー、9x にはない。
0643デフォルトの名無しさんNGNG
>>640
http://msdn.microsoft.com/library/en-us/sysinfo/base/merged_view_of_hkey_classes_root.asp
>>642
9xはそもそも書き込み権限がなくて失敗すること自体ないだろ
0644デフォルトの名無しさんNGNG
というわけで
HKEY_LOCAL_MACHINE\Software\Classes
をKEY_ALL_ACCESSで開いて判定すればいいのではないかと思うわけだが
誰か実験してちょ(他力本願
0645639NGNG
>>640
> OSとどのユーザーグループで確認したのかと、実際の引数を求む。

今手元に環境が無いのだけれど、WinXP Professional。
それと確かWin2Kでも確認したと思う。

管理者権限では成功し、
制限ユーザー(今は詳細は確認できない)では失敗することを確認。

HKEY hKey;
RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", 0, KEY_WRITE, &hKey);

>>636
HKEY_LOCAL_MACHINE\Software\Classesの間違いでないの?

>>642
俺の手元のWin98には一応あるよ。
中身は特殊フォルダの(ユーザー毎の)アイコン文字列くらいだけど。
0646デフォルトの名無しさんNGNG
>>645
> HKEY_LOCAL_MACHINE\Software\Classesの間違いでないの?
だから>>643を見てよ
0647639NGNG
>>646
ごめん。645を書いた時はまだ643を見てなかったので。

でも、そのリンク先によると、やはり
HKEY_LOCAL_MACHINE\Software\Classesのように思えますが。
HKEY_CURRENT_USERが有効になるのは、RegOpenUserClassesRoot
を使って開いた時だけじゃないの?
0648639NGNG
いや、違うか。HKEY_CURRENT_USERも有効になるのかな?
また暇な時にじっくり読んでみます。
0649デフォルトの名無しさんNGNG
>>644
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Classes", 0, KEY_ALL_ACCESS, &hKey);
でできた。
0650デフォルトの名無しさんNGNG
スタートメニューのようなポップアップメニュー項目の並べ替えやラベルの編集ってどうやるんでしょう。
WM_MENURBUTTONUP 受信時に InsertMenu() 等をしても表示が乱れるだけで更新が反映されないのですが。
0651デフォルトの名無しさんNGNG
こうなりますた

BOOL IsWriteReg(void)
{
LONG lRes;
HKEY hKey;
OSVERSIONINFO vi;

// NT系以外の場合TRUEを返す
vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&vi);
if(vi.dwPlatformId != VER_PLATFORM_WIN32_NT)
return TRUE;

// レジストリオープン
lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Classes", 0, KEY_ALL_ACCESS, &hKey);

// レジストリオープン失敗
if(lRes != ERROR_SUCCESS)
return FALSE;

// レジストリクローズ
RegCloseKey(hKey);

return TRUE;
}
0652デフォルトの名無しさんNGNG
>>651
9xでHKEY_LOCAL_MACHINE\Software\Classes開くと失敗するの?
失敗しないんならプラットフォームの判定は不要だと思うんだが
0653デフォルトの名無しさんNGNG
不要というか互換モードで起動されたりしたときに
判定を誤るからむしろ有害
0654デフォルトの名無しさんNGNG
>>642をHKEY_LOCAL_MACHINEと間違えますた・・・
0655デフォルトの名無しさんNGNG
関数名はCanWriteRegとかIsRegWritableでないと英語的におかしい気がする
果てしなくどうでもいいことだが
0656デフォルトの名無しさんNGNG
>>653
互換モードだとGetVersionExが違う値になるん?
0657デフォルトの名無しさんNGNG
>>656
というかGetVersionExを違う値にするための機能が互換モードですが
(ほかにもAPIの動作が微妙に変わるけど)
0658デフォルトの名無しさんNGNG
リソーススクリプトの書き方のってるところ知りませんか?
英語でもいいので、しっていたらおしえてください。
0659デフォルトの名無しさんNGNG
>>658
>>1に載ってる
猫でも分かるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0660デフォルトの名無しさんNGNG
::GetAsyncKeyState()と::GetKeyState()の違いってなんですか?
メッセージループのスレッド以外で使えるかどうかだけなのでしょうか?

あと、::GetKeyboardState()もメッセージループのスレッドでしか
使えないんですかね、やっぱり。
0661デフォルトの名無しさんNGNG
>>660
GetKeyState 今処理中のメッセージを受け取った時点で押されていたキー
GetAsyncKeyState 今まさに押されているキー
WM_KEYDOWNの処理の中で10秒くらいSleepを入れて試してみれば違いがわかる(非推奨)
0662デフォルトの名無しさんNGNG
>>661
と、いうことは::GetKeyState()をメッセージ処理後に
呼び出した場合は、最後に処理されたメッセージ取得時の
キー状態を取得するってことですね。
0663デフォルトの名無しさんNGNG
>>659
リソースエディタを使わないで
テキストデータで書きたいんですが
詳しくのってるところしりませんか?
0664デフォルトの名無しさんNGNG
>>663
MSDN
0665デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/library/
0666デフォルトの名無しさんNGNG
>>663
もれは猫でも〜のソース見てたら大体分かったけど・・・。
0667デフォルトの名無しさんNGNG
>>666
激同
0668デフォルトの名無しさんNGNG
>>663
プログラミングWindows第5版
http://www.ascii.co.jp/pb/msp/36001/36001.htm

には載ってないのかな?
# ごめん、オレはこの本読んだことないんで分からん…。
0669 NGNG
>>668
それに構文の説明が載ってるけど、p540にはドキュメントを読むように書いてある。
0670デフォルトの名無しさんNGNG
メモリDCを使用した処理をしています。

作成する CompatibleBitmap は、クライアントサイズに合わせて作っていて、
ウィンドウサイズが変更されたときに、Bitmap のサイズも変更しようと思っ
ています。。

CompatibleBitmap には、サイズ変更をするような関数は見当たらないので、
新しい CompatibleBitmap を作成して、それにサイズ変更前のデータを必要
なだけコピーしたいのですが、デバイスコンテキストから、デバイスコンテ
キストへコピーする BitBlt は、あっても、Bitmapから、Bitmapにデータを
コピーするAPIが見つかりません。

何とか、いい方法は、ございませんか?
0671デフォルトの名無しさんNGNG
>670
描画用の仮想ウィンドウ?

CreateCompatibleDC()でデバイスコンテキストをもう1つ作って、新しく作ったビットマップをSelectObject()すれば、デバイスコンテキストが2つできるので、BitBlt()が使える。
あと、最初からビットマップをスクリーンと同じ大きさでつくっておいて、使うときに必要な部分だけコピーする方法もある。
0672デフォルトの名無しさんNGNG
>>671

とりあえず、スクリーンと同じ大きさで作る方法を試してみたいと思います。
ありがとうございました。
0673デフォルトの名無しさんNGNG
>>663
あとは、
リソースエディタの吐いたリソーススクリプトを読めば、
大体分かると思うけど・・・。
0674579NGNG
>>670-672
便乗質問だけど、漏れもデスクトップサイズと同じビットマップを確保してるけど
それだと、1600x1200x2画面とかだと、やたらとメモリ食うし…。
可変サイズのウィンドウに描画用の仮想ビットマップを確保する場合、
もうちょっと、メモリを食わずに、そこそこのスピードの方法って無いんでしょうか?
0675デフォルトの名無しさんNGNG
WM_SIZEで仮想ビットマップを作り直すとか・・・
負荷が気になるならWM_PAINTでもいいかもネ
0676デフォルトの名無しさんNGNG
>>675
WM_NCCALCSIZE
等をうまく使えば、変更前と変更後のクライアント領域のサイズから、
効率的に、再描画を指定できそうな気がするんだけど、このメッセージ
の処理を、どうやってやるのか、よくわからない(^^;
0677デフォルトの名無しさんNGNG
Visual C++ でrs-232cのシリアル通信でどうやるんでしょう?
MSComm は Visual Basic のコマンドなんですか?
デジタルボルトメーターを制御したいんですが。
どなたか教えてください。 お願いします。m(__)m


0678デフォルトの名無しさんNGNG
>>677
CreatefileでCOM開けたと記憶。
0679デフォルトの名無しさんNGNG
>>678
ありがとうございます。
ちょっと調べてみます。
0680デフォルトの名無しさんNGNG
>674
小さな仮想ウィンドウを作るとか。
ウィンドウの大きさが1600×1200だとしたら、仮想ウインドウは800×600を確保。
ウィンドウのマッピングモードを800×600に変更して仮想ウィンドウからコピー。
処理するデータが1/4で済むので、かなり早くなるよ。
ただし、画質が荒くなるので使える場所は限定されるね。
0681デフォルトの名無しさんNGNG
質問させていただきます。
オートクリックツールを作ろうと思っているのですが

SendMessage(Target_hWnd, WM_MOUSEMOVE, 0, cp.x + (cp.y<<16));
SendMessage(Target_hWnd, WM_SETCURSOR, (unsigned int)Target_hWnd, HTCLIENT + (WM_LBUTTONDOWN<<16));
SendMessage(Target_hWnd, WM_LBUTTONDOWN, MK_LBUTTON, cp.x + (cp.y<<16));
SendMessage(Target_hWnd, WM_SETCURSOR, (unsigned int)Target_hWnd, HTCLIENT + (WM_LBUTTONUP<<16));
SendMessage(Target_hWnd, WM_LBUTTONUP, 0, cp.x + (cp.y<<16));

これではうまくいかないようです。
他にどんなメッセージを送ればよろしいのでしょうか。
0682デフォルトの名無しさんNGNG
それじゃSendMessageが送られへんのかいな
0683デフォルトの名無しさんNGNG
mouse_event()
0684デフォルトの名無しさんNGNG
ターゲットによってはsendInput()
0685デフォルトの名無しさんNGNG

質問:

???.ilk (増分(インクリメント)リンクファイル?)
が生成される位置を指定するにはどうすれば?


/ilk:"????/" は通らない。

/incremental:"????/" は通らない。

0686デフォルトの名無しさんNGNG
>>684
Windows 95 を見捨てるのか
0687デフォルトの名無しさんNGNG
>>686
いまさら、95なんか気にするな。
0688685NGNG

みなさん、どうか、>>685 をお願いします。

もしかして、既出放置ですか?
0689デフォルトの名無しさんNGNG
>>687
漏れの会社 PC が Windows 95 なんだYO!!!
とか言ってみる。

>>688
一体何がしたいの?
その前にコンパイラ/リンカオプションは調べた?
そこに無ければ諦めなさい。以上。
0690デフォルトの名無しさんNGNG
>>686
だから「ターゲットによっては」って言ってるじゃんよ
0691686=689NGNG
>>690
だから、その 「ターゲットによっては」 ってのが既に Windows 95 を見捨てる
って事だろ。
マウスに関して、SendInput() だけにできて mouse_event() にできない事って
どんなこと?

まあ、SDK が新しくなって mouse_event() のドキュメントが無くなったという事
になったら仕方ないけど。
0692デフォルトの名無しさんNGNG
ボタンクリックでウインドウを最大化できるようにWM_COMMANDで

SendMessage(hWnd,(WPARAM)2,(LPARAM)MAKELPARAM(now.w,now.h));

を送ったんですが、最大化されません。
まだ何かやることってあるんですか?
0693デフォルトの名無しさんNGNG
>>692 ShowWindows(SW_MAXIMIZE) じゃだめなの?
0694デフォルトの名無しさんNGNG
>>692
( `Д) <ShowWindow()
/(ヘ つ )ヘ   
0695デフォルトの名無しさんNGNG
↑ Σ(´Д`ズガーン
間違えた。ShowWindows って...
0696デフォルトの名無しさんNGNG
>>691
クライアントが最初からWin98以上を指定してきたとかそういう状況を想定してた。
> SendInput() だけにできて mouse_event() にできない事
途中で割り込まれずに連続したイベントの送信を保証すること
0697692NGNG
>>693-695
ありが�dございまつ!
できますた。
0698デフォルトの名無しさんNGNG
>>692
( `Д) <どうしてもSendMessageしたいなら、WM_SYSCOMMANDでできるかも。
/(ヘ つ )ヘ
0699デフォルトの名無しさんNGNG
いいからモノをしまえ
0700691NGNG
>>696
ああ了解、特定業務にしか使わなければ OS 限定で問題無いな。
漏れが浅かった。
しかし、mouse_event() でイベント送信順に困ったこと無いぞ。
構造体用意するのも面倒だしな・・・。

ところで、683-684 が 681 へのレスだと言う事に質問者は気付いてるのだろーか。
0701名無しさんNGNG
INITCOMMONCONTROLSEX icce;
icce.dwSize = sizeof(icce);
icce.dwICC = ICC_USEREX_CLASSES | ICC_WIN95_CLASSES | ICC_TREEVIEW_CLASSES;
::InitCommonControlsEx(&icce);

(略)

RECT rc;
GetClientRect(hWndParent, &rc);
HWND hCombo = CreateWindowEx(0, WC_COMBOBOXEX, NULL,
  WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,
  rc.left, rc.top, rc.right - rc.left, rc.bottom - rc. top,
  m_hWnd, NULL, _Module.m_hInst, NULL);

このコードでコンボボックスを作ったんだけど、
ドロップダウンリストが表示されないんですよね。

通常は、「▼」を押すとリストが表示され、
リスト以外の部分をクリックすると、リストが非表示になる処理が行われ、
もう一度同じ場所をクリックしないと、その場所にフォーカスが移りませんよね。

ところが、「▼」を押してもリストが表示されず、さらに他の部分をクリックしても
一回目はそこにフォーカスが移らない。

VC++6.0 SP5 Windows 2000 SP3です。
0702デフォルトの名無しさんNGNG
>>701
了解。わざわざ報告どうもです。
0703デフォルトの名無しさんNGNG
>>699
ワロタ
0704701NGNG
すまそ。追記。

701のようになるのはなぜでしょう?
0705デフォルトの名無しさんNGNG
>>702,704
ワロタ
0706デフォルトの名無しさんNGNG
>>701
( `Д) <rc.bottom - rc. topが小さすぎない?
/(ヘ つ )ヘ これはリストの高さになるよ。
0707デフォルトの名無しさんNGNG
702 グッジョブ
0708名無しさんNGNG
>>706
ありがとうございます。
おかげさまで解決しました。
0709デフォルトの名無しさんNGNG
706 ところでモノはしまわんのか
0710デフォルトの名無しさんNGNG
    ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ( ・∀・)< モノをしまう必要はない
   (    )  \_______
   |  ⊃| アヒャ
   (__)_)
0711127NGNG
スミマセン。ちと質問なんですが

デスクトップ上のInterNet Exploerのアイコンを消去する時は、
インターネットのプロパティの詳細設定内の
「デスクトップにInterNet Exploerを表示する」のチェックを外すと
画面上から消え去ります。

で、上記と同じコトをプログラム上で行いたいのですが方法が判りません。
ご存知の方がいましたらよろしくお願いします。<(_ _)>

ちなみに...
チェックのあり/なしでレジストリのDiffを採って見ましたがBlank以外の差はありませんでした
0712デフォルトの名無しさんNGNG
窓の手でも作ってるのか?
0713デフォルトの名無しさんNGNG
単にショートカットを削除しているだけでは?
0714711NGNG
いや、そんな凄いコトをしようなんて...
初回起動時にアイコンがデスクトップ上にあるのが嫌なんですと。

で、初回起動時の他のアイコンは消せたんですけど、
IE(だけだったかな?)が消せなくて...
0715デフォルトの名無しさんNGNG
お前が嫌ならお前が消せばすむことだろ
設定変更ツールでないものが勝手にユーザーの設定をいじるな
0716デフォルトの名無しさんNGNG
>>715
準ウイルスのようなモノを作りたいんだと思われ。
0717デフォルトの名無しさんNGNG
「嫌なんですと。」って言い方からするとユーザーからの依頼と思われ
0718711NGNG
むぅ...誤解されてる...
自分で直接設定を変更出来るんなら、こんなモン作ろうとしないです。
0719デフォルトの名無しさんNGNG
> 自分で直接設定を変更出来るんなら、
自分でやり方書いてるだろ。↓これは違うのか?
> インターネットのプロパティの詳細設定内の
> 「デスクトップにInterNet Exploerを表示する」のチェックを外すと
どういうプログラム作ってるのかちゃんと書けよ。
ウィルスじゃないんなら
0720711NGNG
...スマソ
>>715サソが言ってる「設定変更ツール」ですな。
ただ、「設定変更ツール」って名乗るのも躊躇う機能しか持ち合わせていませんが...

変更方法を知りませんか?知ってたら教えて下さい<(__)>
0721デフォルトの名無しさんNGNG
質問。
仮想画面(メモリDC) → 実画面 と
BitBlt()より高速にコピーする方法は無いでしょうか。
0722デフォルトの名無しさんNGNG
ない
0723デフォルトの名無しさんNGNG
>>721
createdibits
0724デフォルトの名無しさんNGNG
>>721
WinGつかう。
0725デフォルトの名無しさんNGNG
>>721
Direct3D
0726デフォルトの名無しさんNGNG
質問です。
最近のWindows系マシンですと、
windows、winnt、program filesなどのフォルダが最初
不可視になっていて、ここをクリックして表示して下さい
みたいな風になっていると思うのですが、ああいうのって
他のフォルダでも同じような処理ができるAPIとかあるんでしょうか?

ただのsetattributeでhiddenやsystemにしてもああいった挙動は
実現できないですよね?
また、できないならできないでシステムフォルダだけでも実現している
APIの名前だけでも教えてください。お願いします。
0727デフォルトの名無しさんNGNG
>>726
JScriptとフォルダをWeb形式でって言うのとの合わせ技。

なんでVBScript使わないんだろうね?(藁
0728デフォルトの名無しさんNGNG
>>727
JScriptはMSのものですがなにか?
0729デフォルトの名無しさんNGNG
>>728
せっかく対抗馬のVBS作ったんだからわざわざJavaScriptもどき使うこともあるまいて。
0730721NGNG
>>722-725
ありが�d。
参考にします。
0731726NGNG
マジっすか。全然API関係ないやん…スレ汚しスマソ。

>>727-729
大変参考になりました。ありがとうございました。
0732デフォルトの名無しさんNGNG
>>726
遅レスですまんが、↓のスレで聞けばいいと思うよ。
http://pc3.2ch.net/test/read.cgi/win/1011536679/
0733デフォルトの名無しさんNGNG
メモ帳のフォントの設定などを見ると、フォントの種類によって使えるサイズが決まってますが、このサイズのリストはどうすれば取得できるんでしょうか?
たとえば、"Terminal"だったら 4,6,10,14,17 というリストです。

0734デフォルトの名無しさんNGNG
ウィンドウを最終的に特定のDCに描画してやりたいのですが、方法がわかりません。
以下の方法を試してみましたがだめでした。

1. GetWindowDCやGetDCで取得したDCをsrcとしてBitBlt -> 前面にある矩形領域のビットマップがBitBltされる
2. WM_PRINT, WM_PRINTCLIENTを送る。 -> WM_PRINTをサポートしていないらしく何も得られない。
0735734NGNG
補足です。
>WM_PRINTをサポートしていないらしく何も得られない。
メッセージハンドラが実装されていないらしい、ということです。

今起動しているアプリケーションのサムネイルを表示してみたいと思っています。
0736デフォルトの名無しさんNGNG
2000/XPならLayered Window化する
そうでなければWM_PAINTで描画するまで前面のウィンドウに隠された部分は
どこにも存在しないので不可能
0737デフォルトの名無しさんNGNG
733 の質問の答えは漏れも知りたいんだが誰か知らないか?
0738デフォルトの名無しさんNGNG
デスクトップに3D環境を実現するTaskGalleryのようなものを作りたいのですが、
ウィンドウの描画を完全に横取りする方法ってどなたかご存じでしょうか?
http://research.microsoft.com/ui/TaskGallery/index.htm

ここを見ると
http://research.microsoft.com/ui/TaskGallery/pages/technology.htm
Windows Redirectorというものがあるのですけど、これってデバイスドライバレベル
で実現するものなのでしょうか。
0739デフォルトの名無しさんNGNG
>>738
ttp://www.ksky.ne.jp/~seahorse/
特別なドライバは使っていない模様です。
ソースもあるし,勉強になりますよ。まじで。
0740デフォルトの名無しさんNGNG
>>733 >>737
TClockのソース exe\pagecolor.c にそれっぽい処理が書いてあるので参考になるかと。
でも、一覧される数字が微妙に違いますね。丸め誤差か何か?
0741740NGNG
質問です。他のプロセスのコマンドライン引数を取得する方法はありますか?
Win2000では、フックを使ってプロセスに忍び込ませた後、GetCommandLine()を
使って取得できたのですが、Win95ではうまくいきませんでした。
0742デフォルトの名無しさんNGNG
>>739
紹介ありがとうございます。
アニメーションまでして非常によくできていると思います。

ただ、やろうとしていることは立体化している時にも
ちゃんとウィンドウの内容が更新されるというものを実現したいのです。
WinXPのVisualStyle機能より下のレイヤーじゃないと駄目なのでしょうかね。
0743740NGNG
>>741
補足です。うまくいかなかったというのは、GetCommandLine()で取得できた値が、
取得したいプロセスのものではなくて、自分自身のものが返ってきてしまいました。
0744デフォルトの名無しさんNGNG
>>743
フックはちゃんと DLL からやったよな?
あと、GetCommandLine() の値はどうやって自アプリに送ってる?
0745741NGNG
>>744
レス感謝です。フックDLL内のフックプロシージャ内でGetCommandLine()を呼んでます。
値は #pragma data_seg() で作成した共有領域を介して実行ファイルに渡してます。
フックプロシージャ内のGetCommandLine()の値をファイルに書き出しましたら、
侵入先プロセスの値ではなく実行ファイルのものが返ってしまってました。
0746デフォルトの名無しさんNGNG
>>745
#pragma data_seg() は当然 DLL 内部だよね?
別プロセスと間違えて自分のプロセスを捕まえてるという事は無い?

あ、フックの種類は WH_CALLWNDPROC?
今 MSDN 見て気付いたんだけど、「WH_CALLWNDPROC フックを呼び出すのは、
メッセージを受け取ったスレッドではなく、SendMessage を呼び出したスレッド
のコンテキストです。」 だそうな。
0747746NGNG
あ、746 の MSDN の説明は Windows 95/98/NT3 だそうな。
NT4 以降はメッセージを受け取ったスレッドのコンテキストみたいだ。
0748746NGNG
相手のコンテキストが必要なら WH_CALLWNDPROC でなくて WH_GETMESSAGE?
0749デフォルトの名無しさんNGNG
Win32APIをやるにはどうしたらいいですか?
何が必要ですか?
0750デフォルトの名無しさんNGNG
Win32APIのソースを
コンパイルするにはどうするんですか?
0751デフォルトの名無しさんNGNG
>>749
Windows 対応の C/C++ コンパイラ
API そのものについては >>1 の参考リンクを見れ。
0752デフォルトの名無しさんNGNG
>>750
(゚Д゚)ハァ?
Win32 API のソースなんてものがどこにある?
それとも、Win32 API を呼び出してるプログラムの事か?
0753751NGNG
Windows 対応の C/C++ コンパイラについてはこの辺
http://pc3.2ch.net/test/read.cgi/tech/1035623265/2
0754デフォルトの名無しさんNGNG
>>752
> Win32 API のソースなんてものがどこにある?

当然、MS には、あると思うよ。
>>750 のところにもあるのかなぁ...、飴玉あげるからおじさんにちょっと見せてくんない ?
0755デフォルトの名無しさんNGNG
MS−DOSでなんて入力したらいいんでつか?
test.cとかいう名前で保存したら・・・
0756デフォルトの名無しさんNGNG
>>755
del test.c
0757デフォルトの名無しさんNGNG
>>756
そんくらいわかってっから
最近知ったんでつか?
0758デフォルトの名無しさんNGNG
>>757
かれこれ8年前だな。覚えたのは。
最近はrmの方がよく使うわ。
0759デフォルトの名無しさんNGNG
>>754
ちょっとだけよ。
http://www.microsoft.com/windows/embedded/ce.net/previous/downloads/source/default.asp
0760デフォルトの名無しさんNGNG
>>757
おまえだれよ?
いつものモー板にかえりなさい
しっし
0761741NGNG
>>746
#pragma data_seg() はDLL内部で行ってます。捕まえてるプロセスはファイル名を
見てから行っているので、その点の問題無いです。
フックの種類なのですが WH_CALLWNDPROC を使ってまして、現状のプログラムが
Win2000では問題なく動いていて、Win95ではうまくいかないことから、まさに 746-747 が原因
そのもののように感じました。これからWH_GETMESSAGEで試してみて、改めて報告します。
0762デフォルトの名無しさんNGNG
>>755
copy nul test.c
copy con test.c
0763734NGNG
>>736
ありがとうございます。

最終的にはまさに>>738のようなことをしたくて、
ビットマップ(をSelectObjectしたDC)にウィンドウを描画->
そいつをテクスチャとしてトライアングルに貼り付ける
と考えていたのですが、layered window を使えばそのようなことができるのでしょうか。
自分で調べた限りはできそうにありませんでした。
できるのであれば教えてください。

とりあえず>>739を参考にしてみたいと思います。
0764741NGNG
>>746
WH_GETMESSAGE で試してみましたところ、無事他のプロセスのコマンドラインを取得できました。
Win9xとWinNT系が別物ということとMSDNの原書を読むことの重要性を改めて感じました。
ありがとうございました。
0765746NGNG
漏れがすぐさま MSDN に走ったのは漏れが適度にアフォだからかも知れぬという罠
0766デフォルトの名無しさんNGNG
>>765
わからないことは調べる。素晴らしい姿勢だと思われ。
0767765NGNG
いや、それなりにデキてたら MSDN いちいち見ないと思われ
0768デフォルトの名無しさんNGNG
>>767
要は結果よ。

MSDN丸暗記して文句だけ言ってるライブラリ厨とMSDNが素早く引けて良いものが作れる人。

どっちが死んだ方が良いかは明白。
0769デフォルトの名無しさんNGNG
>>767
いつのまにかupdateされてる場合もあるんで
どんなのがあるか、だけは覚えとく価値はあるけど
詳細までは覚える意味はあんまりないと思う
0770741NGNG
デキないかつ日本語版しか調べなかったためにアフォから脱出できなかったという罠<自分
次回は原書を含めてあるものは隅々まで調べなければ。>>765氏に感謝。
0771デフォルトの名無しさんNGNG
リソースメーターで表示される様な、CPU占有率がわかるAPIありませんか?
0772デフォルトの名無しさんNGNG
>>771
NT:NtQuerySystemInformation
9x:registry

(´-`).。oO(最近、代行googlerになってるな・・・)
0773デフォルトの名無しさんNGNG
うるせーはげ
0774デフォルトの名無しさんNGNG
> NT:NtQuerySystemInformation
特別な理由がない限りPDHのほうがいいのでは
0775デフォルトの名無しさんNGNG
>>772
Googleが自然言語処理できるようになるまでの我慢です!
0776デフォルトの名無しさんNGNG
>>775
あとは検索ワードの入力UIを掲示板風にして
あたかも親切な回答者が答えてくれているかのような
人工無能を実装すれば完璧
0777デフォルトの名無しさんNGNG
>>560
IEのキャッシュ消せるようになりましたか?
winAPIを使ったキャッシュのクリアのようなのですか...

Delphiでは IEのキャッシュ消すのに以下のようなコンポーネントがあるのです。
http://www.euromind.com/iedelphi/iecache.htm

ところが、実際に組んで見るとキャッシュや履歴の情報を取得・消す操作などが一見
できているようなのですが、実際のIEの履歴を見ると反映されません。
ソースを調べると単にAPI呼び出しをカプセル化したものなので、原因があるとすれば
その先にあると推測されます。

当方、win2000 IE6です。

これも、推測ですがこのコンポーネントの最終バージョンが2001年10月なので単にIE6で動作しなくなったのでしょうか?

ヤフーの掲示板(英語)などでも他の方が触れられているのですが、私は満足な回答を掲示板の中に見つけることができませんでした。
何方かこのへんの経緯をご存知の方いませんでしょうか?
0778771NGNG
>>772
すいません、意味がわかりません。
環境は98SEなんですが、
>NT:NtQuerySystemInformation
>9x:registry
これはレジストリ見ろ、ってことでしょうか?
0779デフォルトの名無しさんNGNG
TrackPopupMenuExで作ったメニューがメニューの外をクリックしても
消えないのですが、何のメッセージで何の関数使ったらよいでしょうか?
0780デフォルトの名無しさんNGNG
消えるけど?
0781779NGNG
>>780
タスクトレイ常駐で使ってるのですが何か関係ありますか?
0782デフォルトの名無しさんNGNG
関係無いけど、タスクトレイ常駐で TrackPopupMenuEx() 使ってる理由は?
TrackPopupMenu() じゃダメ?
0783デフォルトの名無しさんNGNG
WM_NULL
0784779NGNG
たまたま参考にしたコード(DX8.1サンプル)がEx使ってたので・・・
0785デフォルトの名無しさんNGNG
>>779
メニューを表示した後に、PostMessage(hWnd, WM_NULL, 0L, 0L); これ。
理由は MSDNに書いてあったよーな気が。
0786779NGNG
レスありがとうございます
やってみます
0787デフォルトの名無しさんNGNG
SetForegroundMessageモナー
0788779NGNG
・・・
case WM_TRAYICONMESSAGE:
 switch(lp)
 {
 case WM_RBUTTONDOWN:
   POINT pnt;
   GetCursorPos(&pnt);
   TrackPopupMenuEx(
    GetSubMenu(LoadMenu(0,MAKEINTRESOURCE(IDR_POPUP)),0),
    TPM_VERTICAL,pnt.x,pnt.y,hWnd,NULL);
   PostMessage(hWnd,WM_NULL,0,0L);
   break;
・・・
うまくいきませんでした(つ_ ;)
MSDNが古いのか、>>785さんのは載ってなかったです
SetForegroundMessageもありませんでした
動作環境はwin2000+VC6.0です
0789デフォルトの名無しさんNGNG
ダメ元でPostMessageの後ろに
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
も追加してみて。
0790779NGNG
>>789
だめですた

WM_NCHITTESTに入れたりもしてるのですが、これも関係ないみたいです
0791デフォルトの名無しさんNGNG
SetForegroundMessage => SetForegroundWindow
のことだろう、たぶん。
これは TrackPopupMenu の前。
0792デフォルトの名無しさんNGNG
>>790
TrackPopupmenu の前に SetForegroundWindow( hWnd )を入れるのだ。
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q135788&
0793779NGNG
>>791>>792
ありがとうございます
できますた
0794デフォルトの名無しさんNGNG
HBITMAPからパレットって取れますか?
できるならどうやってやりますか?
0795デフォルトの名無しさんNGNG
>>794
GetDIBits
0796デフォルトの名無しさんNGNG
XPの現在のデスクトップのパスを取得するAPIを教えて下さい。
0797デフォルトの名無しさんNGNG
SHGetSpecialFolderPath
0798デフォルトの名無しさんNGNG
>>797
うおおおおおおおおおおおおおおおおおおおおおおおおおおおっつつつt
激しくありがとおおおおおおおおおおおおおおお!!!
0799デフォルトの名無しさんNGNG
>>782
baka baka
0800泣くよ?NGNG
GetDIBits(NULL,hBitmap,0,384,NULL,pbmi,DIB_RGB_COLORS);
あたりでpbmiのbmiColorsに入るかと思えば入りませんでした。
詳しい方法キボンヌです。
0801デフォルトの名無しさんNGNG
・゚・(つД`)・゚・
0802デフォルトの名無しさんNGNG
HTMLびゅわ作りたいんですけど、MFC使わずには無理なんですかね?
もしくはSDKからCHtmlViewを使用する方法って無いですかね?
0803デフォルトの名無しさんNGNG
ActiveXコンテナをOLE生で書く苦労をいとわないなら、あるといえる。
0804デフォルトの名無しさんNGNG
コンテナ!生!160円!
0805デフォルトの名無しさんNGNG
>>803
どうしてそんなことしなくちゃいけないわけ?
HTML解析して自分で表示させるの作ればいいだけじゃないか。
それをすればプログラム技術もHTMLの仕様にも強くなれるぞ。
0806デフォルトの名無しさんNGNG
>>805
802はMFCを使わずにCHtmlViewを使う方法を探してると見た
0807デフォルトの名無しさんNGNG
>805
CSSわ〜?
Scriptわ〜?
0808デフォルトの名無しさんNGNG
SDKからCHtmlViewを使いたいわけがわからん。
CHtmlView自体がすでにMFCなのでは?
0809デフォルトの名無しさんNGNG
CHtmlViewの部分だけうまく流用できないモンかと。。。
BC++5.5.1で作ってるんですが、mshtml.hというのもちょっと気になるけど
全然関係ないですかね?
0810デフォルトの名無しさんNGNG
>>809
例えば User32.dll 使わずに CreateWindow() を呼べないかっていうくらい
支離滅裂でないか?
0811デフォルトの名無しさんNGNG
http://jp.y42.briefcase.yahoo.co.jp/bc/nas6_2001/lst?&.dir=/Projects&.src=bc&.view=l

一発ネタ(TrayTest.lzh)


タスクトレイの黄色と紫のチェックのアイコンを
右クリック->exitで元に戻るから大丈夫
まぁ、抜け道は死ぬほどありますが・・・
0812811NGNG
ビルドする前に一番上のコメント部を見てください
0813デフォルトの名無しさんNGNG
>>802
ダイアログにWebBrowserコントロール貼り付けるんじゃだめ?
0814デフォルトの名無しさんNGNG
>>800
マジレスするとDDBにパレットはありません。
DIBセクションならGetDIBColorTable()で取って
論理パレットに変換。
0815デフォルトの名無しさんNGNG
>>813
そのWebBrowserコントロールはMFCなしで動くんか?
つーかそもそも貼り付けられるのか?
0816デフォルトの名無しさんNGNG
>>811
「このブリーフケースやフォトアルバムへのアクセスはご利用できなくなっております。」
0817811NGNG
>>816
右クリックでいけない場合は、アドレスにコピペしてくらはい
0818デフォルトの名無しさんNGNG
>>815
MFCなしでも当然動くよ。
が、SDKだったのか。それはよく判らん。。
漏れはATLで作ったWindowsに貼り付けてるんだが。
0819818NGNG
これね。
CAxDialogImpl
0820デフォルトの名無しさんNGNG
>>817 ミタヨー
面白いけどでも、Ctrl + Esc or Win キーは逃げられない罠
それに、このスレで晒すのに何の意味があるの?
0821811NGNG
>>820
API関係のスレここしか知らないので。。。
それに漏れはストリーキング(w
0822デフォルトの名無しさんNGNG
マイクから入力を録音するように、ミキサーAPIをつかってマイクの入力選択をONにする事はできるのですが、
スピーカーから出る全ての音を録音できるデバイスの入力を選択するには、どうしたらよいのでしょう?

// 入力デスティネーションライン情報取得
MIXERTLINE mxl;
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
mixerGetLineInfo((HMIXEROBJ)hMix, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);

// コントロール取得
MIXERLINECONTROLS mxlc;
MIXERCONTROL mxc;
…
mixerGetLineControls((HMIXEROBJ)hMux, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);

// 入力ソース情報取得
MIXERCONTROLDETAILS mxcd;
…
mixerGetControlDetails((HMIXEROBJ)hMux, &mxcd, MIXER_GETCONTROLDETAILSF_LISTTEXT);
mixerGetControlDetails((HMIXEROBJ)hMux, &mxcd, MIXER_GETCONTROLDETAILSF_VALUE);

で、MIXER_GETCONTROLDETAILSF_LISTTEXTで取得した構造体の
dwParam1がラインID, dwParam2がコンポーネントタイプになっているようなので、
dwParam2がMIXERLINE_COMPONENTTYPE_SRC_MICROPHONEになっているインデックスを探し、
MIXER_GETCONTROLDETAILSF_VALUEで取得した配列の該当のインデックスの値を変更して
mixerSetControlDetailsという手順でマイクを録音デバイスとして選択できました。
要するに入力デバイスでコンポーネントタイプを頼りにマイクを判断しています。

ところが全ての音を録音するデバイスは、サウンドカードというかドライバーによってコンポーネントタイプが
「ANALOG」だったり「UNDEFINED」だったりするし、名前も「ステレオミキサー」、「 What U Hear」など様々です。

何か判断する基準というか、こんな方法で(ある程度にしろ)判断できるという方法はないでしょうか?
教えて君で申し訳ない。
0823デフォルトの名無しさんNGNG
>>802
何か、それっぽいことやってるサンプル付き
ttp://www.nitoyon.com/vc/tips/ie_component.htm
0824802NGNG
>>823とその他の方
いろいろありが�dございます他。
COMは全然わかんないけど、この機会に手出してみようと思います。
0825デフォルトの名無しさんNGNG
エディットボックスとOKボタンだけのダイアログボックスを作りました。
それを起動するとOKボタンのほうにフォーカスが行っています。
起動して即座にエディットボックスから文字を入力したいので、
起動直後にカーソルをエディットボックスのほうに移動したいんですが、
そんなAPIあったら教えていただけないでしょうか?
0826デフォルトの名無しさんNGNG
>>825
SetFocus
0827デフォルトの名無しさんNGNG
826さんありがとうございます。SetFocusでいけました。
0828卍曹操卍 ◆ruManjiTBY NGNG
これ、なんかいけないらしい。どこがいけないかお前ら教えろ。

while (GetMessage(&msg, NULL, 0, 0)) {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}
0829デフォルトの名無しさんNGNG
828=GetMessageをMSDNで引かないアフォ
0830デフォルトの名無しさんNGNG
GetMessageは失敗時に -1を返す。
0831卍曹操卍 ◆ruManjiTBY NGNG
するってーと、こうかな?

while (GetMessage(&msg, NULL, 0, 0)) {

  if (GetMessage(&msg, NULL, 0, 0) == -1)
  BEGIN
    ああん、抜けちゃう抜けちゃう処理;
  END

  TranslateMessage(&msg);
  DispatchMessage(&msg);
}
0832デフォルトの名無しさんNGNG
http://nihonlinux.tripod.co.jp/faq.html
0833デフォルトの名無しさんNGNG
>>825
タブオーダーちゃんと設定してください、おながいします。
0834デフォルトの名無しさんNGNG
ダイアログの場合はOnInitとかで指定するんじゃなかったっけ?
0835デフォルトの名無しさんNGNG
>>834
単にリソースファイルで定義された順がタブオーダー
0836デフォルトの名無しさんNGNG
>>834
デフォルトのアイテムにキーボードフォーカスを与えるかどうかを
WM_INITDIALOGの戻り値で指定できるけど
アイテムの指定はできないね
0837デフォルトの名無しさんNGNG
>>836
デフォルト以外に与えたいときは
SetFocusしてFALSEを返すってことだから。
でもデフォルトがフォーカスを与えたいアイテムになるよう
タブオーダを設定してほしいね。
0838デフォルトの名無しさんNGNG
>>381
それは、ダメだろう。
GetMessage は、メッセージキューからメッセージを取り出す関数だぞ。
0839デフォルトの名無しさんNGNG
>>831
こりゃまたバカ全開だな。
0840デフォルトの名無しさんNGNG
つーかMSDNにサンプルが出てるだろ
0841デフォルトの名無しさんNGNG
>>381
BEGIN、END ってあたりがそもそもおかしい。
0842デフォルトの名無しさんNGNG
擬似コードだろ。
それを言い出したら識別子に日本語を使ってるのがおかしい。
0843デフォルトの名無しさんNGNG
したら何故 while のくくりは { } のまま?
まあ何にしろ 831 は・・・
0844デフォルトの名無しさんNGNG
大変初歩の質問で申し訳ないですが教えて下さい。
枠もタイトルバ-も持たないウインドウを作成したいのですが
CreateWindowExでdwExStyleとdwStyleに0を指定しても
枠とタイトルバ-が付いてしまうんです。

hWnd_Mem = CreateWindowEx(0,Name_Mem,NULL,0,Left,Top,Width,Height,NULL,NULL,hInst,NULL);

Name_Memが指すウインドウクラスのStyleも0にしています。
どこか違っている所があるのでしょうか?
0845デフォルトの名無しさんNGNG
WS_POPUP
0846デフォルトの名無しさんNGNG
スタイルに何も指定しないと、デフォルトっぽいスタイルが適用されるんじゃないの?
0847デフォルトの名無しさんNGNG
WS_OVERLAPPED=0だからだよ。
だからWS_POPUPを指定しろ
0848デフォルトの名無しさんNGNG
>>845
出来ました。有難う御座います。
VBのFormに似せたclassを作ろう思っているのですが
ウィンドウスタイルだけで覚える所有りすぎです・・
次はSetWindowLongに挑戦してみます。
0849アルファボンドNGNG
教えて下さい。プリンタの設定の初期値はどうやって変更するのですか?
OSはWindows2000です。

DocumentPropertiesはローカル変数のDEVMODEを設定してくれるだけですよね?
苦し紛れにレジストリ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\<プリンタ名>\Default DevMode
を、DEVMODEWと仮定して変更してみたんですが、Windowsを再起動しないと反映
されません。
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PRINTER, "<プリンタ名>", NULL);
してみましたが関係ないみたいです。

誰かご存知ありませんか?
0850デフォルトの名無しさんNGNG
ビットマップリソースからヘッダ情報を取得したい場合、
Find -> Load -> LockResourceの戻り値のポインタを使えばいいんですよね?
0851デフォルトの名無しさんNGNG
VCのリソースエディタでダイアログボックスを作りました。
最大化ボタンを無効化したのですが、
タスクバーを右クリックすると最大化が可能なのです。

無効化する方法知っていらっしゃる方いませんでしょうか
0852デフォルトの名無しさんNGNG
>>851
リソースエディタのスタイルでチェックを外せば、
最大化は出てこないはずだけど・・・
0853デフォルトの名無しさんNGNG
>>852
今やってみたら選べなくなってました。
学校でコンパイルしたときは確かに選べた(最大化したのも見た)のに…。
フォルダごとコピったものだから中身も変わってないはずなんですが

お騒がせしました
0854デフォルトの名無しさんNGNG
ダイアログベースのプログラムでダイアログを常に手前に表示するように
SetWindowPos(hWndDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
とプロシージャ関数内に書き込んでそのプログラムでメッセージボックスを開くと
開いたメッセージボックスが操作不能になってしまいます。
これは、ダイアログが常に手前に表示されているからなんでしょうか?
常に手前を解除してからメッセージボックスを表示させたらうまくいくのかと思ったんですが
解除の方法がわからなくて。どうしたらよいでしょう。
0855デフォルトの名無しさんNGNG
>>854
とプロシージャ関数内に書き込んでそのプログラムでメッセージボックスを開くと


?
0856354NGNG
書き方まずかったでしょうか(汗、簡単に言うとSetWindowPosで常に手前に表示されるよう
に設定したダイアログベースのプログラムからメッセージボックスを表示させると
メッセージボックスが操作不能になる、ということなんですが。変?
0857854NGNG
↑の354は854の間違いです。
0858デフォルトの名無しさんNGNG
>>854
試したことないけど、メッセージボックスも常に手前表示
にすればいいんじゃないの?
MessageBoxのパラメータで指定できたはず。

または、ダイアログ側を解除するなら
SetWindowPos(hWndDlg, NULL, 0, 0, 0, 0,
SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
0859858NGNG
ごめん、↑は間違いなので訂正。
SetWindowPos(hWndDlg, HWND_NOTOPMOST, 0, 0, 0, 0,
SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
0860デフォルトの名無しさんNGNG
フロッピーディスクをコピープロテクトをかけて、特殊フォーマット
かけるソフトをVC++で作ろうと思っているのですが、FATやらなんらや
で良くわかりません。大まかで良いのでアドバイスをいただきたいです。

環境はWin2000のVC++6.0です。

よろしくお願いします

C++相談室から勧められて来ました。マルチじゃありません。
0861デフォルトの名無しさんNGNG
>>860
まずファイルシステムの勉強。
それとそれをいじるプログラムをいくつか書いてみる。

話はそれからだ。
0862デフォルトの名無しさんNGNG
>>860
AbsoluteWrite
AbsoluteRead
0863デフォルトの名無しさんNGNG
>>860
Wizardで楽勝!
0864デフォルトの名無しさんNGNG
>>854
TopMostのウィンドウをオーナーに持つダイアログもTopMostに
なるんじゃないの? ちゃんとオーナー指定してる?
0865854NGNG
自己解決しました。
SetWindowPosをプロシージャの真下に書いていたのが問題でした。
WM_INITDIALOG内に書いたら普通に動きました。
0866デフォルトの名無しさんNGNG
>>865
>プロシージャの真下
自分言語がお好きなお方で。
0867デフォルトの名無しさんNGNG
Zオーダーが小さいウインドウ(アクティブなウインドウの後ろにあるウインドウ)に
クリップボードの「貼り付け」の指示を送りたいんだけど、
・後ろのウインドウのウインドウハンドルを取得
・そのウインドウハンドル宛にWM_PASTEをSendMessage
でいけるのかな?さっき適当にやってみたらダメだったんだけど・・・。
0868デフォルトの名無しさんNGNG
"Game Modeling Using Low Polygon Techniques"
http://www.charlesriver.com/titles/lowpolygon.html
0869デフォルトの名無しさんNGNG
>>867
HWND omancho;
omancho=FindWindow(NULL,"無題 - メモ帳");
omancho=FindWindowEx(hwndnp,NULL,"Edit",NULL);
PostMessage(omancho,WM_PASTE,NULL,NULL);
0870デフォルトの名無しさんNGNG
いったん表示したポップアップメニューのアイテムを
タイトルで並べ替えるにはどうしたらよいのでしょうか。
ご存じの方いらっしゃいましたらどうか御教授ください。
0871デフォルトの名無しさんNGNG
GetMenuItemInfo()
↓
RemoveMenu()
↓
並べ替え
↓
InsertMenu()
↓
DrawMenuBar()
↓
(゚д゚)ウマ- ・・・かどうかは試してないから知らん
0872デフォルトの名無しさんNGNG
RealPlayerのウインドウのように
左上のアイコンを独自の巨大な物にして、
さらにメニューが隠れるのを防ぐために右にずらしたいのですが、、、
前者はWM_NCPAINTを乗っ取ることにしても、後者の実現方法が分かりません。
ちょっと上手く説明できなくて申し訳ないですが、どなたかお願いします。
0873デフォルトの名無しさんNGNG
>>872
想像だけど、あれはタイトル無しのウィンドウに根性で全部描画してるんじゃないの?
0874デフォルトの名無しさんNGNG
>>872
先頭にタイトルが空白のメニューを入れて、DISABLEDにしといたらどうか?
試してないけど。
0875デフォルトの名無しさんNGNG
>>873
その通り。なんちゃらhittestとか乗っ取って移動とかさせてる模様。
0876デフォルトの名無しさんNGNG
スタイルにWS_CAPTIONついてるが?
0877デフォルトの名無しさんNGNG
>>876

場所だけ確保してるのね。

NCPaint とかで独自に描画してる
0878デフォルトの名無しさんNGNG
Win95でも、タイトルバーがグラデーションになるし
0879デフォルトの名無しさんNGNG
うむ。
漏れは画面のデザインでグラデーションなしにしてるのに、
こいつだけグラデーションになってるな。
0880デフォルトの名無しさんNGNG
SystemParametersInfoでシステムの設定を見て動作を分けろって
MSは言ってるね
0881デフォルトの名無しさんNGNG
age
0882デフォルトの名無しさんNGNG
>871
ありがとうございます。残念ながら上手くいきませんでした。
メニューの表示がぐちゃぐちゃになってしまいました。
ウィンドウズのスタートメニューでできているのですから何らかの方法はあると思うのですが。
0883871NGNG
>>882
実は漏れ、動的メニュー使ったこと無くて、適当言ってたよ。スマン。
でもあれくらいなら MSDN 検索ですぐ出てくるから。

スタートメニューはメニューポップアップじゃなくて、独自のウィンドウ
じゃないのか?
ファイルやショートカットのドラッグ&ドロップもできるし。
0884デフォルトの名無しさんNGNG
>>873-879
そうなんですか、どうもでした。
全部自前だとめんどくさいですね(汗

メニューの位置ですが、空白メニューだと
フォントのサイズに左右されると思うのですが
システムの設定でフォントのサイズを変更しても
綺麗な位置に描画されているみたいでした。

メニューも根性で描画しているのでしょうか
それだとさすがに諦める気になります。
0885871NGNG
>>882 これで許してくれ。 ウィンドウメニューの最初のポップアップを昇順降順交互に並べ替える。
struct MenuItem { MENUITEMINFO mi; char name[256]; };
int CompareMenuItemA(const void *elem1, const void *elem2)
{
return strcmp((*(MenuItem**)elem1)->name, (*(MenuItem**)elem2)->name);
}
int CompareMenuItemD(const void *elem1, const void *elem2)
{
return strcmp((*(MenuItem**)elem2)->name, (*(MenuItem**)elem1)->name);
}
void ProcessMenu(HWND hWnd)
{
static BOOL ToAscend = false; int i;
HMENU hMenu = GetSubMenu(GetMenu(hWnd), 0); int MenuCnt = GetMenuItemCount(hMenu);
MenuItem *Items = (MenuItem*)malloc(MenuCnt * sizeof(MenuItem)), **ItemIdx = (MenuItem**)malloc(MenuCnt * sizeof(MenuItem*));
for(i = 0; i < MenuCnt; i++)
{
memset(&Items[i], 0x00, sizeof(Items[i]));
Items[i].mi.cbSize = sizeof(Items[i].mi);
Items[i].mi.fMask = MIIM_CHECKMARKS | MIIM_DATA | MIIM_ID | MIIM_STATE | MIIM_SUBMENU | MIIM_TYPE;
Items[i].mi.dwTypeData = Items[i].name;
GetMenuItemInfo(hMenu, i, TRUE, &Items[i].mi);
GetMenuString(hMenu, i, Items[i].name, sizeof(Items[i].name), MF_BYPOSITION);
ItemIdx[i] = &Items[i];
}
if(ToAscend = !ToAscend) qsort(ItemIdx, MenuCnt, sizeof(*ItemIdx), CompareMenuItemD);
else qsort(ItemIdx, MenuCnt, sizeof(*ItemIdx), CompareMenuItemA);
for(i = MenuCnt; i > 0; i--) RemoveMenu(hMenu, i - 1, MF_BYPOSITION);
for(i = 0; i < MenuCnt; i++) InsertMenuItem(hMenu, i, TRUE, &ItemIdx[i]->mi);
DrawMenuBar(hWnd);
free(Items); free(ItemIdx);
}
0886デフォルトの名無しさんNGNG
>>884
オーナー描画にして、WM_MEASUREITEMで適切な幅を返してやるってのは?
0887デフォルトの名無しさんNGNG
リソースエディタからSysListView32を挿入するにはどうしたらよいのですか?
ListBoxや、ActiveXコントロールのMicrosoft ListViewというものなら挿入
できるみたいなのですが。SysListView32の挿入の仕方がわかりません。
あと、ActiveXコントロールのListViewというのはSysListView32に比べて
どういう利点があるのですか?
0888デフォルトの名無しさんNGNG
>>887
スレ違い。
0889デフォルトの名無しさんNGNG
>>888
すみませんでした。別のスレで質問します。
0890デフォルトの名無しさんNGNG
>>888
確かに微妙に違うが、他に適切なスレは無いだろ・・・

>>887
普通にリストビュー挿入出来ないか?
つか、開発環境とバージョンを書きなさい
0891デフォルトの名無しさんNGNG
%windir%hogeを渡せばc:\windows\hoehogeを返してくれるようなAPIはありますか?
自分で%windir%を置き換えるしかないでしょうか。
0892デフォルトの名無しさんNGNG
↑
× c:\windows\hogehoge
○ c:\windows\hoge
0893デフォルトの名無しさんNGNG
>>890
> 確かに微妙に違うが、他に適切なスレは無いだろ・・・
アホですか?リソースエディタの使い方の質問だぞ?
その開発環境のスレで訊けばいい話。
仮に開発環境スレを探して見つからなかったというなら
質問にその旨を明記してるはず。というか明記すべき。

>>891
ExpandEnvironmentStrings
0894888NGNG
>>890
おっしゃる通り普通に出来ました。
大きいアイコンの表示になっていたので気付かなかっただけでした。
どうもありがとうございます。
>>893
単にスレ違いだと気付いてなかっただけです。すみません。
0895デフォルトの名無しさんNGNG
GetForegroundWindow
GetCursorPos
ScreenToClient
ChildWindowFromPointEx
を使ってカーソル位置のハンドルを取得することはできたのですが
もっとシンプルな方法ありませんか?
0896デフォルトの名無しさんNGNG
>>895
GetCursorPos()
WindowFromPoint()
0897895NGNG
探していたものはまさにこれです。
ありがとうございました
0898895NGNG
探していたものはまさにこれです。
ありがとうございました。
0899デフォルトの名無しさんNGNG
ファイルを開くダイアログの初期サイズをアプリケーション毎に記憶させたいのですが
どのタイミングでサイズの取得・復元を行えばよいのでしょう?
フック関数には WM_DESTROY が送られてこないようだし、
CDN_INITDONE 受信時にダイアログのサイズを変更すると
プレースバーの表示がおかしくなってしまいます。
どなたか良きアドバイスをお願いします。
0900デフォルトの名無しさんNGNG
>>885
ありがとうございます。あいかわらず苦戦中です。
最初のポップアップメニューの WM_MENURBUTTONUP 内で2つ目のポップアップメニューを表示し
2つ目のポップアップメニューで [並び替え] を選択したときに
1つ目のポップアップメニューを表示状態のまま整列して再描画させたかったのですが
表示中のポップアップメニューにはどうも DrawMenuBar() が通用しないようです。
ウィンドウズのスタートメニューをもう少しとよく調べてみます。
どうもありがとうございました。

そこで追加質問なのですが
ウィンドウズのスタートメニューのように非アクティブになると消えてしまうウィンドウは
どうやって spy しいたらよいのでしょうか?
0901デフォルトの名無しさんNGNG
二つの子ウィンドウがあります。
リストビューウィンドウにファイルリストを表示してあり、ファイル名をクリックで
WM_NOTIFYを処理し、エディットウィンドウに内容表示しています。(これはできた)

  case WM_NOTIFY:
     lpnmhdr = (LPNMHDR)lp;
     if (lpnmhdr->code == NM_CLICK )...

さてリストをカーソルで移動しただけで(選択状態で)エディットウィンドウに
表示したいんだけど、選択項目が変わった時のメッセージ?などがわからず進めません。
よろしくおねがいします。
0902デフォルトの名無しさんNGNG
LVN_ITEMCHANGED
Microsoft Control Spyを持っておくと便利
0903デフォルトの名無しさんNGNG
質問お願いします。当方、他アプリのキー入力を監視して、
特定のキー入力を無効にする様なツールを作っています。

しかし、WH_GETMESSAGEでフックした場合はキー入力を無効に
出来ませんし、WH_KEYBOARDでフックした場合は、無効にはできたのですが、
今度はどのアプリでキーが入力されたのかを知る手段がありません。

WH_MOUSEの、MOUSEHOOKSTRUCTのメンバhwndの様に、
キーボードフックで、入力先のHWNDを取得する方法は無いのでしょうか?
0904デフォルトの名無しさんNGNG
age忘れすいません
0905デフォルトの名無しさんNGNG
>>903
GetForegroundWindow()
GetWindowLong()
0906903NGNG
>>905
な、なるほど…。別の方法で取得すれば…。
おかげでようやく進めそうです。ありがとうございました。
0907デフォルトの名無しさんNGNG
質問させていただきます。
通信ゲーを作っていて、プレイヤーではなく、PCを識別する方法を探しています。
同じPCからのアクセスは弾きたいということです。
そこで例えばHDDのIDや、OSWindowsのIDなどを取得する方法はありますでしょうか。
(ID自体あるのか知りませんが…)

一番最初にネットワークカードのマックアドレスを思いついたのですが、
複数枚刺しているのも珍しくないですし

・関連質問(ちょっとスレ違い?)
Winsockで繋いだとき、相手のマックアドレスを取得できますが、
ルーターをかましている場合ルーターのマックアドレスですよね…?

0908デフォルトの名無しさんNGNG
クキー使え。
0909デフォルトの名無しさんNGNG
>>907
否定だらけだから最初に謝る。すまん。

HDD は、RAID なんかされてると ID なんていくらでも偽造可能。
Windows はプロダクト No. があるけど、これはいくらでもピーコ可能。
PentiumIII では CPU ごとにシリアル番号振られてるけど、通常は BIOS で
使用不可に設定されてる。
ネットワークカードの MAC アドレスは、複数挿しのでも最初の番号を取ればいいだけ
だけど、大抵のカードで任意の MAC アドレスが設定可能。
ルータをはさんでれば当然その MAC アドレス。

単に、同じ PC で 2つ以上同じプログラムを起動されたくない、という話なら、
そのプログラムに CreateMutex() 仕込んで重複起動を防止すればいい。
0910デフォルトの名無しさんNGNG
>>908
907 は、HTTP とは一言も言っていないと思うぞ。
0911デフォルトの名無しさんNGNG
IPアドレスで認識しとけば?
0912デフォルトの名無しさんNGNG
>>911
ルーター通してる場合はどうするよ? サポート対象外?
0913デフォルトの名無しさんNGNG
>>909
>だけど、大抵のカードで任意の MAC アドレスが設定可能。

メーカーでもないのにそんなん手軽にできんの?
0914デフォルトの名無しさんNGNG
>>913
ドライバの設定で簡単に変更できるのが結構あるよ。
ルータもね。
0915デフォルトの名無しさんNGNG
色々な方ご検討ありがとうございます。
やはり識別は難しいですね。マックアドレスまで偽造可能とは参りました

CreateMutexなどの多重起動防止は、意外とさっくり回避できる上、
たしかXPで別ユーザーで起動するのは防げないとか聞いたことがあります。

>Windows はプロダクト No. があるけど、これはいくらでもピーコ可能。
これがちょっと気になります。
つまりピーコしたWindowsをインストしてる同士だとNo.が重なるということでしょうか。
OSをピーコしてる人なんぞ無視したいところですが
0916デフォルトの名無しさんNGNG
>915
別に書き換え可能でも問題ないんじゃないか?
起動時だけでなく時々取得し直せば?

0917デフォルトの名無しさんNGNG
const修飾子?について質問させてください(スレ違いぽいかも。すみません)。
初歩的質問ですが、よろしくお願いします。

スレッドBからスレッドA(WinMain・プロシージャ含む)に文字列を渡す、
といった状況なのですが、
const char *型は、ポインタではなくポインタの指す対象が定数になるという?
記述をMSDNで読み、最近知りました(初歩だとは思うのですが)。

ただ、不思議に思ったのですが、スレッドBの関数hogeがLPCTSTR型で受け取った
文字列ポインタlpctstr_Hoge(hoge()を呼んだ関数が、char型配列(const宣言でもstatic宣言でも
ない)で宣言した文字列をLPCTSTR型にキャストしてhoge()に渡したもの)を
PostMessage(hwnd, WM_HOGE, (WPARAM)lpcstr, 0)でスレッドAのウインドウプロシージャに
渡すと、対象の文字列の内容が破棄されておらず、内容が保持されていました。

私としては、PostMessageした側(hoge())が終了しているだろうから文字列の内容は
破棄されていると思っていたのですが、これは一体どういうことなのでしょうか??
hoge()を呼んだ関数のchar配列が定数になっているのなら、次に同じ処理を行ったとき
どうなるのでしょうか。かなりバカな質問だと思うのですが、理解するヒントが頂ければ
幸いに思います。よろしくお願いします
0918917NGNG
×PostMessage(hwnd, WM_HOGE, (WPARAM)lpcstr, 0)
○PostMessage(hwnd, WM_HOGE, (WPARAM)lpctstr_Hoge, 0)
0919デフォルトの名無しさんNGNG
>>915
 CreateMutexでの多重起動防止の回避ってどうやるんでしょうか。
 興味があります。
 XPなどで別ユーザーでの多重起動防止は、CreateMutexに使う文字列に Global\
を前置すれば、可能なはず。
0920901NGNG
>>902
助かりました。Spyしてみます
0921デフォルトの名無しさんNGNG
>>917
説明が要領を得ないからよくわからんが、問題はちゃんと切り分けろ。
型が const か否かと、その実体が破棄されるか否かは全く別の話だ。

で、メッセージループを持つスレッド A が PostMessage() のメッセージを
受けた時点で、「hoge() を呼んだ関数」 はまだ生きてるの?
焦点はそこ。
hoge() そのものが終了しているかどうかは全く関係無い。

void foo()
{
 char str[] = "abcde";
 DoSomething1();
 hoge((LPCTSTR)str);
 DoSomething2();
}

str がいつ破棄されるのか考えてみたら?

ちなみに、スレッド A がメッセージを受理してる時点で foo() までも終了
しているなら、間違い無く破棄されている。
スタックに残骸が残っていて、破棄されてないように見えてるだけかも知れない。
0922デフォルトの名無しさんNGNG
>>hoge()を呼んだ関数
すみません、そうでした。

タイミング的には確実に、hoge()を呼んだ関数は終了しているはずで、
プロシージャを1秒Sleep()させても、同じく内容が残っていました。
0923デフォルトの名無しさんNGNG
>>922
だったら、コレじゃないの?

> ちなみに、スレッド A がメッセージを受理してる時点で foo() までも終了
> しているなら、間違い無く破棄されている。
> スタックに残骸が残っていて、破棄されてないように見えてるだけかも知れない。

SendMessage() じゃダメなの?
0924917NGNG
>>SendMessage()じゃ
その方がよさげなのですが、どうなるか試すつもりでPostにしてみました。

すみません、言われる通り説明不足でしたので追記させて下さい、
>>921さんが書いてくださった例のように、strはconstとかでないchar配列で、
foo()からhoge()にLPCTSTR型にキャストして渡したのですが、
LPCTSTR型にキャストしたことによって残った、というのは有り得ない話でしょうか、
LPCTSTR型はconst char *型に近いようなものだと覚えていますが、
const修飾子のことがよくわかっていないもので・・・
他にも色々試してみることにします。
0925デフォルトの名無しさんNGNG
>>924
あり得ないって。
912 にちゃんと書いてあるでしょ。

> 型が const か否かと、その実体が破棄されるか否かは全く別の話だ。

const は、プログラムの上から値を変更できないっていう制限の話。
実体が破棄されるか否かは、変数のスコープの話。
0926917NGNG
>プログラムの上から値を変更できない
なるほど、やっと理解できました。
長々とお付き合い頂いてありがとうございます。
スタックに残っているというだけなら、念のため、
SendMessage()に書き換えておこうと思います。
ありがとうございました。
0927デフォルトの名無しさんNGNG
ウィンドウのリサイズ開始
 ↓
MINMAXINFO設定(A)
 ↓
ユーザによるウィンドウサイズの変更
 ↓
MINMAXINFO更新(B)

サイズ変更中は(A)の設定が使われるようですが、こういう仕様ですか?
またトラッキング中に(B)の設定を逐一反映させたいのですが、できませんか?
0928デフォルトの名無しさんNGNG
Win32APIで線を描画するときに、
アンチエイリアスをかけてくれるようなAPI、
あるいはペンの設定などがあれば教えてください。
0929デフォルトの名無しさんNGNG
>>927
WM_SIZING
0930デフォルトの名無しさんNGNG
>>927
MSDN
0931デフォルトの名無しさんNGNG
MSNメッセンジャーみたいに
ポップアップで通知するのってどうやってやるの?
0932デフォルトの名無しさんNGNG
シリアルで半2重通信を行いたいのですがうまくいきません。
私がやろうとしていることは、送信時にRTSをLowにて送信し
送信が完了するとRTSをHighにするといったものです。
DWORD rcnt;
EscapeCommFunction( RsHandle, CLRRTS );
WriteFile( RsHandle, Buffer.c_str( ), (DWORD)Buffer.Length( ), &rcnt, NULL );
EscapeCommFunction( RsHandle, SETRTS );
これだとデータが全て送信される前にRTSがHighになってしまって
WriteFileは送信バッファーに入れるだけで、実際にデータを
吐き出していない感じです。
これをデータが全て吐き出されてからRTSをHighにするには
どうしたらいいのでしょうか?よろしくお願いします。
0933927NGNG
>>929 ども。これで何とかなりそうです。
0934デフォルトの名無しさんNGNG
>>932
シリアル通信のサンプル↓
http://msdn.microsoft.com/library/en-us/vcsample98/html/vcsmpserialsampleforcommunicationsdemonstration.asp
0935デフォルトの名無しさんNGNG
>>932
シリアル通信の送信バッファって、
デフォルトは0だった気がするのだが・・・。
とりあえず、WriteFileの戻り値と、
書き込んだバイト数をチェックしてみたら?
0936932NGNG
>>934
ありがとうございます。
早速みてみます!
>>935
そうなんですよ(;´Д`)
全て0で返ってきてます・・
0937デフォルトの名無しさんNGNG
>>936
それって、単に何かミスって関数失敗してるんでないの?
GetLastError()してみた?
0938932NGNG
>>937
いえ、送信する関数は>>932の通りで実際にデータは送信されています。
しかしながらWriteFile後にEscapeCommFunction( RsHandle, SETRTS ); を行ったら
実際にデータが吐き出される前にRTSがHighになってる感じがします。

因みにボーレート9600で6バイト送信していますが、これだと最低6msはRTSが
Lowにならなければいけないはずなのに、なってくれないんですよ・・
0939デフォルトの名無しさんNGNG
>>938
漏れは使ったことないが、
WaitCommEventのEV_TXEMPTYでどうよ
0940932NGNG
>>938
激しくそれっぽいです!
これって非同期で使うんですよねー?
さっそく試してみますー
0941932NGNG
おっと失礼!
>>940の>>938って>>939ですから(;´Д`)
0942デフォルトの名無しさんNGNG
>919
多重起動防止は実によくあるトピックなのでMSDNでもWebでも
多くの情報があります。検索してみてください。
「複数起動の防止」とか「二重起動防止」とか微妙に表現を変えると吉。

要注意なのは、OpenMutexの結果をチェックしてCreateMutexする
コードは間違ってるってこと。
#なんであんなコードが出回ってるんだろ。
0943デフォルトの名無しさんNGNG
>>942
漏れはCreateMutexしてGetLastErrorで見てるけど、
OpenMutexはどうダメなの?
0944919NGNG
>>942

 多重起動防止の方法については知っていますが、
これを回避する方法というのに興味があったのです。
 多重起動防止にMutexを使った場合、回避は相当に
大変だと思うんですが。
0945デフォルトの名無しさんNGNG
>>943
可能性としては低いけど、OpenMutex() と CreateMutex() の間で他の
コンテキストが CreateMutex() しちゃう可能性があるから、チェックとして
成り立たないって事だろ。
同じルーチンを複数のスレッドが通る時なんか特に。

>>944
一体何が大変だと思うの?
CreateMutex() 実行して、すでにミューテックスが作られているなら即終了
で何か問題あるの?
0946945NGNG
ごめん、よく読んでなかった。
「回避の方法」 ね。
それは漏れも知りたい。
0947デフォルトの名無しさんNGNG
C++板からきました
timeGetTime() ってどのくらいはかれるんでしょうか?一時間とかいけるのでしょうか?
0948デフォルトの名無しさんNGNG
計ってる間に49.7日をこえたりしなけりゃだいじょうぶでねーの。
0949デフォルトの名無しさんNGNG
>>942
一部のWin95環境で問題があるらしい
http://clearbrain.khsoft.gr.jp/any/history2001.htm
の2001/07/11
でもほとんどの人はそんな深い考えなんてなくて
競合条件という言葉すら知らないに1000Mutex
0950943NGNG
>>945
なるほどね。ありが�d
0951デフォルトの名無しさんNGNG
>>949
という事は、CreageMutex(FALSE) でミューテックス作成したのち、
WaitForSingleObject(0) が WAIT_TIMEOUT になるかどうかを調べ
たほうがいいのか?
0952デフォルトの名無しさんNGNG
GetWindowLong(hWnd,GWL_STYLE)で得られるLONG値はどのように
計算された物なんでしょうか?
dwStyleをキャストしてSetWindowLongで渡すと暴走に近い予期せぬ動きを
してしまいます。
DWORD hoge=(DWORD)(GetWindowLong(hWnd,GWL_STYLE))|WS_CAPTION;
等とするとhogeはSetWindowLongで使える有効値になるようなのですが
dwStyleそのものを渡す事は出来ないのでしょうか?
0953デフォルトの名無しさんNGNG
>>951
なるほど。それなら完璧だ。
最初に作成したプロセスがそのまま所有権を持つ必要はないから
作成と所有権の取得はatomicでなくても問題ないな。
0954デフォルトの名無しさんNGNG
>>952
何が問題になってるのかわからないけど、SetWindowLong() ではちゃんと
GWL_STYLE を指定してる?
0955デフォルトの名無しさんNGNG
>>954
GWL_STYLE指定しています。
具体的には
SetWindowLong(hWnd,GWL_STYLE,(LONG)dwStyle);
が上手くいかないのです。
0956デフォルトの名無しさんNGNG
>>955
「hWnd パラメータで指定したウィンドウが呼び出し側のスレッドと同じプロセスに
属していない場合、SetWindowLong 関数は失敗します。」ってのは?
0957デフォルトの名無しさんNGNG
>>956
そのへんは問題無いと思います。
DWORD hoge=(DWORD)(GetWindowLong(hWnd,GWL_STYLE))|WS_CAPTION;
SetWindowLong(hWnd,GWL_STYLE,hoge);
このようにすれば反映されるんで・・・
これdwStyleの各定数を有効に変更された物と無効に変更された物とで
いちいち論理演算してやらないとだめって事ですよね?
それは面倒なのでdwStyleの値そのものが使えないかと思いましで
0958デフォルトの名無しさんNGNG
>>957
「dwStyleの値そのもの」ってdwStyleに何もセットしないでSetWindowLongに渡すってこと?
0959957NGNG
された物 ×
したい物 ○
です。
あれ?これってもしかして激しくスレ違いの予感??
APIの問題じゃなくて論理演算の問題かな?
0960gn355my0NGNG
>>957
> DWORD hoge=(DWORD)(GetWindowLong(hWnd,GWL_STYLE))|WS_CAPTION;
> SetWindowLong(hWnd,GWL_STYLE,hoge);
> このようにすれば反映されるんで・・・

今はどーやってんの?
0961デフォルトの名無しさんNGNG
今は
DWORD dwStyle;
SetWindowLong(hWnd, GWL_STYLE, (LONG)dwStyle);
ってやってるように聞こえる。
0962957NGNG
>>958
説明下手ですみません。
dwStyleでCreateWidowしたウインドウに新たに計算した
NewdwStyleをSetWindowLongで渡すと言う事です
0963957NGNG
DWORD dwStyle=WS_CAPTION|WS_SYSMENU;
SetWindowLong(hWnd,GWL_STYLE,(LONG)dwStyle);
ていうふうにやりたいんですけど・・
0964デフォルトの名無しさんNGNG
>>963
それだとCreateWindowに渡したスタイルが入ってないんじゃないの?
0965デフォルトの名無しさんNGNG
>>963
CreateWindowにはどんなスタイルの組み合わせを渡してるのさ?
0966957NGNG
CreateWindowにはWS_POPUPが入っています
0967デフォルトの名無しさんNGNG
CreateWindowとCreateWindowEX...
0968デフォルトの名無しさんNGNG
>>963
じゃあ
DWORD dwStyle = WS_POPUP | WS_CAPTION | WS_SYSMENU;
SetWindowLong(hWnd, GWL_STYLE, (LONG)dwStyle);
では?

というか、いちいちCreateWindowに何スタイルを渡しているか調べなくてもいいように
GetWindowLong(hWnd, GWL_STYLE)で既存のスタイルを取得するんだけど・・・
0969デフォルトの名無しさんNGNG
だれかそろそろ次スレ立ててくれ。
漏れのホストでは無理だ。
0970デフォルトの名無しさんNGNG
ほい、新スレ
Win32API 質問箱 Build7
http://pc3.2ch.net/test/read.cgi/tech/1036654893/
0971デフォルトの名無しさんNGNG
>>970
乙アリ
0972957NGNG
すみません。MFCのソ−ス見て解決しました。
CreateWindowのdwStyleとGetWindowLongの戻り値とでは
スタイル=0の場合の初期値が違うようなのでこの戻り値は
使わなくてはいけないようです。
DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);
DWORD dwNewStyle = (dwStyle & ~dwRemove) | dwAdd;
SetWindowLong(hWnd, GWL_STYLE, dwNewStyle);
ていう感じにするしかないようです。
レスくれた方有難う御座いました。
0973942NGNG
だああ!919ちゃんと読まずにえらっっっっそうなこと書いてしまった。
激しく鬱。

…逝ってくる。
0974945NGNG
>>973
漏れも同罪だ。
0975デフォルトの名無しさんNGNG
>>919
多重起動防止の回避?多重起動防止をしなけりゃいいんじゃねぇ?
それとも、多重起動防止策が施されたアプリを多重起動したいってことか?
→そんなことしてどうなる?
0976デフォルトの名無しさんNGNG
DLLのCランタイムを使っている時の、CreateThreadと_beginthreadexの違いって、なあに?
0977デフォルトの名無しさんNGNG
そんなの、CRTのソース嫁よ。一目瞭然だろうが。
0978デフォルトの名無しさんNGNG
つーと?
ランタイムDLLのエントリー関数で初期化されるから_beginthreadexつかう
必要性を感じないんだが。
0979デフォルトの名無しさんNGNG
あー確かに、beginthread*を使う必要はない。
ただその理由は、「ランタイムDLLのエントリー関数で初期化されるから」
ではない。

というか、何がエントリー関数で初期化されるといいたんだ?
0980デフォルトの名無しさんNGNG
このコードはリンクするライブラリをマルチスレッド対応版にするだけで動くんだが何故だ?
DWORD WINAPI TestFunc(LPVOID ThreadData)
{
ThreadInfo &Info = *(ThreadInfo *)ThreadData;
std::string RetStr("result: "); const char *sep = ",";
char IDBuf[64]; sprintf(IDBuf, "Thread 0x%08X Info", GetCurrentThreadId());

WaitForSingleObject(Info.hMutex, INFINITE); Sleep(100); char *s = strtok(Info.TestStr, sep); ReleaseMutex(Info.hMutex);
while(s) {
RetStr += s; RetStr += " - ";
WaitForSingleObject(Info.hMutex, INFINITE); Sleep(100); s = strtok(NULL, sep); ReleaseMutex(Info.hMutex);
}
MessageBox(NULL, RetStr.c_str(), IDBuf, MB_OK);
return 0;
}
int main()
{
DWORD Thread1ID, Thread2ID; HANDLE hMutex = CreateMutex(NULL, TRUE, NULL);
ThreadInfo Info1 = { hMutex, "ab,cd,ef,gh" }, Info2 = { hMutex, "12,34,56,78" };
HANDLE hThread1 = CreateThread(NULL, 0, TestFunc, &Info1, 0, &Thread1ID);
HANDLE hThread2 = CreateThread(NULL, 0, TestFunc, &Info2, 0, &Thread2ID);
ReleaseMutex(hMutex);
WaitForSingleObject(hThread1, INFINITE); WaitForSingleObject(hThread2, INFINITE);
return 0;
}
0981980NGNG
書き忘れ。
struct ThreadInfo { HANDLE hMutex; char TestStr[12]; };

_beginthreadex() って要らないの?
0982デフォルトの名無しさんNGNG
>>919
ニュアンスがよく分からんが、プロセス注入→ReseaseMutexなんてどうっすか?
0983デフォルトの名無しさんNGNG
>>982
「プロセス注入」 って何?
0984デフォルトの名無しさんNGNG
ゲームの二重起動を回避するのに、そのゲームをAPI SPYでAPIの流れを見てMutexの文字列を取得し、バイナリエディタでMutexの文字列を検索、変更したものを作って二重起動できるように改造した。
多分そーゆー問題じゃないと思うけど、とりあえず。
0985デフォルトの名無しさんNGNG
(´-`).。oO(書くなよそういう事・・・誰が見てるかわからないんだから。。。)
0986デフォルトの名無しさんNGNG
>>979
> というか、何がエントリー関数で初期化されるといいたんだ?

CRT_INITとか呼ばれてるんだが…
以前、_beginthreadexつかってたら、CRT_INITがスレッド作るたびに2回呼ばれてて、
それ以来、CreateThread使ってる。
0987デフォルトの名無しさんNGNG
>>980

名前を指定してCreateMutexしなきゃ
0988デフォルトの名無しさんNGNG
>>987
名前付きミューテックスと名前無しミューテックスとで、何か動作が変わるの?
0989デフォルトの名無しさんNGNG
>986
その先のはなし。
CRT_INITは、DLL_THREAD_ATTACH時には、
ホトンド何もしないで帰るはずだが。
0990デフォルトの名無しさんNGNG
WaitCommEvent
EscapeCommFunction
を使っているアプリを作ったのですが、どうもWin2000では
動作していないように思えます。
Win2000でこれらのAPIを動かすにはどうすればいいのでしょうか?
0991デフォルトの名無しさんNGNG
>>983
すまん、一般用語だと思い込んでたが、ググッても全然引っかからなかった。
SetWindowsHookEx等使って、他のプロセス上で独自の実行コードを走らすテクのことを言いたかった。
0992デフォルトの名無しさんNGNG
>>984
忠告ありがとう。これからは気をつけるよ。
0993デフォルトの名無しさんNGNG
>>990
もう寿命ないから次スレ逝ってね。
http://pc3.2ch.net/test/read.cgi/tech/1036654893/l50

>>991
「フックでコンテキスト取る」 みたいな言いまわしがわすりやすいと思う。
っていうか 「注入」 という言葉で表現するような処理内容じゃないぞ。
「侵入」 のがまだいいと思う。
0994デフォルトの名無しさんNGNG
994
0995デフォルトの名無しさんNGNG
じゃ、995
0996デフォルトの名無しさんNGNG
じゃあここらで俺が体験したちょっとHな話でもするか。
高校生のときの話なんだけど、25歳の女の先生がいたわけ。
俺のクラスの副担任で、
0997デフォルトの名無しさんNGNG
その先生の担当する(俺のクラスではない)教室があるんだけど、そこの掃除も
俺のクラスがやんなきゃならないのさ。
んで、いつものようにその教室の掃除当番だったので行った。
でも他の奴はみんなさぼって行ったのは俺だけだったのよ。
当時の俺は、
0998デフォルトの名無しさんNGNG
真面目ってわけでもなかったけど、そういう当番は割とちゃんと行ってた。
で、そうなるとその教室には俺とその25歳の先生しかいなくなるわけだ。
人があまりいない放課後によ。
その先生、特別美人てわけじゃないんだけど、小柄でかわいい系の人だった。
んで、掃除も終わりかけてさぁ帰ろうかってところで、
0999デフォルトの名無しさんNGNG
999!!!!!
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。