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

Win32API質問箱 Build31

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2005/04/29(金) 17:09:54
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

  ∧_∧
 ( ´∀`) < ぬるぽ

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0002デフォルトの名無しさん2005/04/29(金) 17:10:04
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__∧∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>1
0003デフォルトの名無しさん2005/04/29(金) 17:10:24
-過去スレ
Build30: http://pc8.2ch.net/test/read.cgi/tech/1112345886/
Build29: ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
Build28:ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
Build27:ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
Build15:ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
Build14:ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:ttp://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやーごめんなさい。」に巻き込まれた模様
0004デフォルトの名無しさん2005/04/29(金) 17:13:16
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/

■書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055
0005デフォルトの名無しさん2005/04/29(金) 17:14:39
急速にスレの質が低下してまいりました
0006デフォルトの名無しさん2005/04/29(金) 17:35:21
>>5
ワロタ
0007デフォルトの名無しさん2005/04/29(金) 17:56:07
>>1-2
10 秒かよ
0008デフォルトの名無しさん2005/04/29(金) 18:06:30
>>5
これはテンプレ入りだな。
0009デフォルトの名無しさん2005/04/30(土) 00:54:04
Advenced Windows
0010前スレ7962005/04/30(土) 05:04:12
>>797,>>798
ご紹介のページを参考に、ReadProcessMemory()で、ゲームの、デフォルト?セグメントにはアクセスできましたが・・・

アク禁のエリアが所々あって、適当なアドレスでアクセスしようとするとすぐ不正な処理エラーが出ます。

それと、やはりプログラムが取得したセグメントは一般には一つではないですよね・・・

やはりOSのメモリ管理情報からこうした情報を取得しなければならない、と思いますが・・・

色々実験したところ、プログラムの起動直後には、レジスタFSに、何かの管理情報が書いてあるセグメントがセットされているようですが・・・自分のじゃないので簡単にはとれないし・・・
0011デフォルトの名無しさん2005/04/30(土) 05:47:30
>>10
だからして俺はXPが出たあとでもMEを使ってる時代があった
NT系は堅い
0012デフォルトの名無しさん2005/04/30(土) 09:20:55
>>前スレ796==チートツール作り
だろ。相手にすることないよ。
0013前スレ7962005/04/30(土) 10:43:11
>>12
??前スレでも別に普通に相手されてましたが???
0014デフォルトの名無しさん2005/04/30(土) 10:49:14
質問です。
シャアウェアをインストロールしたらレジスターが
書き換えられてディスクトップがぐちゃぐちゃになって、
エキスプローラでホルダーをクィックしても動かなく
なってしまいました。どうすればレジスターを修復で
きますか? ソフトはWindous95で機種はBMWの
アクティバです。接続環境はフレッシュISBNです。
 ヤッホーやゴーグルなどの検索で調べても解らないので
ツーチャンネルの皆様、ご指導よろしくお願いします。
0015デフォルトの名無しさん2005/04/30(土) 10:54:26
>>14
まず、お前自身のスピードを3倍にするところから始めるんだ。
0016デフォルトの名無しさん2005/04/30(土) 10:55:52
まず普通に言葉が書けるようになってから出直してきてください
0017デフォルトの名無しさん2005/04/30(土) 11:22:48
>>13
だから、ゲームのチートツール作りならこんなところで質問してないでゲ製に引っ込んでろって。
つーか、前スレ使い切れよ。
0018デフォルトの名無しさん2005/04/30(土) 12:54:30
実行バイナリいじっちゃえ
0019デフォルトの名無しさん2005/04/30(土) 13:16:39
>>14
ネタ?
0020デフォルトの名無しさん2005/04/30(土) 13:33:00
>>19
明らかにネタ。本人は否定するだろうが。
0021デフォルトの名無しさん2005/04/30(土) 19:26:25
新鮮な書籍コードってなんだよ
0022デフォルトの名無しさん2005/04/30(土) 19:44:09
現在定義されている環境変数を列挙するAPIを教えてください。
0023デフォルトの名無しさん2005/04/30(土) 19:49:29
Winに環境変数などというものは無い
0024デフォルトの名無しさん2005/04/30(土) 19:56:33
>>23
あるじゃん
0025デフォルトの名無しさん2005/04/30(土) 20:14:30
>>22
http://members.at.infoseek.co.jp/zzyyb/hack/winhack.html#Env
0026222005/04/30(土) 20:39:02
サンクスです。実はなかなか厄介くさいですねぇ。
でもできることはできるっぽいんでやってみます。
0027デフォルトの名無しさん2005/04/30(土) 20:48:41
envp 使えば?
0028222005/04/30(土) 20:56:47
WinMainでできます?
0029デフォルトの名無しさん2005/04/30(土) 21:57:28
>>28
出来ないわけがない。
0030デフォルトの名無しさん2005/04/30(土) 22:23:58
リッチエディットをただの文字数制限なしエディットボックスとして使いたいんだが、
Ctrl+Rで右揃えになったり、Ctrl+Vで違う書式のテキストが張り付いたりして気持ち悪い。
リッチエディット(2.0)のすべてのキーボードショートカットを無効にするのってどうしたらいい?
0031デフォルトの名無しさん2005/04/30(土) 22:43:26
サブクラス化してプロシージャ書けば?
0032デフォルトの名無しさん2005/04/30(土) 22:43:49
>>26
GetEnvironmentStrings一発で取れますよ。

>>10
俺も普通に相手してあげるよ。

ReadProcessMemory()でOK。
APIがダメなのではなく、お前さんの使い方が悪いんじゃないかな。

まぁその質問の仕方では、相手にされにくいわな。
0033デフォルトの名無しさん2005/05/01(日) 00:39:41
__argc とか__argvみたいに __envpがあるんじゃないの?
0034デフォルトの名無しさん2005/05/01(日) 04:54:18
お願いします。WindowsGUIでのプログラミングで、
使っているDLL(tar32.dll)に直接コマンドを送ったあと、
そのDLLは「結果を標準出力に出力している」、というのですが、
どこかに書き込んでいる様子は見えても
CUIでないせいで何もおきず、 " > "をつけてみたり"
SETSTDHANDLEを使って標準出力をファイルに変えてみても
取り出せませんでした。何か取り出す方法がありましたら
アドバイスお願いします。

0035デフォルトの名無しさん2005/05/01(日) 05:01:48
int main()
{
return WinMain(GetModuleHandle(NULL), 0, "", 0);
}
0036デフォルトの名無しさん2005/05/01(日) 05:56:41
>>34
tar32.dllが標準出力に出力?何か勘違いしてないか?
0037デフォルトの名無しさん2005/05/01(日) 06:09:21
>>36
ファイルを個別出力させるときに他のDLLと違ってファイルへの出力がなくて
標準出力への展開(-p オプション)だけになってしまうみたいで
http://openlab.jp/tsuneo/soft/tar32_1/old/tar32_1/SDK/TAR32SDK.TXT
http://openlab.jp/tsuneo/soft/tar32_2/tar32_2/sdk/Tar_cmd.txt
これしか-pオプションに関する説明がないし
APIにも無いのでDLLの標準出力をファイルハンドルにあわせるしか
ないかと思ったんですが それもダメで・・
0038デフォルトの名無しさん2005/05/01(日) 07:53:36
>>37
-xだけ指定すればファイルへ出力してくれそうに読めるが。
0039デフォルトの名無しさん2005/05/01(日) 09:12:14
>>37
> -p
>     アーカイブ中のファイルを標準出力(バッファ)に展開します。

これ、実際にはTar() の最後の引数で指定したメモリに出力される。
0040デフォルトの名無しさん2005/05/01(日) 15:31:30
質問です。

CreateFile()やSetFilePointer()等を使って、標準関数のfgets()のような
一行読み込みをする関数を作っているのですが、なかなかうまくいきません。
よければヒントだけでも教えてくれませんか?

環境は
OS : Windows2000
コンパイラ : VC6
です。
0041デフォルトの名無しさん2005/05/01(日) 15:41:40
ReadFile は使わないの?
0042402005/05/01(日) 15:51:19
すいません。ReadFile()も使います。
while文でSetFilePointer()を使って一つずつポインタを進めていきながら、
ReadFile()で1バイトずつ文字を読み込んでいくような感じで書いているのですが
どうも上手くいきません。
0043デフォルトの名無しさん2005/05/01(日) 15:53:56
ReadFileした分は勝手にポインタ進むだろ
0044402005/05/01(日) 16:00:25
>>43
そうだったんですか。それでおかしくなったのかもしれません。
もうちょっとがんばってみます。
0045デフォルトの名無しさん2005/05/01(日) 16:02:01
>>40
http://www.google.co.jp/search?num=50&hl=ja&c2coff=1&q=Read.c+ReadFile+_osfhnd+Microsoft+Corporation.+All+rights+reserved&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0046デフォルトの名無しさん2005/05/01(日) 16:02:49
キャッシュしか残ってなかったな...
0047デフォルトの名無しさん2005/05/01(日) 18:23:31
>>38 >>39
ありがとうございます。
-xだけだと指定に関係なく全ファイル展開になります。
>これ、実際にはTar() の最後の引数で指定したメモリに出力される。
Tar()の最終引数がDWORD dwSizeでバッファのサイズの値なんですが
これにメモリのポインタを入れればよいのでしょうか?

0048デフォルトの名無しさん2005/05/01(日) 18:47:41
APIそのものの質問じゃないのですが、
ここの人が詳しいかと思いまして

パラメータをレジストリに保存してダイアログで設定するようなアプリを作ったとき
常にレジストリを読むわけにはいきませんし
読み込みと書き込みの両方を考えて
メモリ上のパラメータとレジストリの値とはどのタイミングで同期をとるもんなんでしょう?
0049デフォルトの名無しさん2005/05/01(日) 18:50:07
起動時と終了時
0050デフォルトの名無しさん2005/05/01(日) 18:59:34
ダイアログを開いたときに読み込んで閉じるときに(必要なら)書き込む。
0051482005/05/01(日) 19:02:19
同時に2つ立ち上がる可能性があるので
・起動時とダイアログを開いたときに読み込み
・終了時とダイアログを閉じたときに書き込み
・読み込み時にレジストリが見つからなかったときは
 メモリのパラメータをデフォルトの値にして
 書き込み時を待って反映させる

としようと思います。
0052102005/05/01(日) 19:04:23
>>32
どうもです。チートツールってほどのものじゃない個人的なものなんですが・・・

以前に埋めに入っているスレで質問して誰も答えてくれなかったことがあるんで・・・

もちろんReadProcessMemory()は正常に動いてるのだとは思いますが・・・
4Gのアドレスのうち、全部があるはずはないですよね・・・
たしかにコード近辺、スタック近辺とあとよくわからないシステムエリア?近辺は読み取れるんですが、大方は読み取ろうとすると不正な処理ダイアログが出ます。
自分の領域ならばLDT読むとかいろいろ方法はあるとは思うんですが、他プログラムの領域なんで・・・

あと質問の仕方のまずい所を・・・?

>>33
私でしょうか?
__envp調べて見ます。

>>18
私のことですよね?
やはりその前に何の変数が何に使われているのか確認しないといけないので・・・
0053デフォルトの名無しさん2005/05/01(日) 19:06:06
>>52
Advanced Windows読め
0054デフォルトの名無しさん2005/05/01(日) 19:29:03
>>51
複数起動を仕様としたアプリ?
そうでないなら複数起動は制限しとくようにしたほうがいい気がするよ

0055デフォルトの名無しさん2005/05/01(日) 19:52:03
>>54
複数プロセスのアプリからロードされるプラグインDLL
なんですよ
0056322005/05/01(日) 20:13:48
>>52
やろうとしていることが嫌われていることもあるが、それ以前に質問の仕方が悪い。

過去ログを見て、回答をもらえている質問者と、そうでない質問者の違いを見て、
何がいけないのか察してくれ。

それが面倒だったら、ここで質問するよりも、
チートツール作ってる人達のWebサイト見たほうが早い気がするよ。
0057デフォルトの名無しさん2005/05/01(日) 20:41:58
>>55
共有メモリを利用するという手はどうよ?
最初にプロセスにアタッチされたときにロードして、
すべてのプロセスから参照されなくなったときに保存すると。
0058デフォルトの名無しさん2005/05/01(日) 20:48:35
>>52
PEヘッダを見ればいいんだよ。
そしたらメモリ配置は全部わかる。
仕様はこのあたりが詳しい。
http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
0059デフォルトの名無しさん2005/05/01(日) 20:50:56
>>57
いいかもしれないけど、そんなにクリティカルな情報でもないので
できたらやってみます

ところでDLLってプロセスのメモリ空間ごとにコピーされるんですよね
0060デフォルトの名無しさん2005/05/01(日) 20:54:56
それじゃあスタティックリンクと一緒じゃろ
0061デフォルトの名無しさん2005/05/02(月) 00:19:44
>>47
すまん。後ろから2番目だわ。
でも-xで指定ファイルの解凍ができるが。
0062522005/05/02(月) 00:29:13
よく過去ログとか見ろって言われるんですが、現実にはなかなか最初から全部目を通せる人っていないと思うんですが・・・
ふつうの人はお金にも時間にも限界がありますから・・・
私もできたら本屋で売っている面白そうな本、全部買いたいですよ・・・

結局何が悪かったのかよくわからなかったのですが、とにかく悪いということなのでここで聞くのはあきらめます。皆さんどうもありがとうございました。

>>58
おお!これですね。わかりました。早速熟読を・・・
あとは動的に取得されたセグメントの情報ですね・・・
一応ググってはいるんですが、英語のばかりひっかかるんで・・・もちろん英語でも読んではいるんですが、???という感じで・・・
あと途中退場して本当に申し訳ありません・・・
ご容赦下さい・・・
0063デフォルトの名無しさん2005/05/02(月) 00:42:16
>>62
仮令個人使用だろうとチートツールはチートツール。
それが只のマナー違反か犯罪になるかはゲームの種類と体制によるが。
そうである以上、まとまった情報が得られないことくらいすぐに判ると思うが。
そうでなくとも、教えて君は一般的に嫌われる。
まぁ、「半年ROMしてから書き込め」という板もあるくらいだ。空気は読もうな。
0064デフォルトの名無しさん2005/05/02(月) 01:14:10
本当に欲しいなら惜しまずに金と時間を投入しろってこった
0065デフォルトの名無しさん2005/05/02(月) 04:37:47
ステータスバーを付けたいのですがどうすればいいでぇすくわぁ?
0066デフォルトの名無しさん2005/05/02(月) 06:28:04
>>65
ステータスバーをつける。
0067デフォルトの名無しさん2005/05/02(月) 07:10:18
>>65
つhttp://www.kumei.ne.jp/c_lang/sdk/sdk_57.htm
0068デフォルトの名無しさん2005/05/02(月) 08:04:32
>>59
32ビットではDLLはプロセス間で独立してると思っていいですよ。
(昔はDLLを使ったプロセス間通信なんてアホな話もありましたが。)

DLLでプロセス間でまったく同じメモリ内容になる部分は、
OSが自動的に見えないところで共有してくれています。
これを意識する必要は、メモリ & ディスクキャッシュの節約という面以外ではないです。

>>62
開き直るなよ。

お金にも時間にも限界がある人が回答してるんだよ。
だから質問の仕方が悪いと相手にされないの。

質問がド下手な人の相手をすると、お金と時間が無駄になるし、
そもそも回答してくれる人の手間を極力省くために、
自分の時間をいくらでも注ぎ込む気構えがないのは、失礼でしょ。
だから相手にされないの。
0069デフォルトの名無しさん2005/05/02(月) 10:51:09
DLLネタで便乗しちゃうけど
DLL作るときってベースアドレスずらしてる?
重ならないように設定するのめんどいんだけど・・・
あと、重ならないことで実際どんな効果があるのかしらん
0070デフォルトの名無しさん2005/05/02(月) 12:10:10
>>52
ttp://software.nikkeibp.co.jp/software/download/down02.html
Windowsのメモリー管理を理解する のサンプルを見てVirtualQueryEx使うとか

>>69
ベースアドレスが重なると別のアドレスにロードすることになり、再配置処理が必要になる。
アドレスがずれると複数プロセスでのDLL読み取り専用領域の共有もできなくなるらしい。
ちなみにDelphi/BCCでexeを作るときはStripRelocで再配置情報を削除した方が良い

間違ってたらスマン
0071デフォルトの名無しさん2005/05/02(月) 15:13:54
デスクトッププロパティの「ドラッグ中にウィンドウの内容を表示する」
をONにして適当なウィンドウをぐりぐりドラッグすると
再描画されずに白いゴミが残ることがあるんだけど
へぼいマシンなんだからウィンドウの内容を表示するオプションOFFにシル
って対応だけでいいのかな?
BitBltで絵を張っている位なんだがこっちがミスしてるのかな・・
0072デフォルトの名無しさん2005/05/02(月) 16:58:52
ボタンの色と同じ色で、ある領域を塗りつぶしたく、
FillRectを使い、第三引数でGetStockObject(**_BLUSH)とやっているのですが、
GRAYは暗く、LTGRAYは明るく、HOLLOWはうまく表示されず、同じ色が出せません。
いい方法がありましたら、教えてください。
0073722005/05/02(月) 17:08:45
少し修正します。
GRAY_BRUSH、LTGRAY_BRUSH共にボタンの色より濃くなってしまいます。
当然BLACK_BRUSH、DKGRAY_BRUSH、WHITE_BRUSHも違う色です。
0074デフォルトの名無しさん2005/05/02(月) 17:14:59
>>72
::CreateSolidBrush(RGB(255,255,255)) でブラシ作って
::FillRect したらどうかな。
そのブラシは後でDeleteObject する
0075デフォルトの名無しさん2005/05/02(月) 17:19:34
ボタンと同じ色なら
CreateSolidBrush(GetSysColor(COLOR_BTNFACE))
じゃないのか?
0076722005/05/02(月) 17:25:03
>>74
ありがとうございます。似た方法はやっていました。
ペイントソフトでボタンの色を調べて、その色で塗りつぶしたのですが、
微妙に色が違ってしまいました。デスクトップの色数とかが原因かもしれません。

>>75
ありがとうございます。同じ色を表示できました。
0077デフォルトの名無しさん2005/05/02(月) 18:49:35
システムデフォルトのグレイ関係ならヘッダファイルに定義してあるはずだが
0078デフォルトの名無しさん2005/05/02(月) 19:03:54
ボタンの色とかって、ユーザごとに違うだろ。
0079デフォルトの名無しさん2005/05/02(月) 19:09:12
デフォルトのグレイならって書いてあるのじゃん
0080デフォルトの名無しさん2005/05/02(月) 23:00:40
マウスカーソルがぐるぐる円を描くように動作するプログラムを
作りたいのですが、どのように作ればいいのでしょうか?
まったく検討もつきません、どなたかアドバイスよろしくお願いします。
0081デフォルトの名無しさん2005/05/02(月) 23:35:41
>>80
タイマーで円を描くようにマウスポインタの位置を変更していけばいいだけじゃないの?
0082デフォルトの名無しさん2005/05/02(月) 23:37:12
>>80
>>4にあるURLからひたすら探せ
0083デフォルトの名無しさん2005/05/02(月) 23:40:32
SetCursorPosと円の方程式でなんとかしる
0084デフォルトの名無しさん2005/05/02(月) 23:57:42
>>81-83
レスありがとうございましたっ!
そして>>83さん、結構探したつもりだったんですけど、
助かりました、本当に。感謝!
0085デフォルトの名無しさん2005/05/03(火) 01:08:43
ネットワーク関係のアプリを作りたいんですが、
初歩として2台のPC間でファイルの送受信を行うプログラムを作ろうと思いました。

WINAPIに必要な関数は用意してありますか?
0086デフォルトの名無しさん2005/05/03(火) 01:20:50
ちょっと調べればわかることをなんで訊くのか謎だ。
0087デフォルトの名無しさん2005/05/03(火) 02:11:53
検索語が分からないんです。
[winapi, ネットワーク]や[ファイルの送受信, winsock2]
等で検索してみたのですが欲しい情報が見つかりませんでした。
それでこちらで質問させてもらいましたが、もうちっとgoogleを漁ってみます。
失礼しました。
0088デフォルトの名無しさん2005/05/03(火) 09:23:54
winsockって分かってるなら来るなと。
0089デフォルトの名無しさん2005/05/03(火) 11:08:43
データの送受信なのか、ファイルをファイルとして送受信したいのか。
0090デフォルトの名無しさん2005/05/03(火) 12:28:28
ファイルをファイルをして送受信したいんです。
目的としてはファイルを送信する側が
自分が持っているファイルの一覧を受信者に送信、
受信者は一覧を見て欲しいファイル名を送信、
送信者は指定されたファイルを送信する。

こんな感じのことがしたいので最初はエラーとか全く考えずに
ある決まったファイルを送受信したいなと思ったんです。

んでもって、やりたいことが決まっても
どんな関数を使えば良いのかよく分からないので質問しました。
0091デフォルトの名無しさん2005/05/03(火) 12:39:02
ftp使えば?
0092デフォルトの名無しさん2005/05/03(火) 13:03:12
簡易FTPをお勉強として作りたいという前提で答えると。
データの出元や最終的な出力先がファイルというところは、
ネットワークプログラミングとは関係ない。
winsockって分かってるなら、それで普通にデータの送受信を
すればいいじゃん。

そうじゃなくて、FTPクライアントを作りたいだったらwininetあたりで。
0093デフォルトの名無しさん2005/05/03(火) 19:23:59
TrackPopupMenuExでポップアップメニューを表示するときに
(キーボードで操作できる)カーソルを
あらかじめ特定の項目に移動させたいのですが
そういうことはできますか?
0094デフォルトの名無しさん2005/05/03(火) 19:50:11
>>90
プログラミングのスパイスって本に君の希望する内容が書いてある。
0095デフォルトの名無しさん2005/05/03(火) 20:11:03
>>90
プロトコルについて勉強汁。
ちなみに、君の希望するものは FTP。
RFC FTP で検索汁。
0096デフォルトの名無しさん2005/05/03(火) 20:31:50
いまどきFTPもないんでやっぱHTTP+Web DAVだろ。
0097デフォルトの名無しさん2005/05/03(火) 20:41:39
('A`)
0098デフォルトの名無しさん2005/05/03(火) 21:06:01
ウィンドウプロシージャでWM_CLOSEメッセージが送られてきたら
MessageBoxを出して本当に終了するかどうかを促す実装をしているのですが、
それだけのプログラムをクラスとか一切使わず作るとうまくいくのですが、
自前のウィンドウプロシージャクラスを使うとメッセージボックスは表示されません。
しかし、エンターキーを押すと、デフォルトのOKが押されて終了してくれます。

クラスの中では、WM_CLOSEメッセージの時にはOnClose関数に飛ぶようにしているだけで、
特に変なことはしてないつもりです。

検索してみても分からなかったので、ここで質問させてもらいました。
同じような現象になったことある方や、意見がある方は回答をお願いします。
条件が曖昧ですがよろしくお願いします。

環境:Visual C++.NET 2003, WinXP(SP1)
0099デフォルトの名無しさん2005/05/03(火) 21:28:38
>>98
ソース晒してみ
0100982005/05/03(火) 21:30:42
書き込みしたあとも色々試してみたのですが、
どうやら、ウィンドウ(メインのウィンドウ)が表示されている間に
メッセージボックスを出そうとすると表示されないということが分かりました。
WM_CREATEではうまくいきますが、WM_LBUTTONDOWN等ではうまくいきません。
0101982005/05/03(火) 21:33:30
>>100
ウィンドウプロシージャ関数
switch(msg)
{
case WM_CLOSE:
return OnClose();
・・・他のメッセージ処理

メインウィンドウのOnClose関数
ウィンドウプロシージャの基本クラスの関数をオーバライドしてます
{
if(MessageBox(m_hwnd, "Really?", "", MB_YESNO) == IDYES)
DestroyWindow(m_hwnd);
return 0;
}

どのくらい晒せばいいか分かりませんが、
とりあえずかかわってるとこだけ書いてみました。
0102デフォルトの名無しさん2005/05/03(火) 21:37:14
>>98
全部晒したほうがいいんでない?
0103デフォルトの名無しさん2005/05/03(火) 21:51:16
TCHARの文字列をwchar_tの文字列に変換したいのですが、
TCHARがcharの時もwchar_tの時も上手くいく方法はどのようなものがありますか?
0104デフォルトの名無しさん2005/05/03(火) 22:10:14
_UNICODEが定義されてないときだけ
変換したらいいんでないですかね?
0105デフォルトの名無しさん2005/05/03(火) 22:30:13
>>103
ATLのCT2Wとか
0106デフォルトの名無しさん2005/05/04(水) 00:05:49
スレッドとウィンドウメッセージの関係について質問です。
GUIを扱うメインスレッドと、長い処理を行うワーカースレッドがありまして、
あるウィンドウに対して送信するときにクリティカルセクションを使って
排他をしようと考えています。
状態遷移を考えているうちに疑問に思ったのですが、

・ワーカースレッドで、クリティカルセクションをロックしてる最中に
メインスレッドにSendMessageすると、どうなるでしょうか?
メインスレッドに処理が移った瞬間デッドロックするのでしょうか。
0107デフォルトの名無しさん2005/05/04(水) 00:07:53
>104-105 ありがとうございます。
#ifdef でやってみます。
0108デフォルトの名無しさん2005/05/04(水) 00:09:08
補足ですが、
あるウィンドウは、メインスレッドのダイアログ上に存在します。
単なるエディットボックスです。
0109デフォルトの名無しさん2005/05/04(水) 00:09:41
>>106
メインスレッドがそのクリティカルセクションをロックしようとしなければ大丈夫。
0110デフォルトの名無しさん2005/05/04(水) 00:22:48
リソースを「実行時」に生成して、
外からインスタンスハンドルと「特定のID」を引数として引っ張ってこれるようにしたいのですが
どうしたらいいですか?
0111デフォルトの名無しさん2005/05/04(水) 00:31:27
>>109
いや、今の設計では、メインスレッド側もロックしようとします。
やっぱダメかな・・・
ボタンを押したりしたときにそのウィンドウにテキストを出力する時とか。
ちゃんとクリティカルセクションのlock/unlockはしてますが。
0112デフォルトの名無しさん2005/05/04(水) 00:35:49
要するに、ワーカースレッドの中でlockしたまんま、
メインスレッドへSendMessageは正当なのかということなのですが、
なんか試した限りではうまく動かないみたいです。
クリティカルセクションのコードを外せば動くんですが。
ああもう寝よ・・・
0113デフォルトの名無しさん2005/05/04(水) 00:40:38
なんか設計が悪い気がしてきました。
別のスレッドからのSendMessageって、スタックから見るとかなり
ややこしいことになってるみたいなんで、バグの温床のような気がします。
SendMessageを使わない別の通信手段を考えることにします。
0114デフォルトの名無しさん2005/05/04(水) 00:45:39
それがいいよ。
0115デフォルトの名無しさん2005/05/04(水) 01:14:45
以下のフローに変更。

データをバッファリングすることにして、
そのデータをクリティカルセクションのロック対象とする。
ワーカスレッドは、バッファを更新したらWM_USER+nの適当なメッセージを
PostMessageでGUIを持つメインスレッドへ通知し、
GUIメインスレッドは通知を受けたらコントロールを更新してバッファをクリアする、
というフローに変更。

これでメッセージループが正常に回るようになりました。
気持ち悪い部分が消えて良かった・・・
0116デフォルトの名無しさん2005/05/04(水) 01:22:06
よかったね。
0117デフォルトの名無しさん2005/05/04(水) 03:05:58
えーっ SendMessageをPostMessageにしちゃうの?
同期的に処理しなくていいなら、最初からPostMessageにしとけ、っていう気もするけど、
ロックの都合で変えるのは、どうかと思う。

基本的には、クリティカルセクション内でSendMessageするのは、よくない。

SendMessageのように、いつ返ってくるのかわからないような処理を、
排他状態で行うのは、パフォーマンス的にもよろしくないし、なんか気持ち悪い。
(気持ち悪いのは、デッドロックしやすいからよくない、ということだと思うのだけど、
デッドロックするような設計なら、長かろうが複雑だろうが、ダメなものはダメだなぁ。)

もしかして、ロック対象のオブジェクトを、SendMessageで誰かに触らせようとしているの?
だとしたら、それはロックの使い方を間違っているよ。
ロックしている = 自分以外に触らせない
ということだから。

渡す側は、オブジェクトに触れる前にロック。オブジェクトに触れ終わったらアンロック。
渡された側も、オブジェクトに触れる前にロック。オブジェクトに触れ終わったらアンロック。
ロックしないで触るコードがあれば直すべし。
SendMessageする時や、メッセージキューから受けとる時は、ロックしていない状態でいいよ。
01181172005/05/04(水) 03:10:23
誤解があるかも・・・

> SendMessageする時や、メッセージキューから受けとる時は、ロックしていない状態でいいよ。
SendMessageすることや、メッセージキューから受けとること自体は、
オブジェクトのハンドルやポインタは扱うかもしれないけれども、
オブジェクトの中身には触れないことなので、ロックが不要なのです。

もちろん、
そのハンドルやポインタ自体がロック対象のオブジェクトというのであれば、
ロックしなくてはいけませんが、そんなロック対象のものを直接SendMessageで渡してはいけません。
必ず、一段噛まさないと。
0119デフォルトの名無しさん2005/05/04(水) 03:15:52
そんなことわかってるよ。
0120デフォルトの名無しさん2005/05/04(水) 05:25:05
すいません、DeleteMenu(sysMenu,SC_MINIMIZE,MF_BYCOMMAND );

上記のようにでぇりーとした、みにまいずなアイコンを再び
使えるようにしたいのですがどうすればいいのでぇすくわぁ
0121デフォルトの名無しさん2005/05/04(水) 08:36:16
>>119
わかってりゃ、最初の質問だって出なかったろ。
0122デフォルトの名無しさん2005/05/04(水) 15:16:38
InsertMenuで追加するとか
0123デフォルトの名無しさん2005/05/04(水) 17:41:50
自分で作成したプログラムからチャットとかに、なんでもいいから文字を送信
したいんですけど、送信するにはどんな関数を使えばいいんですか?
そういうのは存在するんでしょうか? 優しい方教えてくださいm(_ _)m
0124デフォルトの名無しさん2005/05/04(水) 17:52:45
>>123
要件の不足。
詳細述べよ。
0125デフォルトの名無しさん2005/05/04(水) 17:55:00
チャットを荒らしたいんですが、どんな関数を使えばいいんですか?
優しい方教えてくださいm(_ _)m
0126デフォルトの名無しさん2005/05/04(水) 17:59:34
ただ文字を送信したいだけです。
フォームに文字を入力せずに、自分で作成したプログラムから
特定の文字を送信するにはどうすればいいのかなぁ、って思っただけです。
0127デフォルトの名無しさん2005/05/04(水) 18:08:30
>>126
とりあえずスレ違い。
HTTP 関連のお勉強から始めれ。
0128デフォルトの名無しさん2005/05/04(水) 18:09:20
>>126
スレ違い、氏ね
0129デフォルトの名無しさん2005/05/04(水) 18:12:57
氏ねとか軽軽しく言っちゃダメだよ
0130デフォルトの名無しさん2005/05/04(水) 20:21:20
じゃ
死ね
は?あと
お望みならぶち殺したろか?
とかは?
0131デフォルトの名無しさん2005/05/04(水) 20:23:04
申し訳ございませんが二度と私達の前に姿を現さないで頂けませんでしょうか
ぐらいで
0132デフォルトの名無しさん2005/05/04(水) 21:27:45
私達って、勝手に他人を巻き込むなよ
0133デフォルトの名無しさん2005/05/04(水) 21:34:45
メッセージボックスをたくさん表示させて、
一番最後に出たメッセージボックスのOKボタンを押したら、全ての
メッセージボックスが閉じてくれるジョークプログラムを作ろうと思うのですが、
どのようにすればよいでしょか?
0134デフォルトの名無しさん2005/05/04(水) 21:39:29
罠作者はお帰りクダサイ
0135デフォルトの名無しさん2005/05/04(水) 21:51:21
>>133
普通に組めるだろ
アフォか
0136デフォルトの名無しさん2005/05/04(水) 22:02:41
///////////////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <time.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, int )
{HWND hwnd[999];MSG msg;WNDCLASS unkoClass;int i,j=0,k=0;srand(clock());
{unkoClass.style = CS_HREDRAW | CS_VREDRAW;unkoClass.lpfnWndProc = WndProc;unkoClass.cbClsExtra = 0;
unkoClass.cbWndExtra = 0;unkoClass.hInstance = hinst;unkoClass.hIcon = NULL;unkoClass.hCursor = LoadCursor(NULL, IDC_ARROW);
unkoClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);unkoClass.lpszMenuName = NULL;unkoClass.lpszClassName = "うんこ";
if( !RegisterClass(&unkoClass) ) return 0;}for(i=0; i<999; i++){j=rand()%1000+1;k=rand()%1000+1;
hwnd[i] = CreateWindow( unkoClass.lpszClassName,"うんこ",WS_OVERLAPPEDWINDOW,j,k,200,200,NULL,NULL,hinst,NULL);
ShowWindow(hwnd[i], SW_SHOW );}if(IDNO == MessageBox(*hwnd,"うんこおk?","うんこ", MB_YESNO )){ }
else {SendMessage(*hwnd, WM_CLOSE, 0, 0);}while( GetMessage(&msg, NULL, 0, 0) ){TranslateMessage(&msg);DispatchMessage(&msg);}
return 0;}LRESULT CALLBACK WndProc(HWND hwnd, UINT imsg, WPARAM wp, LPARAM lp){
switch(imsg){case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, imsg, wp, lp);}return 0;}
///////////////////////////////////////////////////////////////////////////////////////
0137デフォルトの名無しさん2005/05/04(水) 22:10:58
http://aion666.hp.infoseek.co.jp/cgi-bin/fupbbs/obj/obj35_1.zip

作ってみた
0138デフォルトの名無しさん2005/05/04(水) 22:53:28
何を作ったのやら。
0139デフォルトの名無しさん2005/05/05(木) 00:37:13
リストビュー(ListView)で質問です、、
項目のヘッダを押すとそのカラムについてソートされるようにしたいんですが、
項目のヘッダが押されたというのは、何のメッセージを捕まえればよいですか?
0140デフォルトの名無しさん2005/05/05(木) 00:38:46
猫のページにありました
すいません。
0141デフォルトの名無しさん2005/05/05(木) 00:40:27
気を取り直してもう一つ質問です。
リストビューの任意の項目で、
右クリックしたらポップアップメニューを出したいのですが、
何のメッセージを捕まえればよいですか?
0142デフォルトの名無しさん2005/05/05(木) 00:45:19
猫のページにありました
すいません。
0143デフォルトの名無しさん2005/05/05(木) 00:50:05
>>136
おぉ、最高っす!
参考にさせていただきます!
0144デフォルトの名無しさん2005/05/05(木) 00:55:25
ウィンドウがアクティブ化したときに何らかの処理を行うために、フックを使おうと思います。
WH_CBT と WH_SHELL とどちらを使うほうがよいでしょうか?
0145デフォルトの名無しさん2005/05/05(木) 00:58:40
猫のページにありました
すいません。
0146デフォルトの名無しさん2005/05/05(木) 01:02:20
ウィンドウがアクティブ化したときに何らかの処理を行うために、フックを使おうと思います。
WH_CBT と WH_SHELL とどちらを使うほうがよいでしょうか?
0147デフォルトの名無しさん2005/05/05(木) 01:04:55
おれもそう思う
0148デフォルトの名無しさん2005/05/05(木) 01:06:42
リストビューの任意の項目で、
右クリックしたらポップアップメニューを出したいのですが、
何のメッセージを捕まえればよいですか?
0149デフォルトの名無しさん2005/05/05(木) 01:17:07

 -<二:彡――
0150デフォルトの名無しさん2005/05/05(木) 01:47:32
追加で質問です。
リストビューで項目ヘッダの淵をダブルクリックすると
横幅がトリムされますが、これをプログラム側から行うには
何のメッセージ送ればよいですか?
0151デフォルトの名無しさん2005/05/05(木) 02:04:10
>>150
LVM_SETCOLUMNWIDTH メッセージでカラムの幅を
LVSCW_AUTOSIZE(アイテムのテキストの幅に合わせる) 又は
LVSCW_AUTOSIZE_USEHEADER(カラムのテキストの幅に合わせる) にする。
0152デフォルトの名無しさん2005/05/05(木) 02:11:12
>>151
ありがとうございました。
できました。
0153デフォルトの名無しさん2005/05/05(木) 02:13:30
1アプリケーションが持つウィンドウは
あまり多くないほうがいいのでしょうか?
具体的には、
キーボードを模したコントロール用パネルを作るときに、
各キーがそれぞれパネル上の一つの子ウィンドウという作り方は
推奨されない作り方なのでしょうか?
0154デフォルトの名無しさん2005/05/05(木) 02:19:07
100個ぐらいなら普通にうごくんじゃね?
0155デフォルトの名無しさん2005/05/05(木) 02:20:43
普通ボタンにしねぇか?
ってか、ボタンもテキストボックスもスタティックテキストもウィンドウなんだけどな
0156デフォルトの名無しさん2005/05/05(木) 02:27:48
昔Win16の時はご法度だったけどね、100個も並べたらまずリソース足りなくなってた
今は平気なんじゃないかなあ。

と言ってる俺は300-500並べるやつを作らなくてはならないんだが、これはやばそうだな・・・
0157デフォルトの名無しさん2005/05/05(木) 02:35:21
座標で管理
0158デフォルトの名無しさん2005/05/05(木) 02:39:01
>>156
あれ?昔ボタンで作られたキーボードの窓があった様な・・
誰が使うんだ?って代物だったけど。
Win95の頃かな。
01591532005/05/05(木) 03:13:25
>>155
そう! その通り!
私は、ボタンをいっぱい使う
アプリケーションが作りたかったのです。
多くのボタンを持ったアプリケーションが懸命に動作する姿は、
私をも感動させるものがあるでしょう。
0160↑2005/05/05(木) 03:31:46
アホ
0161デフォルトの名無しさん2005/05/05(木) 04:24:48
>>160
下手に出ておればいい気に
なりおって! 氏ね!
0162デフォルトの名無しさん2005/05/05(木) 07:47:54
>>158
付属のソフトウェアキーボードのことか?
0163デフォルトの名無しさん2005/05/05(木) 17:14:49

LoadImageでIMAGE_ICON,16,16指定でアイコンハンドル(HICON)を読んで
タスクアイコンに設定したいのですが、
Windows2000用ではICOファイルから16色のテーブルを読み込みたいのですが、
指定する方法を教えてください


0164デフォルトの名無しさん2005/05/05(木) 23:43:19
とりあえず日本語勉強してからもいちど来てくれ
0165デフォルトの名無しさん2005/05/05(木) 23:52:39
>163
http://www.vector.co.jp/soft/win95/amuse/se201729.html?g
これ使ってみそ  的はずれてるかもしらんが・・・
0166デフォルトの名無しさん2005/05/06(金) 11:20:29
マイクの設定ってプログラム上から出来ませんか?
ミュートとか音量設定とか
0167デフォルトの名無しさん2005/05/06(金) 11:23:44
できる
0168デフォルトの名無しさん2005/05/06(金) 12:51:51
ダイアログプロシージャA内で、別のダイアログBを生成したとき、
プロシージャBに何か値を渡すにはどうしたらいいでしょうか。

例えばダイアログAのチェックボックスの選択状況によって、
ダイアログBの初期状態を変化させるなどしたい場合です。
今はグローバル変数に持たせて渡しているのですが、あまり多用したくないです。
0169デフォルトの名無しさん2005/05/06(金) 13:19:08
M−V−Cだとかを一度勉強しなはれ
0170デフォルトの名無しさん2005/05/06(金) 13:20:02
>>168
DialogBoxParam
0171デフォルトの名無しさん2005/05/06(金) 13:35:58
>>170
THX
>>169
ウィンドウのクラス化めんどくさいんだもの。
SDKのみで懇切丁寧にクラス化の手順と仕組みが載ってる本とかないですかねー
Webに多少資料があるけど余りよく理解できない。
0172デフォルトの名無しさん2005/05/06(金) 14:09:50
クラス化は関係ない。
0173デフォルトの名無しさん2005/05/06(金) 14:20:05
じゃあ>>169ってどういう意味?
0174デフォルトの名無しさん2005/05/06(金) 14:24:41
つうか答えるならわざわざもったいぶるような書き方するなよ。
質問者には当然のように問題点を詳細に書くよう要求するんだから
回答者だって答えるならば少なくとも意味が伝わるように書いてくれ。
0175デフォルトの名無しさん2005/05/06(金) 14:26:18
はい次の質問者の方どぞ
0176デフォルトの名無しさん2005/05/06(金) 14:26:37
なにこのアホ。
0177デフォルトの名無しさん2005/05/06(金) 14:27:33
>>175
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
0178デフォルトの名無しさん2005/05/06(金) 14:27:46
気に入らない答えが聞きたくなかったら質問しないことだよ
0179デフォルトの名無しさん2005/05/06(金) 14:28:15
意味不明。
0180デフォルトの名無しさん2005/05/06(金) 14:29:50
>>178
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
キチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ねキチガイ氏ね
01811662005/05/06(金) 14:47:47
>>167
出来ればAPIの名前とか方法の手がかりを教えてもらえないでしょうか?
よろしくお願いいたします。
0182デフォルトの名無しさん2005/05/06(金) 14:52:51
>>178
気に入らない質問が聞きたくなかったら回答しないことだよ
0183デフォルトの名無しさん2005/05/06(金) 15:07:49
>>182
ろmもいるだろうに。俺とか
0184デフォルトの名無しさん2005/05/06(金) 15:16:50
カレントドライブがネットワークドライブか判別する方法ってあります?
0185デフォルトの名無しさん2005/05/06(金) 15:23:13
ある
01861842005/05/06(金) 15:24:59
>185
質問が悪かったですかね orz
どうすればわかりますか?
0187デフォルトの名無しさん2005/05/06(金) 15:31:30
>>183
気にいらない質問が見たくなかったらロムらないことだよ
0188デフォルトの名無しさん2005/05/06(金) 15:34:05
で、>>169ってどういう意味?
クラス化する以外にどうしろと。
0189デフォルトの名無しさん2005/05/06(金) 15:43:55
M−V−Cが何なのかすらわからない俺。
0190デフォルトの名無しさん2005/05/06(金) 15:58:28
M−V−C
が顔文字に見えてきた
0191デフォルトの名無しさん2005/05/06(金) 16:00:50
>>184
GetDriveType
0192デフォルトの名無しさん2005/05/06(金) 17:13:28
Microsoft Visual C++
0193デフォルトの名無しさん2005/05/06(金) 17:14:21
サブクラス化について質問です。
サブクラス化された子ダイアログから
親ダイアログの変数を参照するにはどうすればいいのでしょうか?
0194デフォルトの名無しさん2005/05/06(金) 17:33:46
ダイアログの変数?
0195デフォルトの名無しさん2005/05/06(金) 17:52:38
>>193
とりあえずGetParent()で親のウィンドウハンドルが手に入れられる。
01961932005/05/06(金) 18:05:37
>>194
子ダイアログであるエディットボックスのウインドウプロシージャ内から
その親であるダイアログ内で使われている変数の値を参照したいのです。

>>195
ウィンドウハンドルを使えばいいのでしょうか。
少し調べてみます。

お二人ともレスありがとうございました。
0197デフォルトの名無しさん2005/05/06(金) 18:12:25
>>196
そりゃ直接は無理。
0198デフォルトの名無しさん2005/05/06(金) 19:09:01
つーか、ダイアログで使う変数ってなんだよ。
ダイアログクラスのメンバ変数か?
0199デフォルトの名無しさん2005/05/06(金) 19:28:50
で、>>169ってどういう意味?
クラス化する以外に。
0200デフォルトの名無しさん2005/05/06(金) 19:31:43
ttp://e-words.jp/w/MVC.html
これの事ではなかろか
0201デフォルトの名無しさん2005/05/06(金) 19:53:25
そんなの知ってる。
168の質問内容に対し、
クラス化する以外でMVCをどう実現するのだという事。
0202デフォルトの名無しさん2005/05/06(金) 19:57:44
APIとは何の関係もなさそうだな
0203デフォルトの名無しさん2005/05/06(金) 20:03:35
プロシジャ間のデータの受け渡しの実現方法の質問。
0204名前は開発中のものです。2005/05/06(金) 22:56:15
>>168の質問に対する回答としての
>>169と>>172の意味を誰か説明して下さい。
気になって寝れません。
0205デフォルトの名無しさん2005/05/06(金) 23:05:49
質問です。

WinMain関数のメッセージループを

HDC hdc = GetDC(hwnd);
while(GetMessage(&msg, NULL, 0, 0)) {
TextOut(hdc, 0, 0, TEXT("test"), 4);
DispatchMessage(&msg);
TranslateMessage(&msg);
}

このように書いた状態でメッセージボックスを表示させると
文字とメッセージボックスが重なったときに文字が消えてしまいました。
これを文字が消えないようにするにはどうすればいいのでしょうか?

よろしくお願いします。
0206デフォルトの名無しさん2005/05/06(金) 23:09:10
高度なプログラミング技術だ。
0207デフォルトの名無しさん2005/05/06(金) 23:13:43
>>205
WM_PAINT内にTextOutを移す。
0208デフォルトの名無しさん2005/05/06(金) 23:33:32
HDC hd = GetDC(hwnd);を消す
02092052005/05/07(土) 00:30:13
>>207-208
ご解答ありがとうございます。
>>207
WM_PAINT内ではうまくいくのですがどうしてもループの中でやりたいときは何か手はあるのでしょうか?
>>208
やってみましたが表示されなくなってしまいました。
0210デフォルトの名無しさん2005/05/07(土) 00:38:21
>>209
>WM_PAINT内ではうまくいくのですがどうしてもループの中でやりたいときは何か手はあるのでしょうか?
メッセージボックスをモードレスなダイアログでモーダルに見せかけるようにすればできないことはないが
面倒だし君のスキルでは多分無理だ。
つか、なんでそんなことがしたいの?
0211デフォルトの名無しさん2005/05/07(土) 00:38:28
>WM_PAINT内ではうまくいくのですがどうしてもループの中でやりたいときは何か手はあるのでしょうか?
  _, ._
( ゚ Д゚) ?
0212デフォルトの名無しさん2005/05/07(土) 00:39:15
>>209
自分で再描画処理を作れ
0213デフォルトの名無しさん2005/05/07(土) 01:23:36
>209
>WM_PAINT内ではうまくいくのですがどうしてもループの中でやりたいときは何か手はあるのでしょうか?
汎用的な手は無いと思う。

DialogBox関数でダイアログを作成した場合、ダイアログを閉じるまで、DialogBox関数から
帰ってこない。=君が作ったメッセージループもGetMessage関数で止まってる。
Windowsの構造上無理。
0214デフォルトの名無しさん2005/05/07(土) 06:51:42
advanced windowsを買ったはいいが付録のソースを
コンパイルしようとしたらエラー出まくりな上に
最初からCDに入ってる実行ファイル郡は全て
「このコンピュータでは扱えないファイル形式です」だとよ(プゲラチョフwwwwwwwなめすぎwwwwwww意味分からんwwwwwww互換性ないから使えないってことか?wwwwwwwwこれがジェフリーの集大成なのか?wwwwwwwwwwwwww
0215デフォルトの名無しさん2005/05/07(土) 07:34:37
やっとコンパイル通りやがったぜ

   __             __/  / |   ┌─┼` _ _|_
     / ─ /  / \ ○   |   /  |   |┐  |   |   / |
  __/  _/  /   \    |  /  レ  /    レ  ̄ / |

    /\___/ヽ
   /''''''   '''''':::::::\
  . |(●),   、(●)、.:| +
  |   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::| +
   \  `ニニ´  .:::::/     +
,,.....イ.ヽヽ、ニ__ ーーノ゙-、.
:   |  '; \_  _ノ.| ヽ i
    |  \/゙\ /\|  i |
    >   ヽ. V   |   ||
0216デフォルトの名無しさん2005/05/07(土) 07:34:49
結局、>>169は何?
0217デフォルトの名無しさん2005/05/07(土) 07:50:50
リストビューの内容領域が、リストビュー自体より大きくなって
スクロールバーが出ているときに
スクロールバーがでないようにMoveWindowでサイズを変更したいのですが、
適切なサイズを計算するにはどうしたらよいですか?
0218デフォルトの名無しさん2005/05/07(土) 08:00:04
>>216
バカが知ったかしてみたかったんじゃねーの。
0219デフォルトの名無しさん2005/05/07(土) 08:28:34
>>217
GetClientRectでリストビューのサイズ取得してそのサイズにあわせてMoveWindow
0220デフォルトの名無しさん2005/05/07(土) 09:05:43
>>219
ちょっと質問を誤解されているようです。
GetClientRectの引数は親ウィンドウのつもりだったのかリストビューのつもりだったのか
わかりませんが、
リストビューそのもののサイズを
内側のスクロールバーがでなくなるように変えたいのです。
リストビューにGetClientRectしても、現在のサイズが返るだけでした。
0221デフォルトの名無しさん2005/05/07(土) 09:10:58
>>209
ループ内でInvalidateRect()とUpdateWindow()を呼べばいい。
0222デフォルトの名無しさん2005/05/07(土) 09:24:50
>>220
言ってる意味がわかりません
0223デフォルトの名無しさん2005/05/07(土) 09:35:22
超能力を使ってみた。
こんな意味じゃなかろうか↓
例えば、項目の文字列がかなり横長のに、ウィンドウの幅が50ピクセルくらいだと、
クライアント領域内に水平スクロールバーが表示されるってことかな?
人間だったら手動でビューの幅を広げるけど、
そのための十分なサイズを計測する方法を聞いているのだと思われ。
0224デフォルトの名無しさん2005/05/07(土) 10:02:33
最初からそういってるやん。
0225デフォルトの名無しさん2005/05/07(土) 10:08:39
>>223
超能力ありがとうございます!
超能力で質問にも答えていただけますか?

一応、GetScrollInfoでリストビュースクロールバーの情報を得て
nMaxとnMinをとって8ぐらい足すとうまくいくようなんですが
0226デフォルトの名無しさん2005/05/07(土) 10:17:45
なぜ糞挙動なアプリを作りたいのか、目的がわからない。
アイテムを挿入するたびにウィンドウの大きさが変わってしまうのか。
最初から表示したいものが決まってて、要素の数や幅が不変なのであれば
リストビューの属性をスクロールしない設定にしとけばいいんじゃね。
そういう設定項目あるよ。
0227デフォルトの名無しさん2005/05/07(土) 10:34:30
>>226
サイズを変更するのは初期化時のみで
あとはユーザーのリサイズにあわせます
表示したいものはデータによって変わりますので幅も変わります
糞挙動ということはないです
02282232005/05/07(土) 10:49:28
>>227
226は漏れじゃないぞよ。念のため。
各カラムのサイズを調べればよさげ?
ってかリストビューもあんまり使ったことないし、
徹夜明けの頭で適当に答えてるだけなので責任はもてない。
もっとマシなやつに聞いてくれ。寝る。
0229デフォルトの名無しさん2005/05/07(土) 11:13:47
幅なら幅って最初に言っといてほしいよな
0230デフォルトの名無しさん2005/05/07(土) 11:16:15
普通に考えりゃ幅だろ
縦を気にしてたらきりがないからな
0231デフォルトの名無しさん2005/05/07(土) 11:34:40
>表示したいものはデータによって変わりますので幅も変わります
>糞挙動ということはないです

どう考えても糞。
0232デフォルトの名無しさん2005/05/07(土) 11:54:34
縦だったら仕事で作ったのがあるけど、MFCべったりだ。
0233デフォルトの名無しさん2005/05/07(土) 12:02:44
縦幅ならアイテム数調べて、それ×何ピクセルか指定するだけでいいし
どうにでもなるやん。
0234デフォルトの名無しさん2005/05/07(土) 12:48:32
ClientToScreenはクライアント座標をスクリーン座標に変換する、とありますが
これはマルチモニタシステム上では「仮想スクリーン座標」に変換するものと
考えていいんですか?

自力でテストできたらいいんですが、生憎ディスプレイがひとつしかないので
0235デフォルトの名無しさん2005/05/07(土) 13:03:18
>>233
そして画面下を割るわけですね

つーか、わざわざ少しずつ広げるくらいなら最初から全画面表示しときゃいいじゃん
0236デフォルトの名無しさん2005/05/07(土) 14:09:23
↑脳味噌が一階層しかねぇのかよアホが。
0237デフォルトの名無しさん2005/05/07(土) 15:12:56
まぁそう自分を貶すなよ
0238デフォルトの名無しさん2005/05/07(土) 15:16:50
まぁ、APIの話題ではなくGUIがいかにあるべきかの話題なのですれ違い
0239デフォルトの名無しさん2005/05/07(土) 16:38:07
>>217,>>225
GetScrollRange あたりを調べてみて
GetSystemMetrics の幅や高さを足したら?

親ウィンドウも連鎖的にでかくなるのか?
0240デフォルトの名無しさん2005/05/07(土) 16:49:36
>>205
>>207のようにWM_PAINT内に移した上で、ループ内にInvalidateRect(hwnd,NULL,TRUE)とUpdateWindow(hwnd)でダメ?
0241デフォルトの名無しさん2005/05/07(土) 16:52:58
ウインドウハンドルからLOGFONT構造体を取得するにはどのようにすればいいでしょうか?
0242デフォルトの名無しさん2005/05/07(土) 16:55:28
>>166
できたことある
0243デフォルトの名無しさん2005/05/07(土) 16:57:29
>>241
ウインドウハンドルからって何?
ウインドウハンドルにフォントが関連付けられてる?
0244デフォルトの名無しさん2005/05/07(土) 17:04:29
>>243
HDCからHFONTを取得する方法きぼんぬ。
HDCはHWNDから簡単に取得できるしHFONTからLOGFONTも可能だし。
0245デフォルトの名無しさん2005/05/07(土) 17:06:06
デバイスコンテキストを理解せよ
0246デフォルトの名無しさん2005/05/07(土) 17:07:24
GetObject
0247デフォルトの名無しさん2005/05/07(土) 17:07:35
GetDCでいつも同じDCが返って来るとは限んないよ
0248デフォルトの名無しさん2005/05/07(土) 17:08:45
>>245
ありがとうございます。
デバイスコンテキスト関係は知識が浅いのでもう少し勉強します。
0249デフォルトの名無しさん2005/05/07(土) 17:09:09
じゃなかった
WM_GETFONT
0250デフォルトの名無しさん2005/05/07(土) 17:11:04
>>246
ありがとうございます。
それを試してみます。

>>247
その都度取得と開放を繰り返すので問題ないと思います。
02512322005/05/07(土) 17:20:02
>>235
顧客からの要求で、「ダイアログが画面内に収まらないなら画面縦一杯に出してListCtrlにスクロールバーを出せ。
さもなくば、適切なサイズにListCtrlをあわせてスクロールバーは出すな。
ただし、ダイアログのサイズは自由に変えられるようにしろ」なんてのがあったりするわけだがね。
#あ、説明不足で誤解されそうな悪寒。
0252デフォルトの名無しさん2005/05/07(土) 17:38:14
もうしゃべらないでいいよ無能
0253デフォルトの名無しさん2005/05/07(土) 18:56:17
指定されたフォルダから指定されたファイルを検索するWindowsの標準関数は、
ファイル名を一字一字比較して、末尾まで一致するファイルへのポインタを返す
という仕様になっていると思うのですが・・・間違ってないでしょうか?
0254デフォルトの名無しさん2005/05/07(土) 19:00:31
http://YahooBB219029188008.bbtec.net/

っ
うはっwwwwwwっwうはっwwwっwwwwwwwwwwww
wwwwwwっうぇ
wwwwwwwwwwww
wおkwww
wwwwwwおkwww
0255デフォルトの名無しさん2005/05/07(土) 19:01:22
>>253
指定されたフォルダから指定されたファイルを検索するWindowsの標準関数
の名前を書いてくれなきゃわからない。
0256デフォルトの名無しさん2005/05/07(土) 20:09:12
>>249
その方法でうまくいきました。
どうもです。

>>252
無能で悪かったな。
0257デフォルトの名無しさん2005/05/07(土) 20:15:57
最近よくみかける>>254みたいなのってなんなんだ?
0258デフォルトの名無しさん2005/05/07(土) 20:16:56
>>257
山田ウイルス
0259デフォルトの名無しさん2005/05/07(土) 20:36:24
>>253
ファイルへのポインタ?
0260デフォルトの名無しさん2005/05/07(土) 22:07:33
>>253
ワイルドカードがあるからそう単純ではないと思う。
0261デフォルトの名無しさん2005/05/07(土) 22:29:05
>>260
ワイルドカードは内部でPathMatchSpecを呼んでるだけだろ。
0262デフォルトの名無しさん2005/05/07(土) 22:39:10
ポップアップメニューって親ウィンドウの中じゃないと絶対表示できない?
グローバルなフックプロシージャからTrackPopupMenu使ってみたけど親ウィンドウ以外では表示されません。
なんか方法ありますか?
0263デフォルトの名無しさん2005/05/07(土) 22:50:19
なんのポップアップだよ
0264デフォルトの名無しさん2005/05/07(土) 22:56:45
別にウィンドウに限定されないけどなあ
0265デフォルトの名無しさん2005/05/07(土) 23:00:39
質問させてください

Cの構造体ってコンパイラによってメンバが
4バイトの境界にそろえられてしまったりすると思うんですけど、
Windowsビットマップをそのまま読み込んで表示しようとした時に
読み込んだバッファに構造体のポインタをそのまま当てはめて使っているサンプルを
見かけるのですが問題ないのでしょうか

手持ちのbccではオプションに色々指定してもちゃんと1バイト区切りになっていましたが
そういう取り決めになっていたりするんでしょうか
0266デフォルトの名無しさん2005/05/07(土) 23:10:27
多分心配無用
0267デフォルトの名無しさん2005/05/07(土) 23:19:49
>>265
構造体の定義で
struct {
 char a;
 int b;
};
なんていう馬鹿なことしなければ大概大丈夫。
0268デフォルトの名無しさん2005/05/07(土) 23:30:25
>>265
普通はBITMAPFILEHEADERの定義の前に
#pragma pack(2)
とか入ってるから大丈夫よ。
まあメンバごとに読んだ方が行儀がいいのは確かだけど。
02692652005/05/07(土) 23:32:37
ええと、BITMAPFILEHEADERやRGBQUADでWORDとBYTEがあるので大丈夫かなあと心配してみたんです

お話を聞く限り大丈夫そうなので構造体使って画像読み込む関数つくってみます
ありがとうございました!
0270デフォルトの名無しさん2005/05/07(土) 23:34:53
何もしないと、パディングされちまうけど、
BITMAPFILEHEADERとかBITMAPINFO、INFOHEADERとかRGBQUADとかのような、
パディングされたら困るやつは、ちゃんと定義のとこでパディングされないように細工してある
0271デフォルトの名無しさん2005/05/07(土) 23:52:14
>>166
MSDNのmixer〜のあたりを読めば書いてあります。
マイクはMIXERLINE_COMPONENTTYPE_SRC_MICROPHONEでmixerGetLineInfo。
0272デフォルトの名無しさん2005/05/08(日) 00:22:52
ただ、ビットマップに関する構造体に関しては定義でパディング対策してあるけど
ビットマップの実際のビットデータ部は、画像の横幅によってはスキャンラインごとに、
ラインの最後にパディングが有るから、ビットマップファイルを触るときはそこに注意だな
02732652005/05/08(日) 00:28:51
>>270 >>272
レスありがとうございます
きちんと対策がしてあるものなのですね

データ部の4byte境界は横幅とビットカウントから1ラインのバイト数出す
関数作って対応済みです(`・ω・´) シャキーン

いろいろ心配していただいてありがとうございました
0274デフォルトの名無しさん2005/05/08(日) 00:56:53
>>273
その対策というのが>>268
0275デフォルトの名無しさん2005/05/08(日) 00:57:46
Win32API でのファイル操作についての質問です。

#include <windows.h>

HANDLE hFile;
・・・・・・・・・・・・
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow) {
HWND hwnd;
MSG msg;
WNDCLASS winc;

hFile = CreateFile(lpCmdLine , GENERIC_READ , FILE_SHARE_READ , NULL ,
OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL);
if (hFile == INVALID_HANDLE_VALUE) {
MessageBox(NULL , TEXT("ファイルが開けません") , NULL , MB_OK);
return -1;
}
(以下略)

をコンパイルして実行したら、存在するファイル名をコマンド引数に指定しても
「ファイルが開けません」のエラーメッセージが出てしまいます。

当方の開発環境は、
OS:Windows XP
コンパイラ: lcc-win32 Ver3.8
です。

どなたか問題点を教えて下さい。お願いしますm(_ _)m
0276デフォルトの名無しさん2005/05/08(日) 01:03:26
>>275
CreateFileに渡しているlpCmdLineに何が入っているか確認してみようとは思わん?
0277デフォルトの名無しさん2005/05/08(日) 01:33:09
>>276
ダイアログボックスには何度も表示しましたが、改めてコンソールに出力してみると、
276さんに言われるまで見落としていたのですが、lpCmdLine に入っていたのは
 C:\Document and Settings\・・・・\filename.txt
ではなくて、
 "C:\Document and Settings\・・・・\filename.txt"
↑                            ↑
文字列そのものの両端にダブルクォーテーションがある

ということに気づきました。
気づかない方がヴァカなのかも知れませんが、(私にとって)これは盲点でした。
でも、その一言のお陰で解決しました。どうも有難うございましたm(_ _)m感謝感謝
0278デフォルトの名無しさん2005/05/08(日) 02:41:52
>>277
ちなみにD:\とかだとダブルクォーテーションが排卵よ
0279デフォルトの名無しさん2005/05/08(日) 03:23:07
スペースが入れば入る
0280デフォルトの名無しさん2005/05/08(日) 03:24:34
スペースって宇宙の事だよね
0281デフォルトの名無しさん2005/05/08(日) 03:59:09
急速にスレの質が低下してまいりました
0282デフォルトの名無しさん2005/05/08(日) 04:18:38
>>278
D:\・・・ でもダブルクォーテーション入りました(当方の環境では D ドライブは CD-ROM)。
こちらの環境が Windows XP だからなのか、それとも lcc-win32 のためなんでしょうか・・・・・・
0283デフォルトの名無しさん2005/05/08(日) 06:19:39
サボらないでコマンドラインパーサ書けよ
0284デフォルトの名無しさん2005/05/08(日) 06:54:03
>>283
"を含むパス名って存在しないんだっけ?
パーサを書こうにも仕様がわからんとね。
0285デフォルトの名無しさん2005/05/08(日) 07:31:04
存在しねぇよ
仕様がわからんとねとか言う前に、自分でファイル名つけてみろよ
0286デフォルトの名無しさん2005/05/08(日) 07:31:21
なんでファイル名にスペースなんて使えるようにしたんだろう
0287デフォルトの名無しさん2005/05/08(日) 07:46:14
ファイル名に\ とか / とか使われたらお手上げだよ。
0288デフォルトの名無しさん2005/05/08(日) 08:53:31
CreateFileの前にPathUnquoteSpaces(lpCmdLine);を入れると解決するよ。
0289デフォルトの名無しさん2005/05/08(日) 11:00:01
Path系のAPIはIE4以降必須だから・・・
0290デフォルトの名無しさん2005/05/08(日) 11:12:03
今時IE4以降が入ってないようなWinマシン使ってるヤツが居るのか?
天然記念物だな
0291デフォルトの名無しさん2005/05/08(日) 11:41:22
>>290
某コンピューター系大企業の生産現場では、製品チェック用のノーマルWin95PCが現役だったよ。
工場とかには結構な数あるんじゃないかな?
0292デフォルトの名無しさん2005/05/08(日) 11:50:33
Win95ならもう既にshlwapi.dll入ってたと思うが
0293デフォルトの名無しさん2005/05/08(日) 11:51:37
おいおい
製品チェック用のマシンにどこの馬の骨とも知らんヤツの作ったアプリ入れるんかい
0294デフォルトの名無しさん2005/05/08(日) 13:03:46
自社製より信頼性が高いと思っているのかも知れない。
02952342005/05/08(日) 14:59:05
だれかおせーて
0296デフォルトの名無しさん2005/05/08(日) 15:58:27
質問したかて、必ず知ってる人間が居るとは限らん
とりあえず俺はしらね
0297デフォルトの名無しさん2005/05/08(日) 16:21:16
仮想の意味がわからんが、モニタ2台あるとスクリーン座標はそのまま出るよ
たとえば、1024幅が2台あってプライマリを左にすれば、 0 - 2047 の範囲になる
0298デフォルトの名無しさん2005/05/08(日) 17:07:38
ダライアス可能?
0299デフォルトの名無しさん2005/05/08(日) 17:33:52
>>298
ひっくり返るほどスレ違いすぎ。
0300デフォルトの名無しさん2005/05/08(日) 18:46:41
Gと外伝なら見たことあるな。
えっ、ダライアスだよ。
03012342005/05/08(日) 20:19:46
>297
ありがとうございます。
仮想スクリーンてのはこのあたりの文章を参照しました。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/monitor_7hym.asp
0302デフォルトの名無しさん2005/05/08(日) 21:31:20
すんません、
セミコロン(;)つきのファイル名って存在しますか?
0303デフォルトの名無しさん2005/05/08(日) 21:37:52
どころか、セミコロンだけでも存在できる。
0304デフォルトの名無しさん2005/05/08(日) 21:42:12
あちゃあ、まぢですか?

セミコロンをファイル名リストの区切りにしようとしてたんだけど、
破綻しちゃった。
おススメの区切り文字ってありますか?
0305デフォルトの名無しさん2005/05/08(日) 21:51:20
>>304
タブ文字でも改行でも
0306デフォルトの名無しさん2005/05/08(日) 21:52:21
>>304
MFCのCFileDialogでやってるように縦簿'|'はどう?
03073062005/05/08(日) 21:53:35
「棒」ね
0308デフォルトの名無しさん2005/05/08(日) 21:58:03
>>304
普通にセミコロンでいいじゃんか。
環境変数のパス名とかの区切りだし
0309デフォルトの名無しさん2005/05/08(日) 22:02:29
>>304
'\0'
0310デフォルトの名無しさん2005/05/08(日) 22:06:10
縦棒にします!
ありがとうございました!
0311デフォルトの名無しさん2005/05/08(日) 23:05:50
環境変数ではどうしてんだろう・・・
0312デフォルトの名無しさん2005/05/08(日) 23:31:17
UIやメッセージを表示する専用の子ウィンドウを沢山持つアプリケーションを作る場合、
その時点で使ってない子ウィンドウは、どのようにしておくのが推奨されていますか?
毎回、使う度にCreate と Destroyを繰り返すのはシステムに負荷が掛かるのでしょうか?
一応、作成しておいて、ただ見えなくしておくだけの方がいいのでしょうか?
0313デフォルトの名無しさん2005/05/08(日) 23:32:27
>>312
好きにしろ
0314デフォルトの名無しさん2005/05/08(日) 23:44:28
>>312
TPOに応じて方法を使い分けるべきかと。
少数の複雑なウインドウなら隠蔽するだけのほうがいいと思うが、多数のボタンやエディトボックスなら使うたびにCreateとDestroyを繰り返したほうがいい。
一つのプログラムに二つの方法を混在させると開放し忘れでリークするということもあるだろうからどちらかに統一するのがベター。
0315デフォルトの名無しさん2005/05/09(月) 00:11:27
回答ありがとうございます。
マナーの良いプログラミングを心掛けていきたいと思っています。
0316デフォルトの名無しさん2005/05/09(月) 00:15:47
フックについてですが、WH_GETMESSAGE でフックをかけているんですが、
ウィンドウのアクティブ/非アクティブを変えても WM_ACTIVE が捕捉できません。
全く同じコードで WM_LBUTTONDBLCLK などのメッセージは捕捉できるのですが
WM_ACTIVE は何か特別扱いになっているのでしょうか?
0317デフォルトの名無しさん2005/05/09(月) 00:44:41
>>311
フォルダ名を""で括ればok
0318デフォルトの名無しさん2005/05/09(月) 00:57:32
引用符切り分けるのめんどくさい
0319デフォルトの名無しさん2005/05/09(月) 01:08:14
>>316
WM_ACTIVEはsendされるメッセージ。
WH_GETMESSAGEはpostされたメッセージしか捕らえられない。
0320デフォルトの名無しさん2005/05/09(月) 01:51:38
>>319
なるほど。ありがとう御座います。
WH_CALLWNDPROC でフックできました。
0321デフォルトの名無しさん2005/05/09(月) 03:41:12
FindFirstChangeNotification()
や
ReadDirectoryChangesW()
のように、ディレクトリごとではなく、ファイルごとに変更を知る方法はありませんか?

一つのファイルを複数のプロセスが共有で開いて読み書きしている時に、
他の誰かが書きこんだことを知りたいので、書き込まれた位置までわかるとありがたいのですが。
0322デフォルトの名無しさん2005/05/09(月) 04:07:20
FindFirstChangeNotification
0323デフォルトの名無しさん2005/05/09(月) 04:27:12
それって、ネットワークドライブでも使える?
0324デフォルトの名無しさん2005/05/09(月) 05:43:25
使える
0325デフォルトの名無しさん2005/05/09(月) 07:18:57
PROCESSENTRY32構造体についてなんですが

PROCESSENTRY32 unko;

と宣言してるのですが
「'PROCESSENTRY32' : 識別名を宣言するのに、型が指定されていません」
とエラーがでます。解決方法を教えてください
0326デフォルトの名無しさん2005/05/09(月) 08:44:11
PROCESSENTRY32 構造体を宣言してください。
0327デフォルトの名無しさん2005/05/09(月) 08:47:08
#include <tlhelp32.h>
0328デフォルトの名無しさん2005/05/09(月) 09:03:47
>>327
既にやってる
0329デフォルトの名無しさん2005/05/09(月) 09:13:09
http://dhcp255-146.tamatele.ne.jp/
うぇwwwっうぇwwwwwwwwwwwwっwwwっうぇ
うはっwwwwwwwwwwwwwwwうはっwww
うぇwwwっwおkwwwっwwwwwwwwwwwww
0330デフォルトの名無しさん2005/05/09(月) 09:13:12
というか<tlhelp32.h>にインクルードしてるのに
「CreateToolHelp32Snapshot' : 定義されていない識別子」って出ます。原因と解決方法を教えてください
03313302005/05/09(月) 09:17:51
すいません解決しました
0332デフォルトの名無しさん2005/05/09(月) 09:41:32
どう解決したんだよ
>>328を書いた以上、経過を説明してくれないかな
03333302005/05/09(月) 10:18:54
関数名間違ってただけ
0334デフォルトの名無しさん2005/05/09(月) 10:28:52
>>325
...ENTRY... に「出るもの」の名前は後任者が勘違いしやすい。ここはもっと
ピタッとする名前があるのにしないのはまずいな。
0335デフォルトの名無しさん2005/05/09(月) 11:34:35
334 が非常に的外れなレスをしている気がしないでもないが、
0336デフォルトの名無しさん2005/05/09(月) 16:00:17
>>334
いやいや、その変数をEntryするのかもしれんぞ。
#どこにかは知らんが。
0337デフォルトの名無しさん2005/05/09(月) 16:46:46
シリアルポート2つ使うプログラムで同じCOM番号を指定した時にそれを共有して使う方法を教えてください
0338デフォルトの名無しさん2005/05/09(月) 16:49:33
Telephony API
0339デフォルトの名無しさん2005/05/09(月) 17:05:29
>>338
詳しく
0340デフォルトの名無しさん2005/05/09(月) 17:17:22
>>339
http://www.google.co.jp/
0341デフォルトの名無しさん2005/05/09(月) 17:45:05
>>336
あの続きのコードを見たくなった。日経の小説も気になってんだけど。
0342デフォルトの名無しさん2005/05/09(月) 18:06:47
>>340
知らないならレスしないで下さい。ウザイだけです、消えてください
0343デフォルトの名無しさん2005/05/09(月) 18:08:01
オマエモナ
0344デフォルトの名無しさん2005/05/09(月) 18:14:45
騙りが横行してる希ガス
0345デフォルトの名無しさん2005/05/09(月) 18:20:42
共有ねぇ。DuplicateHandleするとどうなるのかは気になるけど、
素直にアウトプロセスCOMみたいなRPCな仕掛けを挟んだら?
0346デフォルトの名無しさん2005/05/09(月) 19:37:00
めんどい
0347デフォルトの名無しさん2005/05/09(月) 21:09:50
コンボボックスを選択して確定することにするにはどうしたらいいでしょうか?
ただたんにテキストをかえるだけではだめなようです。
そのコンボボックスのハンドルはわかっています。

wm_Settext文字を変更することはできたのですが内部的には確定されていないのか結果が反映されないのです
0348デフォルトの名無しさんNGNG
>>347
CB_ADDSTRINGで文字列を追加して、帰ってきたインデックスをCB_SETCURSELで選択。
03493212005/05/10(火) 09:58:23
>>322
あの、それはディレクトリごとだし、
ファイルの変更部分は通知されませんが。
0350デフォルトの名無しさん2005/05/10(火) 10:32:06
ReadProcessMemoryを使ってもことごとくNULLが返ります。アクセス権がないようなのですが解決方法を教えてください。
あとPROCESSENTRY32構造体のメンバth32ProcessIDにはProcess32Nextなどで最後に得たプロセスIDが格納されるのですか?
0351デフォルトの名無しさん2005/05/10(火) 10:49:53
>>349
ファイル単位で監視っていうのは無かったと思う。
0352デフォルトの名無しさん2005/05/10(火) 10:58:45
>>349
ディレクトリの変更がきたら自分で調べりゃいいだろ
0353デフォルトの名無しさん2005/05/10(火) 10:59:49
なんでもかんでもAPIに無いと、何もできないのだろうか
0354デフォルトの名無しさん2005/05/10(火) 12:20:28
>348
ありがとうございます
しかしそれでは目的のテキスト(CB_SETCURSELでセットしたインデックスのテキスト)は一瞬表示されますが
それが選択状態にはならず元にもどってしまいます

なにかいい方法はないでしょうか
0355デフォルトの名無しさん2005/05/10(火) 12:30:30

>>353を晒し上げ(´,_ゝ`)
0356デフォルトの名無しさん2005/05/10(火) 12:40:49
>>354
他のイベントで変な事してるんじゃないのか?
0357デフォルトの名無しさん2005/05/10(火) 12:45:30
そのようなこともないと思います
新規で試しにワードパッドのフォントを変えるものを作ってみましたが
同様でした。

コードは
SendMessage((HWND)コンボボックスのハンドル,CB_SETCURSEL,77,0);
念のためそのコンボボックスの親ウィンドウに
SendMessage((HWND)親ウィンドウのハンドル, WM_COMMAND,MAKEWPARAM(165, CBN_SELCHANGE),(LPARAM)(HWND)コンボボックスのハンドル);
と送ってみましたがそれでもダメでした
0358デフォルトの名無しさん2005/05/10(火) 12:48:32
>>357
>新規で試しにワードパッドのフォントを変えるもの

新規で作って検証するなら、
ウィンドウにコンボボックスのみを貼り付けて、
そのコンボボックスに CB_SETCURSEL を送るだけじゃないのか?

って言うか、外部プロセスのコンボボックスを変えようとしている?
0359デフォルトの名無しさん2005/05/10(火) 12:50:06
申し遅れましたがその通り外部のプロセスのコンボボックスです。
0360デフォルトの名無しさん2005/05/10(火) 12:51:08
やはりこれもwin98で影響を受けたsetforeground同様の制限をもらってしまうのでしょうか?
0361デフォルトの名無しさん2005/05/11(水) 01:28:05
質問なのですが
Win32において
Destoryを実行した場合
Destoryを実行されたWindowが一番最後にうけとるメッセージはなんなのでしょうか?
WM_NCDESTROYが最後でいいのでしょうか?

私的ライブラリでGUIをクラスライブラリ化したのですが
ウィンドウが破棄されたタイミングで自身のインスタンスにたいして
delete thisを行いたいのです。

MFCのほうではPostNcDestroyなるメソッドがあるっぽいのですが・・・
Win32オンリーの場合はどのように対処したらよいのでしょうか?
0362デフォルトの名無しさん2005/05/11(水) 01:30:29
つspy++
0363デフォルトの名無しさん2005/05/11(水) 01:53:31
>>361
それで良いと思う。気になるならMFCのソースを見てコードをまねれ。
0364デフォルトの名無しさん2005/05/11(水) 06:52:22
DestroyWindowを実行すると、WM_DESTROY、WM_NCDESTROYの順番でメッセージが送られる
その後のWM_QUITはウィンドウプロシージャでは受け取らない
よって、NCDESTROYが最後にウィンドウが受け取るメッセージ
03653492005/05/11(水) 09:55:50
>>351-353
ありがとう。
無駄に重くなるけど、ディレクトリごと監視します。

>>350
ReadProcessMemoryの返り値はBOOLですよ。
0が返ってきたら、GetLastError()してエラーコードを見ましょうよ。
0366デフォルトの名無しさん2005/05/11(水) 11:59:41
>>365
あぁ?失敗したらヌルポが返るんだよデブ。もう原因わかったからどっか行っていいよ
0367デフォルトの名無しさん2005/05/11(水) 12:09:09
>>366
「ヌルポ」がcatchできないんですが^^
0368デフォルトの名無しさん2005/05/11(水) 13:30:36
>>366
まあしねよぶた
0369デフォルトの名無しさん2005/05/11(水) 14:28:27
StretchBltの縮小画質がありえないくらい
汚いんですが(ゴミが入るようなかんじ)、フリーか何かで代用のAPIないでしょうか?
教えてください
0370デフォルトの名無しさん2005/05/11(水) 14:31:15
何でもかんでも API って言えばいいと思ってる奴
             キタ━━━━(゚∀゚)━━━━ッ!!
0371デフォルトの名無しさん2005/05/11(水) 14:36:43
>>369
SetStretchBltMode はどのモードでやった?
0372デフォルトの名無しさん2005/05/11(水) 15:28:24
>>369
つ[DirectX]
0373デフォルトの名無しさん2005/05/11(水) 15:35:07
gdi plus
0374デフォルトの名無しさん2005/05/11(水) 16:14:07
IPicture::Render
0375デフォルトの名無しさん2005/05/11(水) 16:22:29
自前でリサイズしたら?
0376デフォルトの名無しさん2005/05/11(水) 16:57:48
誘導されてきました

フォルダの中のファイルの監視をしたいのですが
下のコードを実行して c:\test フォルダ内のファイルの内容を変更すると
メッセージボックスが二回表示されてしまいます。
変更は一回しかしていないのに二回でてしまうのですが
ここまでコードを短くしても出るので行き詰まってしまいました
二回検知してしまう動作が正しいのでしょうか?
どこかおかしくて二回出てしまうのならばご指摘お願いします。

HANDLE hFind = FindFirstChangeNotification( "C:\\test\0", FALSE, FILE_NOTIFY_CHANGE_SIZE );
if( hFind == INVALID_HANDLE_VALUE )
  return;

while( 1 )
{
  DWORD ret = WaitForSingleObject( hFind , INFINITE );
  if( ret == WAIT_OBJECT_0 )
  {
    MessageBox( NULL, "TEST", "Changed!", MB_OK );
    if( FindNextChangeNotification( hFind ) == 0 )
      return;
  }
}
FindCloseChangeNotification( hFind );
0377デフォルトの名無しさん2005/05/11(水) 17:54:36
>>376
変更手段によるかと。
例えばエディタの場合、一時ファイルを作ったりするから一回の変更と思っても
複数回ファイル操作が行なわれているかも。

実際、fopen(..., "w")を行なうと空のファイルができるのでこの段階で一回、
fclose()でバッファフラッシュが起きて一回、都合2回通知されることは実験で確認した。
0378デフォルトの名無しさん2005/05/11(水) 18:02:26
>>376
何でファイルを変更しているのか知らないけど、多くのソフトはファイルを一度
0 サイズにクリアしてから改めて書き込む (CreateFile() で CREATE_ALWAYS を
指定したり、fopen() で "w" を指定していたりなど) ので、
 1. 0 クリアで 1 回
 2. データの書き込みで 1 回
の合計 2 回、変更が検知される。
(試しに 0 バイトのデータを保存してみること)
さらに、ディスクキャッシュサイズごとに書き込むので、そのたびに
変更が検知される可能性もある。
03793762005/05/11(水) 18:40:25
>>377
>>378
そういうことだったのですか!よく分かりました。
ファイルが変更されたあとフォルダのサイズが変わる?ので二回きている
とか色々考えていました
ちなみにファイルはテイストファイルでnotepadで書き換えていました

でも二回くるのはどうしようもないですね
ちょっと厄介になってきましたが
上手く一回だけ処理できるよう試行錯誤してみます

ありがとうございました
0380デフォルトの名無しさん2005/05/11(水) 18:54:06
テイストファイル(・∀・)!! ワラタ!!
0381デフォルトの名無しさん2005/05/11(水) 18:57:14
>>380
箸が転がっても笑う人?
0382デフォルトの名無しさん2005/05/11(水) 18:59:37
>>381
いやそれはさすがに                                               笑う
0383デフォルトの名無しさん2005/05/11(水) 19:11:28
笑う(・∀・)!! ワラタ!!
0384デフォルトの名無しさん2005/05/11(水) 19:17:41
  _  ∩
( ゚∀゚)彡 ワラタ!!ワラタ!!
 ⊂彡
0385デフォルトの名無しさん2005/05/11(水) 19:18:55
ここはハッピーなインターネットですね?
0386デフォルトの名無しさん2005/05/11(水) 20:12:21
WAVEファイルに格納されているサンプリングデータを取得するには、
WAVEファイルを自前で解析するしか方法はありませんか?
WAVE ファイルを解析するための API はないのでしょうか?
0387デフォルトの名無しさん2005/05/11(水) 20:17:27
WaveOut
0388デフォルトの名無しさん2005/05/11(水) 20:33:09
そもそもWaveファイルにしてもBitmapファイルにしてもファイル構造はどっちも単純だろうに。
0389デフォルトの名無しさん2005/05/11(水) 20:35:59
>>386
標準のwavファイルならヘッダを取り除けば、あとは生のPCMデータのはずだけど。

低レベル再生したいのなら、>>387のWaveOut系APIでも使えば良い。
再生中に、サンプルデータも自由に処理できるしね。

高レベルAPIでいいなら、PlaySound()やsoundPlaySound()で。
0390デフォルトの名無しさん2005/05/11(水) 20:43:59
解析したいと言ってるのにPlaySoundはないだろうw
ところでMCIってまだあるのかな。
考えたら5年ぐらいマルチメディア刑API触ってないや
0391デフォルトの名無しさん2005/05/11(水) 20:47:12
>>389
waveファイルってRIFF形式だった気がするんだが。
mmio〜系のAPIで操作できる・・・はず
0392デフォルトの名無しさん2005/05/11(水) 20:48:47
>>389
> 標準のwavファイルならヘッダを取り除けば、あとは生のPCMデータのはずだけど。

PCMとは限らないんだけど。。。
0393デフォルトの名無しさん2005/05/11(水) 20:52:55
>>390
もちろん残ってる。Win95の頃と実装は変わってるようだけど。
0394デフォルトの名無しさん2005/05/11(水) 22:19:33
>>386
作るのが面倒臭かったらこんなの使ってみたら?
Wave File Library(Windows95/98/Me/プログラミング)
ttp://www.vector.co.jp/soft/win95/prog/se214677.html
0395デフォルトの名無しさん2005/05/11(水) 22:25:02
宣伝乙。
いやしかし、既成ライブラリに頼るというのはこの場合正解だよ。
WavOutは使いやすいとは言い難いしな。
0396デフォルトの名無しさん2005/05/12(木) 01:11:31
ピクチャーコントロールにDirectXで描画するダイアログベースのツールを作ろうとしているのですが、
ピクチャーコントロールの更新されるタイミングが分からず困ってます。
DirectXの描画特有の問題かとも思ったのでDXスレで伺ったのですが、
なかなかレス頂けないみたいなのでこちらにも失礼します。

まずはアプリ起動時にDXで適当な矩形でも表示してみようと、
WM_INITDIALOGで矩形描画関数を呼んでみたのですが、
一瞬描画されたあと、ピクチャーコントロールの色で塗りつぶされてしまうようでした。
なので、WM_PAINT内でも同じように描画関数を呼んで見たのですが相変らず
起動時に矩形を表示してくれません。
(というかピクチャーコントロールの描画で消されているような感じ。)
WM_LBUTTONDOWN内などで描画すればきちんと表示されるのですが、
WM_MOVE内で呼んだ時などは、一度目の移動では表示されず、
二度目以降の移動では表示されるという、よく分からない挙動になっています。
どうしたらいいのでしょうか?

環境はW2k、VC6、DX9.0bです。よろしくお願いします。
0397デフォルトの名無しさん2005/05/12(木) 01:58:25
>>396
まずはDirectX描画域の背景を描画しない設定にする。
ダイアログのスタイルにWS_CLIPCHILDRENを適用、
コントロール側のWM_ERASEBKGNDで0以外の値を返す
これでちらつき・上書きは消えるはず。
0398デフォルトの名無しさん2005/05/12(木) 02:18:11
Win32API を使用したプログラムを実行したときに、コマンドプロンプトを待たせない方法はないのでしょうか?

例えば、コマンドラインから notepad を起動したとき、

 C:\>notepad[改行]
 
 C:\>
 (notepad が開く)

となりますが、自作のプログラムでは

 C:\>hogehoge[改行]
 (hogehoge が終了するまで待機状態)

となってしまいます。
これを解決するにはどうすればよろしいのでしょうか?
0399デフォルトの名無しさん2005/05/12(木) 02:23:26
>>398
コンソールアプリでビルドしてないか?
04003982005/05/12(木) 02:28:36
ビルドというか、lcc-win32 でプログラムを作成し、

 C:\>lcc hogehoge.c
 
 C:\>lcclnk hogehoge.obj

というふうに実行ファイルを作成しています。
それとも、この環境では >>398 の問題を解決することは出来ないのでしょうか?
0401デフォルトの名無しさん2005/05/12(木) 02:46:14
Meadow2ってエディタについてくるfiber.exeってやつなら
C:\ > fiber.exe hoge.c  
ってすれば
「.c」拡張子のファイルをクリックした時に起動するプログラムがそのファイルを開いて
シェルにも処理がもどる。
0402デフォルトの名無しさん2005/05/12(木) 02:54:22
>>400
それは「Win32API」の話ではなく、特定の処理系の話なのでスレ違い
04033982005/05/12(木) 02:58:49
すみません、説明不足でした。

エディタのことではなくて、自分で作成(コンパイル)した Win32API プログラムを実行したときに、
そのプログラムが実行したままシェルにも処理が戻るようなプログラムを作りたいのです。

 C:\>lcc hogehoge.c
 
 C:\>lcclnk hogehoge.obj
 
 C:\>hogehoge

 C:\>
 (hogehoge.exe は実行されたまま)

となるような hogehoge.c を作りたいのですが、どうすればよろしいのでしょうか?
プロセスやスレッドについて調べてみても、どうもうまく行きません。
0404デフォルトの名無しさん2005/05/12(木) 02:59:28
void FreeConsole(void);
04053982005/05/12(木) 03:13:58
>>404
そんな関数があったんですね。
どうもありがとうございました!!m(_ _)m感謝感謝
04063962005/05/12(木) 03:38:07
>>397
ありがとうございます。

>まずはDirectX描画域の背景を描画しない設定にする。
>コントロール側のWM_ERASEBKGNDで0以外の値を返す

この二つの意味は同じでしょうか?別の事を指してますか?とりあえず
DirectXで描画したいのはダイアログ内に配置したピクチャーコントロールなのですが、
これをサブクラス化してその自前プロシジャ内に
case WM_ERASEBKGND:
return 1;
と追加してみたのですが、変わりませんでした。

>ダイアログのスタイルにWS_CLIPCHILDRENを適用、
これはピクチャコントロールが乗ってる親ダイアログのプロパティで設定しても変わりませんでしたし、
ピクチャコントロール自体にSetWindowLongでWS_CLOPCHILDRENを設定してみても変わりませんでした。
0407デフォルトの名無しさん2005/05/12(木) 03:47:08
犯罪予告祭り会場
http://ex10.2ch.net/test/read.cgi/news4vip/1115834824/
0408デフォルトの名無しさん2005/05/12(木) 04:03:08
>>398
今の状態だとエクスプローラから実行するとコンソールが開くんでないかい。
それで構わないのならFreeConsoleでも使ってればいいんだけど、
そうじゃないのなら、lcclnkのマニュアルをよく読んどけ。
0409デフォルトの名無しさん2005/05/12(木) 05:37:12
Win32APIの話っていうより
そもそもWindowsプログラミングの
0410デフォルトの名無しさん2005/05/12(木) 06:34:19
>>376
何をしたいのかによるけど、
通知を何度受けるかわからない
という前提で作ったほうがいいですよ。

また通知を受けるたびに処理をしてたら重くなるので、
通知を受けたら、変更があったということだけ覚えておき、
それに対するアクションはその場ではしないほうがいいです。

もし通知に対してアクションをしたいのであれば、
1秒くらい待ってからやったほうがいいかも。
0411デフォルトの名無しさん2005/05/12(木) 10:40:44
ウインドウのタイトルや枠などの色の取得方法を教えてください。
0412デフォルトの名無しさん2005/05/12(木) 11:18:49
GetSysColor
0413デフォルトの名無しさん2005/05/12(木) 12:26:40
文字列が正当なURLであるかどうかを確かめるAPIと、
URLからホスト名などを抜き出すAPIはありますか?
0414デフォルトの名無しさん2005/05/12(木) 12:31:00
>>413
使ったことは無いけど、

>文字列が正当なURLであるかどうかを確かめるAPI
::UrlIs()にURLIS_URLを渡して確認する。

>URLからホスト名などを抜き出すAPI
::UrlGetPart()にURL_PART_HOSTNAMEを渡して切り出す
0415デフォルトの名無しさん2005/05/12(木) 14:58:39
>>414
できました。
ありがとうございます。


#shlwapi.dllには、自前で書くこともできるけど、面倒くさいから書きたくない処理をする関数がたくさんある気がする。
0416デフォルトの名無しさん2005/05/12(木) 16:22:36
MSはレジストリを使うことを推奨してるのに
レジストリを使うアプリが嫌われる理由は何?
0417デフォルトの名無しさん2005/05/12(木) 16:42:40
ユーザーが消しにくいから。

インストールしたフォルダを削除しても消えないからね。
まあそれが利点でもあるんだけど。
0418デフォルトの名無しさん2005/05/12(木) 17:03:32
レジストリをいじりまくるとレジストリファイルが断片化・肥大化するから。
Win9xの場合はそれが原因で不安定になることがあった。

もういい加減過去の話だが。
0419デフォルトの名無しさん2005/05/12(木) 17:08:54
.NETではXMLで保存するのが推奨されるとかどこかで読んだ気がするんだけど
0420デフォルトの名無しさん2005/05/12(木) 17:41:01
ちょっとしたツールだと、フォルダごとコピーすれば設定もコピーできて楽。
0421デフォルトの名無しさん2005/05/12(木) 18:15:16
しかしファイルで保存するにしてもユーザーのフォルダにしてほしいなあ
自分ちのマシンならどこでもいいが・・・
0422デフォルトの名無しさん2005/05/12(木) 19:53:11
ユーザのフォルダに設定ファイルを置くと、
1つのフォルダごとコピー・移動・削除
では済まなくなるので、レジストリと大差ないんだよね。
その割には、メリットがない。

EXEと同じフォルダにINIファイルを置くのは、
シングルユーザ当たり前のDOS時代の悪い慣習を引きずってると思う。

レジストリにすれば、ファイルのインストール先を気にしなくていいし、
レジストリをバックアップすれば、一括して設定をバックアップできるよね。
0423デフォルトの名無しさん2005/05/12(木) 20:06:10
便乗で質問ですが、
ユーザーのフォルダの取得って何を使えばよいですか?
ユーザー毎の設定を\Documents and Settingsの奥深くにある
フォルダに置きたい。
0424デフォルトの名無しさん2005/05/12(木) 20:10:22
>>422
初心者の発想だね
0425デフォルトの名無しさん2005/05/12(木) 20:17:34
>>423
GetEnviromentVariableで環境変数HOMEPATHを取得
USERPROFILEでもいい
0426デフォルトの名無しさん2005/05/12(木) 20:23:18
2000、XPでもレジストリのコンパクションはできないから肥大化する一方
0427デフォルトの名無しさん2005/05/12(木) 20:37:49
>>425
ありがとう。
0428デフォルトの名無しさん2005/05/12(木) 20:41:31
なんだよ、レジストリってのは欠陥システムだな。
0429デフォルトの名無しさん2005/05/12(木) 20:42:21
ややこしいことが1つの売りだったんだよ
商用とかシェアウェアにとっては
0430デフォルトの名無しさん2005/05/12(木) 20:56:28
>>423,425

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnw2kcli/htm/AppSpecDesk5.asp

SHGetFolderPath() を使ったやり方が書いてある。
こっちの方が MS の推奨ということか?
0431デフォルトの名無しさん2005/05/12(木) 22:14:00
SH〜系ってなんかアバウトというか、信用ならねーって感じのAPI群だけど、
それがMS推薦っぽいね。
0432デフォルトの名無しさん2005/05/12(木) 23:35:08
なんていうかもうapi関数大杉('д`)
0433デフォルトの名無しさん2005/05/13(金) 00:29:19
>>426
レジストリのサイズは消せば小さくなると思うけど・・・
VS.NETをインストール中に、一時的にものすごく大きくなるけど、インストール終わると減るし。

>>424
他に良い方法があれば教えてください。

1つのINIファイルの中にユーザごとに設定を書くと、
一人の設定を他所に移すのが難しくなるよね。

ユーザ別にINIファイルを分けると、
ユーザ名が変わったときにファイル名を変更しないといけない。

ユーザ名の代わりにSIDを使うと、他所のドメインやPCに移したら困るし。

0434デフォルトの名無しさん2005/05/13(金) 00:52:58
>>433
キーや値を削除してもサイズが減らない、それがWINDOWSのレジストリ
0435デフォルトの名無しさん2005/05/13(金) 00:55:48
VACUUMかければいいじゃない
0436デフォルトの名無しさん2005/05/13(金) 01:39:36
>>435
詳しく
0437デフォルトの名無しさん2005/05/13(金) 01:42:17
そりゃPostgreSQL
0438デフォルトの名無しさん2005/05/13(金) 01:50:05
どうせレジストリがパンクする頃には
新ウィンドウズが出てるんだろ。
XPももう過去の物だろw
0439デフォルトの名無しさん2005/05/13(金) 04:05:29
Snes9xにキーの入力情報送りたいんだけど
SendMessageやPeekmessageでは矢印や
ABYXに相当するボタンの情報を送っても無反応です。
(F1や1等ゲームというよりSnesの機能に相当するものは動きます。)

(例えばキーボードのAにSnesのAを割り当ててSendMessage送っても効果なし)

なんかこれ解消するAPIないっすか?
0440デフォルトの名無しさん2005/05/13(金) 04:47:21
Peekは受ける側だったorzPostMessageね
0441デフォルトの名無しさん2005/05/13(金) 04:54:38
DirectInput使ってるからだろ。
04424392005/05/13(金) 05:37:47
どうにかならんもんですかね。
0443デフォルトの名無しさん2005/05/13(金) 05:56:07
SendInpu()とかはだめ?
04444392005/05/13(金) 06:14:58
試してみようと思ったらサンプル少ねぇ
MSいってみます
04454392005/05/13(金) 12:56:46
>>443
キタ*・゜゚・*:.。..。.:*・゜(゚∀゚)゚・*:.。. .。.:*・゜゚・*!!!!!
後世の為に置き去りメモ

SendInputを使う為にstdafx.hの中に

#define _WIN32_WINNT 0x0501
#define WINVER 0x0501

を宣言。呼び出したい場所で

UINT ret;
INPUT tt;
tt.ki.wVk=0x41;
tt.ki.dwFlags=0;
tt.ki.time=0;
tt.type=INPUT_KEYBOARD;
ret=SendInput(1,&tt,sizeof(INPUT));

押しっぱになるのでdwFlagsで適度に補正してやる必要あり。
0446デフォルトの名無しさん2005/05/13(金) 13:43:20
GetWindowThreadProcessIdなどで取得したプロセスIDのベースアドレスを求めるにはどうしたらいいのでしょうか?教えてくださいお願いします
0447デフォルトの名無しさん2005/05/13(金) 15:23:29
>>446
プロセスIDのベースアドレス
この時点で、何か間違ってるよ。

いったい何がしたいの?
0448デフォルトの名無しさん2005/05/13(金) 16:10:32
うるせぇカスだなぁ。わかんねぇならでしゃばんなよボケが。
readprocessで戻ってきたハンドルのベースアドレスだよタコ。ほんとお前みたいカスがくると気分悪くなるぜ。
お前のせいでまたこんなレスしてしまった俺は結局自分で解決するハメになると。ほんとうぜぇ・・・
0449デフォルトの名無しさん2005/05/13(金) 16:17:25
スレのレベルが急速に低下してまいりました。
0450デフォルトの名無しさん2005/05/13(金) 16:18:10
お前が読み取りを始めたいアドレス=ベースアドレス(ReadProcessMemory()では)。
プロセスID→プロセスハンドルにはOpenProcess()がある。
0451デフォルトの名無しさん2005/05/13(金) 16:26:00
だからReadProcessMemoryで指定するベースアドレスがわかんねぇから教えろっつってんだよ。あ?わかんねぇんだろ?お?あぁ?コラ
0452デフォルトの名無しさん2005/05/13(金) 16:27:23
      __ ┌┬┬┬┐ __
    ―――┴┴┴┴┴―――――、
   /.  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ ||     __________
  /.    ∧// ∧ ∧|.||      |||   ||  /
 [/____(゚_//[ ].゚Д゚,,) ||___|||   || <  >>448,451を迎えに来ました
 ||_. *  _|_| ̄ ̄ ∪|.|.       .|ヽ. _||  \__________
 lO|o―o|O゜.|二二 東|.|京 精神 .病院 ||
 | ∈口∋ ̄_l__l⌒l_|_____|_l⌒l_||
   ̄ ̄`ー' ̄   `ー'  `ー'   `ー'
0453デフォルトの名無しさん2005/05/13(金) 16:52:25
>>451
お前がやりたいこと次第。
0454デフォルトの名無しさん2005/05/13(金) 17:03:08
おまえらわかんねーならレスするなつってんだろ!
0455デフォルトの名無しさん2005/05/13(金) 17:10:11
>>454
ごめんよ、おれもわかんねーや
0456デフォルトの名無しさん2005/05/13(金) 17:57:30
>>454
http://www.microsoft.com/japan/msdn/subscriptions/resources/additionalincident.aspx
http://www.microsoft.com/japan/msdn/subscriptions/resources/support.aspx
0457デフォルトの名無しさん2005/05/14(土) 01:12:53
おいおい、騙りを何相手してやってんだ?
0458デフォルトの名無しさん2005/05/14(土) 04:00:39
うるせーよ。煽りたいだけのやつはしゃしゃりでんなよカスどもが
ほんと使えねーなー
0459デフォルトの名無しさん2005/05/14(土) 04:10:02
リソースエディタで作ったダイアログ内のボタンコントロール上に
矩形を描画しようとしているのですが、全く表示されません。
TextOutしてみても何も文字が表示されません。
どこがおかしい部分があるでしょうか?
何か他の部分で、ここがあやしそう、などありましたら教えてください。

hdc=GetDC(hWnd);//hWnd=GetDlgItemで取得したボタンのハンドル
hPen=CreatePen(PS_SOLID,1,RGB(r,g,b));//rgbは適当な値が入ってる
hBrush=CreateSolidBrush(RGB(r,g,b));
SelectObject(hdc,hPen);
SelectObject(hdc,hBrush);
Rectangle(hdc,0,0,100,100);
TextOut(hdc,0,0,"iii",3);
04604592005/05/14(土) 04:22:41
WM_PAINT内でやったらうまくいきました。
WM_INITDIALOG内でやってたのでダメだったようです。
04614592005/05/14(土) 05:02:09
度々すいません。やはり挙動が変です。
今までデバイスコンテキストの取得はGetDCを使ってたのですが、
GeginPaintとかいうのを使った方がいいらしいので書き換えました。
ですが、ダイアログ起動時に四角形は描画されるものの、ボタン自体が描画されません。
ボタンの部分を押してみるとボタンは出現するのですが、
今度は四角形が消えてしまいます。どうしたらよいのでしょうか。

//ダイアログのプロシジャ内
case WM_PAINT:
DrawRect(GetDlgItem(hWnd,IDC_BUTTON),100,100,0);
return FALSE;

//矩形描画関数
void DrawRect(HWND hWnd,int r,int g, int b){
PAINTSTRUCT paint;
HDC hdc;
HBRUSH hBrush;
RECT rct;
GetClientRect(hWnd,&rct);//hWnd はボタンのハンドル
hdc=BeginPaint(hWnd,&paint);
hBrush=CreateSolidBrush(RGB(r,g,b));
SelectObject(hdc,hBrush);
Rectangle(hdc,4,4,rct.right-5,rct.bottom-5);
EndPaint(hWnd,&paint);
ReleaseDC(hWnd,hdc);
DeleteObject(hBrush);
}
0462デフォルトの名無しさん2005/05/14(土) 06:47:52
>>446
ほんとここの無知どもはウザイよね。
おまえの気持ちはよくわかる。
特に>>449の馬鹿は、わかんねーのに答えるからレベル低下してるってのが
どうやら理解できないらしい。

というわけだから、わかるおれが答えてあげよう。
全部説明するとなると大変なのでかいつまんで言うと、
まずプロセスといっても中で実行されてるのはスレッドという単位だ。
つまりプロセスで実際に動いているスレッドを特定する必要がある。
これはいろんな方法があるので別途AdvancedWindows読むなり
すればわかる。PSAPIとかでググるのもいいかも。
スレッドを特定するまでできたら、そのスレッドに対して一旦
SuspendThreadなりで停止させ、GetThreadContextを呼ぶ。
すると現在の正確なEIPが得られる。

EIPが得られたら、そのアドレスからこんどはプロセスに
割り当てられているメモリのベースアドレスを特定する。
メモリのチェインをたどっていけばEIPの範囲に収まる
ブロックが見つかるはず。
それが質問のベースアドレスということになる。
まあPSAPIを使わなくても、たとえば普通のアプリなら
0x400000以降がベースアドレスだとか決め打ちされてる。
もちろんこの辺を細工しているアプリもある。
これの特定はプロセスにロードされているコードセクションの
PEヘッダ部分を見るのが手っ取り早い。
一番早いのは、そのプロセスに侵入してしまうという方法。
この辺のやり方の詳細を知りたいなら、やっぱり
AdvancedWindowsを読んどくのが良い。
0463デフォルトの名無しさん2005/05/14(土) 07:13:03
結局AdvncedWindows嫁って結論になったけど、
プロセス・スレッド周りの質問は説明しようとすると長くなるからね。
こんな糞スレだと、その説明が正確とも限らないし。
とりあえずやり方だけでも知っとけば道は開ける。
やっぱあの本の存在は偉大なんだよなあ。

ちなみにAdWinにはPEヘッダの読み方は載ってないので、
その辺はWebか何かで調べるしかない。
pe formatかなんかでぐぐれば出てくる。
PEヘッダの構造を理解するのにはかなり時間がかかると思うけど、
プロセスを解析する近道はPEヘッダなので、この辺はぜひ調べて欲しい。
04644592005/05/14(土) 08:41:54
いろいろ試してるのですが解決しないので
簡略化してUPしました。ソースとVC6のリソースが入ってます。
おかしい所を指摘していただけると助かります。

ダイアログ内にボタンが二つあります。
起動時にボタンの上に白い四角が表示されるのが理想なのですが、
なぜかボタン自体が描画されません。
ボタンを押すと色選択ダイアログが開き、
選択した色の四角がボタンの上に表示されるようにしたいです。
ですが、このサンプルではなぜか、一方のボタンで色を選択すると
もう一方のボタンの上の四角が消えてしまいます。
常に表示されているようにしたいです。
よろしくお願いします。

ttp://gamdev.org/up/img/2660.zip
0465デフォルトの名無しさん2005/05/14(土) 08:50:44
>>461
ボタンはダイアログの子ウィンドウ。
WM_PAINTが来たのはダイアログであって、ボタン(子ウィンドウ)に来たわけではない。
だからそのコードは不正。

で、そういうことがしたければオーナードローしなさい。
0466デフォルトの名無しさん2005/05/14(土) 08:53:32
>>464
>おかしい所を指摘
あんたの頭。

以下解説を書こうとしたら>465に先を越されたので割愛。
0467デフォルトの名無しさん2005/05/14(土) 12:05:12
>>464
オーナードローの他に、サブクラス化すると言う手もある。
どちらも詳細はググルか ttp://www.kumei.ne.jp/c_lang/ 辺りを探せ。
0468デフォルトの名無しさん2005/05/14(土) 12:11:23
>>448
> うるせぇカスだなぁ。わかんねぇならでしゃばんなよボケが。

人に文句つける前に、自分の日本語を見直せよ。

[ >>446より ]
> プロセスIDのベースアドレスを求めるには

・プロセスID
  プロセスを一意に識別するための識別子

識別子にベースアドレスなどない。
君の質問は、

 「整数値 1 のベースアドレスを求めるにはどうすればよいか?」

などと言っているのと大差ない。
日本語は正しく使え。
0469デフォルトの名無しさん2005/05/14(土) 12:48:59
>>462-463
ありがとうございます。

>>468
カスは黙っとけ(プw
0470デフォルトの名無しさん2005/05/14(土) 12:59:53
質問です
ウィンドウを何よりも最前面に表示するにはどうすればいいのでしょうか?
DirectDraw等で全画面+最前面になってる物のさらに上に表示したいです
普通に最前面にしただけでは無理でした orz
04714592005/05/14(土) 13:09:56
>>467
サブクラス化はボタン一個ずつに対してプロシジャ作るのが面倒くさいからやめました。
ボタンを押したらColorChooserダイアログを出して色を選択し、
ボタン上の四角に反映させたかったのですが、
押された後ではボタンのイベントは発生しないので、
オーナードローでは次に押すまで色が反映されないのでダメでした。
結局、消極的な方法で妥協しました。ありがとうございました。
0472デフォルトの名無しさん2005/05/14(土) 13:28:52
DirectDrawサーフェイスの前に持ってくるにはクリップするしかない
0473デフォルトの名無しさん2005/05/14(土) 13:51:58
質問です。

�@ウインドウ作成してアクティブな状態にする
�Aマウスでウインドウ外をクリックして非アクティブにする
�Bタイマーで定期的に ShowWindow や SetForegroundWindow などを呼ぶ

�Aと�Bを繰り返すと、一回目は最前面にウインドウが表示されるのに、2回目以降は最前面に表示されません。
どうすれば最前面に表示することが出来るのでしょうか?

よろしくお願いします。
0474デフォルトの名無しさん2005/05/14(土) 14:04:12
>>473
CreateWindowEx(WS_EX_TOPMOST, ...

>>470のような高度な要求をしなければこれでいい。


SetForegroundWindow()は2000/XPで挙動が変更されたはず。
04754702005/05/14(土) 14:24:43
>>472
まえゲームで全画面+最前面なものをしてたときに、
なんかの拍子で、最前面表示してた後ろのWinampがゲーム画面内にずっと表示されたままになったので
なにかほかに方法があるのかなと思ったのです orz
#Winampは再生中の時間もちゃんと表示され操作も可能でした
0476デフォルトの名無しさん2005/05/14(土) 15:18:29
>>475
ttp://saw.minidns.net/software/index.html#soft09
こーゆーの使うとかじゃ駄目か?
04774702005/05/14(土) 15:41:59
>>476
某MMORPG用のツールなので窓化はむりぽいです
公認ツールとして交渉中なので orz
0478デフォルトの名無しさん2005/05/14(土) 19:22:54
ゲームのウィンドウをオーナーに指定する
DirectDrawSurfaceはGDIのクリッピング領域に従わないと思うから
ちゃんと描画されない気がするけど
0479デフォルトの名無しさん2005/05/14(土) 19:30:28
だからDirectDrawClipperでやるしかないって
0480デフォルトの名無しさん2005/05/14(土) 21:57:59
>>471に亀レス

> ボタンを押したらColorChooserダイアログを出して色を選択し、
> ボタン上の四角に反映させたかったのですが、
そういうボタンならサクラエディタなるオープンソースのテキストエディタに
あるからソースを参照にしてみるのはどうかな?
ちなみにサクラエディタではオーナードローで描画してるよ。

> 押された後ではボタンのイベントは発生しないので、
> オーナードローでは次に押すまで色が反映されないのでダメでした。
これはどこかソースがまずいんじゃない?

オーナードローは大した手間ではないし、コントロール上で自分の
好きなように描画する定石なんで知ってて損は無いよ。

あと、
> サブクラス化はボタン一個ずつに対してプロシジャ作るのが面倒くさいからやめました。
こいつは実装次第でどうにでもできる。
0481デフォルトの名無しさん2005/05/14(土) 22:53:41
ReadProcessMemoryなんていうスケベなAPIを使うのに、
自力で使いこなせないようなレベルの低い香具師って、
ろくでもないことをやろうとしている人間の屑だろうな。

どうせゲームのチートツールやウィルス等の怪しげなものを作ろうとしてるんだろ?

いいかげんウザイので、答えを教えてやる。
VirtualQuery()だ。
もうこのスレに出てくるなよ。
0482デフォルトの名無しさん2005/05/15(日) 09:49:47
>>481
カスが必死にググッてその様かwwwwwそんなもん質問する前から知ってますがwwwwwwwいい加減カスは黙ってチンポでも弄ってろwwwww
0483デフォルトの名無しさん2005/05/15(日) 09:53:03
最近w使う人増えたね。
0484デフォルトの名無しさん2005/05/15(日) 10:51:41
Windows, DWORD, WM_*
04854732005/05/15(日) 11:02:32
>474
レスサンクス
早速試してみましたが駄目でした
0486デフォルトの名無しさん2005/05/15(日) 11:15:18
>>485
SetWindowPosでHWND_TOPMOS指定したら?
0487デフォルトの名無しさん2005/05/15(日) 12:04:33
レスサンクスと書かれると、less thanks と読んでしまう。
0488デフォルトの名無しさん2005/05/15(日) 12:48:46
GetLastErrorの使い方がわかりません
0489デフォルトの名無しさん2005/05/15(日) 12:52:49
MSDNに載ってます
0490デフォルトの名無しさん2005/05/15(日) 13:00:50
使い方は載ってません
0491デフォルトの名無しさん2005/05/15(日) 13:05:41
>>490
プログラムなんかやめたほうがいいよ
0492デフォルトの名無しさん2005/05/15(日) 13:28:36
載ってます
0493デフォルトの名無しさん2005/05/15(日) 13:57:40
msdnのトップに出てる赤シャツの男って凄い頭よさそうだよな。
腕組みながらあの自信に満ち溢れた顔なんかとくに。
0494デフォルトの名無しさん2005/05/15(日) 15:11:36
どうも、赤シャツの男です。
0495デフォルトの名無しさん2005/05/15(日) 15:18:03
>>494
IQいくつ?
0496デフォルトの名無しさん2005/05/15(日) 15:25:09
80−130です
0497デフォルトの名無しさん2005/05/15(日) 15:43:31
血圧かよ!
0498デフォルトの名無しさん2005/05/15(日) 16:13:14
漏れのIQは 10D10+5 だぜ。
0499デフォルトの名無しさん2005/05/15(日) 17:56:00
期待値で60…低っ
0500デフォルトの名無しさん2005/05/15(日) 18:00:55
急速にスレの質が低下してまいりました
0501デフォルトの名無しさん2005/05/15(日) 18:45:11
だがそれがいい
0502デフォルトの名無しさん2005/05/15(日) 20:08:30
sinunayomajide!
0503デフォルトの名無しさん2005/05/15(日) 20:21:01
>>498,499
標準が 3d6 なんだから激高だろ。
0504デフォルトの名無しさん2005/05/15(日) 22:46:03
もうダイスから離れろ。
0505デフォルトの名無しさん2005/05/15(日) 23:53:10
winiqcfg.exe
05064732005/05/15(日) 23:56:07
>486
レスサンクス
早速試してみましたが駄目でした
0507デフォルトの名無しさん2005/05/16(月) 00:37:11
MessageBox関数には
printf("%d",i);
みたいに引数を渡すことは出来ないのでしょうか?
0508デフォルトの名無しさん2005/05/16(月) 00:40:02
CString tmp; tmp.Format("%d", i); MessageBox(tmp);
0509デフォルトの名無しさん2005/05/16(月) 00:41:14
MessageBox関数は無理。

自分で作ってもわけないよ。こんなやつ
ttp://www14.big.or.jp/~ken1/tech/tech20.html
0510デフォルトの名無しさん2005/05/16(月) 00:44:21
>>509
どうもありがとうございます。
さっそく続きを作っていこうと思います。
0511デフォルトの名無しさん2005/05/16(月) 01:54:21
sprintfをすっとばすのかい・・・
0512デフォルトの名無しさん2005/05/16(月) 02:31:58
>>495
グラハム数くらいです
0513デフォルトの名無しさん2005/05/16(月) 14:11:28
string形で宣言と同時にサイズだけ指定することってできますか?
05145132005/05/16(月) 14:13:04
形じゃなくて型だった
0515デフォルトの名無しさん2005/05/16(月) 14:14:59
>>513
スレ違い
05165132005/05/16(月) 14:25:47
>>515
ほんとだ!
C++だった。すいませんでした。
0517デフォルトの名無しさん2005/05/16(月) 20:18:32
APIで手書きしてるとプロシジャ間で値の受け渡しとかしたいとき
どうしてもグローバルが多くなるんですけど、
皆さんはどうやって解決してますか。
0518デフォルトの名無しさん2005/05/16(月) 20:22:31
>>517
コールバックデータに入れるだろ、普通。
0519デフォルトの名無しさん2005/05/16(月) 20:40:33
>>518
是非とももう少し詳しく解説お願いします。
0520デフォルトの名無しさん2005/05/16(月) 20:43:08
>>519
つまり、受け渡したいデータを構造体にまとめて、
関数の引数に渡すってことだ。それだけだ。
0521デフォルトの名無しさん2005/05/16(月) 20:45:23
>>520
解りやすっ
別人だけどありがとうございました。
0522デフォルトの名無しさん2005/05/16(月) 20:53:49
どうやって入れますか?
0523デフォルトの名無しさん2005/05/16(月) 20:55:29
そういやlparamとかを
構造体のポインタに型変換してよく使ってるもんなー
0524デフォルトの名無しさん2005/05/16(月) 20:56:28
LPARAMはx64でもポインタが入るんだっけ?
0525デフォルトの名無しさん2005/05/16(月) 21:03:03
LPARAMはそもそもそのための引数だからな
0526デフォルトの名無しさん2005/05/16(月) 21:23:10
64bit環境でのWin32 APIを使用したプログラミングってどうなるんだろう。
とくに、ポインタ関係。
64bitのプログラムは、64bit用の新しいAPIを使うのかな
0527デフォルトの名無しさん2005/05/16(月) 21:43:00
普通に考えてそうなんじゃね?
今でも残ってる16bit版みたいに互換性が必要なヤツ以外は
0528デフォルトの名無しさん2005/05/16(月) 21:47:08
>>526
適切に作ればソースはそのままでいけることになっている。

W/LPARAMは64ビット化されていて、それぞれUINT_PTR/LONG_PTRからのtypedefになっている。
その〜_PTRってのはポインタと同じサイズの整数型、つまりWin64では64ビットになる。
DWORD_PTRなんてわけわからんものもあるが。

一部のAPIはそれに対応した版が追加されている。(SetWindowLongPtrなど)
0529デフォルトの名無しさん2005/05/16(月) 21:52:15
Win32の定義から考えると、変更をしてないならDWORD_PTR = LONG_PTRじゃね?
05305262005/05/16(月) 22:02:38
あ……64bit環境でwin32って変だな。
64bitのWindowsのAPIを利用したプログラミングと言ったほうがいいのかな。

32bitのバイナリはエミュで走らせるからいいとして、
64bitはtypedefを変えているからソースはそのままでコンパイルしなおすだけで動くというわけですか。


でも、本当に完全に、「適切」に書いている人ってどれぐらいいるんだろう。
ポインタが4バイトで、int型も4バイトってのが前提なソースを書いている人もかなり居そうなんだけど。
typedefされて、さらに何重にもdefineされているあの変数名をそのまま使っていない人もかなりいそうな気がする。
0531デフォルトの名無しさん2005/05/16(月) 22:15:36
>>529
Win32ではDWORD_PTRはunsigined long _w64からのtypedefdeで、ULONG_PTRもそこからtypedefされている。
わけわからんって書いたのはDWORDは32ビットということ(x86では)なんだから、
DWORDと名乗る型に32ビットではないものがあるというのがわけわからんと言いたかったから。

>>530
これがすべてを物語っている。
SetWindowLong の検索結果のうち 日本語のページ 約 2,980 件
SetWindowLongPtr の検索結果のうち 日本語のページ 約 44 件

ちなみにVCではint/longは4バイトのまま。long/LONGをsigned DWORDとして使っているから永遠に(I)LP64へは移れないだろうな。
0532デフォルトの名無しさん2005/05/16(月) 22:22:13
>>531
そんなこと言ったって、Win32のDWORDは現にunsigned longのtypedefなんだしさ・・・
DWORDは32bitと決まってるならunsigned longのtypedefはおかしいんじゃ?
あれ?longって規定は32bitだっけ・・・?
0533デフォルトの名無しさん2005/05/16(月) 22:31:47
>>532
それはVCやその他Win16/32用コンパイラが(unsigned )longを32bitにしていたのを利用しただけ。
Cができたときからstdint.hがあれば間違いなくtypedef uint32_t DWORD;になっていただろう(と信じたい)。

ちなみにC/C++の規格を見るとlongは32ビット以上が必要と言える。
0534デフォルトの名無しさん2005/05/16(月) 22:36:06
マウスフックです。教えてください。

ウィンドウをクリックしたまま、そのウィンドウを出て、
別のウィンドウに移るとWM_MOUSEMOVEやWM_LBUTTONUPが
飛んでこなくなるんですけどなんでですか?
初めにWM_LBUTTONDOWNでセットしたグローバル変数にも
参照できなくなります。

誰か教えてくださいmm(__)mm
0535デフォルトの名無しさん2005/05/16(月) 22:59:44
>>534
フックプロシージャは DLL 内に置いてあるか?
あと、DLL の場合 #pragma data_seg("shared") に包んでやらないと
プロセスごとにグローバル変数の実態も変わるからな。
05365342005/05/16(月) 23:02:19
返事ありです。

>フックプロシージャは DLL 内に置いてあるか?
もちろん置いてます。
>あと、DLL の場合 #pragma data_seg("shared") に包んでやらないと
>プロセスごとにグローバル変数の実態も変わるからな。
まさにそんな感じです。ちょっと調べてみます。

またわからないことあったら教えてください。
0537デフォルトの名無しさん2005/05/17(火) 00:01:37
すいません、教えて下さい。

親ウィンドウにスタティックコントロールを子ウィンドウとして置き、ここに目的の描画処理を行っています。
で、この子ウィンドウのスクロールバーが上手く動きません。
具体的には
1.ウィンドウにSetFocusしない限りWM_VSCROLL/WM_HSCROLLが来ない
2.スクロールバーをドラッグしてもWM_VSCROLL/WM_HSCROLLが来ない
3.それどころかドラッグしてもポインタが動かない
4.にも関わらず、スクロールバー上での右クリックメニューからのスクロールは可能

1は大体諦めて、SetFocusした後はスクロールするんだからと妥協しましたが・・・。
2〜4がいまひとつ納得いきません。

子ウィンドウ上でドラッグなどしつつ届くメッセージをチェックしたところ、WM_NCHITTESTくらいしか来ていません。
WM_NCHITTESTを拾って、スクロールバー上の座標ならHTVSCROLL/HTHSCROLLを返すようにしてみましたが、効果なし。

使用しているのがスタティックコントロールだというのが主要因かとは思いますが、こちらも別件で問題が発生して頓挫しています。
(ResisterClassExしたクラスでCreateWindowExが失敗する)
よい打開策はありませんでしょうか?
一応、別にスクロールバーコントロールを作成するという案はありますが、修正箇所が多くて二の足を踏んでいます。
これしかない、というのであれば別コントロール案を採用します・・・。
0538デフォルトの名無しさん2005/05/17(火) 00:26:25
int が64ビットじゃないなんて
なんのための64ビットだよ?
0539デフォルトの名無しさん2005/05/17(火) 00:33:55
もちろんメモリマップを広げるためでしょ。
2Gオンメモリで読み込みなんてそのうち当たり前になってくるかも。
05405262005/05/17(火) 00:34:44
sizeof(int) == 4と決め付けた既存のソースが多いからじゃないのかな。
int型のサイズを変えて既存のソースを動かせなくするより、
64bitのintは__int64型にするなどとしてしまったほうが都合がいいのでは?
0541デフォルトの名無しさん2005/05/17(火) 01:30:48
数年前に同じような話の展開を見たことがあるな・・・
あのころは16bit->32bitだったが・・・
0542デフォルトの名無しさん2005/05/17(火) 01:47:34
そんなのコンパイルオプションで32ビットにできるようにすればいいだろうに。
デフォルトでは64ビットにしておけよ。
なんでクソソースに合わせなきゃならんのだよ?
できの悪いほうに合わせるなんてまるで日本の教育だな。
0543デフォルトの名無しさん2005/05/17(火) 02:01:25
int は 32bit の方が良いな。
それよりも short 16bit、int 32bit、long 64bit の方が
型の意味的にも綺麗なんだけどなぁ。


0544デフォルトの名無しさん2005/05/17(火) 02:28:34
>>542
俺らに当たってもどうしようもなかろ?
0545デフォルトの名無しさん2005/05/17(火) 07:08:06
    SHFILEINFO shfInfo;
    ::SHGetFileInfo( Ext, NULL, &shfInfo,
                     sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON );
で関連づけられているアイコンを取得しようとしています。ワードのファイルの場合"*.doc"でうまくいきますが、
エクスプローラのフォルダやドライブのアイコンを取得したい場合どのようにすればよいのでしょうか?
Shell32.DLLから決めうちで取得してもよいのですが、将来OSの仕様が変わったときが心配です。
0546デフォルトの名無しさん2005/05/17(火) 09:58:24
お一人様ご案内〜

★初心者にVisual C++を教えるスレ★ Part19
http://pc8.2ch.net/test/read.cgi/tech/1116209988/35
> ドライブ名をすべて列挙するにはどうしたらよいのでしょうか?

GetLogicalDrives
GetLogicalDriveStrings
どちらでも好きなほうをどうぞ。
0547デフォルトの名無しさん2005/05/17(火) 14:19:16
HeapAllocとVirtualAllocの違いというか、長所ってどんなんでしょうか?
ヒープ領域って1アプリ(?)辺り、如何ほど頂けるのでしょうか?
最後に、VCでのmalloc = HeapAllocと考えてよろしでしょうか?
0548デフォルトの名無しさん2005/05/17(火) 15:49:23
>>547
大雑把に言うと
VirtualAllocはプロセスのメモリ空間から直接メモリを割り当てる。だからオーバーヘッドがでかい。
HeapAllocは一旦独自のヒープをVirtualAllocで確保し、そこから必要なだけ切り出してくる。

だからこまごまとしたメモリ(数MBまで)の確保にはHeapAllocが、広大なメモリの確保にはVirtualAllocが適している。
0549デフォルトの名無しさん2005/05/17(火) 15:54:24
>>547
VC持ってるなら、mallocのソースもあると思うから読んでみるよろし
0550デフォルトの名無しさん2005/05/17(火) 16:05:43
今Virtualとか関係無くなってないか?
05515472005/05/17(火) 16:21:53
勉強になりました
どうも
0552デフォルトの名無しさん2005/05/17(火) 16:40:53
時代はパーシャル
0553デフォルトの名無しさん2005/05/17(火) 16:42:40
健さんハッケソ
0554デフォルトの名無しさん2005/05/17(火) 18:31:51
文太さんじゃねーのか?
0555デフォルトの名無しさん2005/05/17(火) 18:33:03
ソーダッタ
0556デフォルトの名無しさん2005/05/17(火) 18:37:54
朝日ソーラじゃけん
0557デフォルトの名無しさん2005/05/17(火) 20:22:28
○<天ーん!
大
||
ω
0558デフォルトの名無しさん2005/05/17(火) 20:37:06
>>550
適当なこと言うなよ。
VirtualAllocとHeapAllocではメモリをどこから持ってくるかが違う。
ただしHeapAllocでデフォルトヒープのみを使う場合は
GlobalAllocやLocalAllocしても同じ。
0559デフォルトの名無しさん2005/05/17(火) 21:16:38
さあ今日もこの合言葉で締めましょう。

「AdvancedWindows読め」
0560デフォルトの名無しさん2005/05/17(火) 21:19:03
HeapCreateの解説
>If dwMaximumSize is zero, the heap is growable. The heap's size is
>limited only by available memory. Requests to allocate blocks larger
>than 0x7FFF8 bytes do not automatically fail; the system calls the
>VirtualAlloc function to obtain the memory needed for such large blocks.
0561デフォルトの名無しさん2005/05/17(火) 21:44:02
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_heapmm.asp
0562デフォルトの名無しさん2005/05/17(火) 22:00:48
AdvancedWindowsの存在がなかったらWindowsプログラミング挫折してたかも。
それぐらい凄い本。 
本来MSDNに含まれるべきだが商売汚いM$は絶対そんなことしない。
0563デフォルトの名無しさん2005/05/17(火) 22:13:32
MicrosoftPressのJeffreyRichter著の本は他のもオススメできると思う。
ProgramingWindows2000とか。
0564デフォルトの名無しさん2005/05/17(火) 22:23:21
>>562
乞食臭い
0565デフォルトの名無しさん2005/05/17(火) 22:39:20
>>564
UNIX板やLinux板でその発言してみろ
泣いて向かってくるぞ
0566デフォルトの名無しさん2005/05/17(火) 22:42:15
WindowsAPI
0567デフォルトの名無しさん2005/05/17(火) 23:01:07
AdvancedWindowsは読んだことないけどな・・・。

VirtualAllocとHeapAllocを
MSDNライブラリで引いてみりゃ、
その違いはすぐにわかるでしょ。
0568デフォルトの名無しさん2005/05/18(水) 00:22:04
文字を一文字だけ描画するための関数ってありますか?
TextOut()って文字列ですよね?
一文字だけ描画する場合もこの関数を使うんでしょうか?
0569デフォルトの名無しさん2005/05/18(水) 00:23:06
そうだね
05705372005/05/18(水) 00:30:39
この見事なスルーっぷりは、スクロールバーコントロールを使えという無言のアドバイスですかね。
やっぱそれしかないのかな・・・_| ̄|○
0571デフォルトの名無しさん2005/05/18(水) 00:36:11
>>570
状況がよくわからん。IDは-1じゃないよな?
CreateWindowExの失敗も追及してみないか
05725372005/05/18(水) 00:53:45
>>571
レスありがとう。
IDって何を指してますでしょうか?
SetScrollInfoのウィンドウハンドル?(そんな訳ないか

根本的な対策という意味ではCreateWindowExの失敗を追った方がよいかも知れません。
2つまとめて質問するのは失礼かつ分かりにくいかと思って、スクロールバーに絞った所存です。
必要ならば、ResisterClassExとCreateWindowExの処理部分を晒します。
05735682005/05/18(水) 01:07:28
>>569
お返事ありがとうございます。


TextOut()の4番目の引数(文字列のポインタを指定するところ)に
char型の変数のアドレスを渡すのってありですか?
実行してみたら普通に動いたんですけど、このやりかたで問題ないのでしょうか?
それとも文字をchar[]かstring型の変数に代入してからやったほうが良いのでしょうか?
0574デフォルトの名無しさん2005/05/18(水) 01:26:06
>>573
文字列長に-1を指定してないなら、charのアドレスを渡すのもアリ。
0575デフォルトの名無しさん2005/05/18(水) 01:28:06
>>573
文字列長に-1を指定してないなら、charのアドレスを渡すのもアリ。
05765682005/05/18(水) 01:57:31
>>575
お返事ありがとうございます。

文字列長に-1を指定するなんてこと普通ないと思うんですけど、
何か特別な意味が有るんでしょうか?
0577デフォルトの名無しさん2005/05/18(水) 02:15:30
文字数をいちいち意識しなくてすむ。
0578デフォルトの名無しさん2005/05/18(水) 02:41:14
>>528
DWORD_PTRは「DWORDもポインタも格納可能な型」ってことだから
sizeof(DWORD_PTR) >= max(sizeof(DWORD), sizeof(LPVOID))ならなんでもいい。
05795682005/05/18(水) 02:49:34
>>577
すいません、どういうことかわからないんですけど。
もしかして文字列長に-1を指定すると自動的に文字列長を計算してくれるとか?
でも試しに文字列のポインタと-1を指定して実行してみたんですけど、
何も表示されなかったんですけど。
どういうことなんでしょうか?
05805672005/05/18(水) 03:01:57
わかりました(たぶん)
DrawText()関数では文字列長に-1を指定すると文字列長を自動的に計算してくれるみたいです。
TextOut()関数ではそれは無いみたいです。(たぶん)
0581デフォルトの名無しさん2005/05/18(水) 07:42:59
>>578
だからそれが気に入らないんだ。
0582デフォルトの名無しさん2005/05/18(水) 10:32:10
>>581
この際、君の好き嫌いは気にしちゃいられない
0583デフォルトの名無しさん2005/05/18(水) 12:58:22
時差の設定の影響されないファイルのタイムスタンプの取得方法を教えてください。
0584デフォルトの名無しさん2005/05/18(水) 13:21:38
>>583
先ずはその意味不明な日本語の解説をしてください。
0585デフォルトの名無しさん2005/05/18(水) 13:28:46
日本で取得してもアメリカで取得しても同じ値を得たいのです
0586デフォルトの名無しさん2005/05/18(水) 13:28:59
>>582
GetFileTimeして得られたFILETIMEを、FileTimeToSystemTimeで
SYSTEMTIMEに変換すればOK。

ただし、FATファイルシステムでは、タイムスタンプをローカルタイムで
持っているため、タイムゾーンの設定が間違っていた場合には、
GetFileTimeがそもそも誤った結果を返す。

このため、FATファイルシステムにおいては
>時差の設定の影響されないファイルのタイムスタンプの取得方法
は存在しない。
0587デフォルトの名無しさん2005/05/18(水) 13:29:08
無理
0588デフォルトの名無しさん2005/05/18(水) 13:34:50
漏れはまた、
「時差の設定の」「影響されないファイルのタイムスタンプの」取得方法かと思ったよ。
0589デフォルトの名無しさん2005/05/18(水) 13:35:22
>>586
ありがとう
>>587
子ね
0590デフォルトの名無しさん2005/05/18(水) 13:56:23
環境変数TZについてですが日本語Windowsの場合未設定になっていますが他国語版Windowsでは設定されてるのでしょうか?
0591デフォルトの名無しさん2005/05/18(水) 14:02:01
>>590
未設定です
0592デフォルトの名無しさん2005/05/18(水) 14:05:35
お前等をアレするAPIを教えてください
05935902005/05/18(水) 14:08:27
⊂(。Д。⊂⌒`つダンダッテー

_tznameは使うなって事か‥‥
0594デフォルトの名無しさん2005/05/18(水) 14:33:56
>>592
Delete592()
0595デフォルトの名無しさん2005/05/18(水) 14:44:39
メールのUIDLを取得する方法を教えてください
0596デフォルトの名無しさん2005/05/18(水) 14:50:22
>>595
サーバにUIDLコマンドを投げれ
0597デフォルトの名無しさん2005/05/18(水) 15:31:55
リッチエディットのスムーズなスクロールを、
無効にすることは可能ですか?
可能ならどうすれば…
0598デフォルトの名無しさん2005/05/18(水) 15:35:59
今のOSバージョンとCPUメモリ、グラフィックスドライバを
言ってくれないとわからんw
0599デフォルトの名無しさん2005/05/18(水) 15:49:17
スタンバイから復帰させる方法を教えてください
0600デフォルトの名無しさん2005/05/18(水) 15:52:22
電源ボタンを押す
0601デフォルトの名無しさん2005/05/18(水) 15:55:14
スタンバイからプログラムで復帰させる方法を教えてください 
0602デフォルトの名無しさん2005/05/18(水) 15:56:00
スタンバイ状態でプログラム動くの?
時刻かなんかでメッセージ受けるの?
0603デフォルトの名無しさん2005/05/18(水) 15:56:32
スタンバイから復帰させる方法を教えろつってんだろ!!
0604デフォルトの名無しさん2005/05/18(水) 16:03:21
テメーシネヨ、できないのはできない
0605デフォルトの名無しさん2005/05/18(水) 16:03:58
スタンバイ状態にしろ、休止状態にしろ、
マシンの制御がBIOSのACPI側に移行してるだろうから、
OS側ましてや、アプリケーションなんかではどうのこうのは出来ないはず。

スタンバイの場合はメモリには給電されてるから復帰が早いってだけじゃなかったっけ?
0606デフォルトの名無しさん2005/05/18(水) 16:07:40
スタンバイから復帰させる方法を教えてください
06075972005/05/18(水) 16:08:00
スムーズなスクロールというより・・・
マウスのホイールでスクロールしたときに、
ホイールクルクル止めても、行が多いとスクロールし続けてるのを何とかしたい…
RichEdit1 です

OSとか関係あるん?
xp,p43G,512M,ti4200
0608デフォルトの名無しさん2005/05/18(水) 16:23:27
寝てる人に目覚まし鳴らすスイッチを持たせるようなもんだな >スタンバイから復帰
寝てる本人にはどうしようもない。
0609デフォルトの名無しさん2005/05/18(水) 16:24:13
>>599-606
SetWaitableTimer
0610デフォルトの名無しさん2005/05/18(水) 16:27:31
>>609
ネタかと思ったら本当にあった。すげー
0611デフォルトの名無しさん2005/05/18(水) 16:29:08
口ばっかだな
0612デフォルトの名無しさん2005/05/18(水) 16:31:14
元の質問の答えには使えないな
スタンバイに入ってしまったらどうしようもないもんな
0613デフォルトの名無しさん2005/05/18(水) 16:32:16
>>612
は?まか?
0614デフォルトの名無しさん2005/05/18(水) 16:32:21
うわー…
0615デフォルトの名無しさん2005/05/18(水) 16:34:55
寝る前に目覚ましをセットするようなものか
0616デフォルトの名無しさん2005/05/18(水) 16:35:43
スタンバイから復帰させる方法を教えてください
0617デフォルトの名無しさん2005/05/18(水) 16:38:36
それは、確かな外殻団体を作れ!
0618デフォルトの名無しさん2005/05/18(水) 17:36:07
RichEditにオートインデント機能を持たせようとENM_KEYEVENTSを設定し、WM_KEYDOWNのVK_RETURNが来たところでTabや半角スペースを入れるようにしましたがうまくいきません。
原因はコントロールの改行挿入が完了しないままEM_REPLACESELでTab挿入をしてることにあるみたいです。
エンターが押された後にコントロール内での処理が終わってから来るメッセージはありますか?
0619デフォルトの名無しさん2005/05/18(水) 18:16:34
SHBrowseForFolderにチェックボックスを付ける方法を教えてくださ
0620デフォルトの名無しさん2005/05/18(水) 18:18:03
無理
0621デフォルトの名無しさん2005/05/18(水) 18:22:26
>>619
BROWSINFO構造体のlpfnメンバにコールバック関数を設定して
コールバックの方で、BFFM_INITIALIZEの時にCreateWindowで自前で作れ
0622デフォルトの名無しさん2005/05/18(水) 18:25:03
CreateWindowで作ってやるよハゲ!
0623デフォルトの名無しさん2005/05/18(水) 19:27:18
>>618
サブクラス化
0624デフォルトの名無しさん2005/05/18(水) 20:29:41
俺を女子高生のサブクラス化にさせる方法を教えてください
0625デフォルトの名無しさん2005/05/18(水) 21:02:32
難しい日本語つかうね。
0626デフォルトの名無しさん2005/05/18(水) 23:46:40
>>620
hage
0627デフォルトの名無しさん2005/05/19(木) 08:31:40
>>624
金
0628デフォルトの名無しさん2005/05/19(木) 09:18:39
プリンタにインストールされているフォント一覧を取得する方法を教えてください
0629デフォルトの名無しさん2005/05/19(木) 09:26:02
EnumFontsでどうかなぁ
0630デフォルトの名無しさん2005/05/19(木) 10:19:28
>>616
>スタンバイから復帰させる方法を教えてください
タスクスケジューラを設定しておくか、
WakeOnLANで起こしてもらうか、
手で電源ボタン押す。
06316302005/05/19(木) 17:28:03
何この静けさ?
0632デフォルトの名無しさん2005/05/19(木) 17:30:50
静かでいいじゃない。
06336302005/05/19(木) 17:51:32
そだな
0634デフォルトの名無しさん2005/05/19(木) 18:03:27
Sleep
0635デフォルトの名無しさん2005/05/19(木) 18:16:49
質問者のその後が無いからなあ
0636デフォルトの名無しさん2005/05/19(木) 18:24:36
MessageLoop
0637デフォルトの名無しさん2005/05/19(木) 18:57:59
リストボックスのインデックスを取得する方法を教えてください。
0638デフォルトの名無しさん2005/05/19(木) 18:59:12
じゃなかった。説明たりね。スマソ
0639デフォルトの名無しさん2005/05/19(木) 19:03:09
>>637
GetListBoxIndex()
0640デフォルトの名無しさん2005/05/19(木) 19:45:12
>>637-639
http://www.google.co.jp/search?hl=ja&c2coff=1&q=GetListBoxIndex
0641デフォルトの名無しさん2005/05/19(木) 19:52:52
アイコンリソースについての質問です。

リソースファイル(resource.rc)に

MYICON ICON DISCARDABLE "icon.ico"
MYICON2 ICON DISCARDABLE "icon2.ico"

などと書いて、プログラム中で MYICON と MYICON2 を切り替えようとしてもうまく行きません。
というより、どうやら最初の1つ(MYICON)しか認識されないようです。
どうすればよろしいのでしょうか?
0642デフォルトの名無しさん2005/05/19(木) 20:16:05
どうやってどうなったのか書かない奴はネタと判定します。
0643デフォルトの名無しさん2005/05/19(木) 20:16:28
>プログラム中で MYICON と MYICON2 を切り替えようと
というのは具体的にどういう実装なのか

>うまく行きません。
とは、どういう期待に対する、不満足な結果なのか

を明らかにしないのは釣り。
0644デフォルトの名無しさん2005/05/19(木) 21:12:31
MessageBoxで使われてるフォントは何でしょうか?
0645デフォルトの名無しさん2005/05/19(木) 21:23:49
画面のプロパティで設定しているフォント
0646デフォルトの名無しさん2005/05/19(木) 21:38:47
>>645
�dクス
06476412005/05/20(金) 07:15:57
具体的には、タスクトレイに表示したアイコンを動かしたいのです。
タスクトレイにアイコンを表示するには、

NOTIFYICONDATA n_mid;

m_nid.cbSize = sizeof(NOTIFYICONDATA);
m_nid.hWnd = hWnd;
m_nid.uID = TRAY_ID;
m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_nid.uCallbackMessage = WM_TRAY;
m_nid.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_EXCLAMATION));// ここではシステムの「!」マーク
lstrcpy(m_nid.szTip, TEXT("Tip Message"));
Shell_NotifyIcon(NIM_ADD, &m_nid);

変更するには、

m_nid.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_QUESTION));// ここではシステムの「?」マーク
Shell_NotifyIcon(NIM_MODIFY, &n_mid);

などとすればよいことまでは分かるのですが、
自分で書いたリソースファイルの中に2つ以上定義したはずのアイコンが1つしか使えないのです。
自分で作成したアイコンを2つ以上使うにはどうすればよいのか、どなたか教えてください。お願いします。
0648デフォルトの名無しさん2005/05/20(金) 07:49:07
ImageList
0649デフォルトの名無しさん2005/05/20(金) 10:22:31
>>647
少なくとも、こちらで書いた中にそれを組み込んでも
普通に切り替わる。
>>647が書いてない部分に何か原因がありそう
06505372005/05/20(金) 11:36:07
質問者のその後って、漏れのことかも・・・(⊃ω⊂)
SCROLLBARクラスに変更したら、外観が他のウィンドウと異なることが発覚。
結局CreateWindowExの失敗を追及しようかと思うようになりますた。
ちなみに失敗するのはこんなコードです。

WNDCLASSEX wc;

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = NULL;
wc.lpfnWndProc = RightWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = (LPCTSTR)RWINDOWCLASS;
wc.hIconSm = NULL;
wc.hIcon = NULL;
RegisterClassEx(&wc);
hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,
(LPCTSTR)RWINDOWCLASS,
"",
WS_CHILD | WS_VISIBLE | WS_BORDER,
log_rect.log_pos_x,//左ウィンドウ補正
log_rect.log_pos_y,
log_rect.log_width,//幅
log_rect.log_height,//高さ
hWndSuper,
(HMENU)ID_LOGVIEW,
hInst,NULL);
改行が多いと怒られたので分割します。
06515372005/05/20(金) 11:36:59
>>650の続き

RWINDOWCLASSにはヘッダでクラス名のテキストを定義してあります。

このコードで起きる現象。
・RegisterClassExは成功する。
・CreateWindowExがNULLリターンするが、GetLastErrorで取得するエラーは
 「この操作を正しく終了しました。」
 ちなみにRegsterClassExをコメントアウトすると
 「ウィンドウクラスが見つかりません。」
 となるので、クラス登録は成功していると考えられます。

WH_CBTフックもしてません。
ウィンドウプロシジャでWM_CREATEやWM_NCCREATEも処理していません。
ということで、原因をつかみかねております。
すいません助けて下さい・・・ 。・゚・(ノД`)・゚・。
06525372005/05/20(金) 11:40:41
すいませんもうひとつ書き忘れました。
このCreateWindowExですが、クラスを"STATIC"に変えるだけで普通に動きます。

//STATICコントロールにした状態で作り込みしていましたので・・・
0653デフォルトの名無しさん2005/05/20(金) 11:44:00
リストボックスでクリックされた項目の番号によって判別し、
発生するイベントを作りたいのですが、
その番号を配列文字列の数値に割り当てたいのです。
そのやり方を教えてください。
0654デフォルトの名無しさん2005/05/20(金) 11:52:55
>>652
その RightWndProc の WM_CREATE で何かやってる?
06556542005/05/20(金) 11:54:25
ああ、何もやってないってか。
WM_CREATE が来るかどうかは調べられる?
06565372005/05/20(金) 12:01:42
>>655
ありがとうございます。
デバッガでトラップしてみたところ、WM_CREATEが来ていないように見えます。
ただ、CreateWindowExのエラーが出る前に、RightWndProcが2回呼ばれていました。
そのメッセージを見ると・・・
1回目:WM_NCCREATE
2回目:WM_NCDESTROY

アレ?これはもしかして・・・。
ちょっとRightWndProcを見直してみます。
ちゃんとDefWndProcしてないかも・・・。
0657デフォルトの名無しさん2005/05/20(金) 12:01:59
>>651
CS_OWNDC か CS_PARENTDC のどちらかをセットするとどうなりますか。
06585372005/05/20(金) 12:05:52
>>657
ありがとうございます。
両方のパターンを試してみましたが、現象に変化なしです。
06595372005/05/20(金) 12:14:37
>>656その後

親ウィンドウのWM_CREATE処理で
CreateWindowExするモジュールの呼び出し→SetWindowLongでサブクラス化
とやっているのが気になったので、RightWndProcのCallWindowProcをDefWindowProcに変更。
変化なし orz
06605372005/05/20(金) 12:57:54
たびたびすみません。
解決しました。

RegsterClassExの一部を変更しました。

wc.lpfnWndProc = DefWindowProc;

サブクラス化のSetWindowLongが後で走る訳ですから、クラス登録ではDefWindowProc
を登録しておけば済む話だったんですね・・・。
WM_NCCREATE→WM_CREATEとならずに
WM_NCCREATE→WM_NCDESTROYとなっていたのが重大なヒントになりました。
ありがとうございました。
0661デフォルトの名無しさん2005/05/20(金) 15:57:38
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win68.html
>リストボックスの全てのアイテムはインデックスとして管理されます
>最上段のアイテムのインデックスを 0 として、1ずつ増えていきます
>選択されているアイテムや、削除などの操作もインデックスで指定するので
>文字配列と照らし合わせるような処理には非常に便利です

となっていますが、
どうやって選択されたインデックスをint型変数に取得すればいいのでしょうか?
お願いします。
0662デフォルトの名無しさん2005/05/20(金) 16:04:55
>>661
そこに LB_GETCURSEL を使うって書いてあるじゃんか
0663デフォルトの名無しさん2005/05/20(金) 16:12:13
>662
でもintにキャストできません
0664デフォルトの名無しさん2005/05/20(金) 16:14:40
は?やってみたのかよ
06656632005/05/20(金) 16:17:55
i=(int)SendMessage(list , LB_GETCURSEL , 0 , 0);
これじゃダメですか?(ダメだったけど)
0666デフォルトの名無しさん2005/05/20(金) 16:32:55
>>665
どういう値を期待してどんな値が返ってきたの?
それで問題なく取得できるはずだけど。
ListCtrlじゃなくて、ListBoxだよね?
06676632005/05/20(金) 16:49:33
>666
ありがとうございます。
どうやら違うところで手違いがあったようです。
後は何とかなりそうです
06686632005/05/20(金) 17:01:47
ああ、何とかならない。。。
strcpy(name[0] ,buf[i][0]);
とか文字列に埋め込むと、なぜかフリーズしてしまうorz
0669デフォルトの名無しさん2005/05/20(金) 17:03:22
ほかが見えないとわからんが、、
strcpy(name, buf[i]) ではないのか
06706632005/05/20(金) 17:22:10
static char buf[256][256][1024];
static char name[2][1024];
nameもbufも多次元変数です。
実のところソースは汚すぎなんで。。。
06716632005/05/20(金) 17:34:04
もういいや。吊ってくる
0672デフォルトの名無しさん2005/05/20(金) 17:37:36
64MBの配列か・・・いいけどね、ベツニ
0673デフォルトの名無しさん2005/05/20(金) 18:36:25
>>668
後は i の値とか。
つか、ここに来たからには嘘でも lstrcpy を使え。
0674デフォルトの名無しさん2005/05/20(金) 18:40:49
GETCURSELは非選択だとLB_ERR(-1)返るから注意な
0675デフォルトの名無しさん2005/05/20(金) 18:41:40
質問させてください。昨日から悩んでいるのですが、解決できません。
マルチスレッドでshell namespaceを使い、zipの中身を列挙したいのです。
4Mと40Mのzipファイルを用意し、以下のソースを実行したところ(長くてすみません)、
STAの待ち行列に入っているような挙動になりました。
これを回避したいのです。

ちなみにエクスプローラだと、あるエクスプローラで40Mのzipを
開こうとしつつも、別のエクスプローラで4Mのzipを開けます。
0676デフォルトの名無しさん2005/05/20(金) 18:42:08
#include <windows.h>
#include <stdio.h>
#include <process.h>
#include <shlobj.h>
#pragma comment(lib, "shell32.lib")
void f(void* p) {
int i = (int)p;
::OleInitialize(NULL);
wchar_t* name = (i%2==0) ? L"D:\\4M.zip" : L"D:\\40M.zip";
LPITEMIDLIST idl = ::ILCreateFromPathW(name);
LPSHELLFOLDER desk, sf; LPENUMIDLIST el; HRESULT hr;
hr = ::SHGetDesktopFolder(&desk);
hr = desk->BindToObject(idl, 0, IID_IShellFolder, (LPVOID*)&sf);
printf("start %d\n", i);
hr = sf->EnumObjects(NULL, SHCONTF_NONFOLDERS, &el);
printf("end %d %x\n", i, hr);
sf->Release();
desk->Release();
CoTaskMemFree(idl);
::OleUninitialize();
_endthread();}
int main(int argc, char* argv[]) {
HANDLE hs[10];
for (int i=0; i < 10; i++) hs[i] = (HANDLE)_beginthread(f, 0, (void*)i);
::WaitForMultipleObjects(10, hs, TRUE, INFINITE);
char buf[256];
gets(buf);
return 0;}
0677デフォルトの名無しさん2005/05/20(金) 19:40:38
>>675
> ちなみにエクスプローラだと、あるエクスプローラで40Mのzipを
> 開こうとしつつも、別のエクスプローラで4Mのzipを開けます。

この場合は、マルチスレッドではなくマルチプロセスになるから、
比べる意味がないのはわかってる?
0678デフォルトの名無しさん2005/05/20(金) 19:48:12
>>677
エクスプローラはマルチプロセスでしたっけ?
複数のエクスプローラを立ち上げると
explorer.exeのスレッドが増えるだけだと思いますが?
06796782005/05/20(金) 19:52:28
>>677
すみません。678で馬鹿なこと書きました。
0680デフォルトの名無しさん2005/05/20(金) 23:25:58
>>678
そういうチェックボタンあったから、
たぶんマルチプロセスにもできるんだよ
0681デフォルトの名無しさん2005/05/21(土) 00:46:32
>>678,679
エクスプローラはマルチプロセスではないだろ?
0682デフォルトの名無しさん2005/05/21(土) 00:56:50
>>680
フォルダオプションの「別のプロセスでフォルダウィンドウを開く」なら、タスクバーその他を管理するプロセスとフォルダウィンドウを管理するプロセスを分けるってだけじゃないか?
0683デフォルトの名無しさん2005/05/21(土) 01:31:21
WM_TIMERでInvalidateRgnするとタイミングの問題なのかたまに画面全体がバグるんだけど
どうやって回避する?
0684デフォルトの名無しさん2005/05/21(土) 01:32:58
> 画面全体がバグる
> 画面全体がバグる
> 画面全体がバグる
> 画面全体がバグる
> 画面全体がバグる
0685デフォルトの名無しさん2005/05/21(土) 01:35:39
動的にmsvcrt.dllを呼び出してアプリケーション側で
ちゃんと初期化したいんですが、
仕様って後悔されてませんにょ
06866832005/05/21(土) 01:36:09
なんていうか、画面全体が更新領域に設定されるのかすごいちらつく
ウィンドウとか全部真っ白になるけどそのプログラムを止めて再描画させるようにすれば直る。
0687デフォルトの名無しさん2005/05/21(土) 01:38:17
>>685
日本語を話せるようになってから、また来てくれ
0688デフォルトの名無しさん2005/05/21(土) 07:31:41
>>686
Timerの間隔は?
0689デフォルトの名無しさん2005/05/21(土) 08:35:42
>>685
VCをインストールしたディレクトリの中にスタートアップルーチンのソースもある。
06906632005/05/21(土) 08:50:22
>674
うおおおお。それだ!
ありがとうございます。
丸二日悩み続けていました。
0691デフォルトの名無しさん2005/05/21(土) 09:01:16
>>685
ロードしただけで自動的に初期化されないか?
そのためにDLL_*_ATTACHがあるんだから
0692デフォルトの名無しさん2005/05/21(土) 12:46:09
仕様、というか、MSVCRTはソースがVCに附属してるだろ。
06936832005/05/21(土) 13:18:10
>>688
500ミリ秒です。
0694デフォルトの名無しさん2005/05/21(土) 13:50:49
>>693
>>684
0695デフォルトの名無しさん2005/05/21(土) 13:57:32
WM_ERASEBKGNDの発行から、WM_PAINTが処理されるまでの
時間が長いんでないの?
0696デフォルトの名無しさん2005/05/21(土) 14:00:07
WM_ERASEBKGNDで対象の領域をValidateしてDefault処理
0697デフォルトの名無しさん2005/05/21(土) 16:42:24
ビットマップをリソースから読み込まずに
直接ファイルを読み込む方法を教えてください。
0698デフォルトの名無しさん2005/05/21(土) 16:52:40
>>697
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_loadimage.asp
LR_LOADFROMFILE
0699デフォルトの名無しさん2005/05/21(土) 17:16:33
>698
�dクス
0700デフォルトの名無しさん2005/05/22(日) 00:48:57
質問の趣旨はそれでいいのか?
なんか違う気がするんだが・・・
0701デフォルトの名無しさん2005/05/22(日) 01:11:02
>>700
じゃ、答えはReadFile()とでも言いたいのかい?
0702デフォルトの名無しさん2005/05/22(日) 01:49:27
いや、、、質問者が再訪しなければ問題は無い。
0703デフォルトの名無しさん2005/05/22(日) 07:06:41
実行ファイルのプロパティのバージョン情報を取得する方法を教えてください
0704デフォルトの名無しさん2005/05/22(日) 07:45:03
>>703
GetFileVersionInfo
0705デフォルトの名無しさん2005/05/22(日) 14:38:55
スタックオーバーフロー例外(EXCEPTION_STACK_OVERFLOW)
が発生したとき、例外ハンドリング時に動的にスタックを広げる(再マップする)ことは
可能でしょうか?
というか、可能だった気がするのですが、肝心の方法を忘れてしまいました。
どなたかご存知でしたらご教授願います。
0706デフォルトの名無しさん2005/05/22(日) 16:11:06
すいません勘違いしてました。
0707デフォルトの名無しさん2005/05/22(日) 19:06:37
リストボックスを一時的に選択できない状態にしたいのですが、
どうすればいいでしょうか?
0708デフォルトの名無しさん2005/05/22(日) 19:11:32
EnableWnidow
0709デフォルトの名無しさん2005/05/22(日) 19:19:59
>708
ありが�d
0710デフォルトの名無しさん2005/05/22(日) 22:21:50
SDKでBitmapをBitBltで描画しています。
Bitmapを左にスクロールさせたいのですが、
何か良い方法ないでしょうか?
ワーク用のビットマップを用意して、そちらにコピーして
また戻す、ってので一応できるのですが、
なんか無駄なので。。。

Google等でスクロールAPIを探したのですが、
見つけられませんでした。

(最初VC初心者スレに書いたのですが、こちらの方が適切っぽいので移動してきました)
0711デフォルトの名無しさん2005/05/22(日) 22:29:01
画像自体がケツと頭がつながっててループ可なら
BitBlt2回でよくね?
0712デフォルトの名無しさん2005/05/22(日) 22:35:28
表示されているイメージならScrollWindowやScrollDCでスクロールすると思うけど。
ScrollDCでスクロールさせて、更新領域だけBitBltでBitmapの範囲を指定して
Bltすればいいんでねえの?
07137102005/05/22(日) 22:37:34
>>711
2回でどうするのかよく分からないのですが、
スクロール後は右の空きスペースに新たな
描画を行います。(ループではないです)
0714デフォルトの名無しさん2005/05/22(日) 22:37:57
戻す必要は無いでしょ
0715デフォルトの名無しさん2005/05/22(日) 22:43:23
nWidthとnXSrcをずらしていくだけじゃだめのなか?
07167112005/05/22(日) 22:53:08
単に

�@�A�B

�A�B�@

�B�@�A

ってしたいのかとオモタ
07177102005/05/22(日) 22:54:32
>>712
ScrollWindowは何故かうまくいきませんでしたが、
(ダイアログに直接描画してるのがまずい?)
ScrollDCでBitmapをスクロールするとうまくいきました。

ただ、800*20の領域を10msecに1pixel動かしてる
だけなんですが、ちらつき気味です。。。
もう少し調査します。

ありがとう。
0718デフォルトの名無しさん2005/05/22(日) 23:00:35
基本的には
・GetDC()よりはWM_PAINTのほうがちらつき(というかティアリング)が少ない
・頻繁に描画を繰りかえす場合はWM_ERASEBKGNDに注意
0719デフォルトの名無しさん2005/05/22(日) 23:04:29
ビットマップで埋め尽くすならバックグラウンド描く必要ないしな
0720デフォルトの名無しさん2005/05/22(日) 23:08:11
ダイアログだとうまくいかんだろう。
WM_ERASEBKGND 動いてるんじゃない?
07217102005/05/22(日) 23:14:13
case WM_ERASEBKGND:
return TRUE;

入れただけで、スムーズになりました。
問題なしです、助かりました!
0722デフォルトの名無しさん2005/05/22(日) 23:42:11
ウィンドウクラスの背景ブラシをNULLにすればいいのに
0723デフォルトの名無しさん2005/05/23(月) 00:18:40
べつにどっちでもいい
0724デフォルトの名無しさん2005/05/23(月) 02:56:19
指定パスの、実行ファイルのアイコンや、
ファイル・フォルダの関連付けられているアイコンを
「任意のアイコンインデックス」かつ「任意のサイズ」で取得したいのですが、
何か良い方法はありますでしょうか?

16x16 や 32x32 などなら、ExtractIconEx なり SHGetFileInfo などで
いくらでも取得できるようなのですが、
24x24 や 48x48 のアイコンを取得する方法は見つかりませんでした。
もうかれこれ半日程google先生とお付き合いしています… orz

実行ファイルやアイコンファイル・DLLなどのリソースの場合はアイコンインデックスを有効にして、
それ以外の、普通のファイルやフォルダなどは、アイコンインデックスは無効で良いのです。
また、取得するのは HICON でも HIMAGELIST でも構いません。

ぜひ、ご教授ください。m(_ _)m
0725デフォルトの名無しさん2005/05/23(月) 04:00:07
TREEVIEWコントロールで選択されているアイテムのlParamが知りたいのですが、
GetSelectionでもらうのはHTREEITEMなのですがlParamを見るにはTV_ITEM
じゃないとだめなんです。
HTREEITEM <=> TV_ITEM
の結びつきってどうやって調べるのでしょうか?

COMMCTRL.hとかMSDN見てたけどなかなか出てこないorz
0726デフォルトの名無しさん2005/05/23(月) 04:10:53
>>724
PrivateExtractIcons

>>725
TVM_GETITEM
0727デフォルトの名無しさん2005/05/23(月) 04:33:03
IExtractIcon
これの方がいいな。
0728デフォルトの名無しさん2005/05/23(月) 04:42:30
>>726
ありがとう。
TVITEMにHTREEITEMをいれて呼ぶのね…
0729デフォルトの名無しさん2005/05/23(月) 09:35:35
wininetでwebdavに接続する方法を教えてください
0730デフォルトの名無しさん2005/05/23(月) 09:54:00
APIを使って今まで直線や曲線を描画していたのですが、
どうも数が増えてくるともっさりしてきました。機能的にも物足りなく…。

3Dではプリミティブを描画するために、DirectXやOpenGLの様な有名なライブラリがありますが、
2Dでは、直線や曲線を描画するための、これは、というライブラリは無いのでしょうか。
それともWin32APIで十分だから、作る必要が無いのでしょうか。
0731デフォルトの名無しさん2005/05/23(月) 10:02:08
>>730
DirectX
07327302005/05/23(月) 10:29:58
>>731
ありがとうございます。しかし欲しいのは2D用ベクタグラフィックライブラリでして。
DirectXがベースな分には構わないのですが、DirectXだけだと、曲線部分を自作しないとで。
要DirectXという2Dフリーソフトはほとんど無いし、やっぱりAPIで十分なんですかね。
0733デフォルトの名無しさん2005/05/23(月) 11:05:49
DirectXはOpenGLと違って2Dも
(ついでに音楽や入力系も)
サポートしているだろうが。
0734デフォルトの名無しさん2005/05/23(月) 11:24:40
>>730
処理の仕方が悪いに1票。

まさかWM_PAINT毎にGDIで描いてる訳じゃないよな?ないよな?
0735デフォルトの名無しさん2005/05/23(月) 11:34:49
ビットマップ用意して、メモリDC使ってそこに書きこんで
WM_PAINTではBitBltしてるだけに決まってるじゃないか・・・たぶん
0736デフォルトの名無しさん2005/05/23(月) 11:38:10
CreateEnhMetaFileでhDC用意して、そこに書き込んで、
WM_PAINTではPlayEnhMetaFileしてるに100ペリカ
07377302005/05/23(月) 11:43:47
>>734-735
お付き合いどうもです。ごくごく普通にクリップしながらダブルバッファリングでやってます。
となると、こんなものなのかな…
0738デフォルトの名無しさん2005/05/23(月) 12:07:09
733から知ったかぶり臭を感じるのは俺だけか

見事にスルーされているが
0739デフォルトの名無しさん2005/05/23(月) 13:11:24
##,###,####って感じで書式を指定して数値を文字列に変換するAPIを教えてください
0740デフォルトの名無しさん2005/05/23(月) 13:13:43
>>739
wsprintf
0741デフォルトの名無しさん2005/05/23(月) 13:40:47
おいおい
0742デフォルトの名無しさん2005/05/23(月) 13:51:25
>>739
APIならFormatMessageだが、
それよりもsprintf使え
0743デフォルトの名無しさん2005/05/23(月) 13:53:30
あれ?sprintfでできたっけ?
どうやって記述します?
0744デフォルトの名無しさん2005/05/23(月) 14:06:13
wsprintfは普通に使うだろ
知らないのはもぐり
0745デフォルトの名無しさん2005/05/23(月) 14:09:59
>>743
そんくらいヘルプ見れや
0746デフォルトの名無しさん2005/05/23(月) 14:17:17
いやヘルプみたんだけどよくわからなかった
HEXじゃなくて普通の数値できる?
12,345
みたいなの、
0747デフォルトの名無しさん2005/05/23(月) 14:21:19
>>739の書き方が悪い。
ひょっとしてロケール設定反映した桁区切り付き文字列出したいのか?
0748デフォルトの名無しさん2005/05/23(月) 14:27:03
>>747
これは失礼しました。
普通の数値(10進数)を3桁のカンマで区切りたいということです
まあwsprintfやsprintfでは出来ないってわかってんだけどね。
0749デフォルトの名無しさん2005/05/23(月) 14:32:27
>>748
出来るぞ?
0750デフォルトの名無しさん2005/05/23(月) 14:37:55
>>749
まじですか?
ひょっとしてFormatMessageとか使ったりします?
う〜ん、これでも結構いろいろ探したんだけどなあ・・
0751デフォルトの名無しさん2005/05/23(月) 21:59:43
ツールバーの背景って、ビットマップとして塗った色にしかならないの?
透過させて、システムカラーが表示されるようにしたいんだが。
0752デフォルトの名無しさん2005/05/23(月) 22:42:49
>>748
一旦文字列に変換してから、GetNumberFormat()
0753デフォルトの名無しさん2005/05/23(月) 23:03:01
>>751
???
07547512005/05/23(月) 23:29:54
>>753
いや、ユーザーがウィンドウの色を変えたりした場合に、
ツールバーの自作アイコンの背景が、その色にならないので、
どうしたもんかなあ、と。何かやり方がおかしいのかな。
0755デフォルトの名無しさん2005/05/23(月) 23:30:57
おかしいと思う
07567512005/05/23(月) 23:47:07
うそっ。例えば、
ttp://www.kumei.ne.jp/c_lang/sdk/sdk_61.htm
の通りやったとしても、
ビットマップの背景は灰色で塗っちゃってるから、
灰色のままにならない?
0757デフォルトの名無しさん2005/05/24(火) 00:37:00
たまにそういう格好悪いアプリあるよな
0758デフォルトの名無しさん2005/05/24(火) 07:40:30
Windows付属のゲームとかもそうだし。
0759デフォルトの名無しさん2005/05/24(火) 09:09:24
LR_LOADMAP3DCOLORS
0760デフォルトの名無しさん2005/05/24(火) 11:06:42
ファイルをゴミ箱に移動するAPiを教えてください
0761デフォルトの名無しさん2005/05/24(火) 11:13:17
http://pc8.2ch.net/test/read.cgi/tech/1074933908/727-728
0762デフォルトの名無しさん2005/05/24(火) 11:16:29
>>760
SHFileOperation
0763デフォルトの名無しさん2005/05/24(火) 11:39:36
>>762
鬼あり
0764デフォルトの名無しさん2005/05/24(火) 12:02:57
>761が感謝されない件について
0765デフォルトの名無しさん2005/05/24(火) 12:12:36
ログ持ってなきゃ見れない罠
0766デフォルトの名無しさん2005/05/24(火) 12:22:38
いい気になってdat落ちへを貼るヤツは痛すぎる
0767デフォルトの名無しさん2005/05/24(火) 12:38:13
Win2Kpro VC++6.0で開発しています

実行中のスクリーンセーバーを強制停止させるプログラムを書いているのですが

HDESKhScrDesk;
// ScreensaverDesktopを開く
if(!(hScrDesk = OpenDesktop("screen-saver",0,FALSE,DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS)))
{
// Error処理
}

の部分でDesktopハンドルが取得できなくて困っています。GetLastError()の戻り値は
ERROR_FILE_NOT_FOUNDが返ってきています。
また、上記のコードのテストを行なう際にスクリーンセーバーを起動させてから数秒後に
上記コードが実行されるようにテストプログラムを作って確認しているのでスクリーン
セーバーが実行されていないということはないと思います……アドバイスをお願いします
0768デフォルトの名無しさん2005/05/24(火) 12:38:32
>>751
GetSysColor や GetSysColorBrush 使う
WM_SYSCOLORCHANGE で変更タイミングはわかる
0769デフォルトの名無しさん2005/05/24(火) 14:14:45
WinアプリやDLLなどで標準入出力用にコマンドプロンプトを使うにはどうすればいいですか
0770デフォルトの名無しさん2005/05/24(火) 14:58:04
SHFileOperationで連続でファイルの削除を行うと2回目以降が必ずエラーになって削除できないんですが
0771デフォルトの名無しさん2005/05/24(火) 15:08:41
何エラー?
0772デフォルトの名無しさん2005/05/24(火) 15:12:42
GetLastErrorで6が返ってきています
0773デフォルトの名無しさん2005/05/24(火) 15:18:56
どうやら2回目以降ではなくて削除されないファイルは1番最初に削除してもエラーで削除できないみたいです
削除できるファイルと出来ないファイルの違いがよくわからないですが、
0774デフォルトの名無しさん2005/05/24(火) 15:31:48
>>769
AllocConsole();
0775デフォルトの名無しさん2005/05/24(火) 15:36:41
>>769
WinMainから始まるアプリなら、mainの中でWinMainを呼ぶようにすればいい。
AllocConsole()を呼ぶ必要も無く、printf()やstd::coutがそのまま使える。
0776デフォルトの名無しさん2005/05/24(火) 15:38:53
>>765
よく読めよこの磐梯が!
0777デフォルトの名無しさん2005/05/24(火) 15:39:01
>>769,774
_tmain

>>772-773
GetLastError→FormatMessageをやってみろ
エラーメッセージ見れば多少理由の推測くらいはできよう?
0778デフォルトの名無しさん2005/05/24(火) 15:41:28
Winerror.h から該当項目を探すとか、
VC++ならツールのエラーールックアップ(バージョンによるが)で
数字入れてみりゃいい。
6は無効なハンドル
0779デフォルトの名無しさん2005/05/24(火) 15:42:52
>>777
いやコードがわかってるから内容もわかってるんだけど、なぜこのエラーが出るかwからんのよ
削除できるファイルとできないファイルの違いがwからん
0780デフォルトの名無しさん2005/05/24(火) 15:46:39
そうですか
0781デフォルトの名無しさん2005/05/24(火) 15:48:00
意外と読み取り専用になっているだけだったりして。
0782デフォルトの名無しさん2005/05/24(火) 15:53:31
素朴な疑問。
SHFileOperation()のエラーはGetLastError()でエラーの種類を取得できるのか?
0783デフォルトの名無しさん2005/05/24(火) 16:06:16
>>781
いやなってないよ
>>782
ヘルプにはGetLastErrorでエラー返すって書いてないね

つかファイル名を1文字けずってやってみたら削除できないファイルも削除された
なにこれSHFileOperationのバグかなあ
0784デフォルトの名無しさん2005/05/24(火) 16:09:26
どっか別のプロセスがファイルハンドル掴んでいるとか……
0785デフォルトの名無しさん2005/05/24(火) 16:20:42
なんか8文字のファイル名はダメみたいですね、これを1文字削除したりaとか追加して9文字にすると何故か削除できるようになります
0786デフォルトの名無しさん2005/05/24(火) 16:23:06
SH系はバグが多いと聞く
0787デフォルトの名無しさん2005/05/24(火) 16:25:18
どうせファイル名の末尾に\0を2個付けてないとか
そういうバカなミスだろう。
憶測だけど。
0788デフォルトの名無しさん2005/05/24(火) 16:26:02
>>785
検討違いだったらゴメン

削除するファイルのパスだけど、ちゃんとNULL2つ付けてる?
07897882005/05/24(火) 16:26:36
ぐああ。りろー(ry
0790デフォルトの名無しさん2005/05/24(火) 16:33:17
>>788
つーか、NULLって書くなや。混乱の元だがね。
0791デフォルトの名無しさん2005/05/24(火) 16:35:20
MSにそう言ってやれ
0792デフォルトの名無しさん2005/05/24(火) 16:38:20
>>791
どっかにそう書いてあるの? 私の見たMSDNには
>Address of a buffer to specify one or more source file names. Multiple names must be null-separated. The list of names must be double null-terminated.
と書いてあるのだが。
0793デフォルトの名無しさん2005/05/24(火) 16:40:22
NULL文字と書け
0794デフォルトの名無しさん2005/05/24(火) 16:44:02
>>774,775,777
ありがとうございます。

>>775,777
DLLの場合は>>774のような方法ですか?
0795デフォルトの名無しさん2005/05/24(火) 16:45:52
>>792
あ?
・NULLで区切られた
・NULLで終わった
って書いてあるじゃねーか
07967672005/05/24(火) 16:48:02
>>767
自己レスです。
あれから調べたところ、OpenDesktop()でscreen-saverDesktopHandleを
取ってくる方法はNT4までしか使えないということが判りました
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,...)とSetCursorPos()で
とりあえず目的は果たせたので、当面はこれで良いことにします
0797デフォルトの名無しさん2005/05/24(火) 17:00:09
>>795
NULLとnullを区別できないなら逝ってくれ。
0798デフォルトの名無しさん2005/05/24(火) 17:00:38
>>792
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/structures/shfileopstruct.asp
>Each file name must be terminated by a single NULL character.
>An additional NULL character must be appended to the end of
>the final name to indicate the end of pFrom.
07997922005/05/24(火) 17:02:48
なるほど、NULL文字と書いてあるね。
0800デフォルトの名無しさん2005/05/24(火) 17:03:20
>>797
(´m`*)ウププ
0801デフォルトの名無しさん2005/05/24(火) 17:04:09
>>略
ガッ
0802デフォルトの名無しさん2005/05/24(火) 17:08:01
って言うかですね、>>787とかはもうなんていうか、ちゃんと読んで欲しいですね、いやほんとに
レスるのはいいけどまずは国語の勉強してからレスしてくださいね
0803デフォルトの名無しさん2005/05/24(火) 17:09:43
>>802
?
0804デフォルトの名無しさん2005/05/24(火) 17:11:39
>>802
>787の何が問題なの?

>>800
>792が引用したのはnull-terminatedなのに>795はNULLで終わったとしているから、
>797は指摘したんでしょ。
0805デフォルトの名無しさん2005/05/24(火) 17:19:10
もう全員新でください
0806デフォルトの名無しさん2005/05/24(火) 18:08:02
>>804
で、null-terminatedの日本語訳は?

っていうか、日本語版MSDNのAPIとかで、LPCTSTRとかの引数の説明に
はっきりと「NULL で終わる文字列へのポインタを指定します。」とか書いてあるんだけどね・・・
08078042005/05/24(火) 18:11:44
>>806
「nullで終わる」でいいんでないの?
そこに疑問の余地はないと思うのだけど。
0808デフォルトの名無しさん2005/05/24(火) 18:13:12
なんかこの展開、最近他のスレでもあったような。
0809デフォルトの名無しさん2005/05/24(火) 18:15:26
WM_XBUTTONDOWNイベントでXBUTTON1のダブルクリックの検出方法が
下記の情報を参考にしたのですが
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_xbuttondown.asp
よくわかりません。
教えていただけないでしょうか?
0810デフォルトの名無しさん2005/05/24(火) 18:15:56
なんかよくわかんないけど、ガッしときますね
0811デフォルトの名無しさん2005/05/24(火) 18:32:15
>>807
それだと、null tarminateじゃないとな
0812デフォルトの名無しさん2005/05/24(火) 18:33:18
「NULで終わる」
0813デフォルトの名無しさん2005/05/24(火) 18:40:27
>Multiple names must be null-separated.
>The list of names must be double null-terminated.
それぞれの名前は「null-separated」せよ
そのリストは「double null-terminated」せよ
(最後はダブル)

>Each file name must be terminated by a single NULL character.
>An additional NULL character must be appended to the end of
>the final name to indicate the end of pFrom.

各ファイル名は「single NULL character」でターミネートせよ
pFromの終りを示すために「An additional NULL character」を
最後のファイル名に追加せよ
(各ファイルはシングル)
0814デフォルトの名無しさん2005/05/24(火) 18:42:47
とりあえず、>>795にNULLとnullを区別できないなら逝ってくれとか偉そうに言ってた>>797が阿呆で終わればええじゃん
0815デフォルトの名無しさん2005/05/24(火) 18:44:40
>>814
NULLとnullの違いってなんだね。
0816デフォルトの名無しさん2005/05/24(火) 18:46:28
俺に聞くなよ
0817デフォルトの名無しさん2005/05/24(火) 18:50:49
大文字と小文字
08188042005/05/24(火) 18:51:01
>>811
null-terminatedの訳として、「nullで終わる」ではいけない?
直訳するなら「nullでターミネート(終端)された」でしょうけどそれは冗長でしょ。
#つーか、反論するならミススペリングしなさんな。
0819デフォルトの名無しさん2005/05/24(火) 18:52:24
>>809
WM_XBUTTONDBLCLK じゃなくて?
0820デフォルトの名無しさん2005/05/24(火) 19:25:42
>>818
冗長だからといって過去形を現在形にするのはいかがなものか
0821デフォルトの名無しさん2005/05/24(火) 19:33:01
過去形じゃなくて受身じゃないか?
0822デフォルトの名無しさん2005/05/24(火) 19:34:13
>>820
翻訳の段階で情報が落ちるのは常だ。
0823デフォルトの名無しさん2005/05/24(火) 19:38:08
ああすまん、受動態だぁな・・・
0824デフォルトの名無しさん2005/05/24(火) 20:16:32
もーどーでもいーよ
0825デフォルトの名無しさん2005/05/24(火) 21:19:43
if(StrCmpI("NULL","null")==0)
  MessageBox(0,"NULLとnullは同じです","結果",MB_OK);
else
  MessageBox(0,"NULLとnullは違います","結果",MB_OK);


こうすればNULLとnullは同じだということになるけど?
0826デフォルトの名無しさん2005/05/24(火) 21:23:54
強力な馬鹿登場
0827デフォルトの名無しさん2005/05/24(火) 21:25:32
刷り込まれてますね
0828デフォルトの名無しさん2005/05/24(火) 21:38:38
if(StrCmp("NULL","null")==0)
  MessageBox(0,"NULLとnullは同じです","結果",MB_OK);
else
  MessageBox(0,"NULLとnullは違います","結果",MB_OK);


でもこうすればやっぱりNULLとnullは違う
0829デフォルトの名無しさん2005/05/24(火) 21:46:28
MSDN 的には null だったり NULL character だったりするようだが、
賢い漏れらは '\0' を使っておけば面倒な論争もガッも不要。
08307512005/05/24(火) 21:56:05
>>759
できたよ! 本当にありがとう。
0831デフォルトの名無しさん2005/05/24(火) 22:02:33
プログラム言語Cとしては「ナル文字」なんだがなぁ
0832デフォルトの名無しさん2005/05/24(火) 22:25:47
ここは俺のアナルに免じて
0833デフォルトの名無しさん2005/05/24(火) 22:31:10
日本語にしようとする事自体が間違っていると思うんだが。
英語読めない奴がプログラマやるな。
0834デフォルトの名無しさん2005/05/24(火) 22:33:39
NULLはドイツ語。
0835デフォルトの名無しさん2005/05/24(火) 22:36:22
>>834
そういう意味ではなくて、英語の方のMSDNも読めない輩が(ry
0836デフォルトの名無しさん2005/05/24(火) 23:05:54
なんの為の日本語版だよ
0837デフォルトの名無しさん2005/05/24(火) 23:15:59
池沼のための
0838デフォルトの名無しさん2005/05/24(火) 23:20:16
オレオレ
0839デフォルトの名無しさん2005/05/24(火) 23:55:15
ここは何のスレですか?
0840デフォルトの名無しさん2005/05/25(水) 00:16:07
NULLとnullの仲間たち
0841デフォルトの名無しさん2005/05/25(水) 00:35:12
nilとNULも仲間に入れてやれ
0842デフォルトの名無しさん2005/05/25(水) 01:18:17
WNDCLASSEX 構造体にメニューをセットする時に、数値をセットする
方法(MAKEINTRESOURCEを使う)と文字列をセットする方法の二つがある
そうですが、後者の方法がわかりません。どの文字列をセットすれば
いいんですか?
0843デフォルトの名無しさん2005/05/25(水) 01:22:35
>>842
リソースのIDに文字列入れた時、その文字列
エディタ上では""でくくられてるからわかる
0844デフォルトの名無しさん2005/05/25(水) 01:34:35
>>843
サンクスです。でも、リソースエディタでメニューを選択していろいろ探しても""で囲まれた
文字列が見つかりません。resource.rc をテキスト形式で見ても、"ファイル"とか"編集"とか
の文字列はありますが、他にそれらしい文字列がありません。自分で文字列を割り当てるんで
すか?
0845デフォルトの名無しさん2005/05/25(水) 01:35:49
>>844
そうだよ
自分でいれるときは、ID_XXXを消して、"の入力からやってみそ
0846デフォルトの名無しさん2005/05/25(水) 01:37:21
このスレ、餓鬼が多いな。
0847デフォルトの名無しさん2005/05/25(水) 01:52:40
このすれはLonghornhornが出たらWinFX質問箱にアップグレードしますか?
よくわからないので教えて下さい。
0848デフォルトの名無しさん2005/05/25(水) 02:18:33
しないだろうよ。
0849デフォルトの名無しさん2005/05/25(水) 02:22:13
>>845
なるほど。できました。ありがとうございます。

>>846
おまいのような?
0850デフォルトの名無しさん2005/05/25(水) 04:37:36
〜のハンドルは handle of 〜 ですか ?
それとも handle to 〜 ですか ?

ポインタやリファレンスは to、配列は of ですよね。

pointer to 〜
reference to 〜
array of 〜
0851デフォルトの名無しさん2005/05/25(水) 08:14:33
リソースを使わず自前でCreateWindowしてEditBoxを作り、
EditBoxにフォーカスがある状態でタブキーが押されたのを検知したいと思っています。

しかしWM_KEYDOWNにVK_TABが来ませんで…
素のままでも、無駄は承知で試しにサブクラス化しても同様です。
リソースのEditBoxに対しサブクラス化した場合は、ちゃんとVK_TABが取れるのですが…。

何か条件がありましたら教えて頂けないでしょうか。WS_GROUP、WS_TABSTOP指定の有無辺りは試しました。
0852デフォルトの名無しさん2005/05/25(水) 09:15:39
GetSysColor(RGB(32, 128, 64))
↑
この記述を見かけたんですけど、
これは何をやっているんでしょうか?

ただのRGB(32, 128, 64) とは違うんですか?
0853デフォルトの名無しさん2005/05/25(水) 09:35:18
>>852
それはただの間違いかと
08548512005/05/25(水) 09:38:32
WM_CRETEでEditコントロール作成に必要な事をやっていないのが原因でした。
無事(サブクラス化無しで)取得できました。
WS_GROUP、WS_TABSTOPも無しでOKでした。スレ汚し失礼。
0855デフォルトの名無しさん2005/05/25(水) 09:43:51
>>851
普通に来るけどなあ・・・
WM_GETDLGCODE で何かしてる?
08568552005/05/25(水) 09:44:24
遅かったのね・・
08578512005/05/25(水) 09:49:11
>>855-856
すいません、試していただいたようで
ありがとうございます
0858亀2005/05/25(水) 10:48:57
あの、、どなたか鶴亀算を解くプログラムをつくってくれないでしょうか?
0859デフォルトの名無しさん2005/05/25(水) 10:56:13
>>858
Win32APIで?
なんか勘違いしてるよ
0860亀2005/05/25(水) 10:59:21
Borland Delphi6、、、、とかいうやつ?
0861デフォルトの名無しさん2005/05/25(水) 11:00:28
>>860
それじゃ、Delphiスレ池
0862亀2005/05/25(水) 11:02:03
わかりますた
0863デフォルトの名無しさん2005/05/25(水) 11:30:35
Delphiスレの住人には迷惑な話だなあ
0864デフォルトの名無しさん2005/05/25(水) 11:49:50
>>863みたいな奴の方が迷惑
0865デフォルトの名無しさん2005/05/25(水) 13:45:25
ワロス
0866デフォルトの名無しさん2005/05/25(水) 13:57:23
>>850
ハンドルはof
それぞれ言葉の意味合いを考えればわかるだろう?
0867デフォルトの名無しさん2005/05/25(水) 16:59:35
ここでよいのかどうか分かりませんが、教えてください。

エラー時に自滅するスレッドを作ってそのスレッドが起動完了したか、エラーかを判断し
3回リトライするプログラムを書きました。

成功判断はイベントで、失敗判断はスレッドの終了で判定させようと思い、
m_pThread->PostThreadMessage(WM_APP_READY, 0, 0);
で初期化実行させた後に
hWait[0] = m_evtInit;
hWait[1] = m_pThread->m_hThread;
switch ( WaitForMultipleObjects(2, hWait, FALSE, INFINITE) ) {
       :
       :
}

としました。

1回だけなら思ったとおりに動くのですが、この処理にリトライ処理を加えようとして、
WAIT_OBJECT_0 + 1の場合はスレッドのオブジェクトをdeleteした上で再度スレッド
を作成し、判定処理を行おうとしたのですが、PostThreadMessageのメッセージが
処理される前にWaitForMultipleObjectsのWAIT_OBJECT_0 + 1になってしまいます。

WaitForMultipleObjectsの使い方、間違ってますか?
08688672005/05/25(水) 17:02:28
実際にはこんなコードです。
  for ( INT retry = 0 ; retry < 3 && rsts != TRUE ; retry ++ ) {
    if ( m_pThread == NULL ) {
      // スレッドをサスペンドモードで作成します
      m_pThread = (CThreadClass*)AfxBeginThread(RUNTIME_CLASS(CThreadClass),0,0,CREATE_SUSPENDED,NULL);
      m_pThread->m_bAutoDelete = FALSE;
      m_pThread->m_pWnd = this;
      m_evtInit = m_pThread->m_evtInit;

      m_pThread->ResumeThread();
    }

    m_pThread->PostThreadMessage(WM_APP_READY, 0, 0);
    hWait[0] = m_evtInit;
    hWait[1] = m_pThread->m_hThread;
    switch ( WaitForMultipleObjects(2, hWait, FALSE, INFINITE) ) {
    case WAIT_OBJECT_0 :
      rsts = TRUE;
      break;
    case WAIT_OBJECT_0 + 1:
      delete m_pThread;
      MessageBox("初期化失敗");
      m_pThread = NULL;
      break;
    }
  }

0869デフォルトの名無しさん2005/05/25(水) 20:52:58
ListViewで不明な点があるので質問させて頂きます。
使用環境はVC++ Win32 非MFC。

ListView内のアイテムを選択すると選択アイテム部分がコンボボックスになり
入力またはアイテム選択後に普通のListViewアイテムにもどる。

というような事をしているツール(VSなどでも)をよく見かけますが
これはどのように実現すればよいのでしょうか?
コモンコントロール固有のスタイルをみてみましたがそれらしい物もみつかりませんでした。
0870デフォルトの名無しさん2005/05/25(水) 21:18:49
本当のCOMBOBOXをつくっておいて、
クリックのタイミングに合わせて
表示しているのです。
0871デフォルトの名無しさん2005/05/25(水) 21:50:44
まず例として。
1 hWnd = FindWindow("Hoge" , NULL);
2 if (hWnd) {
3     GetWindowThreadProcessId (hWnd, &dwPID);
4     hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
5 }

上記のような例の4行目で、OpenProcessを失敗させるには、どのようにウインドウを作成すれば
よいのでしょうか?
0872デフォルトの名無しさん2005/05/25(水) 22:49:55
>>871
Windowを作ったプロセスを作るときのCreateProcessの引数psaProcessでありったけの制限をかけてやればよい。
0873デフォルトの名無しさん2005/05/26(木) 01:05:22
>>866
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windowclasses/windowclassreference/windowclassstructures/wndclass.asp
0874デフォルトの名無しさん2005/05/26(木) 09:05:36
handle to - がやたらたくさんでてくるなw
0875デフォルトの名無しさん2005/05/26(木) 09:33:43
おいおい、また揚げ足取り君か?
0876デフォルトの名無しさん2005/05/26(木) 10:22:27
http://www.google.com/search?hl=ja&ie=Shift_JIS&oe=Shift_JIS&q=%22handle+to%22+site%3Amsdn.microsoft.com&btnG=Google+%8C%9F%8D%F5&lr=
http://www.google.com/search?hl=ja&ie=Shift_JIS&oe=Shift_JIS&q=%22handle+of%22+site%3Amsdn.microsoft.com&btnG=Google+%8C%9F%8D%F5&lr=

どっちかつうとtoじゃ
0877デフォルトの名無しさん2005/05/26(木) 14:38:37
ビットマップ画像をきれいに拡大縮小する方法を教えてください
0878デフォルトの名無しさん2005/05/26(木) 14:50:22
>>877
このスレ的には、
SetStretchBltModeでHALFTONEを指定する
0879デフォルトの名無しさん2005/05/26(木) 15:26:15
APIの一覧表でComponent VersionがNetwork/LMとなっているものがあるのですが
このLMとは何のことなんでしょうか?
I_BrowserDebugTrace
I_NetLogonControl2
NetAccessCheck
もっといっぱいありますがこのようなAPIが載っています。
0880デフォルトの名無しさん2005/05/26(木) 15:27:33
LanManager (=MS Network)じゃないかね
0881デフォルトの名無しさん2005/05/26(木) 15:35:24
WM_TIMERってメッセージループを回さなくても飛んでくるのでしょうか?
WM_TIMERがきたときにメッセージボックスを表示させてみたら、
大量のメッセージボックスが表示されてしまったのですが。
0882デフォルトの名無しさん2005/05/26(木) 15:58:11
>>881
メッセージが来たときにOSが自動的に呼び出してるから重複呼び出しされる。
別にWM_TIMERに限ったことではない。
0883デフォルトの名無しさん2005/05/26(木) 15:58:49
メッセージキュー
0884デフォルトの名無しさん2005/05/26(木) 16:29:06
WM_PAINTは1つにまとめられるけどな
08858792005/05/26(木) 16:45:50
>>880
Lan Managerのことなんですね。ようやく理解できました。
ありがとうございます。
0886デフォルトの名無しさん2005/05/26(木) 16:50:48
メッセージボックスの内部でも独自のメッセージループが回っているから。
0887デフォルトの名無しさん2005/05/26(木) 18:07:46
WM_PAINTって不思議だよね。
SendMessageでは送れない。
InvalidateRectを実行しないと送信されない。
なんでだろう?
0888デフォルトの名無しさん2005/05/26(木) 18:10:11
>>886
それは違うだろ。
MessageBoxは内部でDialogBox関数を呼び出してるだけと思われ。
0889デフォルトの名無しさん2005/05/26(木) 18:20:29
>>887
表示が一番時間がかかるから、なるべく後回しにして
少ない回数で済まそうという仕組み
今作ったらもうちょっと大雑把になるのかなぁ
0890デフォルトの名無しさん2005/05/26(木) 18:27:25
>>888
そのDialogBoxは内部でメッセージループが回ってる
0891デフォルトの名無しさん2005/05/26(木) 18:57:07
>889
>今作ったらもうちょっと大雑把になるのかなぁ
Longhornのことかい?
0892デフォルトの名無しさん2005/05/26(木) 20:09:07
中国語とかのファイル名ってUNICODEじゃないと扱えないでしゅか?
0893デフォルトの名無しさん2005/05/26(木) 20:19:35
中国語コードでも扱えるよ
0894デフォルトの名無しさん2005/05/26(木) 20:51:26
>>892 我看他.txt
0895デフォルトの名無しさん2005/05/26(木) 20:59:04
Win32で、.xlsファイルを操作する方法を教えてください。
一般的にどのような方法が使われていますか?
0896デフォルトの名無しさん2005/05/26(木) 21:34:36
CreateFile
0897デフォルトの名無しさん2005/05/26(木) 22:06:43
一般的かどうかは微妙だな>CreateFileにxls
0898デフォルトの名無しさん2005/05/26(木) 22:07:59
.xlsファイルはバイナリだろ
0899デフォルトの名無しさん2005/05/26(木) 22:08:06
マルチでした
0900デフォルトの名無しさん2005/05/26(木) 22:11:27
はわわ
0901デフォルトの名無しさん2005/05/26(木) 22:12:49
EXCEL9.OLBとかで検索しる
0902デフォルトの名無しさん2005/05/26(木) 22:15:17
Win32なのかなのか
0903デフォルトの名無しさん2005/05/26(木) 22:25:03
.xlsのフォーマット仕様書でもあればバイナリレベルで解析できそうだが
0904デフォルトの名無しさん2005/05/26(木) 22:52:22
ライブラリがあるじゃん、フリーで
0905デフォルトの名無しさん2005/05/26(木) 23:01:45
ライブラリの中の人も大変だな
0906デフォルトの名無しさん2005/05/26(木) 23:41:53
Platform SDK と MSDNライブラリの違いを教えてください。
0907デフォルトの名無しさん2005/05/26(木) 23:44:42
Platform SDK = 開発ツール

MSDNライブラリ = マニュアル・資料
0908デフォルトの名無しさん2005/05/26(木) 23:53:47
SDKはツールとは微妙に違うとおも
0909デフォルトの名無しさん2005/05/26(木) 23:58:07
そのまま ソフトウェア開発キット でいいとおもうんだが。
0910デフォルトの名無しさん2005/05/26(木) 23:58:26
>>907
ということは Visual C++ == Platform SDK ですか?
0911デフォルトの名無しさん2005/05/27(金) 00:06:48
VC++にはPlatform SDK内包されてるな

SDK ツール+ライブラリ+ドキュメント+サンプルコード
じゃないかなあ・・・
0912デフォルトの名無しさん2005/05/27(金) 00:09:03
Platform SDK = 開発用ヘッダ、ライブラリ、ソース、開発補助ツール、サンプル
MSDNライブラリ = マニュアル、資料

IDE(開発環境本体)とコンパイラの類は入ってない。
0913デフォルトの名無しさん2005/05/27(金) 00:13:46
デバッグのためにメッセージボックスに整数を出力させたいのですが、いい
方法があるでしょうか。

char buf[1024];
wsprintf(buf, "%d", (int)variable);
MessageBox(0, buf, "", MB_OK);

これだといちいち面倒くさくて。。。
0914デフォルトの名無しさん2005/05/27(金) 00:16:37
>>913
>>509
0915デフォルトの名無しさん2005/05/27(金) 00:17:46
何が面倒なのかわからんと、いい方法が思いつかない
0916デフォルトの名無しさん2005/05/27(金) 00:19:00
>>913
いちいち、メッセージボックスが出るのが嫌なら、OutputDebugString
文字列バッファを宣言して、
wsprintfするのがメンドイなら>>509あたりを参考に関数にしる
0917デフォルトの名無しさん2005/05/27(金) 00:23:02
>>914
これだともっと長いじゃん。

>>915
主に、タイピングの手間です。

0918デフォルトの名無しさん2005/05/27(金) 00:26:14
だから関数化して、ヘッダにでも突っ込んどけば良い話だろうが・・・。
0919デフォルトの名無しさん2005/05/27(金) 00:29:28
>>918
いちいちヘッダをインクルードしなくちゃならないし。。。
それに自作ライブラリを管理するのも大変だし。
0920デフォルトの名無しさん2005/05/27(金) 00:31:56
VCでも買ってブレークして変数確認するのが手っ取り早い。
これでOKか?
0921デフォルトの名無しさん2005/05/27(金) 00:32:26
そんなに面倒なら、プログラム書くのもやめればいいのに・・・。
生産性と保守性を上げる為の小さな自前ライブラリを維持するのくらい、
いちいちコード記述する面倒に比べれば最終的に小さなものになるでしょ。

こういうのって、プログラム組む時にセンスとして現れるよな。
めんどくささを如何にしてプラス方向に転化させるかって。
0922デフォルトの名無しさん2005/05/27(金) 00:37:41
>>920
VC++もってます。いちいちブレークポイントを設定してデバッガ
を起動するのも面倒くさいです。それにデバッガは嫌いです。
「なんとかかんとか.dllの中はトレースできない」とかいう
メッセージが出てくるので。

>>921
いや、いい方法がないなら仕方ないです。面倒くさくても我慢します。
0923デフォルトの名無しさん2005/05/27(金) 00:39:25
ごめんマジで力の抜けた笑いがでた。
0924デフォルトの名無しさん2005/05/27(金) 00:40:26
そんな歯糞にもならないようなコードは毎回書いても大したことないじゃん。
0925デフォルトの名無しさん2005/05/27(金) 00:40:38
頭固いって言われるだろ
0926デフォルトの名無しさん2005/05/27(金) 01:32:17
>>922
>VC++もってます。いちいちブレークポイントを設定してデバッガ
>を起動するのも面倒くさいです。それにデバッガは嫌いです。
>「なんとかかんとか.dllの中はトレースできない」とかいう
>メッセージが出てくるので。

いちいちメッセージボックスが出てきてOKボタン押すのも面倒くさいです。
特に何度も回るループの中に書いてしまった日には後悔しきりです。

むしろ適当なログファイルを C:\debug.txt に吐かせるとか、
イベントログ(orシステムログ)に経過を出力させる方がスマートですよ。
0927デフォルトの名無しさん2005/05/27(金) 01:36:32
ログファイルやイベントログ見るのなんか面倒くさすぎて涙が出ます。

いい加減にしてください!
0928デフォルトの名無しさん2005/05/27(金) 01:39:39
VC++でTRACE("%d", variable);
0929デフォルトの名無しさん2005/05/27(金) 01:39:51
金を払うのが面倒じゃないなら、漏れが月80万でやってやるよ。
0930デフォルトの名無しさん2005/05/27(金) 05:10:22
ファイルに含まれるアイコンの数を取得する方法を教えてください
0931デフォルトの名無しさん2005/05/27(金) 11:05:08
オレはデバッグにワトソンを使っているのだが、とうとう win98 でも逆アセを
吐かなくなった。最近の win update はいろいろやってくれる。
0932デフォルトの名無しさん2005/05/27(金) 11:19:54
>>930
ExtractIcon の第3引数に-1
0933デフォルトの名無しさん2005/05/27(金) 12:09:40
>>927
アフォだなー
syslog は tail -f で見るに決まってる醤
0934デフォルトの名無しさん2005/05/27(金) 12:12:03
less に F だけどな、オレは
0935デフォルトの名無しさん2005/05/27(金) 14:42:39
Win2k/XPでBSODを意図的に起こす手法があります。
それをプログラム側から行おうとしているのですがうまくいきません。

レジストリの値を書き換えて再起動した後、手動で右のCtrlを押しながら
ScrollLockを2回押すときちんと実行されます。しかし以下のように記述して
実行しても何も起こりません。

-------------------------------------------------
Keybd_event(VK_RCONTROL, 0, 0, 0);
Keybd_event(VK_SCROLL, 0, 0, 0);
Keybd_event(VK_SCROLL, 0, KEYEVENTF_KEYUP, 0);
Keybd_event(VK_SCROLL, 0, 0, 0);
Keybd_event(VK_SCROLL, 0, KEYEVENTF_KEYUP, 0);
Keybd_event(VK_RCONTROL, 0, KEYEVENTF_KEYUP, 0);
-------------------------------------------------

キーはきちんと押せているみたいなのですが。。
原因と改善策を希望します。よろしくお願い致します。
0936デフォルトの名無しさん2005/05/27(金) 15:36:33
mp3を再生する一番簡単な方法を教えてください。やはりDirectShowでしょうか?
0937デフォルトの名無しさん2005/05/27(金) 15:38:28
mp3
0938デフォルトの名無しさん2005/05/27(金) 16:11:41
>>935
MSはその機能はドライバがキーを受け取らないと駄目って言ってるから、keybd_eventじゃ無理な気ガス
0939デフォルトの名無しさん2005/05/27(金) 16:17:45
>>931
マジ?
俺もDr.ワトソンは重宝してるのに・・・。

まぁDr.ワトソンでログを拾うことすらできない香具師が多くなってきたから、
Dr.ワトソン相当の機能を自前のEXEに持たせてしまってるよ。
0940デフォルトの名無しさん2005/05/28(土) 06:22:54
質問です。
ウインドウのメッセージループってどういう風に書くのが確実なんでしょうか?
要求としては、メッセージループの空き時間にOnIdle()という関数を実行したいと考えています。
そこで、理想的な動作として、以下のソースを記述しました。(ホントはネットで拾った。汗
しかし、動作は理想的なのですが、これではウインドウが消えた後もメッセージループを抜けることはありませんでした。
どういう記述をすれば理想的な動作を両立できますか?
int CWindow::MsgLoop(){
    MSG msg;
    int Ret;
    while (1) { // メインループ 
        if (PeekMessage (&msg,m_hWnd,0,0,PM_NOREMOVE)) {
            Ret=GetMessage (&msg,m_hWnd,0,0) ;// メッセージ処理 
            if (Ret == 0 ) break;
            if (Ret == -1 ) break;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }else{
          OnIdle(); //独自の処理 
        }
    }
    return msg.wParam;
}
0941デフォルトの名無しさん2005/05/28(土) 06:46:20
age
0942デフォルトの名無しさん2005/05/28(土) 07:04:15
int CWindow::MsgLoop(){
    MSG msg;
    int Ret;
    while (1) { // メインループ 
        if (PeekMessage (&msg,m_hWnd,0,0,PM_REMOVE)) {
            if( msg.message == WM_QUIT )
                break;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }else{
          OnIdle(); //独自の処理 
        }
    }
    return msg.wParam;
}
0943デフォルトの名無しさん2005/05/28(土) 07:15:29
>>942
レスthx!
早速試してみます。
0944デフォルトの名無しさん2005/05/28(土) 07:56:40
すまん、質問だが、
コンボボックスの右矢印をクリックすることで、リスト上のメニューが表示されるが、
そのメニューにサブメニューとかをつけることは出来ますか?
つまり通常のメニューで使われているようなものを表示させることはできますか?
0945デフォルトの名無しさん2005/05/28(土) 08:20:30
>if (PeekMessage (&msg,m_hWnd,0,0,PM_NOREMOVE)) {
> Ret=GetMessage (&msg,m_hWnd,0,0) ;// メッセージ処理

なんで m_hWnd のメッセージだけ受けてるんだ?
これが NULL だったら WM_QUIT 受けれるのに…
0946デフォルトの名無しさん2005/05/28(土) 08:29:04
>>945
な!そんなカラクリが!?
WM_QUITがこなくて困ってたところでした。
ふぁああああああっく。(TT

レスThx。できました。
09479422005/05/28(土) 08:29:21
あ、やべ、そこ気付いてなかったや・・・
でもまぁ、>>940のじゃWM_QUIT受けても意味無いけどな

ってわけで>>943
↓こっちでやってくれ

int CWindow::MsgLoop(){
    MSG msg;

    while (1) { // メインループ 
        if (PeekMessage (NULL, 0, 0, PM_REMOVE)) {
            if( msg.message == WM_QUIT )
                break;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }else{
          OnIdle(); //独自の処理 
        }
    }
    return msg.wParam;
}
0948デフォルトの名無しさん2005/05/28(土) 08:43:59
ハードをパーティションではなくスライスに分割したいのですが、
どのAPIを使えばいいですか?
0949デフォルトの名無しさん2005/05/28(土) 08:48:15
>>947
レスThx!

余談ですが、
これ(ttp://techtips.belution.com/ja/vc/0009/)を参考にして汎用ウインドウクラスをつくってるんです。
MFCに依存したくないんでこういう形態をとってます。(そもそもMFC使ったことないし。
で回答をいただいた結果、ウインドウ1個はできるようになりました。
あとは複数に対応するだけです。感謝。
0950デフォルトの名無しさん2005/05/28(土) 08:56:58
俺もそんなことやろうとしたことはあったけど結局WTLに落ち着いた。
09519352005/05/28(土) 08:58:54
>>938
なるほど!どうもありがとうございます。
0952デフォルトの名無しさん2005/05/28(土) 09:21:32
>>949
複数のウィンドウ?
複数ウィンドウ作るならその数だけそのクラスのインスタンスを作るだけだが?
0953デフォルトの名無しさん2005/05/28(土) 10:12:29
質問ですが、VisualStdioやTeraPadのように、特定の文字列に色をつけたりすることをエディットボックスでできるのでしょうか?
エディットボックスの全ての文字色を変更するのはわかったのですが、特定の文字列だけ変更したい場合にはどのようにすればいいのでしょうか?
ご教授お願いします
0954デフォルトの名無しさん2005/05/28(土) 10:21:33
>>953
エディとボックスにそんな高度なことを求めてはならない。
0955デフォルトの名無しさん2005/05/28(土) 11:36:41
リッチなエディに求めるんだ。
0956デフォルトの名無しさん2005/05/28(土) 12:08:48
RegisterClipboardFormatで、
自分専用のクリップボードフォーマットの番号をOSから頂いたんですが、
この情報はレジストリに登録されるのでしょうか?
それとも、一時的なもので、再起動してRegisterClipboardFormatすると
再度割り当てが行われるものなのでしょうか?
(極力レジストリは汚したくないもので・・・)

0957デフォルトの名無しさん2005/05/28(土) 14:39:16
構造体のサイズを要求する構造体は多くありますが、例えば、
WNDCLASSEX wc;
として、
wc.cbSize = sizeof(WNDCLASSEX);/* 型を指定 */
wc.cbSize = sizeof(wc);/* 変数名を指定 */
の2つは、どちらにしておいたほうがいいのでしょうか。
0958デフォルトの名無しさん2005/05/28(土) 14:45:05
wcはwater closetだから
やめといたほうがいいよ
0959デフォルトの名無しさん2005/05/28(土) 15:06:19
>>957
どっちでも一緒だが、俺は型名指定して使ってるな。
0960デフォルトの名無しさん2005/05/28(土) 15:09:05
一長一短ある。

変数名にしておけば、構造体が拡張されて、もし名前が変わっても大丈夫。
もし型名にしていると、変更し忘れのミスが発生する恐れがある。

型名にしておけば、うっかりポインタをsizeofしてしまうミスを防げる。
0961デフォルトの名無しさん2005/05/28(土) 15:23:46
Win32API関数は全部でいくつですか?
0962デフォルトの名無しさん2005/05/28(土) 15:24:42
2567個です
0963デフォルトの名無しさん2005/05/28(土) 15:29:31
おれも今数えたら2567個だった。
このスレの常識だね。
0964デフォルトの名無しさん2005/05/28(土) 15:30:51
>>962
ありがとうございました。
0965デフォルトの名無しさん2005/05/28(土) 15:31:10
俺も一応数えてみたら2567個だった。
わりと常識だね
0966デフォルトの名無しさん2005/05/28(土) 15:33:54
>>963
ありがとうございました。
0967デフォルトの名無しさん2005/05/28(土) 15:34:29
>>965
ありがとうございました。
0968デフォルトの名無しさん2005/05/28(土) 15:51:03
俺、MSDN無しでコーディングできるWin32API関数20個行かないな・・・。少な。
0969デフォルトの名無しさん2005/05/28(土) 15:52:08
全て覚える必要などない
0970デフォルトの名無しさん2005/05/28(土) 15:57:05
CreateWindowExなどExが付く関数がたくさんありますが、これは何の略ですか?
0971デフォルトの名無しさん2005/05/28(土) 15:58:05
セックス
0972デフォルトの名無しさん2005/05/28(土) 15:58:57
>>970
たぶんExtra
どれもこれも元になったExの付かない関数がある。
0973デフォルトの名無しさん2005/05/28(土) 16:00:10
Extendedだと思ってた。。。
0974デフォルトの名無しさん2005/05/28(土) 16:00:23
Expectoration
0975デフォルトの名無しさん2005/05/28(土) 16:03:11
SEXがあるということはExのないSもあるのか?
SMのSか。
0976デフォルトの名無しさん2005/05/28(土) 16:29:19
CreateToolbar() が見あたらないな…CreateToolbarEx() はあるのに。
0977デフォルトの名無しさん2005/05/28(土) 16:35:14
そのAPI作ってた時にセックスしてた
Exはその記念
0978デフォルトの名無しさん2005/05/28(土) 16:37:03
年中セックスしてたかすっげー長い暗黒時代だったかどっち
0979デフォルトの名無しさん2005/05/28(土) 16:37:44
InitCommonControlSex() とかはいかにも怪しいな。
0980デフォルトの名無しさん2005/05/28(土) 16:39:23
WNDCLASSEX構造体も怪しいだろ
0981デフォルトの名無しさん2005/05/28(土) 16:41:38
顧問コントロールセックス
0982デフォルトの名無しさん2005/05/28(土) 16:44:23
リストビューのアイテムを並び替えるにはどうすればよろしいでしょうか?
0983デフォルトの名無しさん2005/05/28(土) 16:54:06
外付けのHDDって、GetDriveType()は何を返しますか?
USBのヤシと、IEEE1394のヤシが知りたいです。
0984デフォルトの名無しさん2005/05/28(土) 17:01:45
DRIVE_REMOVABLE
0985デフォルトの名無しさん2005/05/28(土) 17:16:55
スレ立てるまでもない質問 67 から移動して参りました。

>873 名前:デフォルトの名無しさん[sage] 投稿日:2005/05/28(土) 16:24:05
>VC6で最新でなくていいんですが、新しい目のプラットフォームSDKを使いたいんですけど
>どこかで入手できないものでしょうか?shell32.lib(shguid.obj)でエラーが出るのが致命的なんです。

lib.exeを使ってデバッグ情報を消してやればいいのでしょうか?
0986デフォルトの名無しさん2005/05/28(土) 17:32:52
「質問の仕方を学ぶスレ」からはじめよ。
0987デフォルトの名無しさん2005/05/28(土) 17:35:25
何をしたらどうなって、どうしたいのか書いてくれないか
SDKなら↓からもってこれないか
http://msdn.microsoft.com/downloads/
0988デフォルトの名無しさん2005/05/28(土) 17:38:02
>>972
>>973も言っているがExtendedだと思う
根拠は引数のdwExStyleの説明がextended window styleだから、というくらいだが
Extraじゃ拡張ってより、オプションって感じになっちゃうしなぁ
0989デフォルトの名無しさん2005/05/28(土) 17:44:16
すみません、再セットアップして環境が復元できなくなってしまいあせっておりました。

現在、VC6を使うとプラットフォームSDKに含まれる複数のライブラリでリンクエラーが出ます。
>fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください
これを解決するには、対応PSDKを導入するか、デバッグ情報を完全に削除するしかないと考えました。

解決手段の候補として下の二つがありましてどちらかの手段を取りたいのですが、

1.2003年の年末あたりのPSDKをどこかから入手する
2.互換性のないデバッグ情報は削除する

1は過去バージョンの入手方法が分かりません。
2はlink.exe dumpbin.exe lib.exeのオプションとMSDNのドキュメント見ましたがデバッグ情報の削除のやり方は分かりませんでした。

どちらかのやり方で解決したいのですが、方法を存知の方はいらっしゃいませんか?
2001年ごろのPSDKのバックアップならあるのですが、これの導入は最終手段にしたいのです。
0990デフォルトの名無しさん2005/05/28(土) 18:07:07
>>984 マジっすか。
0991デフォルトの名無しさん2005/05/28(土) 18:16:47
コマンドコンソールを解析しようと考え、Spy++ でメッセージのやり取りを
観測しようと試みましたが、
> 指定のウィンドウはスパイできません。Windows は、このウィンドウの
> メッセージ ストリームへアクセスすることを許可しません。
とエラーが表示されてしまいます。

何とかして見る方法はないものでしょうか。
0992デフォルトの名無しさん2005/05/28(土) 18:21:44
次スレ
http://pc8.2ch.net/test/read.cgi/tech/1117271829/
0993デフォルトの名無しさん2005/05/28(土) 19:39:06
>>990
DRIVE_FIXEDの方が多いよ。
0994デフォルトの名無しさん2005/05/28(土) 22:30:04
ume
0995デフォルトの名無しさん2005/05/28(土) 22:30:45
梅
0996デフォルトの名無しさん2005/05/28(土) 22:34:01
次スレ
http://pc8.2ch.net/test/read.cgi/tech/1057225723/
0997デフォルトの名無しさん2005/05/28(土) 22:34:19
あげ
0998デフォルトの名無しさん2005/05/28(土) 22:34:55
「……正解! いよいよ次の問題で100万円、という事ですが、自信は?」
「愚問ですね、さっさと1000万持って帰りたいくらいですよ」
「すごい自信だ! ……では問題。『次の漫画のうち、アメリカで実写版の映画が放映されるのはどれ?A、北斗の拳  B、ジョジョの奇妙な冒険C、ドラゴンボール D、魁! 男塾』」
「………っ!」
明らかに動揺を隠せない回答者田中。
「時間はたーっぷりあります。ライフラインも3つ残っている。」
そう話しているが、みのの表情は「さっさと答えろ」と言わんばかりの顔をしている。答えは勿論Cだ、Cなのだが……。
「……ええと、Cです、ね。はい」
「ファイナルアンサー?」
ここでファイナルアンサーと言ってしまえばどんなに気が楽なのか。次の問題に進み、当然私はその問題も楽に答える事が出来るだろう。
が! ここでジョジョが出てきた以上! 触れん訳にはいかんだろうッ!
「…ふ…ぞ…ート……も…ほど…ヒー」
なにやら呟く田中。
「……え!?」
「るえる…ハ…ト つきる…ど…ト」
「え? なんと?」
「震えるぞハート! 燃え尽きる程ヒィート!」
「え? え?」
「答えはC! だが俺はあえてこう言おう! 映画になる期待と希望を込めてBと!」
「ファ……ファイナルアンサー?」
「ファイナルアンサーッ! そしてお前は『残念、正解はCのドラゴンボール』と言うッ!」
「…………………………残念ッ! 正解はCのドランボール! ハッ!」
バー( ´-`)ーン
「アリー・ヴェデルチ!(さよならだ!)」
感涙を流すみの。そして惜しみない拍手と湧く会場。決して語られる事の無いミリオネアがそこにあったという……。
0999デフォルトの名無しさん2005/05/28(土) 22:36:13
接着厨は行ってよしモナー(アーアー
しかし裳前らは神だな(ワロタ
藻俺様のようなツーチャン歴が長いDONに歯向かうとどうなるか分かってるんだろうな罠?
初心消防車があんまり接着してると、いい加減ブラクル貼るぞテスト。
直リンも出来ない初心者は家具氏だなと一時間マジスレするぞ(vy
まあツーシャネラはこのくらいのスレが送信できて当たり前だ。
こんなことも出来ない家具氏は回線で首切って寝たら釣るぞ(糞
100061.132.192.61.east.flets.alpha-net.ne.jp2005/05/28(土) 22:36:39
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援してくださいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。