トップページ⇒tech
925コメント315KB

WinAPI相談室

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名無しさん@お腹いっぱい。NGNG
作っときました。
システムいじりたい人、軽いPG作りたい人はどうぞ。
(言語は指定してないんで質問の時にはちゃんと書いてね)
0002名無しさん@お腹いっぱい。NGNG
どうぞって、あんたゴルァ…
0003名無しさん@お腹いっぱい。NGNG
じゃあせっかくだから、相談相手になってくれ。
なんかここ技術板なのに、クソスレしか生まれないんだけど、どうしたらいいと思う?
0004名無しさん@お腹いっぱい。NGNG
>>3
それは1に対する煽りなのか?
0005名無しさん@お腹いっぱい。NGNG
>3
特に週末はひどいものがあるな。
0006名無しさん@お腹いっぱい。NGNG
スレッドを立てる時間が悪いと思うんだな。
今いるのはプログラムに興味はあるもののなにも出来ない
引きこもりさんばっかり。
0007名無しさん@お腹いっぱい。NGNG
>>6
自暴自棄になるな!!
0008名無しさん@お腹いっぱい。NGNG
なんか1は、なにも書かないし、立て逃げなの?
0009名無しさん@お腹いっぱい。NGNG
EnumDisplaySettingを使うと、0Hzとかふざけた数値が返ってきます。
どうしたらいいでしょうか?
0010名無しさん@お腹いっぱい。NGNG
>>9
DirectX はやめて Java で記述しなさい!
0011名無しさん@お腹いっぱい。NGNG
WindowsCEに、DuplicateHandleが無いのはどうして?
0012名無しさん@お腹いっぱい。NGNG
>>11
必要ないから。
つーか、俺も使ったこと無い。何に使うの?>11
0013名無しさん@お腹いっぱい。NGNG
>>9
良いビデオカードに変えてみよう。
00143NGNG
>>4
変に勘ぐらないでくれ。
純粋に相談相手になってほしかっただけだよ。
この板の存在意義についてでも話し会おうや。
0015名無しさん@お腹いっぱい。NGNG
>13
いや、NT系なら正常動作するらしいよWin2000とか・・・。
00163NGNG
会→合
0017名無しさん@お腹いっぱい。NGNG
>>15
あら、そうなの。無知だった。
やぱNT系列は優秀だね。
0018名無しさん@お腹いっぱい。NGNG
DirectX8では、9x系とNT系、両方で動かないと8対応と
言っちゃ駄目だそうなんですが・・・。
0019名無しさん@お腹いっぱい。NGNG
>>12
Win32同期オブジェクトの暗黙なキューに依存せずに、
確かな待ち行列のもとで同期の仕組みを作りたいので
他のプロセスのスレッドをResumeしたりSuspendしたりしたい。

ThreadIDやハンドルはとれるんだけど、OpenThreadもないし、
DuplicateHandleも無いので、模索中。
002012NGNG
>>19
暗黙って…、CreateEventやMutexじゃだめなの?(CEにあったっけ?)
カーネルオブジェクトに頼らないで、プロセス間でどうやって同期させるの?
002112NGNG
所で、perlで使うディレクトリ排他ロックとかってWindowsでも有効なのかな
0022名無しさん@お腹いっぱい。NGNG
>>21
NTならOK
002312NGNG
>>22
なるほど。勉強になります。
0024名無しさん@お腹いっぱい。NGNG
>>20
待ち行列に依存しないでもよい形かたちで、最低限の同期オブジェクトは使う。
まぁキューになってないOSなど存在するとは思えんが、
貧弱な同期処理しかできないOSにも移植できるようにとの
お達しのもとで作業しておる。最悪、OALでなんとかするし。
002512NGNG
>>24
>貧弱な同期処理しかできないOS
例えばどんなのがありますか?
あと、OALってなんですか?
質問ばかりですいません。
0026名無しさん@お腹いっぱい。NGNG
>>25 >貧弱な同期処理しかできないOS
一部のRTOSなんかにありそうだとムダに想定されている(ワラ

OALは、CEのカーネルをビルドするときに、
ハードウェアに依存する部分をベンダーが実装する層。
DirectXのHALみたいなもんだが、カーネルモードで動く。
002712NGNG
なるほど、CEの世界も奥が深そうですね。
昔、CEはシングルタスクって聞いたことありますが、それも絡んでそう。
0028名無しさん@お腹いっぱい。NGNG
>>一部のRTOSなんかにありそう
んー、でもセマフォぐらいは簡単(とはいわないけど)に実装できそうな気がする。
スレッド関係の本にもサンプル載ってるぐらいだから…
0029名無しさん@お腹いっぱい。NGNG
ありゃ、まちがえた。
スライシングの方法によるか。
0030母を訪ねて名無しさん千里NGNG
他のプロセスのスレッドを直接的にいじろうというのがそもそも間違いでは?
双方の合意のうえでやんなきゃ。
0031名無しさん@お腹いっぱい。NGNG
よく使うAPIリファレンスみたいなサイト知りませんか?
他スレでかいしゅつだったらゴメン。

0032名無しさん@お腹いっぱい。NGNG
>>31
あるけど教えない。
つーか、MSDNで十分だろ?
0033名無しさん@お腹いっぱい。NGNG
>>26
>一部のRTOSなんかにありそうだとムダに想定されている(ワラ
そんな想定で車輪の再発明をするのは無意味だと思います。
特に同期処理なんて片手間で開発するのは無謀です。
既に稼動実績のあるモジュール(が存在すればそれ)を使うか、
プロジェクト初期段階で対応させるOSを明確化すべきです。
#仕事じゃなくて、研究課題ならいいですけど。
0034名無しさん@お腹いっぱい。NGNG
>32
31は初心者でもっと解りやすいのが見たいんじゃないのか

っていうかあるけど教えないなどと根性ワルなことかくなよ。
最初から何も言うな。

あ、ちなみにおれは知りませんので・・・。
0035名無しさん@お腹いっぱい。NGNG
http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/api_index.html
0036とおりがかりのおばちゃんNGNG
むむ、上記のサイトよさそうだなぁ。
2chて、たまにとてもよい情報ころがってるよね。
0037名無しさん@お腹いっぱい。NGNG
>>27
CreateProcess()はCE 1.0以降サポート。
CreateThread()はCE 1.01以降サポート。
とAPIヘルプに書いてあるが。
0038名無しさん@お腹いっぱい。NGNG
>>19 >>24
スレッドのsuspend, resumeもplatform限定しそうだけどなぁ。
pthreadだとサポートしてないよね確か。
俺だったら素直にセマフォ使って(無いなら実装して)同期取るけどね。
0039名無しさん@お腹いっぱい。NGNG
>31
サイトじゃないけど、
http://www.cs.virginia.edu/~lcc-win32/
にある「Windows API documentation size: 12.8M」はWindowsAPIのリファレンスです。
ただし英語。
004031NGNG
>35
お、こりゃいいですね。ありがとう。

>39
ありがとです。しかし俺、英語がわからんのです。
鬱だ、鬱すぎて氏ぬ気力もない。
0041名無しさん@お腹いっぱい。NGNG
ジョイスティックの状態を取得しようと思います。
しかし早速飛びました。他にも原因があるのかもしれませんが思い付くものを潰していこうと思います。
それで
MMRESULT WINAPI joyGetDevCaps(UINT uJoyID, LPJOYCAPS pjc, UINT cbjc);
このAPIに渡すのはジョイスティックのポート番号と、JOYCAPS構造体のアドレスと、
最後はJOYCAPS構造体のサイズでいいんでしょうか。
Webで見つけたVBのソースを参考にしてみたんですが間違っているかどうか教えてください。
004241NGNG
解決しました。かなりのケアレスミス…宇都だ。
0043名無しさん@お腹いっぱい。NGNG
リソース(ビットマップやサウンドなど)を読むAPIはありますが、
書き込むAPIはないのでしょうか?
0044名無しさん@お腹いっぱい。NGNG
WinMainの最初の引数 HINSTANCE を 後から取得するAPIはありませんか?

たとえば呼ばれたDLLからHINSTANCEの必要なAPIを呼ぶのにどうしようかなと
004544NGNG
それからコンソールアプリの場合はhInstanceを何にしたらいいの?
0046名無しさん@お腹いっぱい。NGNG
>44
あるのかもしれないけど、俺はだいたいDLLの関数を呼ぶときに引数つけて
呼ばせてる。
004744NGNG
GetModuleHandle(NULL)かと思っていましたが
>このパラメータがNULLの場合、 GetModuleHandle関数は、 呼び出したプロセスを作成するのに使われたファイルのハンドルを返します。


でもコンソールアプリでもGUIアプリでも常に 0x400000が帰って来ます。
そしてhInstanceもどうもいつも0x400000です
#解説WebによるとこのhInstanceはアプリ事に違うように書いてあったのに・・・・

という事は実は GetModuleHandle でビンゴなのかな?
004844NGNG
>>46
なるほどなんですが、でも面倒でしょ?
004944NGNG
試したコードはこんな感じ BCC32 ではそうでした。

#include <stdio.h>
#include <windows.h>
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
char str1[100];
sprintf(str1,"hInstance %8x ModuleHandle %8x",hInstance, GetModuleHandle(NULL));
MessageBox(0 ,str1, " test ", MB_TASKMODAL);
}
0050SAGENGNG
少なくとも VC++ の WinMain の hInstance には必ず
GetModuleHandle(NULL) が入ってるようだが。(CRTのソースでは)
005144NGNG
Delphiのソースも追いかけたら結構 GetModuleHandleを hInstance代わり
に使ってましたね。

なんか日本語ヘルプがダメダメなのかな、-->GetModuleHandle
0052SAGENGNG
よー知らんが、常に 0x400000 ってことはベースアドレスが返ってくるものなんだろうかね。

ちなみに、
The returned handle is not global, inheritable, or duplicative, and it cannot be used by another process.
0053名無しさん@お腹いっぱい。NGNG
英語ヘルプも同じだなあ
If this parameter is NULL, GetModuleHandle returns a handle of the file used to create the calling process.
005444NGNG
次の疑問です
APIのターゲットにするためのhWndが欲しい時に
ClassNameをどうしようかと悩んでいました。
連番式に区分けしようかと思っていましたが、

Delphiのソースを追いかけると
1回 RegisterClassしたクラスを使いまわして
CreateWindowした後
SetWindowLong(Result, GWL_WNDPROC,関数ポインタ)
していました。

これは学ぶべきでしょうか?
0055>44NGNG
SetWindowLongでやってるのがサブクラスというんだ
サブクラスは普通に使われるテクニック
Windows側で用意されたコントロールもサブクラス可能だよ
0056。>55NGNG
そだね。後スーパークラスってのもある。
既存のコントロールに独自のウインドウクラスを持たせられる。
オーソドックスなコントロールとかの拡張方法だね。
0057名無しさん@お腹いっぱい。NGNG
>>54
それは何か違和感があるなあ 俺なら
SetWindowLong(hWnd,GWL_USERDATA,hoge);
で構造体というかオブジェクトを渡して、
必要ならその構造体に関数ポインタ入れとくけどなあ
005844NGNG
>>55-56さん
ありがとうございます。さっそく検索して勉強します。

>>57さんの方法もなるほどですというか GWL_USERDATAの意味が見えて来ました。ありがとうございます
0059>57NGNG
中村の里の中村さんがどこかで USERDATAを使うと遅くなるからDelphiでは
サンク方式(動的にメソッド呼び出し中継関数を作り出す)が採用されている
というようなことを書いてたよ
0060>59NGNG
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=957341074&st=79&ed=79
を書いた人?
0061名無しさん@お腹いっぱい。NGNG
>35 さんきゅ〜、あ、俺31じゃないけどお礼いわせて。
0062名無しさん@お腹いっぱい。NGNG
たしかに
http://www.komaba.utmc.or.jp/~tamon/winprog/winprog.html
>第1引数が現在のインスタンスのハンドルです。インスタンスとはプログラムの実行単位、プロセスのことで、同じプログラムであっても別々に起動されて別々に実行されている場合、別のインスタンスとなります

とか素直に読んで、インスタンスごとに違う値だと思い込んでた。
なんでも実証が大事なんだなあ
006344NGNG
waveOutOpenで CALLBACK_FUNCTIONて何か問題ありますか?

サンプルにあるような感じで、ただサイン波を永遠出す為に
HDRをコールバックproc内で回収させるだけの処理を追加したところ
CALLBACK_WINDOWでは問題なく動く
 (ただ当然メッセージ機構は常に動かす必要がある)
んだけど、CALLBACK_FUNCTIONは処理そのものは動くのだけど最後の
waveInResetのところでwindowsから帰って来てくれません。
006444NGNG
ちなみにwaveInResetをコールバックproc内で発行した場合はOKです
006544NGNG
あwaveOutResetでした。
0066名無しさん@お腹いっぱい。NGNG
ダイアログでカスタムドローってできないんでしょうか?

NM_CUSTOMDRAW のとき
LPNMLVCUSTOMDRAW.nmcd.dwDrawStage がいつもCDDS_ITEMPREPAINT
で処理が進みません。

CDRF_NOTIFYITEMDRAWをちゃんと返してます。
0067>66NGNG
詳しくないけど
(っていうかその系列の解説がMSDNまだ英語なので逃げてたけど)
>>54-55で解説されてるサブクラスは試してみた?
0068名無しさん@お腹いっぱい。NGNG
スーパークラスってどうやって作るんすか?
詳しいサイトないでしょか?
探したけどもjavaばっかし見つかって、Winのは見つからんかった
0069>68NGNG
ATLを使うなら
http://microsoft.com/Japan/developer/visualc/techmat/feature/ATLwindowing/

Delphiを使うなら 中村の里
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm

APIベースなら
http://www.topposystem.co.jp/DL/Win32API/
ここの
http://www.topposystem.co.jp/DL/Win32API/GUI/コンボボックスの概要.html

007068NGNG
ありがと。大変参考になった。
007166NGNG
サブクラス化したらできました。どーもです。
0072名無しさん@お腹いっぱい。NGNG
>>62
Win16では確かにインスタンスごとに違ってたんだけどね
0073名無しさん@お腹いっぱい。NGNG
サブクラス化って良く聞くんですが、いまいち分かりません。
分かりやすく解説している、ホームページ、書籍などがあれば、ご紹介下さい。
0074名無しさん@お腹いっぱい。NGNG
APIを使ってスピンコントロールは作れるんでしょうか?
APIの本を眺めても載ってないのですが・・・・
0075名無しさん@お腹いっぱい。NGNG
>>73
その手の趣味の方々が集まったクラスです
常にお尻の穴が危険にさらされています
0076名無しさん@お腹いっぱい。NGNG
コントロールはコントロール固有のウインドウクラス名を指定して
CreateWindowExだろ?
0077>73NGNG
>>69のページではダメなの? じゃ猫でもは?
0078名無しさん@お腹いっぱい。NGNG
>>73

 簡単に言うと、ウインドウのウインドウプロシージャを独自の
関数に置換する事。その関数では、通常一部のメッセージのみを
独自に処理して後は元のウインドウプロシージャ―に渡すんで
「サブクラス化」と言うみたい。このサブクラス化で、ウインド
ウの動作の一部を変更できるんで、結構便利かも。

・創作プログラミングの街
http://www.sm.rim.or.jp/~shishido/

 にも実際のソースや解説がある。あと、「プログラミング
Windows」でも取り上げていたはず。
007973NGNG
ありがとうざいました。これから見てみます。>78さん
0080名無しさん@お腹いっぱい。NGNG
メッセージの番号とメッセージの一覧みたいなのありませんか?
デバック中にメッセージ番号表示させても意味判らないので 変換関数作りたいんですが
0081名無しさん@お腹いっぱい。NGNG
>>80
winuser.h見れ。
008280NGNG
あ、馬鹿な事質問してしまいました。
APIヘルプに メッセージ一覧があったので
これからテキストを抽出して Cソースに加工して印刷すればいいだけですね。
すみませんでした。
008380NGNG
>>81 ありがとうございます。マルチメディア系とか色々散らばっているので・・・
0084名無しさん@お腹いっぱい。NGNG
>80
spyを使えば、メッセージ名はわかるけど。

http://www02.so-net.ne.jp/~joh/jspy.html
0085名無しさん@お腹いっぱい。NGNG
Borland派ならWinSightだね。
0086名無しさん@お腹いっぱい。NGNG
「SystemTimeToTzSpecificLocalTime」っていうAPIを使ったら、
Win95/98ではちゃんと動作しないという事が納期の前日に判明。
今修正中...

というわけで、95系とNT系で動作が違うAPI情報きぼん。
008773NGNG
>>86
VC++のヘルプで関数一つずつ調べれれば分かります。
それも大変ですけど。ヘルプの記述に間違いがあることもあるらしい。

納期先のマシン環境と同じ環境を作ってテストすべきだと思います。
0088名無しさん@お腹いっぱい。NGNG
使える場合でも、微妙に動作が違う場合が、過去に何度かあったぞ。
同じ環境でテストせよとの主張は正しい。
0089名無しさん@お腹いっぱい。NGNG
>>86
MSDN見たら
SystemTimeToTzSpecificLocalTime
Windows 95/98:サポートされていません。
あほすぎ
0090名無しさん@お腹いっぱい。NGNG
ホットキーに反応してアクティヴになる市販のプログラムを
別のプログラム(を作る)のボタンを押して
「あたかもホットキーを押したかのように」アクティヴにしたいんですけど
何か手がかりありませんでしょうか。
ホットキーに反応するほうの資料はあるみたいなんですけど。
0091名無しさん@お腹いっぱい。NGNG
CreateEnhMetaFileのハンドルを使って
Rectangleと線で構成した図形を作りました。
□の対角を結んだ(×こんなふうに)図形です。
数値では正確な値を指定したはずなのですが
線が四角からはみ出てしまいます。
調べてみたところ四角形の方がずれてるみたいです。
これはある本の例題を試したのですが、本に付録のexeファイルで
やってもやっぱりずれます。どこに問題があるのでしょうか。
0092名無しさん@お腹いっぱい。NGNG
>>90
keybd_event
0093名無しさん@お腹いっぱい。NGNG
最近ギコってみませんね。

かちゅ〜しゃ作ってるんかな。
0094ブービーさんNGNG
PrintDialogで「ファイルに出力」にチェックを入れたりして印
刷すると「名前を付けて保存」を表示しますが、
これを自前で処理できればいいなと考えています。
(PostScriptファイルの作成などに使うのが目的です)

で、ファイルに出力することはできたのですが、
ファイル名を聞いてくるダイアログをどうしたら消すことができるか
いろいろ試行錯誤していますが、まだ解決していません。
どなたかご存知の方がいましたら、指針かご回答を
お教えください。ちなみに、VC++6 でやっています。
0095名無しさん@お腹いっぱい。NGNG
PrintDialog ってプリンターがないとエラーメッセージがでて使えない。
貧乏学生には使えないAPIの1つです。(泣)
0096ブービーさんNGNG
プリンタがなくても↓のプリンタドライバをインストールすれば
とりあえず大丈夫ですよ。

http://www.adobe.com/support/downloads/pdrvwin.htm
0097名無しさん@お腹いっぱい。NGNG
>ブービーさん
どうもありがとう。
今DL中です。
0098デフォルトの名無しさんNGNG
>91
LineToは終点を含まない筈
Rectangleも同じで x終点-x始点ドットの図形が描かれる筈

だけど、実際にはその通りにならない場合も多し。気にするな
0099名無しさん@お腹いっぱい。NGNG
VC++でSDKプログラミングやりたいんだけどお薦めの本ってないですか?
本屋に行ってもMFC使ったのしか分からなかった。
できれば入門書とリファレンスとお願いしたい。
初心者なんで的はずれな質問だったらスマソ。
010091NGNG
>>98
本を読み進んでいくと
Windowsが勝手に値を変更するみたいなことが書いてました。
0101名無しさん@お腹いっぱい。NGNG
>>99
プログラミングWindows第5版 (上)(下)
マイクロソフトプレス

なんかがおすすめ。

0102バッカーですNGNG
>91
CreateEnhMetaFile は0.01"ミリ"単位で指定
Rectangle は座標だからピクセル
この辺の問題じゃなくって?
0103名無しさん@お腹いっぱい。NGNG
99>101 サンクス、gooで検索したけど合計1400頁、上下巻で1万円か…
鬱だ氏脳
「猫でも分かるプログラミング」でも復習してくるか…
VCのヘルプは英語だしさらに鬱だ…
0104名無しさん@お腹いっぱい。NGNG
買う金無いなら図書館いけ>103
0105101NGNG
プログラムをやりたいのならこのくらいの本を買わないとだめだ。
基本的なことをやるのなら上巻の最小の方だけやっても基本は理解できる。
別にメタファイル、スクロール等が必要ないのであれば読み飛ばしても問題ない。
もっとも構造体とポインタがわかってないとまずだめだが・・・
0106名無しさん@お腹いっぱい。NGNG
ユーティリティソフトのような物を作って、Windowsに標準で付いているメモ帳のキーボード設定をカスタマイズしたいのですが、どんな方法がありますか?
メモ帳の.exeファイルには手を加えないで、他の.exeから設定する方法を考えています。
0107名無しさん@お腹いっぱい。NGNG
>>106
SetWindowsHookExとか調べてみ。
0108名無しさん@お腹いっぱい。NGNG
>>107
実際やってるやついるの?
0109106NGNG
>107
ありがとうございます。
それを手がかりに調べます。
0110ブービーさんNGNG
>>94
DOCINFO構造体でファイル名指定できたんだね。
逝ってきます。
0111108NGNG
>>106
いや、だから俺が、そんなめんどうなことできるか?
って逝ってるんだが...

メモ帳似ソフトを自分で作ってしまったほうが
はやくない?
0112107NGNG
>>111
それよりはキーバインドをカスタマイズ出来るエディタを使った方が
早い。実用的な意味が皆無なのは、言われなくとも当人が一番良く
分かっているだろうが、修行中のプログラマは、何も実用性のためだけに
プログラムを組む訳じゃないだろう。
自分のものさしだけで物事を考えるのは止せ。
0113名無しさん@お腹いっぱい。NGNG
age
0114デフォルトの名無しさんNGNG
>>86
OSどころかプログラムごとに値が違う物もありますぜ。
http://www.asia.microsoft.com/japan/support/kb/articles/J055/3/73.htm
さらに仕様と言い切るMSにびっくり。
0115デフォルトの名無しさんNGNG
仕様というのならせめてその理由を説明してほしいよな・・・
0116名無しさんi486NGNG
>>114
これは仕様だろ。なんで仕様なのかわからないのなら、それは
あなたが厨房。わからないのならわからないっていえば教えたる。

まあMSも、もうほんのちょっと賢くできたとは思うがな。
0117デフォルトの名無しさんNGNG
>>116
是非教えてもらいたいです。
0118116NGNG
GetVersion()のAPIの戻り値を間違って評価する、製品が山のように
存在するのよ。よくあるのがGetVersionのLOWORDをそのまま大小比較
してしまうもの。GetVersionはMinorVersionが上位にあるからそのまま
大小比較すると当然だめだよね。で、MSがとった方法が、Bugってる
製品の名前をレジストリに記録しておいて、その名前をもつプロセスからの
GetVersionコールに対しては嘘をつくようになっているわけだ。
だから、そのBugってる製品と同じ名前を使った場合はGetVersionの
戻り値は正しい値にならないわけ。Win2000なんかはもうちょっと頭よく
なっていて、ファイルのチェックサムも見て名前とチェックサムが
一致した場合のみ嘘の値を返すようになっている。わしならCallerの
アドレスもチェックするかなあ。
ただ、このOS側の対応に依存したまま何Versionにも渡って、ずーっと
間違いつづけている超有名アプリなどがあるのも事実。
そういう場合はチェックサムなどではじくことはできないからファイル名
のみではじいているだろう。
過去の遺産を無視して、かつBugってる製品も無視できれな、楽なんだろう
けど、OSっていうのはそういうわけにはいかないよね。加えて
これだけ使われてて、数千ものアプリがある場合にはOS側のBugすら
直せない場合がある。
Win2000なんかは、C DeclareされてるDefWindowProcでも動くように
なってるしねえ。こんなの間違う奴いるのかと思ったら、結構あるんだよね。
ちまたのアプリのプログラミングレベルは思ったより低いのよ。
0119デフォルトの名無しさんNGNG
HTTPでファイルをダウンロードしたいんですが、WININET.DLLに
依存したくありません。で、どうするかですが、

- 自前でWinsockを操作する。できれば、やりたくない。
- どっかにフリーの素敵なHTTPライブラリがあったりする。

どなたか良いライブラリ知りませんか?
いっそ、IE 3.x以降必須にした方がいいのかなぁ…
0120名無しさん@お腹いっぱい。NGNG
IE3が入っていない環境なんてありませんよね?
WININETに依存したくない理由ってそれなのか?
0121名無しさん@お腹いっぱい。NGNG
素のWidows 95にはIE入ってないし。
0122119NGNG
>>120,121
ズバリ、それが理由。
しかし今時IEなしの素のWindows 95を使っている人がどれだけいるやら。
いっそ、割り切ってしまいたいところではある。
0123名無しさんTurboNGNG
>>119
wgetを使いましょう。
Visual C++でそのままコンパイルして使えます。

http://www.gnu.org/gnulist/production/wget.html
0124禁断の名無しさんNGNG
>>116
GetVersionの戻り値が変化する実行ファイルリストって
どうやって手に入るのかな?
0125119NGNG
>>123
ありがとうございます〜。試してみますです。
0126デフォルトの名無しさんNGNG
IMEが送ってくる文字列って
どうやって配列に格納したりするのですか?
0127デフォルトの名無しさんNGNG
メセージでレシーブします。>126
0128デフォルトの名無しさんNGNG
>127
レシーブというのはどうやるのですか?
0129デフォルトの名無しさんNGNG
WM_IME_CHARというメッセージをハンドリングします。>128
0130デフォルトの名無しさんNGNG
>129
つまりWM_IME_CHARメッセージのwParamは2バイト文字になってて、
それを文字の数だけ受け取るって事なんですか?
0131デフォルトの名無しさんNGNG
たしかそうです。>130
あと、WM_IME_COMPOSITIONとかいうのも使った様な?
記憶があやふやですいません。
0132デフォルトの名無しさんNGNG
>131
WM_IME_COMPOSITIONで検索してみたら説明してるページ見つける事ができました。
何回も答えてもらってほんとにありがとうございました。
0133デフォルトの名無しさんNGNG
いえいえ。がんばってください。>132
0134デフォルトの名無しさんNGNG
>133
そんなやりとり2チャンらしくない。却下。
0135デフォルトの名無しさんNGNG
CreateThread()で作成したスレッドが終了したかどうかを確認する方法がわかりません。
教えていただけないでしょうか?
0136奥さん、名無しですNGNG
>>135
WaitForSingleObject()
0137。>NGNG
>>135
GetExitCodeThread
を調べてみて。
0138135NGNG
>>136,>>137
作成・実行環境がWin2kなのでOpenThread()でTHREAD_QUERY_INFORMATIONを割り当ててから
GetExitCodeThread()とスレッド関数の戻値判定で望んでいた動作になりました。
ありがとうございました。
0139。>NGNG
>>138
そもそも、Createした時に取得したハンドルはどうしたんでしょ?
0140138NGNG
>>139
そもそもハンドルを保持してませんでした。
Win2kだとTHREAD_QUERY_INFORMATIONなりSYNCHRONIZEを与えないとだめらしいんで
OpenThread()を使って後付けで取得してやってますが…。

(というわけでWaitForSingleObject()でもできました。)

いまのところ1個しかスレッド使っていません(増やすかもしれない…)。
0141。>NGNG
>>140
>そもそもハンドルを保持してませんでした。
それ、捨てちゃってるの?
保存しといて、CloseHandleしないと、リークになっちゃうよ。
0142デフォルトの名無しさんNGNG
自作で簡単なプログラム作ってるんだけど、
タスクトレイに常駐した状態でマウスホイールの
メッセージって受け取れるでしょうか?

メッセージトレースしたんですが、
マウスホイールのメッセージって
タスクトレイには通知されてないように
見えるのですが......

ご存知の方いたら教えてください。

OS は Win2k / Win98 です。
0143デフォルトの名無しさんNGNG
>>142
使ってるマウスのメーカーは?
ロジテックだとちょっと面倒。
0144デフォルトの名無しさんNGNG
早速レス頂いて、ありがとうございます。

私が基本的なことわかってないみたいで、
恥ずかしいですが、メーカによって違うんですか
ホイールのメッセージって。

マウスはエレコムというメーカーのを使っています。
ドライバーで「Office97」という設定にしています。

自作のプログラムはちゃんとできたらフリーソフトに
したいと思ってるので、出来ればホイールマウスの
メーカごとの差異とかについても知りたいのですが、
よろしければそこら辺もご教授ください。
0145デフォルトの名無しさんNGNG
>「Office97」

「Office97 互換モード」の間違いです。
0146デフォルトの名無しさんNGNG
デスクトップアイコンの文字背景を透明化するにどうすればいいのでしょう?
対象はWin2kだけです。ウィンドウの透明化は簡単だったのですが…。
0147デフォルトの名無しさんNGNG
LVM_SETBKCOLOR
0148デフォルトの名無しさんNGNG
HWND h = FindWindowEx(NULL, NULL, "Progman", "Program Manager");
h = FindWindowEx(h, NULL, "SHELLDLL_DefView", NULL);
h = FindWindowEx(h, NULL, "SysListView32", NULL);
SendMessage(h, LVM_SETBKCOLOR, 0, -1);
0149デフォルトの名無しさんNGNG
>>148
LVM_SETBKCOLORではなくLVM_SETTEXTBKCOLORだろ
0150デフォルトの名無しさんNGNG
VBならモジュール1つのプロジェクトで

Const LVM_FIRST = &H1000
Const LVM_SETTEXTBKCOLOR = LVM_FIRST + 38

Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Any, ByVal bErase As Long) As Long
Public Declare Function UpdateWindow Lib "user32" (ByVal hwnd As Long) As Long

Sub Main()
Dim h As Long
h = FindWindowEx(0, 0, "Progman", vbNullString)
h = FindWindowEx(h, 0, "SHELLDLL_DefView", vbNullString)
h = FindWindowEx(h, 0, "SysListView32", vbNullString)
SendMessage h, LVM_SETTEXTBKCOLOR, 0, ByVal -1&
InvalidateRect h, ByVal 0&, -1
UpdateWindow h
End Sub

おれのおごりだ、取って置け>>146
0151148NGNG
>>149
あーほんとだ。
#include <windows.h>
#include <commctrl.h>
int main(void)
{
 HWND h = FindWindowEx(NULL, NULL, "Progman", "Program Manager");
 h = FindWindowEx(h, NULL, "SHELLDLL_DefView", NULL);
 h = FindWindowEx(h, NULL, "SysListView32", NULL);
 SendMessage(h, LVM_SETTEXTBKCOLOR, 0, -1);
 InvalidateRgn(h, NULL, true);
 return 0;
}
0152デフォルトの名無しさんNGNG
>>150
VBなのにここまでVBらしくないコードも珍しいな
0153呼び出し規約についてNGNG
質問です。
BorlandC/C++とWinAPIで書いてるのですが、関数の頭につける呼び出し規約"WINAPI"と"CALLBACK"はどのように使い分けたらいいのでしょうか?
また呼び出し規約はどういうときに付けてどういうときに付けなくてもいいんでしょう?
教えてください。

0154デフォルトの名無しさんNGNG
WINDEF.H(119):#define WINAPI __stdcall
だ、__stdcallというのは、左から右にパラメータを積んで呼ばれた関数でスタックを戻すやつだ。ほとんどのAPIはこの呼び出し規約だ。
例外は可変長引数をとるwsprintfぐらいだ。__stdcallは可変長引数に対応できないからな。

DLLでエクスポートするならこれにしておいたほうが無難だ。
少なくともVBはこの呼び出し規約を前提にしている。

CALLBACKも実は__stdcall
WINDEF.H(118):#define CALLBACK __stdcall
だ。ただ意味合いは、APIからコールバックされる関数という意味で違うぞ。
0155デフォルトの名無しさんNGNG
>145
間あいてごめん。えっと結局フックをかけることになると思うんだけど、
ロジテックとかのドライバは勝手にスクロールさせちゃうことがある。
Office互換なら問題なし。WH_MOUSEかWH_JOURNALRECORDに
フックをかけるんだけど、JOURNALRECORDの場合はWM_MOUSEWHEEL
のデルタ値が保存されないらしいのでほとんどの場合はWH_MOUSE
でやるしかない。
でもうちのロジテックはOffice互換にしてもwindows.hにある
0x020aじゃなくて0x7c02とかいう変なメッセージしかこない。
何でだ?
0156デフォルトの名無しさんNGNG
VC++でSemaphoreオブジェクトを使いたいのですが、
使い方がわからなくて、
どこで宣言して、どこで実行するとよいのでしょうか?
(winmainで実行とか、それともプロシージャの中とか、、、)
あと、名前ありセマフォと名前なしセマフォの違いを教えてください。
0157デフォルトの名無しさんNGNG
>156
作るのはプログラム始まってすぐ WM_CREATE
削除は WM_DESTROY
使うのは関数のなかとかでスレッド同期とりたいとき
名前なしはわからん。
とりあえず付けとけば。
0158デフォルトの名無しさんNGNG
>>156
どこでもいいよ有るべきときに有るようになっていれば。

名前ありSemaphoreはプロセスをまたいで使えます。
名前なしの場合はSemaphoreオブジェクトを何らかの方法で
外部プロセスへ通知する方法を作らないとプロセス間で共有できません。
普通はプロセス間で使う場合は名前ありにするけどね。

ところで、本当にSemaphoreが必要なの?
MutexやCriticalSectionは考えなかった?Eventがぴったりという場面もある。
特にCriticalSectionは同一プロセス別スレッドで使用するなら一番速いんだけど。
0159153NGNG
>154
レスどうも。
勉強になります。
ありがとうございました。
0160デフォルトの名無しさんNGNG
KeyRemapのようなWindows全体に影響するキー入れ替えソフトを作りたいんだけど、どんな方法がある?
今のところシステムフックを使ってキー操作をフックするぐらいしか思いつかない。
0161デフォルトの名無しさんNGNG
キーボードドライバを書く>160
0162156NGNG
どうもありがとうございました>157,158

midioutのプログラムを作っていて、
本を買ったらライブラリがついてきて
どうもそれを使うとぶつかったりするのは解消できるようなので、
セマフォを使ってスレッドを必要分たてて出力に持っていければいいかと思いました。
Mutexは解らないのですが、
そのライブラリを使えばCriticalSectionはたぶん必要ないみたいです。

midioutで音が鳴るのですが、
場合により音が重なるときがあって、
セマフォをたてようとしていたのですが、
他の方法の方がよいのでしょうか???
0163156NGNG
自己レスです。
ちょっと読んでいて文章がおかしいとおもったので(^^;

スレッドを8つ実行できるようにしたくて、
スレッドを必要分作って、
セフォマで制御してあげればよいのかと思いました。
もしかしたら、CriticalSectionの方がいいかも、、、。(^^;
0164デフォルトの名無しさんNGNG
>>162
なんとなくevent向きだぞ。
0165デフォルトの名無しさんNGNG
>>155
WM_MOUSEWHEELが来るのは、WinNT/2000系だけで、Win9X系ではホィールメッセージは
RegisterWindowMessageで取得するんでなかったかなぁ、たぶん。
0166特命リサーチ200XNGNG
Win64 APIの件はどうなった
0167デフォルトの名無しさんNGNG
>>155
ありがとうございます。
WH_MOUSE のグローバルフックでうまくいきました。

ロジテックのホイールマウスも手元にあるので
そちらでも実験してみます。
0168デフォルトの名無しさんNGNG
画面のプロパティのデザインページで指定できる、
メニューを描画するフォント名を取得したいのですが、
どうすればいいのでしょう?
フォント名(MSゴシックとか)です。
出来れば、レジストリ直接参照は避けたいです。
0169160NGNG
>161

レスありがとうございます。
キーボードドライバを自分で書いてみようと思います。
お薦めのツールや書籍があったら教えてください。
0170turbo type DNGNG
>>168
http://www.ceres.dti.ne.jp/~goto-ta/windows/ownerdrw1.html

http://www.kab-studio.com/Programing/Codian/MFCTips/09.html
0171デフォルトの名無しさんNGNG
>>168
SystemParametersInfo
0172146NGNG
146です。
147,148,149,150さんありがとうございました。

SendMessage(hwnd, LVM_SETTEXTCOLOR, 0, 0x000000);
で文字色を変えるのもできました。
0173デフォルトの名無しさんNGNG
VBみたいに簡単に通常使うプリンタを設定できるAPIありませんか?
0174デフォルトの名無しさんNGNG
// タスクボタンをフラット化
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | TCS_FLATBUTTONS);
// タスクボタンのフラット化をやめる
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~TCS_FLATBUTTONS);

こんな感じでタスクボタンのフラット化(表示がおかしくなるようですが…)
はできたのですが、スタートボタンのフラット化がうまくできません。
試しにスタートボタンのハンドルを使ってもSetWindowLong()ではだめでした。
対象・テスト環境はWin2k・開発はBCC5.5です。
0175SAGENGNG
>>174

俺はよくわからんのだが、とりあえずTClockのソースを見るよろし。
0176デフォルトの名無しさんNGNG
スタートボタンはただのボタンだからタブコントロールのスタイルをセットしても意味はない。
0177デフォルトの名無しさんNGNG
GetVersionEx()をWindows Meで使った場合、dwMajorVersionと
dwMinorVersionには何が入ってきますか?
(Meのマシンが無いので確認できないのです)
0178SAGENGNG
Major = 4, Minor = 90 なり。
0179177NGNG
>178
ありがとう。助かりました。
0180デフォルトの名無しさんNGNG
>>171
どうもです。無事にフォント名(&サイズも!)取得できました。
0181デフォルトの名無しさんNGNG
kernel32.dll がエクスポートしている ***ConsoleAlias{A|W}
って、誰か使い方知らない?
0182デフォルトの名無しさんNGNG
プログラム側から物理メモリを制限して、
その制限を越えたら、その分使われてない順に仮想メモリにスワップさせるAPIは無いでしょうか。
他で動いてるプログラムの為に物理メモリをあまり消費したくないんです。
自分でキャッシングを実装しても良いんですが、システム側に比べると圧倒的に遅い気がするので。実装も大変そうだし。
0183デフォルトの名無しさんNGNG
メモリマップドファイルは? 遅いから駄目?
0184デフォルトの名無しさんNGNG
>>183
メモリマップも試しましたが、結局物理メモリにコピーされる様なので、
巨大ファイルを扱うと物理メモリを食いつぶしてスワップしまくってしまいました。
0185デフォルトの名無しさんNGNG
Windows2000のディスクの制限をかけるクオータ機能の様な物が、メモリにもあれば良いと思うんですが。
Windows9x/NT4/2000その他UNIX系-OSなどで動作させたいので、
やっぱり自分で作るしかないですかね。
0186171NGNG
>>182
SetProcessWorkingSetSize
0187デフォルトの名無しさんNGNG
プロパティシートで右上にある'?'ボタンを消したいんですが、
どーやってやったらいいのでしょうか?

お願いします。
0188SAGENGNG
こんなCALLBACKで。>>187

struct DLGTEMPLATEEX
{
  WORD dlgVer;
  WORD signature;
  DWORD helpID;
  DWORD exStyle;
  DWORD style;
  WORD cDlgItems;
  short x;
  short y;
  short cx;
  short cy;
};

int CALLBACK PropSheetProc( HWND wnd, UINT msg, LPARAM lp )
{
  if( msg == PSCB_PRECREATE )
  {
    DWORD* pst = ( 0xffff==((DLGTEMPLATEEX*)lp)->signature ) ?
      &(((DLGTEMPLATEEX*)lp)->style) : &(((DLGTEMPLATE*)lp)->style);

    (*pst) &= ~DS_CONTEXTHELP;
}
}
0189デフォルトの名無しさんNGNG
>>188
ありがとうございます。
しかし、良く分かりませんでした(汗)

このコールバックはどこで指定するものなのでしょうか?
普通のプロパティシートのコールバックではないですよね。
0190SAGENGNG
いや普通のプロパティシートのコールバック。
PropertySheet() API に渡す PROPSHEETHEADER 構造体の中の
  PFNPROPSHEETCALLBACK pfnCallback;
ね。
0191suzumeNGNG
レジストリの保存と復元について質問したいんですけど。
RegSaveKeyでたとえば、 HKLM\software などをファイルに保存して、
HKLM\software をRegEditとかで全部消して、
RegReplaceKey で復元しようと思っているのですが復元してくれません。
戻り値は、問題なくERROR_SUCCESSが帰ってきています。
どこかのサイトで、保存するファイルは拡張子なしにしなければ行けないとか書いてあったけどいみなししでした。
Microsoftに書いてあるとおりにやってんだけど・・・・
ご存知の方いないでしょうか?
0192デフォルトの名無しさんNGNG
>>191
人のPCのレジストリを
ゴリゴリ書き換えるプログラムは嫌いだわ。
レジストリ使うのやめなさい。
0193ボログラマーNGNG
>>191
ShellExecute()で"explore"かなんかで実行とかじゃダメ?
やった事無いから動くか知らんけど。
0194デフォルトの名無しさんNGNG
>>190
できました。
ありがとうございます
0195suzumeNGNG
>>192
レジストリ壊す人もいるし...
そういうものが必要なときがあるんですよ〜

0196168NGNG
画面のプロパティのデザインページで指定できる、
メニューを描画するフォント名を教えてもらった者です。

このフォントの色は取得できないようです。
APIヘルプと睨めっこしたのですが、出てきませんでした。
メニューのフォント色は、どうやって取得出来るのでしょうか?
0197>196NGNG
見当違いだったらごめんね

::GetSysColor(COLOR_MENUTEXT);

じゃなくて?
0198デフォルトの名無しさんNGNG
>>197
ギャ--!忘れてた。
無事取得できました。
どもありがとうございました。
0199デフォルトの名無しさんNGNG
質問です。
WinMainのhInstanceを後から得る関数って有りますか?
0200名無しさんi486NGNG
>>199
GetWindowLongとかWM_CREATEの時のやつとか。
0201名無しさん@お腹いっぱい。NGNG
>199
ウインドウハンドルがわかってるなら(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE)
ほかにはWinMainでグローバル変数に収納して使うとか。
0202名無しさん@お腹いっぱい。NGNG
ウィンドウハンドルまたはインスタンスハンドルからアプリケーションを識別したいのですが、どんな方法がありますか?
GetClassName()でクラス名を使う方法は思いついたのですが、ほかに有効な方法があったら教えてください。
0203199NGNG
ただのmain関数じゃhInstance取れないので、あとから取得する方法は無いかと…。
WinMainじゃなくただのmainの場合はどうやってウインドウ作るんでしょうか?
0204デフォルトの名無しさんNGNG
GetModuleHandle(NULL);
0205デフォルトの名無しさんNGNG
>204
おおぉぉ!
ありがとうございます。みごと解決しました。
0206デフォルトの名無しさんNGNG
遅レスですが
>186
そのAPIは却下です。NT/200でしか使えない様ですので。腐ってますね。
結局自分で作りました。
0207名無しさん@お腹いっぱい。NGNG
子ウィンドウで作ったプッシュボタンやリストボックスのフォントを変更したいのですが、どうしたらいいのですか?
0208デフォルトの名無しさんNGNG
SendMessage(hwndChild, WM_SETFONT以下略。
0209207NGNG
>208
ありがとうございます。
0210デフォルトの名無しさんNGNG
ListView コントロールでアイテムテキストのサイズを得る方法はないでしょうか?

 アイテムテキストを取得したいのですが、LVM_GETITEMTEXTメッセージのインタフェースが
バッファとバッファのサイズを渡して、そのサイズ内でバッファにアイテムテキストを返すとなっています。でもサイズを取得する方法が無いようなので、どれだけの大きさのバッファを渡していいのかわかりません。
 MFCのCString CListCtrl::GetItemText(int nItem, int nSubItem) constのソースを見ると、
・あらかじめ割り当てて、それでアイテムテキストの取得を試みる。
・足らないようならバッファの大きさを倍にして、取得を試みる。

となっているのですが、もうちょっとスマートな方法が無いものでしょうか?
0211デフォルトの名無しさんNGNG
WTLのCListViewCtrlT::GetItemTextも同じなので
この方法がMSの公式見解かもね。

WM_GETTEXT/WM_GETTEXTLENGTH見たいにアイテムのテキストは長さが取れないのね
こりゃインタフェースの欠陥だな >>MS
0212名無しさん@お腹いっぱい。NGNG
厨房な質問です。
「ファイルを開くアプリケーションの選択」ダイアログボックスを
出すにはどうしたらよいですか?
0213212NGNG
しまった。
sageてしまった。
0214デフォルトの名無しさんだもんNGNG
>>212
MFC使うなら
CFileDialog使う。
CFileDialog dlgFile(FALSE "csv", szFile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "csvファイル (*.csv)|*.csv|All Files (*.*)|*.*||", this);
dlgFile.DoModal();
0215デフォルトの名無しさんNGNG
質問:
メニューの文字の横にアイコンを置くのはどうやればいいのでしょう?
(例:エクスプローラーの「ファイル」→「新規作成」)
AppendMenu関数では、文字かBitmapかどちらか一つを選べるようですが、
文字の横にBitmapを置くっていうのは、この関数ではできないようです。
0216デフォルトの名無しさんNGNG
>212
APIならGetOpenFileName()
引数の構造体のメンバが20個ぐらいあるので面倒だけどな。

0217名無しさんi486NGNG
>>215
オーナードローで自分で描く。
MFCなら、codeguruやcodeprojectにクラスがあるよ。
0218212NGNG
>>216
どうもです。
0219212NGNG
あれでもこれって単なる「開く」ダイアログじゃありませんか?
0220デフォルトの名無しさんNGNG
>>219
たぶん >>216 は、ただのバカだ。おつかれ。
正解はこちら。
http://www.microsoft.com/JAPAN/support/kb/articles/J042/7/12.htm
0221212NGNG
さっすが220さん!
0222名無しAMDNGNG
どうしても作りたいプログラムがあるので、質問させていただきます。
実は、インターネットエクスプローラの 「ホーム」URLを書き換える
プログラムが作りたいんです。
知ってる人、どうかよろしくお願いします。
0223デフォルトの名無しさんNGNG
>>222
レジストリキーをチェックしてね♥
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
Start Page
0224名無しAMDNGNG
>>223
あー、早いレス。それに、貴重な情報。
ありがとうございます〜 (≧▽≦)ノ
早速今夜試してみます〜。
0225デフォルトの名無しさんNGNG
>>224
スタートページ変えられるのスゲェ迷惑なんすけど。
0226デフォルトのななしさんNGNG
C++,Cで、winsock以外で、ソケット通信するためのAPIって無いの?
あ、環境はwindows9x or windowsNT系ね。
windows2000に特化してたりするのはパス。
0227デフォルトの名無しさんNGNG
>>226
サードパーティのソケットライブラリを使う。
#有るのか知らん。FTPとかで出してないか?
0228デフォルトの名無しさんNGNG
縦書き用ExtTextOutってない?
0229デフォルトの名無しさんNGNG
>>226
Windows3.1の頃は色々あったけどねぇ。
ま、それでも窓口はWINSOCKだったけど。
0230でふぉると名無しサンNGNG
うーん、winsock同等の物を自作してみたいのですが、
何か参考になるソースないでしょうか?
0231ネタNGNG
>>227 SetWorldTransform
0232デフォルトの名無しさんNGNG
ビットマップファイル(色数問わず)をRGB形式(詰めて)に簡単に展開する方法はないですね?
0233デフォルトの名無しさんNGNG
@
0234デフォルトの名無しさんNGNG
Bitmapファイル自体がすでにRGB形式でわ?
256色の場合はインデックスだけど、パレットはRGB形式だし。
そうゆう意味じゃなくて?
0235デフォルトの名無しさんNGNG
>>232
LoadImageでDIB形式で読み込んだものを
GetDIBits でピクセルを読み込む。
ただしLoadImageはNTでは動かない。
スージープラグインを使うのもいいかも。
0236232NGNG
>234
パレットを持ってる奴を24bitカラーに直して読み込みたいです。
>235
LoadImageの存在をはじめて知ったのであとで調べてみます。
GetDIBitsって、LONG境界で置かれているものを、詰めて置いてくれるんでしょうか?

0237デフォルトの名無しさんだもんNGNG
>>236
>パレットを持ってる奴を24bitカラーに直して読み込みたいです。
1byteずつデータ読んでいってそれに対応するパレット、(RGBQUADからね)
で、出来上がりね。
BITMAPINFOHEADER、BITMAPINFO あたりはすでに読んでるよね。

0238236NGNG
>237
圧縮されている奴とか自力で解答するってことで?
それって結構手間では…
どちらにしろ一発では無理ということですか…
0239デフォルトの名無しさんNGNG
>>238
つまり、どんな形式のBitmapでもカンタンに読込みできる
ライブラリを探しているわけね?自作したいんじゃなくて。
最初からそう言ってよ。
0240238NGNG
>239
出来れば自作したいんですが…
画像ファイルをメモリに展開する場合、大抵の人はライブラリ使ってるんですかね?
0241デフォルトの名無しさんNGNG
>>232,236,238,240
BMP/JPEG/GIFならOleLoadPicture()が楽
使い方はGoogleにでも聞いてくれ
0242デフォルトの名無しさんNGNG
>>240
手間かけたくないみたいなこと238で言ってるのに、
でも自作したいって... 自己矛盾してないか?
0243240NGNG
>241
JPEGやGIFまでロードで出来るなんて便利な関数ですね。
さっそく調べてみます!
0244240NGNG
感謝!
0245デフォルトの名無しさんNGNG
簡単なら自作したいってだけか…。
0246デフォルトの名無しさんNGNG
GIFのローダーは、比較的易しいけど、
特許の問題があるからねぇ・・・
0247デフォルトの名無しさんNGNG
関係ないけど、いつから
BITMAPINFOHEADER の biCompression に、
BI_JPEG とか BI_PNG とか付いたんだ?

鬱だ・・・
0248デフォルトの名無しさんNGNG
.exeファイルがコンソールアプリなのかそうでないかを判別する
方法ってあります?PEヘッダーじゃダメそうだし、GetSTDHandleを
インポートしているかどうかでもダメだし。
0249デフォルトの名無しさんNGNG
>>274
JpegとかPNGのBMPもあるってこと?
0250デフォルトの名無しさんNGNG
>>248
SHGetFileInfoでどうだろう
0251248NGNG
>>250
 うまくいきました。ありがとう。
まさかAPI一発とは思ってもみませんでした。

0252デフォルトの名無しさんNGNG
SHGetFileInfoが出たところで便乗質問です。

SHGetFileInfoでExplorerに表示されるICONのファイル名を取得したいのですが
うまくいきません。

int main(int argc, char* argv[])
{
  SHFILEINFO sfi;

  ::CoInitialize(NULL);

  if(0 == ::SHGetFileInfo("C:\\hogehoge.txt", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_ICONLOCATION))
    return -1;
  printf("Icon location file = %s\n", sfi.szDisplayName);
  return 0;
}

SHGFI_TYPENAMEを指定するとsfi.szTypeNameファイルタイプ名が入るのは確認できたのですが、SHGFI_ICONLOCATIONを指定してもsfi.szDisplayNameにアイコンファイル名が入ってくれません。(sfi.szDisplayName[0]='\0'で終わりになっている...)

やっぱりレジストリから判断するしかないかな?

検索しまくりましたが、うまくいく事例なし。
ただ同じようにうまく行かなくて悩んでいる人は見つけましたが。
http://www.kab-studio.com/Programing/KabuU/200011b.html
0253デフォルトの名無しさんNGNG
関係ないが>>252のリンク先
IntelコンパイラというのはVC++のコンパイラになるのだが
BCCをVC++に組み込むのはやはりないのか。
0254デフォルトの名無しさんNGNG
アピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアヒアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピアピv゚アピアピアピ
0255デフォルトの名無しさんNGNG
ForegroundWindowの属するプロセスIDかハンドルを取得するAPIってないですか?
もしくはWindowハンドルからプロセスIDかハンドルを取得するAPI。
0256デフォルトの名無しさんNGNG
GetWindowThreadProcessId
0257デフォルトの名無しさんNGNG
>>256
モロに2番目のヤツですね。ありがとうございました。
0258デフォルトの名無しさんNGNG
>>235
それは日本語SDKヘルプが間違ってる(あるいは更新されていない)。
NT4以降ならLR_LOADFROMFILEも使えるよ。
0259デフォルトの名無しさんNGNG
MAPIプログラミングについて、何かいい本とかサイトって
ありませんか? 日本語のサイトがいいんですが・・・
探しても見つからないんで、書き込みに来ました。

入力した文字列とアドレス帳に登録されているアドレスデ
ータを比較して、その情報を取得したいんです。
ちなみに、開発はVC++でやってます。
0260デフォルトの名無しさんNGNG
VC++で
COMポートを使ってパソコンから
相手の機器へデータ(整数値)を転送するには、
以下のコードでいいでしょうか?
(常に4バイト送ってくれるか心配なんだけど…。
改良点があれば教えて下さい。)

// 送り先のクリエート
handle = CreateFile("COM1", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(handle == INVALID_HANDLE_VALUE){
// クリエート時エラー
}

// 初期設定の取得
GetCommState(handle, &lpdcb);

// 必要に応じてここでlpdcb構造体のメンバを変更


// COMポートの設定をセット
SetCommState(handle, &lpdcb);

// 送り先へデータの送信
bRetW = WriteFile(handle, &iData, sizeof(iData), &dwNumber, NULL);
if(bRetW == 0){
// データ送信時エラー
}

// ハンドルのクローズ
bRetC = CloseHandle(handle);
if(bRetC == 0){
// ハンドルクローズ時エラー
}
0261デフォルトの名無しさんNGNG
>>260
SetCommStateのDCBで信号周りの設定がかなり重要なんだけどな。
まぁ、信号のハンドシェークは通信相手によるからね。

書き込む前にGetCommModemStatus等で
DSRぐらいは見といたほうが良いと思う。
0262デフォルトの名無しさんNGNG
キャプチャーカードから画像をリアルタイムで取り込んでテクスチャとして使いたんですが、
DirectX知らないんで、Win APIでそんなの有りますか?
0263KNGNG
>>260
>>261
付け足すなら、
SetupComm() SetCommTimeouts() PurgeComm()
あたりもやっといたほーがええんとちゃう?
0264260NGNG
>>261
>>263
情報ありがとうございます。
でもう一つ質問なんですが、
260でやっている事を
Timerを使ってある時間おきに
何回もやりたいのですが、
WriteFile処理が終わらないうちに
次のWriteFileをしようとすると
エラーになってしまいます。
2回目のWriteFileは、1回目のWriteFile
が終わってからやるしか方法が無いのでしょうか?
(SetTimerの方で1回目のWriteFile処理が終わるより
長い時間を設定するしかないのでしょうか?)
教えて下さい。
0265デフォルトの名無しさんNGNG
>>264
CriticalSectionとかどうよ?
0266260NGNG
>>265
MSDNライブラリで見たけど
良く分かりません。
教えて下さい。
初心者なので簡単に、
よろしくお願いします。
0267デフォルトの名無しさんNGNG
というか、WriteFile終わってからじゃなきゃ次のWriteFileは
いかんだろう。いったい何をしたいの?>264
送信につかまりたくないなら、送信スレッドおこすか、
オーバーラップドI/O または I/O完了ルーチンを使用するのだがな。
0268デフォルトの名無しさんNGNG
タスクバーの[自動的に隠す(U)]を有効にしている状態で隠れているタスクバー
を表示させたいのですがうまくいきません。
ShowWindow(FindWindow("Shell_TrayWnd", NULL), SW_SHOW);
だけではだめなのでしょうか?
Win2kでやってます。
0269デフォルトの名無しさんNGNG
>>268
WM_ACTIVATE WA_ACTIVEを送れば表示されるはず。
0270268NGNG
>>269
SendMessage(FindWindow("Shell_TrayWnd", NULL),WM_ACTIVATE,WA_ACTIVE,0);
で表示できました。ありがとうございました。
0271デフォルトの名無しさんNGNG
AVIファイルについて質問です。
AVIStreamReadで取ったデータを再生するにはどうすれば良いのでしょうか。
0272デフォルトの名無しさんNGNG
API関数を使ってRS232Cをコントロールしたいのですが
詳細がわかりません。

hCom = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
WriteFile( hCom, "test", 5, &dwBytesWritten, NULL );

これでcom1からデータを送信できないんでしょうか。
また受信も同様の方法でよろしいのでしょうか?
0273デフォルトの名無しさんNGNG
>>272

素直にcomm.drv 使うのが吉と思われ
0274シリアルさんNGNG
>>272
そんなのでやってる。OCXのコントロールは半日使うと
フリーズするやつがあってダメだった。
0275デフォルトの名無しさんNGNG
■プロパティシートで質問

ラジオボタンが選択されたら
case WM_COMMAND:
switch (LOWORD(wp)) {
case IDC_RADIO1:
case IDC_RADIO2:
PropSheet_Changed(GetParent(hDlgWnd), hDlgWnd)
break;
}
って感じでAPI呼んで「更新」ボタンが黒くなるように
したいんだけど、画面が表示された瞬間とかにも拾っちゃって
困るんすけど、なんかスマートな解決方法ってありますかいのう?
0276デフォルトの名無しさんNGNG
えっと、今こんな風にボタンコントロールを作成しているのですが

#define MY_BUTTON 40100

CreateWindowEx(0, "BUTTON", "押してね",
        WS_CHILD, 0,0, 10,10, hWnd,
        (HMENU)MY_BUTTON,
        hInst, NULL);

このMY_BUTTONの値って適当で良いのでしょうか?今はうまくいって
るのですが、後々メーッセージ判定の時、衝突しそうで怖いです
0277>272NGNG
シリアルポートの制御は、物理的な結線とか意識しないといけないから、
ソケットみたいな抽象化したものと考え方変えないと、うまくいかんと思うんだけどねぇ。
多少その辺勉強してから、プログラム組んだ方が良いと思うよ。
CreateFileしただけじゃ、いくらなんでも、やること足らないと思うからね。
0278デフォルトの名無しさんNGNG
RegisterWindowMessage("もげもげぷー")
で、ユニークなのをゲットするってのは駄目?
0279デフォルトの名無しさんNGNG
>276
適当ってどういうこと?
とりあえずメニューとかと被らなければ適当なIDを割りふっていいじゃない?
0280>272NGNG
たぶん

CreateFile(
"\\.\COM1"・・・

でいいんでは?
0281>276NGNG
MY_BUTTONってリソースの名前でしょ。
それってリソースエディタ使ってれば重複しないようになるよ。
自分で付けたければ、resource.hの中身書き換えればいい。
0282276NGNG
みなさんレスありがとうございます
>>278
こんなのがあるとは!詳しく読んできます。これ使えば安心できそうです。
>>279
そうなんですけどね・・・なんかいやで。一応0x8000以下は避けてたのですが。
>>281
どうもリソースエディタ書き換えると挙動がおかしくなってしまいまして・・・。
また整形の仕方もよく分からず避けてしまってました。力不足、精進します。
0283278NGNG
あ、ごめん。全然ちがうこといってるわ。
設計時に決定しておくリソースIDのことね。そんなのは、自分で管理しろってことで。

RegisterWindowMessage("ъ( ゚ー^) マターリ!")は、
独自のWindowsメッセージ送るときに重複しないように(WM_USER + 100とかでなく)するやつだった。
0284276NGNG
>>283
あ、ヤパーリ
ヘルプみててなんか違うかな、と・・・・問題無いです
0285275NGNG
>>275
どなたか知りませんかのう...。
0286デフォルトの名無しさんNGNG
フルパスから特定の.exeや.dllが使用中かどうかは、どうやって調べるのですか?
0287いつでもどこでも名無しさんNGNG
書き込み属性でオープンしてみるとか。

いっそ削除してみるというのはどうだ?削除できなかったら使用中
0288デフォルトの名無しさんNGNG
>>286
GetModuleHandleではだめなんけ?

0289276NGNG
>>275 >>285
今ちょっと試せない上にヘルプなくて、スペルとか違ってるかもしれないんだけど
case WM_COMMAND:
 switch (LOWORD(wp)) {
  case IDC_RADIO1:
  case IDC_RADIO2:
   if( HIWORD(wp) == BN_CLICKED ){
    PropSheet_Changed(GetParent(hDlgWnd), hDlgWnd);
   }
  break;
 }
でどう?
0290デフォルトの名無しさんNGNG
しまったクッキー消し忘れ、説得力ねぇ
いや今見たら自分が邪魔しちゃってたみたいだったからさ
0291デフォルトの名無しさんNGNG
ウインドウの右上の×を押してもすぐに終了させずに、
データをSaveするかどうかのダイアログを出すようにし、
キャンセルを押すとスレッドを終了しないようにしたいのですが、
ウインドウが閉じてしまいます。
WM_DESTROYになにか細工をほどこせばよろしいのでしょうか?
0292MUTT-RAYNGNG
>>291
WM_SYSCOMMANDでSC_CLOSEが来た時に処理する…
だったかな?ここ1年Windowsで開発してないから
忘れた。
0293デフォルトの名無しさんNGNG
>>291
WM_CLOSEハンドラで
.OK: return 0
.CANCEL: DestroyWindow(hwnd)→return 0
でいーんじゃないの
0294291NGNG
ありがとうございます。うまくいきました。
WM_CLOSEハンドラでDestroyWindow(hWnd)を呼ぶか呼ばないか
だけでよかったんですね。
0295286NGNG
>>288


>>GetModuleHandleではだめなんけ?

試してみたのですが、ダメでした。
この関数はプロセスが同じじゃないと使えないようです。
0296288NGNG
>295
ごめん、じゃわからないや。
0297デフォルトの名無しさんNGNG
Windows2KではNICの無効化/有効化を出来るのですが、
これを自前で行うAPIを知っている人いますか?
0298デフォルトの名無しさんNGNG
ドロップダウンするツールバーボタンで、
▼がボタンと一体化してるもの(Explorerの「表示」など)は
どのようにすれば使えますか?
0299デフォルトの名無しさんNGNG
>>295

PSAPIもしくは、ToolHelp系のAPIを使え。
0300デフォルトの名無しさんNGNG
>>299
一瞬、ToHeartと読み違えたよ・・・。

逝って良し!>オレ
0301295NGNG
>299
どうもありがとうございます。
解決しそうです。
0302デフォルトの名無しさんNGNG
Dll内のダイアログテンプレートを使うにはどうすればいいんでしょうか?
LoadLibrary()→FindResource()→LoadResource()→LockResource()
とまではわかってるのですが、どうやってDialogBox()を呼べばいいのですか。


0303SAGENGNG
>>302
LoadLibrary で返ってきた HINSTANCE を使って
DialogBox() 呼べばいいんじゃない?

# 試してないから自信ないけどネ。
0304デフォルトの名無しさんNGNG
アプリケーションの設定を保存したいのですが、
以下の条件を満たすやり方があったら教えてください。
・再インストール時の再設定が容易(レジストリは×)。
・複数のユーザーで設定を分ける(アプリケーション直下のINIファイルは×)。
・シングルユーザーOSであるWin95(98も?)でも動作するようにする。
0305デフォルトの名無しさんNGNG
>>302
DialogBoxIndirect() 使うナリよ〜

HRSRC hrsrcDlg=FindResource( hinst, lpszName, RT_DIALOG );
HGLOBAL hglbDlg=LoadResource( hinst, hrsrcDlg );
DialogBoxIndirect( hinst, (LPDLGTEMPLATE)LockResource(hglbDlg), hwndOwner, lpfnDlg );

これで動くハズナリ〜
0306わははははNGNG
>>304
~/.appconfig
とか。
0307デフォルトの名無しさんNGNG
>>306
ъ( ゚ー^) イイネ
0308302NGNG
>303,305
ありがとうございます
どちらの方法でも動きました。

0309デフォルトの名無しさんNGNG
ウィンドウで、y座標の正の方向を上にしたいんです。SetMapMode()でMM_ANISOTROPIC
を指定し、SetWindowExtEx()を使え、との事ですが、この関数の引数nXExtentとnYExtent
は「ウィンドウの範囲を論理単位で指定しろ」と記述してありますが意味がよく分かりません。
良かったら教えてください。言語は⊂です。
0310デフォルトの名無しさんNGNG
あげておこう
0311デフォルトの名無しさんNGNG
>> 309
Y軸の論理範囲を負数で与えてみたら?

確かそうすりゃ論理座標が反転したよーな気がする。適当だけど。
0312デフォルトの名無しさんNGNG
ウィンドウのシステムメニュー(タイトルバーを右クリック、または
タイトルバーのアイコンを左クリックででるメニュー)を
ウィンドウの他の場所でも利用可能にしたいのですがどうすればよいのでしょう?
GetSytemMenuとTrackPopupMenuで表示そのものはできるのですが
これだけですとウィンドウの状態を反映してくれません。
(標準状態なのに「元のサイズに戻す」が選べてしまう、
 最大化の状態で最大化が選べてしまうなど‥)
どのような操作が足りないのでしょうか?
0313デフォルトの名無しさんNGNG
>>304
>・複数のユーザーで設定を分ける(アプリケーション直下のINIファイルは×)。
>・シングルユーザーOSであるWin95(98も?)でも動作するようにする。
レジストリが嫌ならログインユーザー毎にiniファイルを切り替えれば
いいと思うけど、セクションで分けても構わんけど。
0314デフォルトの名無しさんNGNG
iniの書き込みは、WinAPIでやるとNT系の場合、レジストリに書き込まれるので要注意。
だったはず。
Win2000でもそうだっけ?
0315デフォルトの名無しさんNGNG
>>313
iniのある場所がすべてのログインユーザから見えるとは限らないとか
書き込めるとは限らないという問題がある。HKEY_CURRENT_USERなら
確実。
>>314
 レジストリにリダイレクトするよう特別に指定したものでない限りそんな
ことはない。
0316313NGNG
>>315
>iniのある場所がすべてのログインユーザから見えるとは限らないとか
というか、そもそも、利用するユーザーの読み書き可能なディレクトリにしか
作れんし、アプリケーションインストール時にでもきちんとアクセス権を
設定するなりしてやりゃいいだけでしょう。
そもそも、アプリケーションディレクトリ内に作ったファイルが読む
アクセス権を持ってないユーザーがそのアプリケーションを利用出来るのだろうか?
実行権だけを設定することは可能だが・・・

>HKEY_CURRENT_USERなら 確実。
前提にレジストリを使わずにと言ってるとこにレジストリ勧めてどうする?
0317315NGNG
>>316
>利用するユーザーの読み書き可能なディレクトリにしか作れんし、
Win2kだと確実にそれが保証されるディレクトリはプロファイルディレクト
リの下にしかない。ということは他ユーザからは使えないから何も考え
ずにアプリケーションディレクトリの下に作成してユーザ別にインストー
ルしてください、でも問題ないと思う。

>アプリケーションインストール時にでもきちんとアクセス権を
>設定するなりしてやりゃいいだけでしょう。
アクセス権まで設定してやらないと正常に動かせないなら事実上インス
トーラが必要で「再設定が面倒でない」という条件を満たしているか疑問。
そこまでするならレジストリのほうが簡単だと思う。
0318313NGNG
>>317
>アクセス権まで設定してやらないと正常に動かせないなら事実上インス
>トーラが必要で「再設定が面倒でない」という条件を満たしているか疑問。
インストーラを用意するんで何の問題もないと思うんだが。
つーか、再設定を面倒なく行いたい言う話してるんだから、
インストーラぐらい作れよ。
そもそも、再設定と言う作業を簡便に行いたいって話だろ?
開発の作業で面倒なことをしたくないと言う話なのかい?

まぁ、アプリケーションの最初の起動時にiniファイルのあるディレクトリの
アクセス権を変えるんでもいいんじゃない?
もちろんadmin権限の奴でログインしてさ。
0319あ、ついでにNGNG
NTのアクセス権って、上のフォルダの権利を継承するって
ことになってるはず(MLでそう言ってる)んだけど、
実際にクライアントからフォルダを作成すると、
上のフォルダに複雑な権限を設定すると、
設定とは無関係にオーナーだけ
読み書き可能になってしまう。
単純に設定すればOKみたいだけど、
これ、バグなんですか?
0320315NGNG
俺は>>304じゃないから>>304が何を意図してたのかは分からんが
インストーラ用意するならなんでレジストリが×なのか謎。
個人的にはやたらにディレクトリやファイルの権限をいじるのはセキュ
リティ上の問題を起こしそうで嫌。
0321あ、ついでにNGNG
320>>
ええっと、「答案用紙」というフォルダーを
教師三人だけ読み書き可能、他は書き込みオンリー
でディレクトリも見えないなんてサイトがあるんですけど、
いつのまにかアクセス権がぐちゃぐちゃ。
プロパティを表示させると「特殊なアクセス権(RWX)」と
出てきます。
0322313NGNG
>>320
お前さぁ、もう一度304から読み直してから書き込めよ。
0323313NGNG
>>320
付け加えるとだな、レジストリを勧めるのなら、
複数ユーザー毎の設定情報を簡便に別の環境に
復元する方法を提示するのが筋ってもんだぞ。

>>320
何故アクセス権に拘泥するのか理解できないんだが。
なんか、その辺の設定がうまく出来なくって嵌ってる最中なのか?
セキュリティの問題は、利用方法、環境を含めて考えるべき問題で、
ファイルのアクセス権単独でどうこう言える問題じゃないぞ。
0324デフォルトの名無しさんNGNG
>>321
>いつのまにかアクセス権がぐちゃぐちゃ。
>プロパティを表示させると「特殊なアクセス権(RWX)」と
恐らく教師ユーザーのアクセス権だと思うんだけど、
これのどこがぐちゃぐちゃなの?
0325名無しさんNGNG
フルコントロール(RWX) ---> 特殊なアクセス権(RWX)
と変化している。
サブディレクトリにこのアクセス権が引き継がれない、
上のディレクトリにはAdministratorがフルコントロール
なのに、クライアントからサブディレクトリを作ると
その下がAdministratorから見えないのでバックアップも
取れない。相関関係が不明だが、一年ぐらい使っていると
起動時にファイルシステムのエラーが出て、
しばらくすると起動しなくなる。
これを3回繰り返している。

0326デフォルトの名無しさんNGNG
>>325
変更を加えていないディレクトリのアクセス権が、
いつのまにか変化してしまうと言うことなんでしょうか?

もし、ディレクトリ作成した時点から、
期待するアクセス権にならないと言うことで、
且つ、アプリケーションでディレクトリ作ってるなら、
SAをきちんと指定してみてはどうですか?
対策の方法はいくつもあると思うんですけど。
0327名無しさんNGNG
>>326
NTのメーリングリストだと親のディレクトリの
設定を継承するって書いてるのにその通りにならない。
必ず、そのユーザーにしか見えなくなる。
(そしてAdministratorがバックアップを
 やろうとするとアクセス権の壁に当たる)。
ユーザー数千人いるから、ユーザーIDバグってるのか??
アクセストークンはWIN32APIでVisual-Cから操作してるよ。
あと、パスワードの無期限化は
PerlからNET USERコマンドを
通してやってるけど、バグってるのか無視される。
NTってホント怪しい。
0328デフォルトの名無しさんNGNG
>NTってホント怪しい。
NTよりお前の方が怪しいと思う。
0329デフォルトの名無しさんNGNG
あげ
0330デフォルトの名無しさんNGNG
実行ファイルにドロップしたファイルのパスを取得したいの
ですがよくわかりません。

今はWinMainのコマンドライン引数から適当に切り出して使っているのですが
いまいちスマートじゃないような・・・・
何かよい方法はありますか?
0331デフォルトの名無しさんNGNG
>>330
ふつーだと思うけどダメなの!?
Window場にDragならメッセージなりShell-APIなりがあると
思うけど
0332デフォルトの名無しさんNGNG
>>330

シェルの仕様だから、コマンドラインで受け取るしかない。パースの仕方は
いろいろあるだろうけどね。
0333デフォルトの名無しさんNGNG
API関数を使用してiniファイルを操作できるときいたのですが
どのようにしたらいいんでしょうか?
0334デフォルトの名無しさんNGNG
>>333
なぜ今iniファイルを使うか?レジストリに白!
0335333NGNG
レジストリはいじりたくないのもので・・・
0336麻衣NGNG
WritePrivateProfileString
GetPrivateProfileString

だけど、今からやるならXMLでやろうよ
0337333NGNG
サンキュウ
0338デフォルトの名無しさんNGNG
>>334
そのソフトでしか使わない物をレジストリに入れるのは頼むからやめてくれ・・・(x_x
0339デフォルトの名無しさんNGNG
コントロールのクラス名に"msctls_updown32"を指定して、リソース内でアップダウンコントロールを作っています。
コントロールの最大値、最小値もリソース内で指定したいのですが、どのようにすればいいのでしょうか?

0340デフォルトの名無しさんNGNG
>>336
XMLでのやりかたきぼーん。
0341デフォルトの名無しさんNGNG
>333
iniファイル中の文字が半角文字オンリーとか全角文字オンリーなら
いいけど、混在してたら文字化けしてキレそうになるぞ
(経験アリ)

>340
マジレス。ここを見てみそ。
http://msdn.microsoft.com/library/psdk/xmlsdk/xmlp2lt1.htm
英語だけど、このページにはXML DOMの基礎がとても詳しく書いてある。
とりあえずGetDocumentByTagNameからはじめよう。
JavaでやるんならSunのページから適当に探してね(笑)
0342デフォルトの名無しさんNGNG
>混在してたら文字化けして
ダブルクォートで囲めば問題起きないと思うんだが。
0343341NGNG
>341
自己レス。getElementsByTagNameの間違い。

>342
そ、そーなの?

[section1]
key1="value1"
key2="value2"

みたいに書くの?それとも

[section1]
"key1=value1"
"key2=value2"

みたいに?
なんかバカがバレる....鬱だ氏脳....
0344デフォルトの名無しさんNGNG
あるDLLでエクスポートされてる名前の一覧を得るAPIってありますか?
0345デフォルトの名無しさんNGNG
>344
ImageDirectoryEntryToDataEx()

かなり面倒だと思うけど…。他に楽な方法あるかも。


0346デフォルトの名無しさんNGNG
>>343
>key1="value1"
こちら。確か「"」は取れて文字列だけ読めると思ったが。
先頭から囲んじゃったら、セクションごと読まないといかんようになってしまう。
0347341NGNG
>>346

ありがとー (^-^)/
0348デフォルトの名無しさんNGNG
…なんだか知らんが、素直にレジストリにしようっと。
0349デフォルトの名無しさんNGNG
>>345 どうもです。
MSDN online 漁ってみましたが、これって、
じかに読むよりはちょっと楽だったりするかも知れない、くらい?
うーん、めんどくさそう。しかも 95 は不可のようだし。
しおしお…。
0350デフォルトの名無しさんNGNG
不定形ウィンドウについて質問なのですが、
例えば偽春菜っぽいアプリを実現するとしたら
キャラクターを表示している状態と、フキダシが
出ている状態では、リージョンの形が違うと
思うんですが、やはり毎回リージョンを作り直す
という方法なのでしょうか?
それから、うにゅうは別ウィンドウとして作成
されてるのかな?
漠然としていてすみません。
0351デフォルトの名無しさんNGNG
>>350
Spy++で見てみれ。
本体、うにゅう、フキダシ全部別ウィンドウだよん。
0352350NGNG
>>351
その手がありましたね(^^;
確かに別ウィンドウになってるのが確認できました。
感謝!!
0353デフォルトの名無しさんNGNG
日本語入力中に同じところを何回か変換すると、変換候補ウィンドウが出て、変換候補の言葉がリストになって出ますよね。
このウィンドウが出るタイミングはWM_IME_NOTIFYでわかるのですが、この変換候補ウィンドウのウィンドウハンドルを拾うにはどうしたらいいんですか?
ちなみにWin98+ATOK11を使ってます。

0354>353NGNG
現在入力中のウィンドウハンドルから
ImmGetDefaultIMEWnd()
で取得できます
0355デフォルトの名無しさんNGNG
>354

ハンドルは拾えたのですが、それはアプリケーションのIMEのハンドルで、変換候補をリストで表示するウィンドウのハンドルとは別のようです。
0356>355NGNG
なるほど...
ImmGetCandidateWindow()で取得した
CANDIDATEFORM の rcArea にスクリーン座標がはいっていれば
WindowFromPoint() または ChildWindowFromPoint()
で取得できるかましれませんね
0357デフォルトの名無しさんNGNG
『Inside OLE2』(アスキー出版局)
    と
『OLE オートメーション プログラマーズ リファレンス』
             (Microsoft Corporationn)

買うとしたらどっちのがいいっしょ?
0358>357NGNG
『Inside OLE2』(アスキー出版局) 。
『OLE オートメーション プログラマーズ リファレンス』
             (Microsoft Corporationn)
はヘルプを直訳しただけ(だったと思う逆だったらすいません)

0359357>358NGNG
>ヘルプを直訳しただけ(だったと思う

あ、そうなんだ。
じゃあ、『Inside OLE2』にするッス。
さんきゅでした。
0360デフォルトの名無しさんNGNG
他のアプリのエディットボックスの内容を取得する方法って知ってます?
キャレットの座標などは取得できるんですけど、同じ方法では肝心の内容を
吸い出せない…。
セキュリティ目的でこうなっているのかと思いますが、以前、翻訳ソフトで
マウスカーソルの下の単語を訳すというのがあったので不可能では無いと思うのですが。
0361SAGENGNG
うぬ?Windows標準のエディットコントロールなら、
単に GetWindowText するだけでないの?>>360
0362デフォルトの名無しさんNGNG
自前のコントロールならそれでOKだけど、他のアプリのってのがミソなんだよね。
0363>360NGNG
1.アプリケーションの ウィンドウタイトル名 例:)"2ch BBS .. -
Microsoft Internet Explorer" かウィンドウクラス名(普通知
らない)で FindWindow()でHWND取得<--親ウィンドウ
2.目標のエディットボックスの親ウィンドウ内でのクライアント座標
(メニューを除いた左上からの相対座標)を調べる
3.ChildWindowFromPoint()でエディットボックスのHWND取得
4.それをGetWindowText()
ウィンドウハンドルが取得できれば内容にロックがかかることはないです。
0364361NGNG
絶対座標があれば WindowFromPoint でも可だね。

>>362
つーか自前でも他人のでも変わらんてば。
0365デフォルトの名無しさんNGNG
>>362

WM_GETTEXTで取得できると思われ。
0366デフォルトの名無しさんNGNG
>>360

翻訳ソフトがバビロンであれば、あれはコントロールから取得している
のではなく、画像をOCR処理していると思われ。
0367デフォルトの名無しさんNGNG
なんか>>360さんと同じような質問で恐縮ですが。

マウスカーソルなどで現在選択している部分のテキストを取得する
方法はありませんか?(自アプリ/他アプリ)
0368デフォルトの名無しさんNGNG
>>363
「エディットぼっくす」って逝ってるからFindWindowのクラス名
の指定は"edit"でいいんじゃないかな
0369デフォルトの名無しさんNGNG
>>360
あとクラス名が不明ならdesktopのhwndを引数にしてEnumChildWindow
という手もある
けどウィンドウが重なっていてその上にマウスがある時は注意が
必要
(EnumChildWindowは確かZ-order順に探索しなかったと思う)
0370SAGENGNG
>>367
EM_GETSELTEXT
なり。
0371367NGNG
>>370
GetCursorPosとWindowFromPointとSendMessageで実現できそうです。
ありがとうございました。
0372367NGNG
EM_GETSELTEXTってRichEdit以外では無理なんかな。
0373363NGNG
>>368
親ウィンドウなんで(エディットだと特定できない)
0374>>372NGNG
EditだとEM_GETSELで位置をとって取得することになるのと違いますか。
0375367NGNG
>>374
Editだと全部取って開始と終了位置を使って抽出、ですね。
Edit,RichEdit以外は無理っぽい。IEだとなんかメッセージが飛んでる
ようだけどどのアプリにも…というわけにはいかないようです。
結局クリップボードを使う方法に変更しました。
0376名無しさんNGNG
Windowsのエラーダイアログのメッセージを変えるソフトがありますよね。
(FDが入ってないのにFDDにアクセスしたときのエラーダイアログとか)
あれはどんなAPIを使って、メッセージ部分を置き換えているのでしょうか?
0377デフォルトの名無しさんNGNG
>>376
HookAPIでウィンドウの生成かなんかを監視して、ウィンドウハンドルやオーナー
をマッチングしてるんじゃないかなー
サブクラス化のタイミングでさ。
0378デフォルトの名無しさんNGNG
FDDアクセスエラーに限った話なら
SetErrorMode(SEM_FAILCRITICALERRORS);
でデフォルトのエラー表示をキャンセルする方法もあったね。
Win3.1時代に使ったことがある。
0379デフォルトの名無しさんNGNG
>>376-377
SetWindowsHookExでWH_MSGFILTERを指定するなり。
サブクラスではないなり。
これで標準メッセージボックスのOKボタンの文字列"OK"を、
別の文字列に変えた事あるなり。
だから、エラーメッセージ本文もこの方法でGo〜なり〜。

でも、、、ちょっと気になるのはエラーメッセージは表示
はどうなっていたのかな!? 確かスタティックコントロ
ールだったような、、、

これは実物をSpy++で調査してみてみて〜なり。
0380デフォルトの名無しさんNGNG
MessageBox,MessageBoxEx,MessageBoxIndirect
なんかで、できるダイアログのボタンの文字列を変えたいのですが、いい方法はないですか?
0381376NGNG
>>377-379
レスありがとうございました。
0382デフォルトの名無しさんNGNG
>>380

だから、フックしてやれ、つーの。
0383デフォルトの名無しさんNGNG
>>380
そのすぐ前の>>379が模範解答なんだが(藁
0384デフォルトの名無しさんNGNG
手助けしてくだされ。
HDBENCHなどを使うと、HDDやCD-ROMの型番を取得できますな。あれはどのように
やるものでござろう。
Dependency Walkerなど使ってみもうしたが、どうにもわかりかねましてな。
0385デフォルトの名無しさんNGNG
>>384

低レベルのBIOSコールとかしてるのか、あるいは、Windowsの持っている
情報を取ってくるか・・・。

面倒なので、WMIでとっちゃえば?
0386デフォルトの名無しさんNGNG
>>384
反則的だけどレジストリのHKEY_LOCAL_MACHINE\Enumをなめるとか。
これだけだとATAPIのCD-ROMとSCSIのCD-ROMが区別できないかもなので、
ASPI32でInquiryコマンド投げてみて一致するデバイスがあれば本当にSCSI、
無ければATAPIとする、とか。
でもATAPIとSCSIに同じデバイス名を返すCD-ROMが繋がってたらややこしい
ことになるな…
0387384NGNG
>>385
Win95ではWMIは使えぬはずにて、HDBENCHは異なる取得方法を
用いている、と思われまする。

>>386
HDBENCHの出力を見るに、IDE/SCSIアダプタ→ストレージデバイスの
階層構造を把握している模様。
おそらくは、たやすくハードウェア情報を取得する方法があるものと
睨んでござるが、さてはて。
0388デフォルトの名無しさんNGNG
>>387
SCSIに限れば、ASPIでホストアダプタを列挙して、各IDに対してInquiryを投げれば容易。
IDEの方はどうだろ。やったこと無いんでなんとも。
ASPIと同じような方法でアクセスできるんだろか。
0389384NGNG
>>388
ASPIはWin2kではデフォルトでないゆえ、使うわけには参らんでござる。
WDMで同様の機能があるものの、これはWin95では使えぬもの。

考えあわせまするに、HDBENCHはレジストリから情報を取得しているのでは
と思われてきた次第。が、ver. 2.61がWin2kで正しく情報を取得する
のを見るに、裏技がありはせぬかという疑いも消えず。
0390384NGNG
Regmonにてレジストリへのアクセスを監視したところば、HDBENCHは
レジストリから情報を取得していると判明いたした。
0391386NGNG
>>390
そうか。実は反則ってほど反則でもないのかな(藁
俺はファーム屋なので直接ハードから得た情報じゃないとって考えが
先に立っちゃったけど、Windows的にはそれでもいいのかもね。
0392デフォルトの名無しさんNGNG
うん。Windowsだから。
あるがままを受け入れるのです。。。
0393デフォルトの名無しさんNGNG
acmStreamXXXX系のAPIの具体的な使い方はどこに行けば落ちてるでしょう?

APIそのものの解説はMSDNで判りました。Webでも
http://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_acmstreamopen.htm
で落ちています

でも具体的な使い方 特にMP3からどうデータを復元すればいいかとかが
判りません みつけたのはこのページだけです
http://www.ish.ic.kanagawa-it.ac.jp/~syugo/mp3.html

よく判りません・・・・
0394デフォルトの名無しさんNGNG
誰でも良いので「プラットフォーム SDK」の場所を教えてください。
0395デフォルトの名無しさんNGNG
>>394
ftp://ftp.micsosoft.com/developr/platformsdk/
feb. 2001もう出てるよ。oct.2000落としたばかりなのに
だれか変更点知らない?
0396デフォルトの名無しさんNGNG
這入れないです>395
0397396NGNG
ごめん、あったよ。
0398デフォルトの名無しさんNGNG
Fiberとは、どのような時に使うものですか?
0399デフォルトの名無しさんNGNG
>>398
センイが足りない時。
0400デフォルトの名無しさんNGNG
コルーチンだよ>>398
0401デフォルトの名無しさんNGNG
WORDみたいにアンチエイリアスのかかった文字を描画するにはどのAPIを使うんでしょうか?
0402デフォルトの名無しさんNGNG
コルーチンなんだけどつかってみたら実際のコルーチンより使いにくいんだよなあ
でも、Winだと任意の領域をスタックには使えないからしょうがない
0403デフォルトの名無しさんNGNG
>>401
WORDがどういう実装してるか知らんけど(使ったことすらない)
ExtTextOutと、あとはCreateCompatibleDC、createImage、BitBltあたりの
GDI関係のを適当に。
0404デフォルトの名無しさんNGNG
>>403
あとパス
0405デフォルトの名無しさんNGNG
>>401
相手がTrueTypeフォントなら、GetGlyphOutlineとかでスプラインデータを
取得し、自前でレンダリングする。
メモリDCを用意して、必要な大きさの4倍の大きさでレンダリングしたあと
StretchBltするとか。
ただこれだと、描画結果がハードウェア依存(システムの画面モードにも
依存するか)するので、自分で内挿するとか。
0406デフォルトの名無しさんNGNG
>>401
DrawText とか TextOut
0407398NGNG
>>400
ありがとう。理解できるようになりました。
0408デフォルトの名無しさんNGNG
CDC::Ellipse()を使うときに、引数にCRectクラスのオブジェクトを使ったんだけど、
値渡しにしても参照渡しにしてもちゃんと動作します。
これって変じゃないですか?あんまり融通がきいてもあとが
こわいのですが…。
0409デフォルトの名無しさんNGNG
>>408
CRect::operator LPCRECT ()
0410デフォルトの名無しさんNGNG
>>409
わかりました。気にする必要はないんですね。
ありがとうございました。
0411デフォルトの名無しさんNGNG
HWNDからそのWINDOWで点滅しているキャレットの長さを取得するにはどうしたらいいでしょうか?
キャレットの点滅している場所を知りたいのですが、GetCaretPosだと上端の座標しかわかりません。
下端の座標が知りたいのです。
0412あのKBはGetVersionExだと思うNGNG
>>118
しかし、これは「Me だけが、GetVersionEx(記述内容からすると、GetVersionではないでしょうね。dwMinorVersion なんて GetVersion の戻り値にはないんだから)の戻り値が変な理由」にはならんよね。
95/98/98SE/Me の全てが同じ動作をするなら分かるけど。

#どのみち obsolute されている GetVersion 使うソフトはもうさすがに少数派だし
0413>412NGNG
かちゅ〜しゃ使い?
0414デフォルトの名無しさんNGNG
>>413
どちてそう思ったの!?その時間帯にスッ�d出たから!?
0415デフォルトの名無しさんNGNG
ニフで話題になったからそのまま書きこんだだけだろ。
0416デフォルトの名無しさんNGNG
ログファイルの名前を付けたいのですが
YYYYMMDDuuuuuu.Log
みたいな感じでuuuuuuのところだけ変えて何個か作りたいのです。
Win32APIにユニークな値を返す関数があるらしいのですが関数名が分かりません。
ご存知の方、どうか教えて下さい。
0417デフォルトの名無しさんNGNG
>>416
CoCreateGuid()か? そんなのより、GetTempFileName()とかの
方がいいかも。
0418デフォルトの名無しさんNGNG
>416

GetTempFileName()のことか?
0419デフォルトの名無しさんNGNG
>>417さん、>>418さん
早速のレスありがとうございます。
CoCreateGuid()が求めていた関数でした。
本当にありがとうございました。
0420デフォルトの名無しさんNGNG
>>118
 だってこれ、すでに obsolute されている GetVersion についての発言であっ
て、GetVersionEx のことじゃないじゃん(笑)

 つーかこれ、GetVersion が「3.95」を返す、っていう Win95 時代からの対
16bit アプリ向け対策ではなかったっけ?(笑)

 ついでにいえば、この理由を正当化するならば、「なぜ Me だけこの症状にな
るのか」が説明できませんね。Windows 95/98/Me の総てで同じ症状なら一貫し
ているけど(笑)
0421デフォルトの名無しさんNGNG
>>420
3ヶ月半前の書き込みにわざわざレス、しかも丁寧語が変に混じってるわ、
笑いが止まらない様子だわ……。

昨日の夕食のなかに、見慣れないキノコとか混じってませんでした?
0422デフォルトの名無しさんNGNG
こんにちは、419です。
CoCreateGuid()を使いたいのですが
GUID *test;
HRESULT rtn = CoCreateGuid(test);
ではコンパイルは通るのですがtestに値が入りません。
正しい使い方を教えて下さい。
VisualC++6.0でOSはNT4です。
よろしくお願いします。
0423デフォルトの名無しさんNGNG
testは値が入るところではなくて、値が入るところを指し示す
ものだからだよ。
0424116NGNG
>>420
あほ
0425デフォルトの名無しさんNGNG
>>423さん、レスありがとうございます。
しかし意味が分かりません。
もう少し詳しくお願いします。
ちなみに、デバック中にtestを見ても値が入っていなし
rtnも-2147024809なので
私見ではGUIDのクリエイトに失敗しているのだと思うのですが
0426デフォルトの名無しさんNGNG
>>425
ポインタを取得するんじゃなくて、ポインタを指定するんだよ。
0427デフォルトの名無しさんNGNG
>>422
GUID guid;
HRESULT result = CoCreateGuid(&guid);

ポインタの基礎からやりなおした方がいいかも。
0428デフォルトの名無しさんNGNG
>>426さん
GUID test;
HRESULT rtn = CoCreateGuid(&test);
ですね。
ありがとうございました。
0429デフォルトの名無しさんNGNG
>>427さん、ありがとうございます。
確かにポインタは、まだよく理解していません。
お奨めの本があれば教えて下さい。
0430デフォルトの名無しさんNGNG
>>429
うーん。K&R2で学んだんだけど、オススメってのは特にないなぁ。
なんか、ポインタに的を絞った本があるみたいだから、それとかどうでしょ?

感覚をつかんじゃえば、楽なんだけどね。
0431デフォルトの名無しさんNGNG
>>430さん
レスありがとうございます。
>なんか、ポインタに的を絞った本があるみたいだから、
>それとかどうでしょ?
分かりました、とりあえず近所の図書館で探してみます。
>感覚をつかんじゃえば、楽なんだけどね。
うらやましいです。
早くそう言える様にがんばります。
0432デフォルトの名無しさんNGNG
>>431
http://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1142-2
↑かな。

ポインタってのは、あくまでも「実体を指し示すもの」で、実体ではない。

GUID *test

ってのは、GUID構造体を指す(ポイントする)んだけど、これだけでは、
実体が確保されてないわけ。だから、

GUID *test = new GUID

みたいにするか、

GUID testって宣言しておいて、&testを渡すと。こんな感じで理解して
もらえるかなー。
0433デフォルトの名無しさんNGNG
質問1:
 Windows APIのコモンコントロールの勉強をしています。サンプルプログラムを
読むと、ダイアログ関数でメッセージを処理した場合、 return 1; で終わってい
ます。また処理がなかった場合は return 0; で終わっているようです。
 ダイアログ関数の戻り値はBOOLですが、これは関数内で処理をした場合は
true(1)、処理をしなかった場合は false(0) を返すと考えて良いのでしょうか?
また 0/1 の代わりに false/true を使った方がよいですか?
#そういえば大文字のBOOL は int型でしたね。

質問2:
 プロパティシートに関して。プロパティシートに関連付けられたダイアログ関数で
WM_NOTIFYメッセージを処理する際に return 1; の実行の前に
SetWindowLong(hdwnd, DWL_MSGRESULT, 0);
が実行されています。MSDNによれば、この関数はhdwndで指定されたウインドウの属性
を変更するものそうで、DWL_MSGRESULT は「ダイアログボックスプロシージャ内で処
理されたメッセージの戻り値を設定します。」とあります。
 これの必要性がよくわからないのですが、これってどうしても必要なのですか?
コメントアウトしても、動作に変化がないのですが・・。

質問3:
 ウイザードに関して。ウイザードに関連付けられたダイアログ関数で、ビットマップ
を表示させる場合、WM_PAINTメッセージの処理部分で表示させています。ウイザードの
ページがアクティブになった際にも、WM_INITDIALOGでは、特に描画指示はでていません。
ウイザードコントロールの側からWM_PAINTメッセージを出すように指示が自動的に送ら
れていると考えて良いのでしょうか?

 Windowsアプリって、なんでもかんでもグローバル変数になりますね。^-^;
なんか美しくないなぁ。C++ならキレイにいけるのかな。(サンプルがCで書かれているので)
 それにしても、コントロールって複雑・・(-_-;
0434デフォルトの名無しさんNGNG
>>433 Q1
WM_INITDIALOG メッセージに応答したとき、SetFocus 関数を呼び出
してダイアログボックスのコントロールの 1 つにフォーカスを設定し
たのであれば 0 を、フォーカスを設定しなかったのであれば 0 以外
の値を返さなければなりません。

WM_INITDIALOG メッセージ以外のメッセージに応答したとき、メッ
セージを処理したのであれば 0 以外の値を、処理しなかったのであれ
ば 0 を返さなければなりません。
0435デフォルトの名無しさんNGNG
>>434
なるほど。ありがとうございました。
0436デフォルトの名無しさんNGNG
SDKでReBarを使ってIE風メニューを実装しようとしているのですが、メニューの
項目ボタンのセットまで実装したのですが、キーによる制御の方法がわかりません。
ドキュソメント等を探したのですが、TB_SETHOTITEMを使ってどうこうする様なの
ですが・・・。
どなたかSDKでReBar作れるぞゴルァ!! って達人の方、いましたら方法教えてください。

ってかTB_SETHOTITEMは、説明足らんくないですか?(MSDN)
0437デフォルトの名無しさんNGNG
>>433
質問2
通常、ウィンドウプロシージャはさまざまなメッセージを処理し、
メッセージ毎に定められた戻り値を返す必要があります。
ダイアログ関数は、この戻り値とは無関係なBOOL値を返すことに
なっていますので、戻り値の代わりにDWL_MSGRESULTでSetWindowLongして
メッセージに対する戻り値を返します。

質問3
ウィンドウの内容を描画する必要があり、メッセージキューにほかに
さしたるメッセージがないとき、WM_PAINT メッセージが捏造されて
返されてきます。これはすべての可視なウィンドウに共通しています。

蛇足1
いくら腕に覚えがあるのか知りませんが、サンプルを読む前にチュートリアルとか
マニュアルというかオーバービューとか入門書を読んだほうがあなたにとっても
まわりの人にとっても良い、と思います。
0438デフォルトの名無しさんNGNG
すみません。質問させてください。
環境はWindows20000なんですけど、
あるファイルを掴んでいるプロセスを調べる方法って
ありますか?
Unixのfuserコマンドみたいなことをやりたいんですけど。

よろしくお願いします。
0439デフォルトの名無しさんNGNG
>>437
ありがとうございました。
でも、正直言ってよく分かりませんでした。

サンプルというのは入門書のサンプルコードのことです。
(ハーバート・シルト「Windows98プログラミング」)
700ページ中430ページほど読みましたが、関数の戻り値について
詳しく言及した個所はなかったようです。

サンプルコードは豊富に載っているのですが、OS側の動作がいま
いち分からない。

とりあえず、以下の書籍も読んでからもう一度質問したいと思います。
他にも適当なテキストがあれば紹介していただけると幸いです。

プログラミングWindows 第5版(上)
プログラミングWindows 第5版(下)
Charls Petzold 著/株式会社ロングテール 長尾 高弘 訳

0440デフォルトの名無しさんNGNG
>439

http://hp.vector.co.jp/authors/VA010523/index_sdk.html
http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/

自分の場合、Charls Petzoldの本は難しすぎて読むのに苦労したのですが、上のページなんかを参考にしました。
0441デフォルトの名無しさんNGNG
>>433
ならグローバル変数使わなきゃいいじゃん。
変数は全部関数の引数で渡すとかして。
0442デフォルトの名無しさんNGNG
ドラッグ&ドラップで大量のファイルを落とされる事が予想される
プログラムの場合、ファイル名だけ手早く自前のバッファに詰めて
さっさとDragFinish出すのが望ましいのでしょうか?
0443デフォルトの名無しさんNGNG
>>442
それ当たり前…
0444デフォルトの名無しさんNGNG
当たり前の割りには大半のソフトが固まるんですが…
0445デフォルトの名無しさんNGNG
>>444
それは、長く処理を占有する場合は明示的にメッセージキューをポンプする
という基本中の基本ができてないので、>>442以前の問題だ(藁
0446デフォルトの名無しさんNGNG
スクロールバーコントロールの位置や、ボタンの位置などを
プログラム側から操作することはできないのですか?
0447デフォルトの名無しさんNGNG
>>433
それほど、グローバル変数の嵐にはならないけど。具体的に何を
グローバル変数として定義してるの?
0448デフォルトの名無しさんNGNG
>>446
GetDlgItem等でコントロールのHWNDを得てMoveWindow等を使う。
0449デフォルトの名無しさんNGNG
>>448
なるほど。やってみます。
0450デフォルトの名無しさんNGNG
>440
ありがとう。
AdvancedWindowsを読んでたところだから助かりました。
0451デフォルトの名無しさん NGNG
Winクライアントで「IPアドレスを自動取得する」設定にすると、DHCPクライアント
となり、ネットワーク上のDHCPサーバーを探してくれますね。条件を簡単にして
「同じサブネット内のDHCPサーバーを探す」というプログラムを作りたいんですけ
ど、適切な説明書やライブラリがありましたらご紹介ください。よろしくお願い
マンモス。
0452デフォルトの名無しさんNGNG
http://RFC.net/rfc1541.html
これ以上の適切な説明書はないだろ
0453デフォルトの名無しさんNGNG
>452
ありがと!やっぱりRFCからだな。
関連するWinAPI調査して楽勝だ!
0454デフォルトの名無しさんNGNG
hBmpfile = (HBITMAP)LoadImage(NULL, "start.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (hBmpfile != NULL) {
  SendMessage(hStartBtn, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmpfile);
}

上のような感じでスタートボタン(ハンドルはhStartBtn)にビットマップを貼り付け
ようとしてますが、うまくいきません。start.bmpはこのテストEXEと同じディレクトリに
あります。
0455マルチメディアNGNG
最近ウィンドウズ上でプログラミングを始めたものなんですが、
エディットコントロールに70KBぐらいの文字列を表示させようとすると
何故か何にも表示されないんですが何か方法は無いでしょうか…?
誰か教えてください〜………
0456デフォルトの名無しさんNGNG
エディットコントロールって64KBまでじゃなかったっけ?
リッチエディットならたぶん制限は無いと思われ。
0457デフォルトの名無しさんNGNG
NT/2000使え>>455-456
0458マルチメディアNGNG
>>456
レスありがとうございます

リッチエディットなんですが、再び質問で申し訳ないんですが
RE1 = CreateWindow("EDIT", "",ES_MULTILINE | ES_READONLY | WS_CHILD | WS_VISIBLE……
の所を
RE1 = CreateWindow("RICHEDIT", "",ES_MULTILINE | ES_READONLY | WS_CHILD | WS_VISIBLE ……
にしてメインウィンドウに貼りつけたらコンパイルは出来たんですが
ウィンドウ(リッチエディット)が表示されなかったです
MSDNでリッチエディットについて調べようと思ったんですがわからないです……
もし解決方法を知っていましたらどうか教えてください〜……
0459マルチメディアNGNG
あ〜、色々やって見たけど全然ダメdeath……
というか、リッチエディットというコントロールが見つからないでふ…
おやすみなさい…
0460デフォルトの名無しさんNGNG
>>459
CreateWindowの前にLoadLibrary("RICHED32.DLL")やInitCommonControls()はしてある?
あ、サイズの小さいテキストがちゃんと表示されているんなら忘れて。
0461454NGNG
自己レス

hdc = GetDC(hStartBtn);
hdctmp = CreateCompatibleDC(hdc);
hBmpfile = LoadImage(NULL, "start.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
SelectObject(hdctmp, hBmpfile);
BitBlt(hdc, 0, 0, bmpx, bmpy, hdctmp, 0, 0, SRCCOPY);
SendMessage(hStartBtn, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hdc);
ShowWindow(hStartBtn, SW_SHOW);

で「一瞬だけ」表示されました。
これとは別にSetWindowPos()を使ってのボタンのリサイズもクリックすると元の
大きさに戻ってしまいます。うーん。
0462デフォルトの名無しさんNGNG
スタートボタンてWindowsデスクトップの?
あれはOwnerDrawだから、サブクラス化するかフックするかしないと
いけないんじゃない?
0463デフォルトの名無しさんNGNG
>>545
T-Clockのソースでも見れ?
0464デフォルトの名無しさんNGNG
>>463
543 って誰だよ
0465463NGNG
>>464
スマソ >>454 でした。
0466マルチメディアNGNG
LoadLibrary("RICHED32.DLL");
を追加したら上手く行きました!ありがとうございます!
0467デフォルトの名無しさんNGNG
Win32APIの日本語版リファレンスの場所を教えてください
0468デフォルトの名無しさんNGNG
>>467
本屋
0469デフォルトの名無しさんNGNG

//=============================================================
// IID_IEnumIDList
[
uuid(000214F2-0000-0000-C000-000000000046),
helpstring("IEnumIDList Interface"),
odl
]
//=============================================================

interface IEnumIDList : IUnknown
{
// *** IEnumIDList methods ***
long Next(
[in] ULONG celt,
[in,out] LPITEMIDLIST *rgelt,
[in,out] ULONG *pceltFetched);
HRESULT Skip([in] ULONG celt); // E_NOTIMPL
HRESULT Reset(); // E_NOTIMPL
HRESULT Clone([in,out] IEnumIDList **ppenum); // E_NOTIMPL
}

typedef IEnumIDList *LPENUMIDLIST;
0470454NGNG
>>463
作業途中から見ました。けど「なぜこの関数を使ってるのか?」がわからない
とアタリつけられれないので>>462さんの情報には感謝してます。
0471デフォルトの名無しさんNGNG
突然ですが SHGetMalloc() と CoGetMalloc() の違いは何ですが?
内部的な実装も気になります。使い分けとかもあるのでしょうか?
0472わからんよNGNG
コンソールアプリケーションを作っているのですが、
そこからCreateWindowしたいのですが、出来るものなのでしょうか?
現在、インスタンスハンドルが取得できなくて困っております。
どなたか、ご教示いただけませんか?
0473デフォルトの名無しさんNGNG
GetModuleHandleで取得>>472
CreateWindowしたらメッセージループ回す事。
ループ用のスレッド作るのが簡単。
メッセージループは必ず作る事。
0474デフォルトの名無しさんNGNG
この辺りをみると良いと思ふ
http://mentai.2ch.net/prog/kako/957/957341074.html
0475デフォルトの名無しさんNGNG
http://www.bio100.co.jp/cgi-bin2/directx/flashviw.cgi?no=441&reno=438
このプログラムの間違っている点を挙げよ
って、簡単すぎるか
0476デフォルトの名無しさんNGNG
>>471
SHほげほげ系のAPIが使うアロケータを得るのが SHGetMalloc()。
OLE(COM)系APIの使うアロケータを得るのが CoGetMalloc()。

使い分けはこれに準ずる。SHGetSpecialFolderで得た idlistを
開放するなら SHGetMalloc() で得た IMalloc、という風に。

この2つは実は実装は一緒らしい。
実際、CoGetMalloc() は CoInit 無しで使えちゃったりする。

SH系の API でもアレコレインターフェイスが出てくるけど、
あれは COM じゃないのか、というもっともな疑問に対しては、
あれは COM なのだけれども、呼び出し側スレッドが CoInit して
なくても使える妙な奴らなのだ、というようなことをどこかで
読んだような読んでないような。
0477472NGNG
ありがとうございます!
でも GetModuleHandle = インスタンスハンドルってなんだかピンときませんね。
メッセージループなのですが、自らのコンソールウィンドウを親ウィンドウとして
作って出来ないものでしょうか・・・、試してみます。
0478デフォルトの名無しさんNGNG
Windowsでsync()ってどうやるの?
自分のプロセスがつかんでるストリームだけじゃなくて、OSのキャッシュを全部
ディスクに吐かせたい。
0479デフォルトの名無しさんNGNG
>>478
ユーザモードの API では無理ではなかろうか。

こういうのを使ってみれ。他にもいろいろあるよ。
→ http://www.sysinternals.com/ntw2k/source/misc.shtml#Sync
0480478NGNG
>>479
それ見たんだが、ソースがなくてなあ。
0481479NGNG
>>480
ふむぅ、ソースが欲しいわけね。
Native API にも、それらしいの見つからないし...。

いっそ、あのバイナリをハクったほうが手っ取り早いかもよ。
0482デフォルトの名無しさんNGNG
ハクった」なんて初めて聞いた。
ハッカー
ハック
ハックる
ハクる(った)
・・・日本語崩壊の危機を感じたことはありませんか?>481
0483デフォルトの名無しさんNGNG
>>482
むしろあんたがわざわざ取り上げたせいでより波及しそうだな(w
すくなくとも俺の頭にはインプットされてしまったよ
0484デフォルトの名無しさんNGNG
CreateFont()で普通の文字よりも幅の狭いフォントを作って
そのフォントで文字を描画したらWin9xとWin2kで
微妙に違う幅の文字が描画されてしまいます。
9x,2kどちらでも同じ幅の文字で描画したいのですが、
どうしたら解決できるでしょうか?
0485484NGNG
しまった。age忘れた。鬱だ…。
0486デフォルトの名無しさんNGNG
>>484
ビットマップフォントを使う。
0487484NGNG
TrueTypeでです。
0488デフォルトの名無しさんNGNG
>>480
DeviceIoControlのFSCTL_DISMOUNT_VOLUMEをみれ。
CreateFile→Lock→Dismount→Unlock→Closeをやる。
Lockできるデバイスなら結果としてフラッシュされる。
Lockできない場合はわからん。
0489479NGNG
>>482
あれ、おかしいか?
仲間内では「全然通じる」がなぁ。

ハッキングする→ハクる
バグがある、もしくは症状が出る→バグる
プロセスが終了しきれずにいつまでも残る→ゾンビる

待ちゆく人にいきなり話しても通じんだろうが、
ここにきてるヤツは、すぐわかる共通のコンテキストにいると思う。
こういうのも日本語の崩壊と言うか?

漏れはあまり議論続けようとは思わんが、
続けたいなら別にスレ(←これも崩壊か?)立てた方がいいと思うぞ。
0490sageNGNG
>>489
方言って、本人意識しないで使ってたりするんだよね。
僕もそれ通じない。

googleで検索しても50件くらいしか出てこないから、
「ここに来てる奴」に限定しても、たぶん殆ど普及して
いないと思う。
しかもヒットした先のページがどれも頭悪そうで苗苗。
0491490NGNG
sage損ねてゴメン
0492デフォルトの名無しさんNGNG
WIN.INIでなくて任意のINIファイルをデータベースとして
開いて書き込み&保存する関数って無いでしょうか?
0493デフォルトの名無しさんNGNG
データーベースの意味を本当に理解しているのか
わかりませんが、WritePrivateProfileStringなどを
使います。
0494492NGNG
>>493
初心者なんで理解してないです(笑
ともあれありがとうございます、助かりました〜
0495デフォルトの名無しさんNGNG
「猫でも・・」みながら勉強してる超初心者です。
Windows SDK編 第1部 の18〜20章でスクロールバーの使い方を知りました。
しかし、ダイアログボックスの中に複数のスクロールバーが存在する場合、
1つのスクロールバーを動かした場合はそのポジション値だけを変更させたいんですが、
どうやってスクロールバー別に命令を書けばいいんでしょうか?
0496478NGNG
>>488
アンマウントするの? 相手がリムーバブルなら手じゃあるが、
固定ディスクだと失敗すると思われ

>>495
ウィンドウハンドルは理解してるか?GetDlgItemで取得する
んだぞ?
0497役立たずNGNG
>>495
俺16章くらいでめんどくさくなって本買っちゃったよ。
狭い画面でブラウザ見ながらソース書くのって鬱にならん?
0498デフォルトの名無しさんNGNG
>>497
全部(あるいはソース部分のみ)エディタにコピペするといいよ。
0499497NGNG
>>498
すまん実はホントの理由は300章もやってられんと思ったから。
0500デフォルトの名無しさんNGNG
exe内にファイルを読み込んで、exeを実行したときにそのファイルをハードディスクにコピーしたいのですが。
ファイルをリソースで読み込んで、そのリソースをロードしてファイルにコピーしています。

FindResource()
SizeofResource()
LoadResource()
LockResource()

CreateFile()
WriteFile()
CloseHandle()

とやっているんですが、ほかに方法はないでしょうか?
0501デフォルトの名無しさんNGNG
>>500
日本語になってねーぞっ。

exe 内にファイルを読み込んでハードディスクにコピーすりゃあ、
ただのコピーコマンドじゃねえか。

「ファイル」って単語、正確に使え。、
なにがやりたいのか、全っ然、わからんぞ。
0502488NGNG
>>496
固定ディスクでも、オープン中のファイルがなければDISMOUNT
するので、キャッシュ中の未処理のデータはフラッシュされます。

後にそのドライブにアクセスがあると自動的にMOUNTされるので、
その分については気にする必要がない。リムーバブルでなくても
事実上リムーバブル扱いになる。

スワップファイルとかシステムの奥深いところで排他的にオープン
されたファイルがあるドライブだとアウト。

オープン中のファイルがあるドライブだと話が厄介になるので、
オールマイティな解決策でないのはご指摘の通り。
0503デフォルトの名無しさんNGNG
CreateDIBSectionで16Bit(5-5-5)のBitmapを生成するラッパーを書いたのですがうまくいきません。
GetLastErrorで見ると87(パラメータ不正)となってしまいます。
#これとは別に書いた24bpp版はちゃんと動いたので、CreateDIBSectionの使い方は間違ってないと思うのですが。

BITMAPINFO構造体へのパラメータのどこかが間違っている筈ですが、自分では判りませんでした。
ココが変だよという部分に突っ込んで下さい。宜しくお願いします。
なお引数の横幅(width)は呼び出し側で4の倍数にしてるので、関数内ではチェックしてません。
/*引数
hBMP:ハンドラの格納先
lpBuff:DIBへのポインタのポインタ
width:幅
height:高さ
*/

BOOL Create16BitDIB(HBITMAP &hBMP,void **lpBuff,LONG width,LONG height)
{
HDC tmpDC;
struct BITMAPINFO16bpp {
BITMAPINFOHEADER bmiHeader;
DWORD bmiColors[3];
};
BITMAPINFO16bpp bmInfo;

ZeroMemory(&bmInfo,sizeof(BITMAPINFO16bpp));
bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth = width;
bmInfo.bmiHeader.biHeight = height;
bmInfo.bmiHeader.biPlanes = 1;
bmInfo.bmiHeader.biBitCount = 16;
bmInfo.bmiHeader.biCompression = BI_BITFIELDS;
bmInfo.bmiHeader.biSizeImage = width * height * 2; //幅 x 高さ x 2Byte(16bit)
bmInfo.bmiColors[0] = 0x001f; //B
bmInfo.bmiColors[1] = 0x03e0; //G
bmInfo.bmiColors[2] = 0x7c00; //R

tmpDC = CreateCompatibleDC(NULL);
hBMP = CreateDIBSection(tmpDC, (BITMAPINFO*)&bmInfo, DIB_RGB_COLORS, lpBuff, NULL, 0);
DeleteDC(tmpDC);

if(hBMP == NULL) return FALSE;
return TRUE;
}

ついでにageます。
0504デフォルトの名無しさんNGNG
>>503
CreateComratibleDCでDCを取っていますが、画面モードは何ビットなんですか?
また、BITMAPINFOHEADERの後ろの配列が気になります。
こういったピクセルフォーマットの渡し方か何かあるのですか?

もし我流であるなら一度、BITMAPINFO変数を別に宣言して、ビットマップを作ってから
ピクセルフォーマットは最後にBITMAPINFO16bpp変数にセットしてはどうでしょう?
0505503NGNG
503です。
RGBのBitMaskはWORDだし、biCompressionは24bppと同じでBI_RGBだったのね…
どっかで禿げしく勘違いしてた。鬱だ氏のう
−−−−−−−−−
       ||
     Λ||Λ
    ( / ⌒ヽ
     | |   |
     ∪ / ノ
      | ||
      ∪∪
0506503NGNG
やっぱ駄目か?
HBITMAPはちゃんと戻るけど挙動がおかしい。
ヘルプでBITMAPINFOを調べるとやっぱBI_BITFIELDSって書いてあるしPixelFormatはDWORDだ…。
もちょっと自分で調べます。

>>504
VC++4.0のヘルプのBITMAPINFOに書いてある方法のつもりなんですが…
0507503NGNG
自己解決してしまいました。
ヘルプ読むとPixelFormatを指定する場合はBI_BITFIELDSみたいな事が書いてあるんだけどなぁ
BI_RGBならPixelFormat指定無し、何も考えずにBitCountを16にしておけば良かったのね…
取り敢えずこれで事足りるのでBI_RGB指定で逝きます。
スレ汚しスマソ。
0508デフォルトの名無しさんNGNG
ドライブレターからドライブのホストアダプタ番号、ID、論理ユニット番号を取得をするには
どうすれば良いのでしょうか?

・ホストアダプタ番号
0:内蔵プライマリIDE/1:内蔵セカンダリIDE/2:SCSI
ID
IDE:0マスター/1:スレーブ
SCSI:0〜7SCSI ID
0509508NGNG
ぐあ…途中送信失礼。

下の説明文は無視してくださってけっこうです。
0510名無しさんNGNG
age
0511名無しさんNGNG
age
0512名無しさんNGNG
age
0513名無しさんNGNG
age
0514名無しさんNGNG
age
0515デフォルトの名無しさんNGNG
コンソールアプリケーションでWM_KEYDOWNメッセージを受け取る方法が
わかりません。
下のような感じで受け取れると思ったんですが、どのキーを押しても無反応で
困っています。DOS窓ではこのメッセージは受け取れないんでしょうか?
わかる方教えてください。

int main()
{
MSG msg;

while(flag=1)
{
GetMessage(&msg,NULL,0,0);
if(msg.message==WM_KEYDOWN)
{
処理;
}
}
0516デフォルトの名無しさんNGNG
>>515
簡単な方法はないと思う。

キーボードフックを登録するか、
コンソールの窓関数(または窓組)をフックする必要があるのでは?
0517デフォルトの名無しさんNGNG
>>516
返答ありがとうございます。
とりあえずやってみます。
0518デフォルトの名無しさんNGNG
>>515
GetAsyncKeyState、GetKeyboardState、GetKeyStateのどれか好きなの(|目的にあったの)を使え。
0519デフォルトの名無しさんNGNG
FAQだと思うのですが検索しきれませんでした。ここでの質問お許し下さい。

取得したディスプレイのデバイスコンテキスト(DC)と、それと互換のある
オフスクリーン用DCを使い、Bitbltしています。教科書通りならそれらの
DCは、使用後すぐDeleteDCすべきですが、これをアプリ終了まで保持して
使い続けることは保証されてるのでしょうか?

とりあえずWindows2000にて、アプリ起動中に画面解像度やbit深度を
変えたりとテストしてみました。今のところ不具合はないのですが、
さりとて確証も持てないわけでして…。
そりゃマズイよ、みたいなのがあったらぜひ教えて下さい。
0520デフォルトの名無しさんNGNG
DC持ちっぱなしは9xだと良くないことがおきたような……
0521519NGNG
>>520
レスどもです。とほほ、やはり問題あるんですね。

どういうタイミングで不具合が起こるのでしょうかねぇ。
ディスプレイとオフスクリーンのDC、せめてどちらか一方(できれば
後者)でも保証されてると助かるのですが…駄目っぽいかな。
0522デフォルトの名無しさんNGNG
>>519

そうなの?
オイラは今までOffScreen用にCreateCompatibleDC(NULL)でDCを確保して終了時に削除するようにしてたけど、別に何も不具合はなかったけどなぁ。
APIリファレンスには「不要になったら削除」とは書いてあるけど、即削除せよとは書いてないし。
直接ウインドウハンドラからGetDCしたやつなら直ぐに開放ってのは判るけど。
詳しい方、詳細キボンヌ。
0523デフォルトの名無しさんNGNG
Createしたのはいいけど
Getしたのはだめなんじゃなかった?
0524519NGNG
>>522
私もディスプレイのステータスが変わらないならば、OffScreen分は
いちいち削除しないでも大丈夫だと(勝手に)思ってました。

こうしている間も検索は続けているのですが、否定的なものばかりですね。
0525519NGNG
>>523
すいませんリロードしてなかったです。

おお!、CreateしたDCは保証されてるのですか。
ようやく安心できました。レスありがとうございました。
0526デフォルトの名無しさんNGNG
>>519
おいおい、あれだけで安心するのは早計すぎるよ。
ちゃんと調べたほうがいい。

とはいえ俺もメモリに確保したDCは持ちっぱなしにして、
それで市販ソフト出したことあるけど、
それについての不具合報告は皆無だった。
0527519NGNG
>>526
忠告ありがとうございます。お察しの通り、今まで裏とってました。
幸い皆様に手がかりをいただけたので、探しやすかったです。

一応報告しておきます。MSDNによるとGetDCやGetDCExを使った場合
「When the application is finished drawing, it must release the device
context」とのことで、理由はDCキャッシュが云々だからだそうです(^-^;

CreateCompatibleDCでのDCの保証については、MSDNのこちらの
ソースが決定打っぽいです
Platform SDK > Graphics and Multimedia Services > GDI > Rectangles > Using Rectangles

正直>>520-526さん方の保証がなければ英文なんかまず
読まなかったと思います。ご協力ありがとうございました。
0528519NGNG
というか市販ソフトだして大丈夫だったなら安心ですよー、ヨカタヨカタ
0529デフォルトの名無しさんNGNG
>>528
全然駄目。そんなことしちゃいかんよ君たち。
DCってキャッシュだろ。キャッシュの数は昔5個だっけ?
複数のプログラムが保持しまくって、キャッシュが競合した時
画面が崩れるよ。

これって、Win16の知識だね。
0530デフォルトの名無しさんNGNG
メモリデバイスコンテキストならいいんじゃなかったっけ
ダメだっけ?
0531519NGNG
>>529
ムムム、また分からなくなってきました

確かに5個以上保持可能なWin32ベースであっても、ヒープ食い尽くすとまずいので
なるべくReleaseせよとヘルプにありますが、これは>>527の通り、GetDC等で取得
したDC、つまりディスプレイDCのみに適用されるのではないのでしょうか。

うーん、正直ディスプレイDCとCreateCompatibleDCで確保したDCの違いが
分からなくなってきました。これらは同種のものなのでしょうか(^-^;

>>529さんお詳しそうですし、MSDNお持ちでしたらできれば>>527の
Using Rectanglesのソースをちょっと検証してみていただけませんでしょうか。
0532デフォルトの名無しさんNGNG
>>529

>DCってキャッシュだろ。

以下はVC4のヘルプから抜粋。
------------------
デバイス コンテキストは、ディスプレイやプリンタなどのデバイスの描画属性に関する情報を収容した Windows のデータ構造です。すべての描画はデバイス コンテキスト オブジェクトを使って呼び出されます。デバイス コンテキスト オブジェクトは、線、図形、テキストを描画する Windows API をカプセル化したものです。Windows では、デバイス コンテキストを使って、デバイスに依存しない描画を行えます。デバイス コンテキストはスクリーン、プリンタ、メタファイルへの描画に使われます。
------------------

何処にキャッシュって単語があるのか見つけられん。
"DC = キャッシュ説"と"CreateCompatibleDCからのDC保持がマズイ"説の出典をキボンヌ。
0533デフォルトの名無しさんNGNG
これ、実験したことある。

CreateCompatibleDC(NULL);
を無限ループさせて、NULL返ってきたらエラーを表示させるだけのやつ。

95でもNTでも2000回とか平気で動いたよ。
0534デフォルトの名無しさんNGNG
>>532
DC保持がマズイのは、プリンタデバイスを考えてみろよ。
また、保持するのはいいけど、
デバイスが切り替えられた時のメッセージ処理、これ、PnPも
含むンだけど、それをしっかり処理して保持してるアプリっあるのか?
0535デフォルトの名無しさんNGNG
>>533
だーんな。それはキャッシュの話じゃないぞ。
よく考えてみ。
0536デフォルトの名無しさんNGNG
>>534

519を読み直せ。

>取得したディスプレイのデバイスコンテキスト(DC)と、それと互換のある
>オフスクリーン用DCを使い、Bitbltしています。

hdc = DetDC(hwnd); //hwndはウィンドウハンドラ
tmpDC = CreateCompatibleDC(hdc);
ReleaseDC(hwnd,hdc);
又は
tmpDC = CreateCompatibleDC(NULL);

↑上の例の様に確保したtmpDCの部分、メモリデバイスコンテキストだろ?
共通デバイスコンテキストとプライベートなデバイスコンテキストの区別付いてるか?
0537デフォルトの名無しさんNGNG
×DetDC(hwnd);
○GetDC(hwnd);
鬱死

それで「デバイスコンテキスト==キャッシュ説」は?
マジで初耳なんだけど。VCのヘルプが間違ってんの?(藁
0538デフォルトの名無しさんNGNG
だからGetDCで得られたDCは一次的なものって意味だろ。
0539名無しんぼNGNG
>>538
519からの流れを読むと538の答えはは意味不明だ。(藁
それじゃ537の答えになってないだろ。キャッシュって言葉の意味知ってるか?
0540デフォルトの名無しさんNGNG
現金!
0541538NGNG
>539
527を読む限り、「must release the device context」の理由が、
「DCはキャッシュだから」なんだろ。

で、これはGetDCで得たDCにしか当てはまらないだろ、というのが527の大意。

なぜならCreateDCで作られたDCはreleaseされるもんではなくてdeleteされるもんだからだ。
0542539NGNG
>>541(538)
論点がズレてるな。

GetDCだろうがCreateDCだろうが"DC"は"DC"。
問題になるのは「GetDCで取ったDCを保持し続けた場合にDCキャッシュの問題がある」って事であって、529の「DCってキャッシュだろ」は日本語になっておらず意味不明。

大体にして519-528までは"ディスプレイ互換の「メモリDC」"の話をしてるんだけどな。
互換DCってGetDCする物なのかい?教えてくれ。>529,538
0543538NGNG
だからCreateDCしたメモリDCは持ちつづけても大丈夫なんだろ。
ちなみに俺は519に全面的に同意。
0544539NGNG
529の「DCってキャッシュだろ」に対する537の指摘に対して、538の「だからGetDCで得られたDCは一次的なものって意味だろ。」って回答も意味不明だって言ったんだけどな…
もうどうでもいいや、ヤメヤメ。
0545デフォルトの名無しさんNGNG
デザイナーズ・コレクション
0546デフォルトの名無しさんNGNG
コロンビア特別区
0547デフォルトの名無しさんNGNG
NTサービスでタスクトレイにアイコン出すのを作ってるんだが、
ログオンをどうやってつかまえるのか、さっぱりわからん。
VNCのソース嫁ってか?
0548デフォルトの名無しさんNGNG
>>547
ログオンシェルの起動を監視するか、
HKLM\Software\Microsoft\Windows\CurrentVersion\Run に
木馬を忍ばせておく…とか。
0549デフォルトの名無しさんNGNG
>>536
共通デバイスコンテキスト?
なにそれ? 共通のデバイスコンテキストなど存在し無い。
つーか、OS2からWINの開発に流れた人間ならわかるはずなんだが…。
0550デフォルトの名無しさんNGNG
>>543
CreateDC( "DISPLAY",NULL, NULL, NULL );
ってやると、GetDC(NULL)と同意さ。ぜんぜんメモリでバイスじゃないんだぜ。

きみたち全然駄目だね。
0551デフォルトの名無しさん(522ね)NGNG
だんだん519の質問の趣旨とずれてきていると思われ。
取り敢えずCreateCompatibleDC(NULL)で確保したデバイスコンテキストは終了時まで掴んでてもOKって事でいいの?

>>550
つまんねぇ突っ込みやめとけ。519の趣旨から外れてるし。
0552デフォルトの名無しさんNGNG
だからDISPLAYのDCじゃなきゃいいんだろ?
0553デフォルトの名無しさんNGNG
>>552
おれもそう思うが。となるとDisplayDCと混同したり
プリンタのDCを持ち出してきた529とか534あたりはキティっぽいな。
0554553だけどNGNG
間違えた、
Display”の”DC
だ。
0555デフォルトの名無しさん(522ね) NGNG
>>552
やっぱそうですよねぇ。安心してCreateCompatibleDC(NULL)使うことにします。
私はこのへんで退散します。
0556519(レス感謝)NGNG
レスもらってるのに登場遅くてすいません、責任持ってまとめさせていただきます

・ディスプレイDCは共通DC、プライベートDC、クラスDCの3種ある
・共通DCは使用後すぐにリリースしなければならない
・メモリDCはアプリ終了時まで保持したままでも構わない(経験的に)
・そして、即リリースすべきか否かは、取得方法ではなく上記の区別によって判断する

ただWin16時代と違い、Win32時代での「即リリースすべし」の理由って、
とり続けるとヒープ食い尽くすからってだけなんですよね?(たぶん)。
ならばきっちり管理しておけば持ち続けても大丈夫っぽいですね。やりませんけど。

というわけで私も>>555さんと同じスタンスでいきたいと思います。

(唯一不安なのが互換メモリDCが「オリジナルと互換のカラーフォーマット」
とかいうのを含んでること。これってユーザーが画面のビット深度変えたら
CreateCompatibleDCやりなおすべきということなのかな?やらなくて大丈夫っぽいですが)
0557デフォルトの名無しさんNGNG
動作中に色深度変えるようなユーザは逝っていいからいいです。
0558デフォルトの名無しさんNGNG
MFC等ではどうやっているの?
一時的に大量のDCが作成される可能性があるなら、問題無いのでは?
0559デフォルトの名無しさんNGNG
NTクライアント、Win95クライアントがありいずれもDHCPクライント
です。これらのクライアント上でDHCPアドレスを取得させるVBアプ
リを作成しております。GetAdaptersInfo()関数を使えばよいところ
まで調べましたが、この関数はWin2000Pro、Win98上でしか使用でき
ない関数らしいです。NT、Win95の場合はどのようなどのようなAPI関
数使うのでしょうか。よろしくお願いします。使用言語はVB6.0です。
0560デフォルトの名無しさんNGNG
>>559
winsock使え。
0561デフォルトの名無しさんNGNG
>560
サンキョー。
んじゃ、Win2KPro,WinNT,Win98,Win95すべてで使う場合
はじめからwinsockで作ったほうが楽でしょうか?
0562デフォルトの名無しさんNGNG
GetOpenFileNamePreviewは、AVIのプレビューしかできません
0563デフォルトの名無しさんNGNG
>>561
ていうか、Win95が入ってる時点でWinsockしか選択肢が無い気が。
0564デフォルトの名無しさんNGNG
>>563
正確に言うと、Winsock2 が使えないので、Winsock1 で作る必要が…。
モノによっては、結構、辛いかも。
0565デフォルトの名無しさんNGNG
>564
サンキョー!!
Win2K,Win98はAPIで、WinNTはwinsock2で、Win95はwinsockで
やってみます。しかし、WinNT、Win95で時間かかりそう・・・。
時間があればいいが。
0566デフォルトの名無しさんNGNG
>>564
Win95でも、 W95ws2setup.exeでアップグレードしたら、
WinSock2.使えるとおもうけど?
0567デフォルトの名無しさんNGNG
>>566
OSの安定と引き替えになりますが、よろしいでしょうか?
0568デフォルトの名無しさんNGNG
>>
> サンキョー!!
ワラタ
0569デフォルトの名無しさんNGNG
CreateFontで作ったHFONTだけど、
これを30個くらい作ってもちっぱなしにしたいんですが、
問題ってありますかね。
HFONT1個作るとリソースを100KB食うんじゃボケ!とか無いですよね。

いろんなフォントの混じった文章を表示したいんだけど、
その都度CreateFontすべきですかね……オーバーヘッドが嫌だなー……
0570バスカードNGNG
別のスレで聞いたらスレ違いだと言われたのでこちらで伺わせていただきます。
他のアプリケーションのウィンドウをSetParent で 自身の子ウィンドウにした場合の
弊害は何ですか?MSDNには「新しい親ウィンドウと子ウィンドウは、
同じアプリケーションに属していなければなりません。」と
書いてありますが、試してみると一応表示されるですが。
どなたがご存知の方がいましたらお願いします。
(何をしたいとか言うわけではなくふと疑問に思いました)
0571デフォルトの名無しさんNGNG
質問なんですが、グラフィックとかを保存するためメガ単位の大きなメモリを確保したい場合、
どうしたらよいのでしょうか。
現在は、
lpBuffer = (char *)GlobalAlloc(GPTR,dwSize);
というようにGlobalAllocを使っているのですが、
先日、どこかでGlobalAllocを使うのは古いやり方的な記事を見かけたので。
lpBuffer = new char[dwSize];
のようにしたほうが良いのでしょうか。
それとも他に有効なAPIがあるのでしょうか。
0572デフォルトの名無しさんNGNG
>>571
new演算子って普通はmalloc()を呼ぶはず。こいつも確か
HeapAlloc()とVirtualAlloc()を呼んでいた記憶がある。

ある程度大きいサイズの場合はVirtualAlloc()がいいん
じゃないかなぁ。ちまちまと確保するには向かないけど。
あ、メモリプールとか自作するんなら話は別ね。
0573石本NGNG
ここで質問しても教えてくれないこともないんですが、
煽りや初心者を馬鹿にしたレスが多いので、
活動の盛んな普通のVC、VBプログラミングのQ&A掲示板の
URL教えてください。よろしくお願いします
0574デフォルトの名無しさんNGNG
>>571
別に構わないと思いますが。
私はLocalAlloc使ってるし。
0575デフォルトの名無しさんNGNG
>>573
まず、周りを見回すだけの分別を身に付けて下さい。
今のあなたでは、他のサイトに行ってもそちらで同じ事を繰り返すでしょうから。
そんな訳で教える事は出来かねます。
0576デフォルトの名無しさんNGNG
>>573
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991576947&ls=50
ここなら教えてくれるかも。
こっちはWin「32」APIだからね(w
0577デフォルトの名無しさんNGNG
NET STARTと同等のことを実現するにはどうしたらいい?
ShellExecute("NET START")はイヤぁん。
0578デフォルトの名無しさんNGNG
>>577
SDKの
Base Services|DLLs, Processes,...|Services
を見なさるが良いでしょう。
OpenSCManager→EnumServicesStatus→OpenService→StartService
0579577NGNG
申し訳ない。Windows 9xでNET STARTを実現したい。
0580デフォルトの名無しさんNGNG
>>577
そもそも、Win9Xには、Net Startで開始させるべき「サービス」が
無いような気がするが。
0581デフォルトの名無しさんNGNG
NetWareが入ってるのが前提なら、NetBEUIを使うのがいいのかな…
0582デフォルトの名無しさんNGNG
>>579
RegisterServiceProcess のことか?
NT のようなサービスじゃないけど、ログオフ時にも頃されないプロセスを作れる。
0583デフォルトの名無しさんNGNG
VC&GDIでビットマップのデバイスコンテキストにペンを使って直線を
描画したいのですが、CreatePen関数でペンを作成したまではよかったのですが
その後、LineTo関数で描画するときに”現在のペン”に
作成したペンを指定する方法がわかりませんでした。
教えてくださいお願いします
0584名無しさんNGNG
SelectObject
つーかどんな初心者本にも載ってるし、GDIのサンプル三鷹?
0585583NGNG
>>584
ねただよ
バーか
0586583NGNG
すみません、ネタでなくてマジでした(笑汗
SelectObjectは知ってたのですが、
GDI初心者だったので使い方をよくわかってませんでした。
しばらくリファ眺めてたらわかりました。
どもすんませんです
0587ちなみにNGNG
583ですが、
585は僕じゃないっす(w
0588デフォルトの名無しさんNGNG
GDIを使って、ゲームみたいにマスクを作成したいのですが、
あるRGB値以外の色をすべて塗りつぶすというか指定色に置き換える
関数とかは無いのでしょうか?
0589デフォルトの名無しさんNGNG
>>588
パレットを使うか、DIBで自分で走査した方が速いと思われ。
0590デフォルトの名無しさんNGNG
アンインストーラが再起動なしで自分自身を削除したり置き換えたりする
にはどうしたらいいでしょうか?
バッチファイルを%temp%に作成するという方法しか思いつかなかったの
ですがもっとカコイイ方法があったらご教授ください。
0591デフォルトの名無しさんNGNG
>>590
ネタはご遠慮ください
0592デフォルトの名無しさんNGNG
>>590
ネタはご遠慮ください
0593デフォルトの名無しさんNGNG
>>590
ネタはご遠慮ください
0594デフォルトの名無しさんNGNG
>>590
ネタはご遠慮ください
0595デフォルトの名無しさんNGNG
age
0596590NGNG
ネタじゃないのに…。誰も知らないのかやっぱ…。
0597デフォルトの名無しさんNGNG
591-594自体がネタだと思われ。
とりあえず、再起動なしで出来るという方法はしらない。

一応、別のexeを起動してそこから削除するという方法はあるっぽい。
試したことはないけど。
0598デフォルトの名無しさんNGNG
>>590
[ヒント]
CD や FD から起動されたインストーラが「Disk2 を入れてください」で
インストールを続けるヤツがあるだろ?

よく考えりゃ、おかしいと思わないか?

どうしてそんなことができると思う?
0599デフォルトの名無しさんNGNG
どっかにコピーするか、
メモリ上で管理!
メモリで管理したほうがカコイイ。
0600デフォルトの名無しさんNGNG
>>598
そっちこそネタだ
0601590NGNG
コピーすれば置き換えやリムーバブルメディアから起動したときの
インストール続行はできそうですけど、削除はどうしても最後にexeが
1つ残ってしまうような…。
0602デフォルトの名無しさんNGNG
知らないのか……って書くことによって、
無駄にプライド高い人を煽って答えさせようとする人多いね。
煽るほうも煽られるほうもアホウ。

オレは知ってるけど教えてあげないもんね(藁 ←こういうやつも多いか(藁
0603デフォルトの名無しさんNGNG
いいじゃん、再起動時に消してもらうようにしとけば。
tempの中なんて誰も気にせんよ。

とか書いてて変な方法を思いついた。
タスクスケジューラにcommand.comを登録して、delコマンドを記述しておいて消してもらおう(藁
アンインストーラが終了した5分後とかにこっそりcommand.comが起動する。
アツイ!(藁

NT系だとめんどくさそうだけどね。
0604598NGNG
>>599
そうだよ、漏れはヒント = ネタを提供してあげてんのよ?
もしかしてキミ、そんなことできっこないなんて思ってない?
あまりそんなことばっかり言ってると、「厨房」って言われるよ。

>>602
えっ、そうなの?
じゃ、煽られた漏れはアホウなんだ。(ムッ
[こたえ] って書こうと思ったけど、やめとくか。
0605デフォルトの名無しさんNGNG
>>603
ATコマンド書いちゃえば良いんじゃ?<NT
0606名無しさん@お腹いっぱい。NGNG
API-Guideダウンロードしてね
http://www.allapi.net
0607590NGNG
煽るつもりじゃなかったのに…。
Googleとかで検索してみても再起動を必要としない方法は見つからな
かったから本当にできないのかと思ってダメモトで質問したんですが…。
知ってるのに教えてもらえないなんてすごい悲しい…。
0608デフォルトの名無しさんNGNG
>>590
CreateFileで
FILE_FLAG_DELETE_ON_CLOSE
とかつかえねーか?
0609デフォルトの名無しさんNGNG
エクスプローラとか、フォルダの中のファイルに変更があると
表示が更新するのですが、どうやって実現してるのか教えてください。
ReadDirectoryChangesWだとNT系しか使えないので
0610デフォルトの名無しさんNGNG
>>590
http://www.numeric.co.jp/Win32.htm
検索したらこんなのが出てきたぞ。
スマートな方法じゃないけどな
0611デフォルトの名無しさんNGNG
>>609
FindFirstChangeNotification()
FindNextChangeNotification()
WaitForSingleObject()
たぶん別Threadにしちゃったほうが実装がシンプルかと。
0612590NGNG
>>608
Win9xやWin2kだと消えてくれないので却下になりました。
で、>>598だけどFDならシステムが自動的にやってくれる、CDなら
インストーラを一時的にコピーするか何かだと思いますがどっちにしろ
自分を削除はできない。よってできないと思うのですが何か間違ってま
すか?
0613609NGNG
>>611
サンクス。
ばっちりそれです。
0614デフォルトの名無しさんNGNG
API-Guideダウンロードしてね
http://www.allapi.net
0615598NGNG
>>612
まちがってるよ。
コピー先はどこだと思う? (→ /swaprun 参照)

MSDN 逝ってヨシ。

ただし、これだけだとダメ。もうひと工夫、いるよ。
0616590NGNG
/swaprun:cd リンカオプションですか? これってNT系じゃないと使えなかっ
たような。
 もしかして
・動的に確保したメモリにコードをコピーした後、自分自身をFreeLibrary
 する
という方法ですか?
0617598NGNG
>>616
そ。

/swaprun は :cd にしても :net にしても、ローカルの HD にあるときは
何もしてくれない。だからこれだけではダメ。

もひとつ、リロケーションについて考えておく必要がある。
ここでも工夫が必要。

さらにたぶん、あと、もうひとつ。
.EXE のモジュール(ハンドル)は、FreeLibrary できないんじゃないかと思う。
だからアンインストーラを○×△□から起動するようにする。

あ〜ぁ、結局、(ほとんど)全部バラしちゃったよ。ハッカーの手の内...。 >>602
0618デフォルトの名無しさんNGNG
なるほど。rundllを利用するのか。
0619598NGNG
>>618
だぁ〜かぁ〜らぁ〜、伏せといたのにぃ…。
クラッカーどもに悪用されたら、どうすんのよぉ。
0620デフォルトの名無しさんNGNG
>>619
クラッカーはこんなとこみてないでしょ
プライド他界から
0621デフォルトの名無しさんNGNG
というか、そういうものは隠すのではなく
公開して早くMSに直して貰うべきだと思う。

MSが直さないとしても。
0622デフォルトの名無しさんNGNG
>>621
話の流れ見えてるか?
何をどう直すと言うんだ?不具合があるようには見えないが。
0623デフォルトの名無しさんNGNG
>>622
クラッカーに利用される
↓
セキュリティホール
↓
M○の不具合
という流れなんじゃねーの?
0624デフォルトの名無しさんNGNG
バカが一人紛れ込んでいるな(藁
0625デフォルトの名無しさんNGNG
>>623
デムパ君ですか?
0626デフォルトの名無しさんNGNG
>>623
どっからセキュリティホールなんて出てきたんだよ。
お前の脳内のことまではわからんけどよ。
0627デフォルトの名無しさんNGNG
>>623は、format.exeを使ってHDをフォーマットするクラッキングソフトがあったら
(ていうかあるけど)「format.exeにはセキュリティホールがある!」と言い出すんだろか。
0628デフォルトの名無しさんNGNG
>>625-627
623でなくて621に突っ込むべきに思えるのは俺だけか。
0629デフォルトの名無しさんNGNG
彼女ができるAPIおしえれ
0630>>629NGNG
BOOL GetGirlFriendEx(int height, int weight, int salary)

[パラメータ]
int height - 身長
int weight - 体重
int salary - 給料

[戻り値]
関数が正常に終了した場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。
0631デフォルトの名無しさんNGNG
>>628
だって、621==623だろ。
0632デフォルトの名無しさんNGNG
>>629
void MakeHoney(int resnumber)
{
  if (resnumber == 629)
    cout << "横着すんな";
  return;
}

ところで初心者なんですが、LoadLibraryで読み込んだ
モジュールの関数の使い方がわからないっす。
GetProcAddressとかでアドレスを取得するとこまでは
わかるんですが、その先が・・・・。
どなたか教えてください。かしこ。
0633デフォルトの名無しさんNGNG
>>630
BOOL GetSteadyEx(LPPERSONAL lpstatus)

[パラメータ]
ステイタスを含むPERSONAL構造体へのポインタ

[戻り値]
関数がせいこうした場合はTRUEを返します。

[NOTE]
GetGirlFriendEx関数は過去の互換性を保つために用意されています。新しいアプリケーションではGetSteady関数を使用してください。
0634デフォルトの名無しさんNGNG
>>632
(*pfunc)();
0635デフォルトの名無しさんNGNG
struct _tagPersonal {
    BOOL bLives; // 生死
    int height; // 身長
    int weight; // 体重
    int salary; // 年収
    int job; // 職業
    LPPERSONAL lpFarther; // 父親のステイタス
    LPPERSONAL lpMother; // 母親のステイタス
};
typedef struct _tagPersonal PERSONAL;
0636デフォルトの名無しさんNGNG
>>633
BOOL GetWife(LPPERSONAL lpstatus)

[パラメータ]
ステイタスを含むPERSONAL構造体へのポインタ

[戻り値]
関数がせいこうした場合はTRUEを返します。

[NOTE]
この関数呼出し後、GetSteadyEx()を呼び出すと、思いもよらぬことが起こるかもしれません。
0637デフォルトの名無しさんNGNG
633さんの関数を使ったところ「不正な割り込みエラー」がでてしまいました。
どうすればいいのでしょうか。
0638デフォルトの名無しさんNGNG
>>637
そこで「無視」を選択して処理を強行することもできますが、
度重なると予期しない結果となることがあります。
「中止」を選択するとプロセスは中断されます。
根性が続く限り「再試行」を選択するべきです。
0639デフォルトの名無しさんNGNG
ちゃんとした手続きをふまずに
沢山のGirlオブジェクトを挿入ソートしたら
Prisonオブジェクトに入ったまましばらく戻って来れない可能性があります。
0640デフォルトの名無しさんNGNG
構造体は
struct tagDATA {
int i;
} DATA;

みたいにtagつけるのが奨励されているの?
0641デフォルトの名無しさんNGNG
構造体は
struct tagDATA {
int i;
} DATA;

みたいにtagつけるのが奨励されているの?
0642デフォルトの名無しさんNGNG
その部分は構造体タグっていうらしいからなんじゃないの?
省略もできるから、typedefするんだったらそもそも要らないよね。
0643デフォルトの名無しさんNGNG
自己参照するときに必要では?
0644デフォルトの名無しさんNGNG
Windows 2000 Pro クライアント+VB6の環境です。
あるドメインアカウントに、ローカルクライアント(Win2KPro)の
「サービスとしてログオンの権利」を与えたいのですが、そのための
APIが見つかりません(検索がヘタなのか・・・)。
ご存知の方、よろしくお願いします。キーワードだけでも・・・・。
0645デフォルトの名無しさんNGNG
>>644
PriviledgeとかSIDとかACEとか(ちょーテキトー)
0646623NGNG
おお、「クラッカー」「MS」「不具合」
の三題噺だったのに・・・
0647デフォルトの名無しさんNGNG
質問です。
ICInstall() APIを利用してcodecをインストールしたいのですが、
どうあがいてもICERR_OKを返してくれません。
GetLastError()でエラーを見ると、モジュールがありません、
みたいなエラーを返してきます。

それでも、レジストリには登録されているみたいなのですが、
どうしたらいいんでしょうか。

また、codecをインストールする正確な情報ってどの変にありますか?
最悪、infでもInstallShieldでもかまわないのですが
0648647NGNG
codecっていうか、ICMですね。
よろしくお願いします
0649デフォルトの名無しさんNGNG
GDIでビットマップをX軸またはY軸で反転する関数って
ないでしょうか??
自分で走査するしかないんでしょうか。
0650デフォルトの名無しさんNGNG
BitBlt
0651649NGNG
BitBltは使ってるんですが、対称反転方法が見当たらなかったので
諦めてました(汗
なんかウラワザみたいなやり方があるんでしょうか?
すみませんが詳しく教えてください。お願いします
0652デフォルトの名無しさんNGNG
終点を始点より左に持っていくんだっけ?
0653649NGNG
>>652さんの書いてる方法でやろうとしたんですが
転送元と転送先の幅を別々にできなかったので、
代わりにStretchBltを使えばできました。
情報ありがとうございます!
0654647NGNG
ICMに付いて質問です。
ICOpen() APIを使用してcodecのハンドルを得たいのですが、
デフォルトとして未圧縮のハンドルを取得するにはどうしたら良いでしょうか。
mmioFOURCC('D', 'I', 'B', ' ');だと失敗してしまいます。
もちろん、ドライバが無いのだから失敗するのは当然だと思いますが。
ICCompressorChoose()を利用すると、取得できるので、
何とかできないかと思って質問します。

#他BBSにマルチポストしてます
0655654NGNG
age忘れてました。
0656654NGNG
失礼しました。勘違いだったようです。
COMPVARS構造体を良く覗いた所、
未圧縮を選択したときのみ、hicメンバーは0になってました。
しかし、普通AVIを処理するアプリケーションは未圧縮を
自前で処理しているのでしょうか?
0657デフォルトの名無しさんNGNG
ボタンとかの上にある文字列は、ウィジェットを無効にすると灰色になりますが、
タブコントロールやツリービュー等は無効にしてもそのままですよね。
そいつも灰色にする簡単な方法ってあるのでしょうか?文字色直接変えるほかに。
0658デフォルトの名無しさんNGNG
ウィジェットってなんですか????
0659デフォルトの名無しさんNGNG
>>657
Winではウィジェットって言わんのね
ツリービューは無効化すると全部灰色になると思うが。。
タブはたぶん無理。
0660657NGNG
>>658
適当に言葉選んじゃってすいません。えっとコモンコントロールの事です
>>659
またもやすいません。ツリービューではなくリストビューでした。自分最悪
リストビューのcolumの部分の文字も恐らく灰色になりませんよね。

やはりタブは無理ですか。リストビューはまだ良いのですが、
タブの文字が灰色にならないのはどうにも…。無効化したとき
まるでフリーズしたみたいです。みなさん一々DELETEITEMしてるのかな。

レスどうもでした。
0661デフォルトの名無しさんNGNG
確かにタブがグレーになるのは見たこと無いですね……
中身を全部グレーにして誤魔化すしかないのかも。
0662657NGNG
>>661
やはりその一手ですよね。タブだけ立体的に文字がへこまなくて悲しい…
わかりやすいGUIスレでグチってきたい気分
0663デフォルトの名無しさんNGNG
windowsでLinuxでいうrootウィンドウに描画する方法ってあるのかな?
どうやってもアイコンの上にのっちゃうし。。。
あと、explzhのシェルって("即時解凍"とか)関連づけでやっているんじゃないんだね。
ファイルオプション見たけどopenの設定しかされていなかったよ。
なにやっているんだろう??
0664デフォルトの名無しさんNGNG
>>663
getDC(0)はダメなの?
0665663NGNG
>>664
ちょっち重たいよね。勝手に書き直しやがるしw (メッセージキャプってやりますか。。)
その場所にwindow作るって事もしてみたい。。(アクティブデスクトップなものを自分で作るようなw)
0666デフォルトの名無しさんNGNG
VCのように ( でとじると引数などが浮き出るようなエディット
をつくりたいのですが普通はどのように処理しているのでしょうか?
0667デフォルトの名無しさんNGNG
>>663
> ("即時解凍"とか)
「Shell Extension」がキーワードなり。
0668デフォルトの名無しさんNGNG
>>666
全部自前で描画してるのではないでしょうか?
0669666NGNG
>>668
いえ、MFCでeditVeiwを利用しています。
とりあえずWM_CHARで( が入力されたかを調べ、入力されたら
その行を取得して解析しています。
0670デフォルトの名無しさんNGNG
ユーザーモードドライバを書いてるのですが、
DRV_OPENメッセージで他のドライバにアクセスをするAPI(ICOpen等)
を呼ぶと意図したとおりに登録されないのですが、
これは許されていない動作でしょうか?
0671デフォルトの名無しさんNGNG
子プロセスとして立ち上げたアプリが 開こうとしてる COM3 を横取り
したいのです。

 名前無しパイプでもフックでも出来ないようなんですが、
 やっぱりデバイスドライバを作るしかないのでしょうか?

具体的には、エッジ(PHS)のアプリが使い難いのでこいつが
使ってるコマンドを調べたいのです。

使ってない COM5とかをフックして COM1にそのまま流すような
ドライバって作るの大変でしょうか?
0672デフォルトの名無しさんNGNG
>>671
Win9x系なら簡単。
VxD作るだけ。
その程度ならDDKのサンプルにあるCOMドライバをちょこっといじるだけでできるでしょ。
0673671NGNG
レスありがとうございます。 MSDNを調べてみます。

ところで、デバッカで調べた所 WriteFileへジャンプしてるアドレスは判りました
これを他のアプリにフックしてデータ収集して表示する事は可能でしょうか?

別空間だから無理かな? 
0674デフォルトの名無しさんNGNG
>>671
VxDなりユーザモードドライバなり、作るのが大変か…って聞かれても、
あんたのスキルがわからなきゃ、答えようがないだろが。

自分で作ろうというやる気があるんなら、
M$からダウソできるサンプルでなんとかなるはず。

しかしCOMnを覗き見するツールなんて、探せばどっかにありそうなモンだが?

なくても、RS232Cのプロトコルアナライザを買ってくれば、
間違いなく覗ける。

方法はいくらでもあるぞ。
0675デフォルトの名無しさんNGNG
>>666 >>668 >>669 の流れが不自然な気がするの俺だけ?
>>671
_INMMと同じ方法使えばいいんじゃないのかな?
(_INMMって何ですか、とか訊くなよ)
0676671NGNG
うーむ。デバッカを使うと BCC5.01のデバッカ上では何故かデバイスを
認識しなくなるし、VCのデバッカでは一度ブレークさせると固まってしま
うしで、 デバッカで解析するのは無理みたいです。

>>674
ラインモニタは H''との接続がUSB なんで意味ないんです。
COMを覗けるツールも、あったのはWin9xの シリアルドライバを
書き換えてしまうもので、つまりUSBの仮想ドライバには使えないんです

やっぱりVxDみたいですね。調べてみます。
0677デフォルトの名無しさんNGNG
>>671
USBだとすると話は別。WDMじゃないとできないかも。
0678671NGNG
WDM について用語だけなぞってみました。
 VxDだと USBの仮想シリアルCOM3が呼べないかもしれないので
フィルタ型も作れるという WDMを調べた方がいいかもしれませんね
ありがとうございます
0679デフォルトの名無しさんNGNG
>>678
それそれ。
PHS程度の速度なら全データロギングしてもほとんど影響ないと思う。
リモートデバッガ使うという手もあるけど、フィルタ型WDM作る方が楽なような気が。
0680デフォルトの名無しさんNGNG
DLL内関数でDLLのリソース文字列をLoadStringするときのハンドルは
何を渡したらいいのでしょうか?
0681デフォルトの名無しさんNGNG
DllMain に渡されてきたハンドル。
どっかに覚えておくこと。
0682デフォルトの名無しさんNGNG
>>681
いや、それだと親インスタンスのハンドルが入っているはず。
0683デフォルトの名無しさんNGNG
親インスタンスって意味不明だけどDllMainに渡されるのはそのDLL自身
のインスタンスハンドルだよ。
どうしても後から取得する必要があるときはVirtualQueryを使うという
方法もないではない。
0684680NGNG
>>681-683
LoadStringできました。ありがとうございました。
0685デフォルトの名無しさんNGNG
BackOffice Resource Kitを買う金ありません。実は、checkras.exeが欲しいの。
ログインしたときクライアントがRASかLANかをチェックしてくれるやつ。
NT Workstation、Win2000Proの場合、どのレジストリを見るとRASクライアント
だってわかるんでしょうか。
いろいろサーチしましたが、win9xのケースかわからんかったよ。
誰か教えてください。
0686デフォルトの名無しさんNGNG
他のアプリケーションが持ってる、リストビューコントロールから、
アイテム文字列を引き出そう、とおもいました。環境はWin2000です
 無事Windowも探せて、アイテムの数とかは取得できました。
が、肝心の内容の取得に失敗します。たぶん、LVM_GETITEMの
LPARAM(が指し示す先)がプロセス間でマーシャリングされない
事が原因だと思うのですが、どうやって解決すればいいのでしょうか。
0687デフォルトの名無しさんNGNG
>>686
潜り込めばいいだけ。
0688デフォルトの名無しさんNGNG
>>686
フックしちゃえば何でもやり放題。
0689デフォルトの名無しさんNGNG
>>686
共有メモリを使う
0690686NGNG
無事、WH_CALLWNDPROCとFileMappingを使うことによって、
アイテム文字列を引き出す事に成功しました。
>>687-689のみなさま、ありがとうございました。
0691デフォルトの名無しさんNGNG
質問です!!
LoadImage関数と同じような感覚で
JPGファイルをファイルから読み込めるクラスないでしょうか?

できれば、内部的にHBITMAPとかに変換してくれるのが
ベストです。
どうか教えてください
0692デフォルトの名無しさんNGNG
>>691
あっちで回答もらっただろ。
「無いです」って。日本語読めないの?
0693デフォルトの名無しさんNGNG
Susieプラグインでも使っとけ。
0694名無しサンプリング@48kHzNGNG
Win32SDK でのコントロールの使いかたについてのいい解説書ない?
MSDNの英語と猫でもわかる見ながらヒーコラやってますがひどく効率が
悪いきがする。
0695デフォルトの名無しさんNGNG
25歳以下ならひーこらやるべし。
0696デフォルトの名無しさんNGNG
1回覚えれば済むことに、効率求める必要なし、
しっかり勉強しましょう。
0697デフォルトの名無しさんNGNG
あっちってどっち?
>>692
0698デフォルトの名無しさんNGNG
LoadImageはJPGファイルを読み込めたような…。
0699デフォルトの名無しさんNGNG
>>694
APIバイブル2はどう?
0700デフォルトの名無しさんNGNG
700!
0701デフォルトの名無しさんNGNG
>>694

API全般なら
チャールズ・ペトゾロの「プログラミングWindows」

コントロールの使い方なら、
ハーバード・シルトの「Windowsプログラミング」

金があるなら両方買え。
0702デフォルトの名無しさんNGNG
>>697
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989902845&nofirst=true&st=244&to=249
0703デフォルトの名無しさんNGNG
エディットコントロール(1行)のキャレット位置を取得・変更したいんですが、どうすればいいんでしょうか?
EM_GETSEL・EM_SETSELでもできそうなんですが、リファレンスには何も書いてないので。
もしかしたら、ほかの関数でもあるんでしょうか。
0704デフォルトの名無しさんNGNG
>>703
当たってるよ、MSDLにもちゃんと使い方載ってる。一応書いておくと、

HWND hwnd_editctrl; //=GetDlgItem等で取得したものを入れておく
DWORD s; //キャレットの始点位置が格納される
DWORD e; //キャレットの終端…が…
SendMessage(hwnd_editctrl, EM_GETSEL, (WPARAM)&s, (LPARAM)&e);

//キャレットを12番目の文字の位置に移動し、さらに3文字選択させる
SendMessage(hwnd_editctrl, EM_SETSEL, 12, 15);

あるいはエディットコントロールに直接WM_KEYDOWNを送り込むとか > 変更
0705デフォルトの名無しさんNGNG
質問です!!
LoadImage関数と同じような感覚で
PNGファイルをファイルから読み込めるクラスないでしょうか?

できれば、内部的にHBITMAPとかに変換してくれるのが
ベストです。
どうか教えてください
0706デフォルトの名無しさんNGNG
>>705
BITMAPINFOHEADERのbiCompressionに設定する
値でBI_JPEGやBI_PNGのことはは調べてみたか?
0707デフォルトの名無しさんNGNG
>>706
マルチポストコピペキチガイにマジレスしても無駄です。
その上「あっちってどっち?」などとしらばくれるアホは孤独死するまで
放置してください。
0708デフォルトの名無しさんNGNG
252 名前:デフォルトの名無しさん 投稿日:2001/06/26(火) 09:31
jpeg でゆくなら Intel performance library のを使うか、
IJG のソースを使うかすると良いのでは。PNG なら libpng
でも使ってみては?

google ででも検索して入手してね。
もう二度と同じ質問はしないでね。
0709デフォルトの名無しさんNGNG
ありがとうございました、また何かあれば
質問させていただきます!!
>>708
0710デフォルトの名無しさんNGNG
>>709
いや、お前ウザイからもう質問すんな。
0711デフォルトの名無しさんNGNG
つーかあっちの回答をコピペしただけじゃん。
質問してること自体がネタだろ? 氏ね。
教えたがりクンも同罪だぞもはや。
0712デフォルトの名無しさんNGNG
というわけで、質疑応答がなりたたなくなったので
このスレはsage
1番さん削除依頼だしてきてね
0713デフォルトの名無しさんNGNG
>>712
なんで>>1が削除依頼ださなあかんねん。あほ。
0714デフォルトの名無しさんNGNG
役立ちage
0715デフォルトの名無しさんNGNG
32ビットポインタって0〜0xFFFFFFFFですか
それとも0から0x7FFFFFFFですか?
0716デフォルトの名無しさんNGNG
質問箱と、ここって、どう使い分ければいいんじゃボケ!
0717デフォルトの名無しさんNGNG
>>715
ふつーに答えるとすれば、32ビットポインタなんだから
0〜0xffffffffまでだよ。

その情報が知りたいって事は、ポインタの空き数bitを
フラグか何かの他の用途で使いたいとか?
確かにWin32のポインタは数bitは使われて無い様な気がする。
そういう情報はInsideWindowsとかに載ってそうだけど。
0718デフォルトの名無しさんNGNG
>>716
たしかこっちを使い切ってから質問箱を再利用する予定じゃなかったか?
せっかちさんがいたみたいだけど。
>>717
そんなOS9以前のMacじゃあるまいし。一部のビットを他の目的に使う
なんてことはできないよ。
0719デフォルトの名無しさんNGNG
>>718
たしか、Rubyがポインタ(オブジェクト)か整数値かどうかを、最下位ビットで判断してる。
ポインタの最下位ビットは、アラインメントの関係で0になるだろうって。
0720デフォルトの名無しさんNGNG
>>719
Rubyの発明じゃなくて、一般的に使われてる手法。
下位2bitで判定する。
0721デフォルトの名無しさんNGNG
charのポインタは下位2ビットが0である保証なんかないが。
0722デフォルトの名無しさんNGNG
ビットマップを保存するとき、BITMAPFILEHEADERのbiSizeやbfOffBitsに
ビットフィールドのサイズも加えるべきなのでしょうか?
ある本のプログラムではサイズを加えていなかったのですがどうなんでしょうか。
0723デフォルトの名無しさんNGNG
MSDNにはなんと書いてありましたか?
0724デフォルトの名無しさんNGNG
>>715
Win32では基本的には0-0x7fffffffまでしか使われることない。のこりは
カーネルモードのアドレスだからね、でもNT4 Enterprise版や
Win2K Advanced Serverなんかだと/3GBスイッチで、0-0xbfffffff
までユーザーモードのアドレススペースが増えるから、0x80000000
以上のポインタが返ってこないことを想定したプログラムはこけるね。
基本的にそんなことを想定するようなアホなプログラムは組むべきでは
ない。64bitOSはすぐそこに来てるし、他のプラットホームで動く保証も
ないからね。
0725デフォルトの名無しさんNGNG
>>721
理解できないんならいいよ。
0726デフォルトの名無しさんNGNG
>>724
実際問題、0番地付近は、NULLポインタで例外を捕まえるために
未使用領域にするんじゃないかな。
あとは、Win9Xで、下位1Mが予約されてるとか。
0727デフォルトの名無しさんNGNG
他のウインドウに表示されているデータを
画像として取得するにはどうしたらいいんでしょうか?
0728デフォルトの名無しさんNGNG
>>727
フォーカスを与えた後、key_eventでAlt+PrintScreenを送り込んではどうか。
0729デフォルトの名無しさんNGNG
>>728
お返事ありがとうございます。
それは思いついたんですけど
何かもっと良い方法は無いかと思いまして。
0730デフォルトの名無しさんNGNG
>>729
ウィンドウハンドルとデバイスコンテキストを取得してBitBlt。
0731デフォルトの名無しさんNGNG
>>725
「Rubyでは」値が4の倍数になるようなポインタしか扱ってないというだけ
の話だろ。それが何か?
0732デフォルトの名無しさんNGNG
>>724
そんな特殊な例持ち出さなくてもWin9xの共有メモリは余裕で2G超えるね。
>>726
先頭64KはどのようなWin32環境でも予約領域であることが保証されてい
る(理由は、上位ワードが0かどうかで引数の解釈を変えるAPIがあるため)。
0733デフォルトの名無しさんNGNG
>>732
将来の実装でかわりそうなもんだが。
undocumentedかなにかに書いてあったの?
0734デフォルトの名無しさんNGNG
>>733
CharNextやDialogBoxなどを使っているプログラムのバイナリ互換性が
なくなるからそんな実装の変更はありえない。
先頭64Kが予約というのはAdvanced Windowsで見たけど理由までは書
いてなかった。
0735デフォルトの名無しさんNGNG
age
0736デフォルトの名無しさんNGNG
MP3プレイヤーとかのレベルメーター、スペクトラムアナライザみたいに
ほかのプログラムとも共存しながらも、なおかつ、高速で安定した
グラフィック描画を行いたいのですが、何かよい方法はありますか?
0737デフォルトの名無しさんNGNG
>>736
共存とは? ソフト名出してもいいからもっと詳しく書いたほうがいいと思われ。
0738デフォルトの名無しさんNGNG
>>736
言葉間違えたかもしれません、
画面や処理をのっとらないで、ほかのアプリをあまり邪魔せずに
動いているということをいいたかったのです

それができているわりに、winampにしても、ビジュアルエフェクト
やメータのFPSが結構安定しているんで、すごいなとおもって。
0739デフォルトの名無しさんNGNG
すいません、一定時間後に指定したメッセージを投げる方法が
あるかどうか教えてください。

具体的にいうと、現在複数のコネクションを持つ
ネットワークアプリを作っているんですが、
あるソケットがエラーを起こした場合に、モニタウインドウの
リストビューに一定時間エラーになったことを表示してから
リストビューからそのソケットの情報を削除したいと考えています。

その「一定時間」をどうするかで悩んでいます。
いまはとりあえずタイマーで定期的にチェックするように
していますが、できればもっとエレガントな方法で
やりたいと考えてます。よろしくお願いします。
0740デフォルトの名無しさんNGNG
>>738
ループに適度にsleep(waitだっけ?まあいいけど)とかを使って、
ガス抜きをするのがいいかと思われ。
0741デフォルトの名無しさんNGNG
>>739
時間監視用のスレッドオブジェクトを作ればいいんじゃないの?
一定時間過ぎたら、メッセージ投げてそのまま消えちゃうようなやつ。
0742デフォルトの名無しさんNGNG
不定形ウィンドウの表示をする際に、
アンチエイリアスをかけた(要するにα合成する)
ウィンドウを表示させたいのですが、よい方法ありますか?

イメージの合成方法はわかります
問題は、ドラッグする際に、自分自身のウィンドウ(パネル)より
下のデスクトップイメージをどうやって取得すればよいか?
というところです・・・

どうかご教授ください
0743デフォルトの名無しさんNGNG
>>742
マルチポストするなボケ。帰れアホ。
0744無能な姦理人@Shiri-QNGNG
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□





続きはコチラです
http://www.geocities.com/entry_k/main/main01.html
0745デフォルトの名無しさんNGNG
マルチスレッドのプログラミングで質問なんですが、
メインスレッドのスタック変数のアドレスとかを
他のワーカスレッドに渡しても問題ないでしょうか?
0746デフォルトの名無しさんNGNG
>>745

渡すこと自体:馬鹿だけど別にかまわない
渡された方がそこを読む:ほとんど無意味
渡された方がそこを更新する:ふっとんで不思議は無い
0747デフォルトの名無しさんNGNG
>>745
746が言ってるけど普通やんないです。
その渡したい変数の生存期間を考慮しながらプログラムするのは
困難だと思われます。

もちろん、確実に存在することが保証されているなら話は別ですが、
その保証を得る方法として、"ヒープから確保する"というマットウな
ものがあるので、何か特殊な制限が無い限りこちらをおすすめします。
0748デフォルトの名無しさんNGNG
不定形ウィンドウの表示をする際に、
アンチエイリアスをかけた(要するにα合成する)
ウィンドウを表示させたいのですが、よい方法ありますか?

イメージの合成方法はわかります
問題は、ドラッグする際に、自分自身のウィンドウ(パネル)より
下のデスクトップイメージをどうやって取得すればよいか?
というところです・・・

どうかご教授ください
0749デフォルトの名無しさんNGNG
>>748
GetDC(NULL)
でデスクトップのデバイスコンテキストを得られるので、そこからBltすればよい。
あとはWM_NCPAINT(だっけ?使ったこと無いから覚えてない)かなんかで
描画すりゃいいんじゃない?
0750デフォルトの名無しさんNGNG
>749
まぁその結果、下のウィンドウが再描画されたら上のウィンドウも
再描画しないとならないのでウィンドウメッセージのフックとか
しないとならないし、そうすると常駐しているとやたらWindowsの
パフォーマンスの下がるイヤなプログラムができる。
0751デフォルトの名無しさんNGNG
上にウィンドウがあると下のウィンドウはそもそも更新されないとか
いろいろあってWin2kでない限り根本的に不可能だと思われ
0752745NGNG
>>746 >>747
わかりました。素直にヒープ使って書きます。
0753デフォルトの名無しさんNGNG
ウィンドウにマルチラインのエデッィトコントロールを貼り付けました。
IME経由で文字をエディットコントロールに入力しようとしたのですが、1度に入力しようとする文字の量が大量だと全部の文字が入力されないで文字の最後の方が消えてしまいます。
IMEの種類はATOKとMS−IMEの両方で起きました。
原因の分かる方は教えてください。
お願いします。
0754デフォルトの名無しさんNGNG
>>753
消えてるわけじゃなくて、折り返さないから見えないだけ。
対象となるエディットコントロールにWM_IME__CONTROLを送る。
コマンドはIMC_SETCOMPOSITIONWINDOWだ。
0755754NGNG
>>754
うわ、うっかり送信しちゃった。
指定するパラメータは、対象となるエディットコントロールと同じ大きさの
ウィンドウサイズを与えればおけー。
0756752NGNG
>754
レスありがとうございます。
>消えてるわけじゃなくて、折り返さないから見えないだけ。
折り返しはちゃっとできてるので、たぶん754さんの言われてるケースとは違うと思います。
確定前の文字はちゃんと表示されています。
IMEは日本語100文字ぐらいまで1度に入力できるのですが、100文字入力してEnterを押して確定すると、前半60文字ぐらい残って後ろの30文字が消えてしまいます。
どなたか解決法を御存じの方はお願いします。
0757デフォルトの名無しさんNGNG
WIN32でGREPをジソーウするにはどうしたらいいのでしょうか?
0758デフォルトの名無しさんNGNG
grep.dllでも探して恋>757
0759デフォルトの名無しさんNGNG
ほれ>757
http://www.vector.co.jp/soft/win95/util/se028216.html
0760757NGNG
どーもです。
0761デフォルトの名無しさんNGNG
BITMAPINFOHEADER.biXPelsPerMeterってどう使うんでしょ?
0ばっかりで何に使うのはわかんないんですけど。
0762デフォルトの名無しさんNGNG
>>761
印刷するときとかでは? と言っても大抵は紙に合わせてソフト側でサイズ補正できる
ケースが多いのであまり使わないと思われ。
0763デフォルトの名無しさんNGNG
strcmp と lstrcmp の違いをおしえて
0764デフォルトの名無しさんNGNG
>>763
MSDNみろ!
0765デフォルトの名無しさんNGNG
lstrcmpってVCオリジナルなの?普通のAPI関数なの?
0766デフォルトの名無しさんNGNG
Windowsオリジナル

#define strcmp lstrcmp
0767デフォルトの名無しさんNGNG
>>766
ほんと?
0768デフォルトの名無しさんNGNG
嘘。
0769763NGNG
>>764
みてきました。

DBCSとMBCSの関係がよくわかりませんでした。
0770デフォルトの名無しさんNGNG
いったいどこを見てるんだか
0771デフォルトの名無しさんNGNG
strcmpはlibc提供
lstrcmpはkernel32提供
っていうか全然別物ですよ。
0772デフォルトの名無しさんNGNG
自アプリにファイルがドラッグ&ドロップされたときに
マウス右左ボタンのどちらで操作したか判別できませんか?
0773デフォルトの名無しさんNGNG
midやwavを簡単に再生することはできるのでしょうか?
0774デフォルトの名無しさんNGNG
>773 ShellExecute(藁
0775デフォルトの名無しさんNGNG
>>773
wavだったらsndPlaySoundでいいとおもう。
midは複雑だから調べろ。
0776デフォルトの名無しさんNGNG
再生だけならMCI >773
0777773NGNG
ありがとうございます。調べてみます
0778デフォルトの名無しさんNGNG
比較的大きめの画面で、FPS30くらいのアニメーションを行いたいのですが
(DirectXなしで)
ただ、画面更新でInvaridateRectを用いると、レスポンスが悪いばかりか
画面がちらつきます。

垂直帰線期間を待つ命令があれば、ちらつきは解消できそうですが、
そもそも、上記命令のレスポンス自体が問題となっています。

何かよい解決法があれば教えてください。

追伸:
MFCで開発しているので、イベントループではなく
マルチメディアタイマーで処理をしています
0779デフォルトの名無しさんNGNG
>>778
描画方法に問題があるのでは?
0780デフォルトの名無しさんNGNG
InvalidateRectは第三引数をFALSEにすると
再描画が必要な部分のみが処理されるのでチラツキが減ります。
0781デフォルトの名無しさんNGNG
>>778
ウインドウクラスの hbrBackground(ウインドウの背景色)をNULLに
してますか?
0782デフォルトの名無しさんNGNG
パス名で指定したディレクトリが存在するかどうかを確かめる方法(関数)ありますか?
0783デフォルトの名無しさんNGNG
_access()
GetFileAttributes()
PathIsDirectory()
0784dxNGNG
>>778
DirectX使うだけで解決するとおもうのですが、
なにか理由が?
0785デフォルトの名無しさんNGNG
InterlockedIncrement
等のInterloked......系の関数について質問があります。

MSDNには
>lpAddendパラメータが指す変数は、32ビット境界に整列されていなければなりません。
>整列されていない場合、かつ、マルチプロセッサのx86システム上で実行した場合、
>この関数は失敗します。

とありますが、通常の変数宣言では32ビット境界に配置されるので
気にしなくても良いのではと思うのですが、
構造体内部の変数に対して実行する場合は
#pragma等の影響で位置がずれると思います。

このような場合通常CriticalSectionで保護するのが定石なんでしょうか?
良い方法があれば教えてください。

CriticalSectionの例

struct Hoge HogeStruct;
CRITICAL_SECTION CSObj;

EnterCriticalSection(&CSObj);
HogeStruct.nCount++;
LeaveCriticalSection(&CSObj);
0786デフォルトの名無しさんNGNG
Win16のrc(リソースコンパイラ)のように、exeやdllにリソースを
カキコできるWin32のコマンドラインツールはありますか?
Win9Xで動かしたいのでUpdateResourceは使えません。
0787デフォルトの名無しさんNGNG
>>785
で、何が訊きたいのかわからん。
もうちょっと日本語勉強してから書いてくれ。
0788デフォルトの名無しさんNGNG
>>787
俺はわかった

定石かはしらないけどそうするしかないだろうな。
別にmutex使ってもいいけどこの場合はCriticalSectionだろ
0789デフォルトの名無しさんNGNG
>>785
7byte確保してそのうち32bit alignが取れた4byte使うとか・・・
0790デフォルトの名無しさんNGNG
>>789
構造体のすべてのメンバに対して整合要求を満たすのが不可能な場合
もあると思うが
0791デフォルトの名無しさんNGNG
>>790
だからlongで良いところを7byte確保するのだと思われ
先頭から3byteまでの内にアドレスが4の倍数になるところが必ずあるはず
0792デフォルトの名無しさんNGNG
age
0793デフォルトの名無しさんNGNG
>>791
いや、だから構造体のメンバを自分で決められるならばいいけど
他人の作ったライブラリの構造体とかすでにハードコーディングされた
やつじゃ駄目でしょ
0794デフォルトの名無しさんNGNG
あるEXEからDOSコマンドを実行して、 実行結果をそのEXEで表示したいのですが、どうすればいいのでしょうか?
リダイレクトを使って一時ファイルを作って、それを開くという手もあるのですが、もっといい方法はないでしょうか。
0795デフォルトの名無しさんNGNG
http://homepage2.nifty.com/katuya/index.html
0796デフォルトの名無しさんNGNG
>>794
パイプ使え
0797デフォルトの名無しさんNGNG
そうだね パイプを作って、SetStdHandleでいいんじゃない?
0798デフォルトの名無しさんNGNG
そうだね。バイプ使うと俺の彼女喜ぶんだよ。
0799デフォルトの名無しさんNGNG
>>798 ヘ・タ・ク・ソ・く・ん  でも好きよ
0800デフォルトの名無しさんNGNG
>>793
というか自分で決められるならそんな変なことしなくても最初から整合され
るように構造体を設計すればいい
つーか何も考えずに構造体作ればふつうはそうなるはずだが
0801デフォルトの名無しさんNGNG
これからWin32APIの勉強しようと思うんだけど、
オススメ書籍ありますか?
一応、最終的にはDirectDrawをしようと考えてます。
0802名無しNGNG
そんならはじめからDirectXの本買えば?
0803デフォルトの名無しさんNGNG
>>801
つーか、いまはもうDirectDrawはないぞ。
0804デフォルトの名無しさんNGNG
>>803
下位互換のために残ってるから無いこたぁないような気がするが?
0805794NGNG
>>796,797
どうもありがとうございます。
パイプでいろいろ検索してみます。
0806803NGNG
>>804
あれって速度が遅くなるのでは?
0807デフォルトの名無しさんNGNG
msdn library で調べても HPALETTE とか HBITMAP について
詳しく載っていないようなきがするのですが、
どう調べたらよいのでしょうか?
0808デフォルトの名無しさんNGNG
>>807
プログラミングWindowかMFCによるwindowsプログラミングを
読むべし。
0809デフォルトの名無しさんNGNG
>>807
5年ほど前の本だが、
「Win32アニメーションプログラミング(NigelThompson著/吉川邦夫:訳/アスキー出版局:版)」
って本が出てる。日本語だったらそれが一番詳しいかと。
0810デフォルトの名無しさんNGNG
自作ソフトのインストーラー(&アンインストーラー)をInstallShieldで
作成したいのですが、わかりやすい書籍やURLを教えてください

ちなみにプログラムはEXEとデータファイルのごくシンプルな構成です。
利用規約の表示と確認、スタートメニュー&デスクトップに配置などが
できれば大丈夫なレベルです。

よろしくおねがいします
0811807NGNG
>>808
>>809
どうもありがとうございます。
後日本屋で探してみようと思います。
0812デフォルトの名無しさんNGNG
ODBCスレじゃなくてこっちの方がいいのかな?
ODBCAPIやODBCに詳しい方いらっしゃいますか?
0813デフォルトの名無しさんNGNG
います
0814デフォルトの名無しさんNGNG
>>810
InstallShield起動→メニューから[ヘルプ]→[ユーザーズガイド]
0815loopNGNG
WinAPI関数でクライアント領域のサイズを返す関数ってありますか?
0816 NGNG
>>815

GetClientRect(HWND、 RECT*)じゃダメなの?
0817loopNGNG
>>816
試してみたのですが、x=lpRect->left;とやっても値がとれないのですが。
何か原因があるのでしょうか。
0818デフォルトの名無しさんNGNG
>>817
right と bottom にサイズが入ってるはず。left と top は 0。
0819 816NGNG
leftとtopは常に0になりますよ。
だって左上が基準ですから。

クライアント領域の幅が欲しければright、
高さが欲しければbottomを使うべし。
0820loopNGNG
>>818
そうでした。すみません。値ちゃんととれてました。
0821デフォルトの名無しさんNGNG
>>820
RECTHEIGHT(rc)
RECTWIDTH(rc)
0822デフォルトの名無しさんNGNG
ATL/WTL AppWizardでダイアログアプリを作ると、雛型では

void CloseDialog(int nVal)
{
  DestroyWindow();
  ::PostQuitMessage(nVal);
}
で終了しているのですが、
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/hh/winui/windows_33xz.asp
をみると、

case WM_CLOSE:
DestroyWindow(hwndMain);

case WM_DESTROY:
PostQuitMessage(0);

と2段階になっています。
WM_DESTROYの前にPostQuitMessageを発行してもかまわないのでしょうか?
0823デフォルトの名無しさんNGNG
>822 PostQuitMessageを発行してもかまわないです
0824822NGNG
>>823
ありがとう。
理由はわからないけど、信じますよ。
0825デフォルトの名無しさんNGNG
>>822
別にかまわないだろうけど終了前確認入れたり
リソースの開放したりと後で追加するときに便利だから

WM_CLOSE : DestroyWindow()
↓
WM_DESTROY: PostQuitMessage()
の方が自然な流れだと思われ。

ATL/WTLつー事はC++なわけで
virtual onClose()
として後でオーバーライドできるようにしておくとか
0826デフォルトの名無しさんNGNG
age
0827デフォルトの名無しさんNGNG
基本的なインストーラーを
作成したいのですが、
VCに付属のInstallShieldがよくわからなくて
Visual Studio Installerを導入することにしました

ファイル・フォルダ類は無事インストールできるのですが
デスクトップ・スタートメニューに配置する
ショートカットファイルがうまく機能しません。

インストール後に、ショートカットファイルのリンク先をチェック
すると、どうもディレクトリ階層が消えていて
実行ファイルのみになってしまいます

なにかミスしているのでしょうか
ご教授ください
0828デフォルトの名無しさんNGNG
>>827
俺は出来てるんだが?
0829827NGNG
かなりせっぱつまっています
なにか原因は考えられないでしょうか?
おねがいします
0830kouriyuNGNG
スクロールバーの使い方ですが、画面にあるデータを表示し、画面外の
データを見るためにスクロールバーを使ってみたいのですが、一度スクロール
させると、前の状態に戻そうとスクロールした時、残像が残ってうまく
表示がされていません。どのように対処するのでしょうか。
0831デフォルトの名無しさんNGNG
ビデオドライバーの更新
0832◆age/DQqkNGNG
現在、メニューのみのアプリ(ランチャ)を作ろうと思ってるんですが、
自前でウィンドウを作らずに、ポップアップメニューを出すには
どうするのがBestでしょうか。
とりあえず GetForegroundWindow() でウィンドウを借りる、
という方法を思いついたんですが、メッセージ処理はフックと
プロシージャの交換のどちらが良いと思います?
0833デフォルトの名無しさんNGNG
>830
ScrollWindow()使ってる?
あと、スクロールの移動中は描画を止めて、スクロール位置が確定したら描画を開始してみれば。
スクロールバーは複雑だから、詳しくはCharles Petzoloの「プログラミングWindows」の読むのがいいぞ。
0834sageNGNG
sage
0835デフォルトの名無しさんNGNG
なぜさげる?
age
0836830NGNG
>833
ScrollWindow()は一応使用していますが。
やはり描画のタイミングが問題ですね。どの様に対処するか困ってるんですが。
ところでCharles Petzoloの「プログラミングWindows」って
出版社どこか分かります?
0837833NGNG
悪い、スペルミスだ。正しくは"Petzold"です。

古い版
http://www.microsoft.com/japan/info/press/17171/17171.htm
新しい版
http://www.ascii.co.jp/pb/msp/36001/36001.htm
0838デフォルトの名無しさんNGNG
ポップアップメニューの背景色を変更したいのですが、
オーナードローでアイテムの色は変えられても
メニューウインドウ自体(境界線とか)の色がどーもこーもなりません。

DRAWITEMSTRUCT から 拾った DC でウインドウハンドルを所得して
サブクラス化したり、色々いじってみてるのですが、うまくいかない…
こんなことってできるんでしょうか?
0839デフォルトの名無しさんNGNG
Windows2000/Meで、マイネットワーク内にWebフォルダのアイコンを
作成したいんです。VBのプログラムから。
どのようにしたらよいか教えていただけないすか?
0840839NGNG
WinAPI相談室に書いてしまったけれど、スレ違い
だったかなぁ・・?
0841839NGNG
いろいろ検索してるんですが、
IShellLink::SetIDList() でむがむが・・であってますかね??
やっぱスレ違いだ。むなしい。
0842デフォルトの名無しさんNGNG
数十個のJPEGなどの画像データファイル(主にボタンなどのパーツ類)を
起動時に読み込むアプリを作成しているのですが、いかんせん起動時間が
かかってしまい悩んでいます。
改善するのに何かよいアイディアないでしょうか?

P.S.大きめの画像に、複数のパーツを貼り付けた画像ファイルを用意する
という手もありますが、デザイナーの負担が増えるのでそれは避けたいです
0843デフォルトの名無しさんNGNG
>>842
オンデマンドローディング。
0844842NGNG
起動後のインターフェイスを構築するパーツ類なので
省略できないですねー
0845デフォルトの名無しさんNGNG
大きめの画像にまとめるツールを用意すればいい
当然、全自動で行えるべき
0846842NGNG
各画像パーツのサイズが不定の場合はどうすればよいでしょうか?
サイズもばらばらなので、タイル状に敷き詰めて
大き目の画像にまとめる方法が問題になりそうです
0847デフォルトの名無しさんNGNG
>>846
何がボトルネックになっているのか分からないけど、もしファイル
入出力が問題なら、自前で簡単なアーカイバを作れば良いと思う。
ファイル名とファイルサイズだけヘッダに書いておいて、あとは画
像ファイルをつなげて一つのファイルに。

アプリケーションは起動時にファイルを一つだけ読んで、メモリ中
でバラす、と。

展開の部分がボトルネックだと、ファイルを一つにまとめるか、高
速に展開できるフォーマットに変更する、ですかね。
0848デフォルトの名無しさんNGNG
age
てみる
0849デフォルトの名無しさんNGNG
FDDやらCD-ROMドライブやらのアイコン(エクスプローラで表示される奴)を
取得したいんだけど、どうすればいい?
0850デフォルトの名無しさんNGNG
DLLからアイコンを.icoとして抽出するフリーソフトウェアを
使えば?具体的なソフト名は忘れたが3分で見つかると思われ。
0851デフォルトの名無しさんNGNG
>>850
すごい!
なんて的確で正確な回答だ!
あんたすごすぎ!
0852デフォルトの名無しさんNGNG
>>850
VisualStudioというソフトが該当します。フリーではありませんが。
0853849NGNG
>>850-852
実行時のシステムから取得したい。将来アイコンが変わっても大丈夫
なように。
0854デフォルトの名無しさんNGNG
レジストリになんかありそうだけど、
SHGetFileInfo("c:\" /*パス*/, 0, fi /*SHFILEINFO*/, SizeOf(SHFILEINFO), SHGFI_ICON);
でfi.hIconにアイコンハンドルが入る。(この場合はハードディスクのアイコン)
0855849NGNG
>>854
C:ドライブがHDDじゃない変態的なシステムが十分ありうると思われ。
あとCD-ROMのアイコンも取得できないと思われ。
0856デフォルトの名無しさんNGNG
sizeofか
0857デフォルトの名無しさんNGNG
>>855
HDDじゃなければHDDじゃないアイコンが入るんだよ
どんな種類のドライブのアイコンかまで分からないと困るの?
0858デフォルトの名無しさんNGNG
くだらないツッコミだけど

>>856
> sizeofか
これは「>>854 のコードで SizeOf じゃなくて sizeof が正しいと分かった」
という意味? それならそれでいいんだけど、C 知らないで書いてるんですか?
他にも "c:\" じゃなくて "c:\\" だし、fi はアドレスを渡すってこと
分かってる?

それと関係ないけど fi.hIcon に取得されたハンドルは、使い終わったら
ちゃんと DestroyIcon して下さいね。そうしないとリークします。
0859856NGNG
>>858
突っ込みサンキュー。>>855はGetDriveTypeとかGetLogicalDrivesとか
使って何とかしてください。後たぶんレジストリのどっかにあるのではと思います。
(窓の手とか出てくるもんね)
0860849NGNG
レジストリ潜るの? やだなあ。Shlwapi.hあたりに気の利いたAPIが
ありそうな気がするんだけど。
0861858NGNG
>>860
だから >>854 の SHGetFileInfo が十分気の利いた API だと思うけど。
SHGFI_DISPLAYNAME 指定すればエクスプローラが表示するドライブ名の文字列
"3.5インチ FD (A:)" とかも取れるし。以前使ったときは CD-ROM のアイコンも
問題なく取得できた。
0862849NGNG
>>861
SHGetFileInfoは使ってるよ。この場合はそれじゃ間に合わない
わけだ。
いろいろ調べたが、やはりレジストリに潜るしかないらしい。
0863デフォルトの名無しさんNGNG
>>862
レジストリ…って「潜る」ところにあるとは知らなかった。 (藁
0864858NGNG
>>862
どういう所が間に合わないのかよく分からない。
居れが以前使ったのは「ファイルを開く」ダイアログにあるような
ドライブ選択コンボボックスを自作した時なんだけど、SHGetFileInfo と
GetLogicalDrives 使ってできたけど。
0865デフォルトの名無しさんNGNG
DIBを描画したいのですが、SetDIBitsToDeviceを使ってみたのですが、
どうやらこのSetDIBitsToDeviceがかなり時間を食うらしいのですが、
もっと早くDIBを転送する手続きはありますか?
0866849NGNG
>>864
「HDD」「CD-ROM」「FDD」等々のアイコンをそれぞれ取得したいわけだ。
それもシステムがエクスプローラで使ってる奴を。
A:がFDDでD:がCD-ROMで、というシステムばかりじゃない。
ノートパソコンならCD-ROMがないシステムもありうる。それでも
CD-ROMのアイコンが必要、というわけだ。

>>863
レジストリから情報を取得するのはリスクが多い。俺的には
「潜る」って感覚になる。

>>865
BitBltで高速化できない状況?
0867858NGNG
>>866
> A:がFDDでD:がCD-ROMで、というシステムばかりじゃない。

だからそれは >>859 が言ってるように GetLogicalDevices で有効な
ドライブを列挙して、GetDriveType で CD-ROM かどうか判定すれば
よいわけでしょ。

> ノートパソコンならCD-ROMがないシステムもありうる。それでも
> CD-ROMのアイコンが必要、というわけだ。

確かに実行マシンで存在しないドライブはムリだけど、存在しない
ドライブのアイコン取得してもしょうがない気もするけど。

まぁついでだから ちょっと見てみたんだけど、レジストリじゃなくて
shell32.dll の内部リソースに入ってる感じ。ExtractIconEx とかで
取れると思われ。Win98 でしか調べてないので他の Win でも同じか
どうかはわからないけど。
0868デフォルトの名無しさんNGNG
CD-ROMのアイコンをSHGetFileInfo使ってとると、挿入されている
CD-ROMのAutorun.infで設定されているアイコンがあればそれを返すから、
常にCD-ROMドライブのアイコンが返るとは限らない。
0869デフォルトの名無しさんNGNG
整数を文字列に変換するのにatoi以外関数はありませんか?
atoiは引数が多くてあまり使いたくないのですが・・・。
0870デフォルトの名無しさんNGNG
>>869
atoi じゃなくて itoa の話だよな?
…あれ以上どうやって引数を減らせというのだ。
0871デフォルトの名無しさんNGNG
>>869
sprintf()でも使えば?
0872865NGNG
>>866
BitBltもSetDIBitsToDeviceも転送する時間にあまり変わりがないようでした。
Bresenhamのアルゴリズムを用いて直線を描くのと、
LineToで直線を描く時間を比べてみたのですが、
明らかにSetDIBitsToDeviceを用いて直線を描画する方が遅いみたいなのです。
SetDIBitsToDeviceだけを、コードから除いてメモリに書き出すだけだと、
かなりの速さになるみたいで、SetDIBitsToDeviceがネックになっている
見たいなのですが・・・。
0873デフォルトの名無しさんNGNG
>>872
わけわからん。
0874デフォルトの名無しさんNGNG
   わけ    わか     らん♪
   ∧∧    ∧∧     ∧∧
   (=゚ω゚)    (=゚ω゚)   ヽ (=゚ω゚)ノ
  ヽ(x ヽ)    (ノ x)ノ    (∩ x)
   < <       ) )       U
0875デフォルトの名無しさんNGNG
>>872
単に線を引くためだけにBlt系を使う意味ってのがよくわからんのですが。
LineToではなにか問題が?
087686901/08/26 18:52ID:M1FAtnxQ
レスありがとうです。>>870-871
char* bufを用意しないといけないのが面倒だと思ったので・・・。
単に char* itoa(int) だったら記述がラクでよかったな、と思っただけです。
087785801/08/26 19:05ID:/iAV1yEw
>>868
> CD-ROMのAutorun.infで設定されているアイコンがあればそれを返すから、

なるほど、確かにそれで不都合なこともあるでしょうね。

関係ないけど >>867 の typo 訂正
× GetLogicalDevices
○ GetLogicalDrives
087885901/08/27 21:21ID:a4HckhLE
SHBrowseForFolder でデフォルトで選択されているフォルダを UNC で指定
したいのですが、方法がよく解りません。

コールバック関数で BFFM_SETSELECTION を WPARAM に FALSE を指定して
LPARAM に選択するフォルダの pidl (LPITEMIDLIST) を渡しても、
「ネットワークコンピュータ」が選択されてしまい、意図するフォルダが選択
されません。

UNC の pidl の取得には Shell32.dll.#162 を使っています。

どなたか SHBrowseForFolder でデフォルトフォルダを UNC で指定する方法
をご教授ください。

開発環境は WindowsNT Workstation 4.0 (SP6) + VC++ (SP4) です。
0879878 01/08/27 21:24ID:a4HckhLE
すいません。 >>878 の名前が 859 となっていますが、このスレの 859 さん
とは無関係です。
# 名前を空にしないで書き込んでしまいました。 (汁
0880loop01/08/28 10:53ID:MWpDaN5M
menuで項目の横にチェックをつけられますが、これをつけたり
はずしたりするのって、どうすればいいのでしょうか?
0881デフォルトの名無しさん01/08/28 17:23ID:iOvUzZpU
Win32上で(Win95/98/Me/2000Pro)で、特定ファイルの開始クラスタ番号を得る方法
ってないでしょうか。
0882デフォルトの名無しさん01/08/28 19:51ID:HEWceQCw
>>881
ファイルシステムによる。
FAT12/16/32でWin9x系でしか使えなくても良ければDOSの25H/26H互換コール。
0883デフォルトの名無しさん01/08/28 20:29ID:iOvUzZpU
>>882
Win2000でも使える必要があるんです。クラスタの読み書きは必要なく、先頭クラスタ
だけわかれば良いのですが。目的は、不正コピーチェックがらみです。
0884デフォルトの名無しさん01/08/28 20:53ID:HEWceQCw
>>883
じゃあ無理。
ActiveDirectoryの仕組みを勉強すれ。
0885デフォルトの名無しさん01/08/28 21:29ID:iOvUzZpU
DVD-ROM限定でもダメでしょうか。
0886デフォルトの名無しさん01/08/28 22:03ID:HEWceQCw
>>885
なおさら無理。
無理矢理やるにしても各OS固有のコードになる。
0887デフォルトの名無しさん01/08/29 12:09ID:ltWbYtH2
>>885
DVD-ROM なら、ASPI 経由でデバイス操作できないのですか?
CD-ROM なんかの不正コピーチェックで溝にわざと傷入れてるのを検出して
ってのがあるみたいだけど。
0888デフォルトの名無しさん01/08/29 15:00ID:IAoA4cFg
>>887
それにしてもOS固有になるのは避けられない。
0889デフォルトの名無しさん01/08/29 15:09ID:iIYcB4L.
OS固有でいいから方法書いてあげなよ。
0890デフォルトの名無しさん01/08/29 15:17ID:IAoA4cFg
ASPI使ってクラスタの直読みはできるけど、あるファイルがどの
クラスタにマップされてるかってのはファイルシステム依存。
どのOSで使うのか書いてないんで書きようがない。
すべてのOSに対応した方法を書いてやるほど暇でもお人好しでもない。
0891 01/08/29 15:24ID:zbxmmrnU
WINNTで動いていたプログラムで悩んでいます。
今回WIN2000でvisual studio6.0のVBとVCを使ってバージョンアップ試験をしているのですが
VBで作成したプログラムからVC++で作成したプログラムをコールする際にVCで作成したほうの
画面がVBの画面の上に出ず後ろに隠れてしまいます。
プログラムは何も変更していません。
VCのほうに画面を最上位に出す処理(SetForeGround)を入れてみましたが変化ありません。
これはWIN2000のバグでしょうか?
同じ現象になった方いたら教えてください
0892デフォルトの名無しさん01/08/29 15:46ID:ltWbYtH2
>>891
AllowSetForegroundWindow とか、調べた?
0893デフォルトの名無しさん01/08/29 15:52ID:iHuBdZXU
エディットコントロールやリッチエディットコントロールの最後に
テキストを挿入するにはどうしたら良いですか?
0894デフォルトの名無しさん01/08/29 16:19ID:iIYcB4L.
>>889
クラスタ直読みの方法だけでいいじゃん。それ以上のことなんて誰も
聞いてない。つーかASPI使う必要もないような気がするが。もちろん
OS依存だけど。
>>892
AllowSetForegroundWindowはそういう状況では使えない。
0895デフォルトの名無しさん01/08/29 16:54ID:zbxmmrnU
>>892
AllowSetForegroundWindowでもだめでした。
でも画面がタスクバー上で点滅してるんでFlashWindowEXが実行されてるらしいです。
マイクロソフトのHPでWindows2000ではSetForeGroundWindowにいろんな条件があっ
てそれを満たさないとSetForeGroundWindowが失敗してFlashWindowEXが実行されて通
知してくれるみたいです
何らかの要因で失敗してるのは確実みたいです。
0896デフォルトの名無しさん01/08/29 17:39ID:IAoA4cFg
>894
>881をよく読め。
クラスタ直読みの方法こそ誰も聞いてない。
0897デフォルトの名無しさん01/08/29 20:31ID:W6Ku5whg
>>895
http://www.nt.sakura.ne.jp/~miwaki/
ここのTipsとか。
あとWin98でしか確認してないけど、
Win.iniの[Compatible95](だったと思う)にアプリのパスを入れておくと、
SetForegroundWindowがいつでも有効になったような。
0898デフォルトの名無しさん01/08/29 21:19ID:R.qc31/Y
ASPI使うってのは、いろいろウザイことあるぞ。RAIDなんか組んでる
とアダプタとの相性でアクセスしただけでBlueDeathしたりする(;´Д`)
よっぽどのことが無い限りやめとく方が吉。
あと、894のよーに、自分もセクタ読むだけならASPIを使う必要すら無いと思う。


不正コピー防止なら2GぐらいのでかいファイルでもDVD-ROMにしこんで、
それをチェックすれば? 安直だけど。
そういえば、DVDの規格ではレーザーで1枚1枚個別にシリアルをマーキング
できるらしいのだけど、Windowsでそれは読めないのかな?
0899age01/09/01 05:54ID:bwMxnaac
age
0900デフォルトの名無しさん01/09/01 12:35ID:jSo1Ykw6
リバースエンジニアリングしようと考えたいます。
クローズドソースのアプリのDLLの呼出しをトレースしたいのですが、
どのようにしたらよろしいですか?
お金はかけずに行いたいです。
0901デフォルトの名無しさん01/09/01 12:43ID:LX5I2Bgs
ドライブに挿入されたメディアがDVD-R for Generalであることを判別するにはどうすれば
よいのでしょう。Generalには、DVD-R for Authoringにはない、読み出し専用領域があり、
そこを判別すれば良いと言われていますが、具体的にどうすればよいのか。
ずばり、コピー対策で、DVD-R for Generalでは動作しないようにしたいのですが。
0902デフォルトの名無しさん01/09/01 20:23ID:jNF.zKm2
>>880
SetMenuItemInfo()
で、MENUITEMINFO::miifStateにMFS_CHECKEDまたはMFS_UNCHECKEDで切り替える。
0903momotaro01/09/01 22:24ID:9IMlxPac
Windowsプログラム(C言語)で、スクリーンセーバーを変更する方法を教えて頂けないでしょうか。
例えば、壁紙は、下記のような方法で変更出来ますが、スクリーンセーバーの場合はどうなのでしょうか。

【壁紙の変更】
SystemParametersInfo(
 SPI_SETDESKWALLPAPER,
 0,
 buf, //変更するファイル名
 SPIF_UPDATEINIFILE
);
0904デフォルトの名無しさん01/09/01 22:43ID:gLx4Rd02
>>900
APIMON …とだけ書いとくから、あとは自分で調べろ。
できなきゃ、タダで協力してくれるハッカーでも探せ。
念のために言っとくが、ハッカーとクラッカーを間違えるなよ。
大変なことになっても知らんからな。
0905デフォルトの名無しさん01/09/01 22:54ID:baJQonXA
>>900
Advanced WindowsかDebugging on Windows(不確か)をジュンク堂で
立ち読み。
0906デフォルトの名無しさん01/09/04 13:39ID:rccG4HwI
どなたかドライブレターからそのドライブのデバイス名を取得する方法を知りません?
もしくは、AdapterID/TargetID/LunIDを取得でもかまいません。そっちのがかえっていいかも。

CDの再生なんですが、エクスプローラからの*.cdaのD&Dに対応するために、
ドライブレターと物理デバイスの対応を知りたいのです。
複数台ある場合、ドライブレターのつけ方によっては、
対応が食い違って別のCDが再生されてしまう場合があるのですよ。
0907デフォルトの名無しさん01/09/04 14:09ID:s4.H7M7U
NT系ならQueryDosDevice。
9x系は知らん。つーか9x系にデバイス名なんてあるの?
0908デフォルトの名無しさん01/09/04 14:20ID:rccG4HwI
QueryDosDevice()
使ってみたけど、単純にドライブレター順の番号が
振られて返ってくるだけだったので聞いてるのですが?
0909デフォルトの名無しさん01/09/04 14:35ID:s4.H7M7U
はぁ?
0910デフォルトの名無しさん01/09/04 14:43ID:rccG4HwI
P: -> \Device\CdRom0
Q: -> \Device\CdRom1
R: -> \Device\CdRom2
S: -> \Device\CdRom3

のように返ってくる。
ちなみにバス上の配置は
Adapter/Target/Lunがそれぞれ
P:4/3/0
Q:1/0/1
R:5/1/0
S:5/0/0
なので接続順とあわない。
なのでドライブレターとIDの対応を取得する必要があるのですが?
0911デフォルトの名無しさん01/09/04 15:22ID:s4.H7M7U
>なのでドライブレターとIDの対応を取得する必要があるのですが?
なんで? 返ってきたデバイス名そのまま使うんじゃだめなの?
0912デフォルトの名無しさん01/09/04 15:41ID:s4.H7M7U
つーかそもそもなんでAdapter/Target/Lunが必要なの?
どうやってCDを再生しようとしてる?
SCSI/ATAPI接続でないCDは再生できないの?
0913デフォルトの名無しさん01/09/04 15:53ID:rccG4HwI
だから、エクスプローラからCDドライブを開いて
*.cdaをD&Dとかでも再生できるようにしたいんだってば。
その場合、*.cdaからは、フルパスでのドライブレターしか、
どのドライブからD&Dされたのか確認できないでしょ?

今はデバイス名で再生ドライブを選ばせてるけど、
ドライブレターでも選べるようにしたいの。

ユーザによっては同じ型版のドライブを複数使ってる人もいるわけで、
その場合ドライブのデバイス名+連番とかで選ばせたって、
どっちがどっちだかわからんぢゃないか。

ちなみにCDの再生は、ASPI経由でのデジタル吸出し再生だよ。
MCIだったら、mciSendString("open cdaudio!q: mycd", 以下略)
とかでドライブレターから目的のドライブをオープンできるから問題ないけど。

もうあと考え付くのはMCIとあわせ技で、いったんMCIでオープンして
各トラックの再生時間を取得して、ASPI経由で得たTOC情報と比較して
一致するドライブを使うとか、CDDB用のIDを計算して(MCIでもGETできる)
それでマッチングするぐらいしか思いつかん。
でもこれだと不完全。同じCDが複数のドライブに入ってたり、
たまたまトラックの再生時間が全部一緒だったりしたら区別つかん。
0914デフォルトの名無しさん01/09/04 16:24ID:DASKlEA.
>>913
>>912に対する答えはないのか?ASPIから操作できないデバイスをどうやって見分ける?
0915デフォルトの名無しさん01/09/04 16:35ID:s4.H7M7U
>今はデバイス名で再生ドライブを選ばせてるけど、
>ドライブレターでも選べるようにしたいの。

だからQueryDosDeviceでドライブレターをデバイス名に変換
すればいいんじゃないの? 何に困ってるのかぜんぜんわからん。
0916デフォルトの名無しさん01/09/04 20:54ID:rccG4HwI
>>914
ASPIから見えないドライブは、
>ちなみにCDの再生は、ASPI経由でのデジタル吸出し再生だよ。
と言っているとおりそもそもサポート外。

>>915
Win9xでどうするのさ。

つーかレジストリをくまなく調べてなんとかなりそうだよ。
各所で実験して法則もつかんだし。
0917デフォルトの名無しさん01/09/04 21:52ID:DASKlEA.
>>916
サポート外かどうかをどうやって見分ける?ってきいてんだけどな…
お前のアプリがサポートしてなくてもExplorerがサポートしてるなら
D&Dはできちまうだろが。
0918デフォルトの名無しさん01/09/04 22:07ID:8BA3trys
質問なのですが、WinAPIかMFCを使用して
DirectXやglutのようなフルスクリーン表示は可能でしょうか?
0919loop01/09/05 14:58ID:o9TQFFtQ
質問です。アイコンの変更についてですが、エクスプローラ表示時の
アプリケーションのファイル名の左につく小さなアイコンを変更したいのですが、
どうすればいいのでしょうか。
hIconSmやhIconはちゃんと設定しているのですがエクスプローラ表示時だけ
表示されません。
0920デフォルトの名無しさん01/09/05 17:46ID:y2XHDEbw
system( … )

と

CreateProcess して WaitForSingleObject( …, INFINITE ) は

同じような動作と思っていいのでしょうかね?
0921デフォルトの名無しさん01/09/05 18:04ID:Z95/O0wg
>>918
GetDC(NULL) でプライマリモニタのデバイスコンテキストを取得すれば、
ウィンドウの枠に制約を受けずに描画できます。

また、解像度の変更は ChangeDisplaySettings() を使えば可能ですが、
これはデスクトップアイコンや開いているウィンドウの位置を変更する
副作用があります。ユーザの怒りを買いたくなければ、使わない方が無
難です。(DirectX は *正しく使えば* 全画面モードから復帰しても、
デスクトップアイコンの位置などを乱しません)
0922デフォルトの名無しさん01/09/05 19:53ID:q2XAomPA
>>920
おおまかなところそんな感じ。
092391801/09/05 21:53ID:1ucYoHgc
>>921さん
早速試してみます。どうもありがとうございました
0924デフォルトの名無しさん 01/09/06 05:18ID:JvjB7IHc
手始めにMFCじゃなくてC言語だけでつくる(SDK?)というのをVCで始めました.
そこで,ウィンドウにテキストボックスとボタンを2つ作って,ボタンを押すとメモ
帳が起動して,テキストボックスに文字列を書いて,さらにもう一個のボタンを押
すとテキストボックの文字をメモ帳に転送する,というのをやってみたいのですが
どうしたらよいでしょうか?
MSDNで調べた限りでは,SPY++というのでクラス名を調べて・・・
FindWindowEx()というやつの引数にそれを代入して帰ってきたハンドル当てに
SendMessage()でうまい具合に・・・という風にすればいいかな?
と思うのですが,こういったサンプルが載せてあるサイト等,どなたか教えてくれませんか?

ほかのアプリケーションを起動するのはサンプルで見つけたのですが,FindWindow
という関数の使い方や,そもそもホントにこういう方針でいいのかもわかりません.
0925デフォルトの名無しさん01/09/06 11:33ID:vbslDp7I
お引っ越し

Win32API 質問箱
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=991576947
レス数が900を超えています。1000を超えると表示できなくなるよ。