Win32API質問箱 Build ..
[2ch|▼Menu]
369:デフォルトの名無しさん
09/02/11 19:56:01
>>314
ありがとうございます!、出来ました。

#define _WIN32_WINNT 0x0500に変更で解決しました。

本当にありがとうございました。

370:デフォルトの名無しさん
09/02/11 20:27:20
相手のボーレート自動で判断してあわせてくれるシリアル通信ソフトあるけど
合ってるかどうかってどうやって判断してるんだろう

371:デフォルトの名無しさん
09/02/11 20:31:04
IME の前後参照変換に対応するため、WM_IME_REQUEST の IMR_DOCUMENTFEED を
拾うルーチンを書きました。が、XP や Vista + ATOK なら期待通り動作するのですが、
Vista + MS-IME では全く機能しません。

TSF 絡みっぽいところまでは推測がつくのですが、その先がさっぱりです。
そのあたりの仕組みについて記述している資料があれば、教えてください。

372:デフォルトの名無しさん
09/02/11 21:11:37
>>370
分からんけど。
例えば、相手が送ってくるデータが分かっていれば、
ボーレートを色々変えてみて正しく読めるのを探すとか?


373:デフォルトの名無しさん
09/02/11 21:17:10
>>314>>369
それで解決したなら、後からメンバが増えたせいだな。
URLリンク(msdn.microsoft.com)
_WIN32_NTが0x501以上だとlpReservedメンバが追加されるが、
これはNULLじゃないといけないと書いてある。
ところが、108のコードではそれが欠けていたのでうまくいかなかった。

まあ、良くある話だ。_WIN32_NTほかバージョン定義をきちんと定義して自己防衛するしかない。

374:デフォルトの名無しさん
09/02/11 21:20:27
NULLじゃないといけないReservedなメンバをわざわざ追加して互換性無くすとか
MSが何をしたいのかさっぱり分からん

375:デフォルトの名無しさん
09/02/11 21:34:31
>>371
IMR_DOCUMENTFEED固有の話はないけれど。
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)

376:デフォルトの名無しさん
09/02/11 21:53:34
>>373
そんな単純な話でもない
もともと>>314の参照先はちゃんと0初期化してて
マルチバイトでは動作するのに、Unicode では
動作しないって質問だし、自分でやってみても
うまくいかなかった
OSはVistaなのでOS側の問題とかはないはずなんだけど

377:デフォルトの名無しさん
09/02/11 22:03:12
>>375
ありがとうございます。なるほど、テキストストアっぽい単語が関係ありそうですね。

378:デフォルトの名無しさん
09/02/11 22:07:09
>>376
うおすまん、リンク先まで読んでいなかった。

379:デフォルトの名無しさん
09/02/11 22:13:08
>>376
manifestが無くてcomctl32.dll ver5系を使ってたってオチだろ
多分ver5系はcbSizeにTOOLINFO::lpReservedのサイズを含めてはいけない

380:デフォルトの名無しさん
09/02/11 22:30:45
>>379
まさにそのとおりでした
なんか昨日から気になってたんだけど、ようやくスッキリした
ありがとう


381:デフォルトの名無しさん
09/02/11 22:33:44
結局、TOOLINFO::lpReservedってそういう時わざと失敗させるために、構造体のサイズを変えるべく入れただけのような気がしてきた
NULL以外の適当な値を入れても動くみたいだし

382:デフォルトの名無しさん
09/02/11 22:37:47
D:→E:のようにドライブレターを変更するにはどうしたらいいんでしょうか?


383:デフォルトの名無しさん
09/02/11 22:41:18
コマンドプロンプトで

D:\> E:

と入力する。

384:デフォルトの名無しさん
09/02/11 22:42:30
つーか板違い

385:デフォルトの名無しさん
09/02/11 22:42:46
>>382
char path[MAX_PATH] = "D:\dokoka";
char drive[MAX_PATH];
char dir[MAX_PATH];
char name[MAX_PATH];
char exp[MAX_PATH];

_splitpath( path, drive, dir, name, exp);
drive[0] = 'E';
_makepath( path, drive, dir, name, exp);


ネタなので反論は許さない。

386:デフォルトの名無しさん
09/02/11 22:47:14
>>385
expって何だよw
エクスプローラの略か?

387:デフォルトの名無しさん
09/02/11 22:53:01
>>386
うっせw 突っ込むなって言ったろw pじゃなくてtだったよ、うろ覚えすぎたw
よく考えたら拡張子だからエクステンションの略なのか。

388:デフォルトの名無しさん
09/02/11 22:55:09
>>382
MSDN Library

Win32 and COM Development

System Services

File Services

File Systems

Volume Management

Volume Management Reference

Volume Management Functions
にお探しのAPIがあると思うよ

389:デフォルトの名無しさん
09/02/11 22:59:42
たまに優しい人が居るスレだ

390:デフォルトの名無しさん
09/02/11 23:18:48
たまに知らないならレスしないでください。ウザイだけですな人がいるスレだ

391:デフォルトの名無しさん
09/02/11 23:20:41
>>385
_splitpath, _makepath
こんなのあったんか、知らんかったぽ

392:デフォルトの名無しさん
09/02/11 23:22:54
これでもイジワルしたつもりなんだ、優しい人なもんか
まず質問者が最低限自分で調べてから質問する人かどうかを見極めるために
>ドライブレターを変更するにはどうしたらいいんでしょうか?
という質問から「api ドライブレターを変更」でググったら上位3件(1件重複あり)全てにAPI名が出てきたんだぞ
ここでイジワル心が働いた

今度はそのAPI名でまたググって英語版MSDN Libraryに飛んで
ツリー形式になってる項目を一つ一つコピペしてrootへ向かってだなあ・・・

393:デフォルトの名無しさん
09/02/11 23:28:16
>>392
お前のツンデレっぷりに感動したので、付き合ってください

394:デフォルトの名無しさん
09/02/11 23:29:41
      ハ,,ハ
     ( ゚ω゚ )  お断りします
    /    \
  ((⊂  )   ノ\つ))
     (_⌒ヽ
      ヽ ヘ }
 ε≡Ξ ノノ `J


395:デフォルトの名無しさん
09/02/11 23:35:54
Linuxユーザーがググった知識を披露するスレになり下がってる。

396:デフォルトの名無しさん
09/02/11 23:38:05
定型レスしかできないクソバカに比べれば100倍マシだからいいよ

397:デフォルトの名無しさん
09/02/11 23:38:09
まともな答えになっていれば別に何ユーザでも構わないでしょ。
ツンデレならWine使いかもしれないし。

398:デフォルトの名無しさん
09/02/11 23:40:35
>>397
>ツンデレならWine使いかもしれないし
詳しく

399:デフォルトの名無しさん
09/02/11 23:47:00
>>398
LinuxでWinAPIを実装してWindowsアプリケーションが動くというやつ。
使ったことないから出来は知らないけど。

400:デフォルトの名無しさん
09/02/11 23:54:22
>>397
使ったこともないのにググった知識で答えるのは無駄だろ。
質問者が一番知識があるという状態をよく目にする。

401:デフォルトの名無しさん
09/02/11 23:56:16
知識のある人が知らないフリして質問して、知ったかで回答する馬鹿を突付いて遊んでるんだよ

402:デフォルトの名無しさん
09/02/11 23:59:28
母無職、弟ニート、俺派遣
3人家族月10万(家賃含)でなんとかしてるけどなあウチは
残りは昔の生活費の借金返済に充てて

403:デフォルトの名無しさん
09/02/12 00:01:46
母無職、弟無職、俺無職
3人家族月0.1万(家賃含)でなんとかしてるけどなあウチは
残りは昔の生活費の借金返済に充てて

404:デフォルトの名無しさん
09/02/12 00:02:46
ここまで人工無能アイちゃんのレス

405:402
09/02/12 00:02:55
ごめんなさい

406:デフォルトの名無しさん
09/02/12 00:35:45
>>402
うわあ…

407:108
09/02/12 00:43:34
>>379
出力ウィンドウのデバック表示で

C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.6001.18000_none_886786f450a74a05\comctl32.dll' を読み込みました
C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6001.18000_none_5cdbaa5a083979cc\comctl32.dll' を読み込みました

と2種類のバージョンのcomctl32.dllを読み込んだように表示されているんですが、これは関係あるのでしょうか?
最近Win32APIプログラミング始めた素人なので変な質問だったらすいません。

408:デフォルトの名無しさん
09/02/12 01:03:24
>>407
Side-by-Sideでググっとけ


てか、内部or外部のXMLで、同名DLLのバージョンを切り替えるなんてアホだろ
誰が考えたんだよ全く・・・

409:デフォルトの名無しさん
09/02/12 01:26:10
>>407
CommonControl 6.0を使用するための具体的な対処ということなら、
以下をstdafx.hあたりに記載しとけばいけるばず

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")


410:デフォルトの名無しさん
09/02/12 01:38:01
>>408
ちなみにお前だったらどういうのがいいと思うのか聞きたい。

411:デフォルトの名無しさん
09/02/12 02:05:23
directxみたいにファイル名を変えとけばいいんじゃねーの?

412:デフォルトの名無しさん
09/02/12 10:45:47
dll heaven状態ですね

413:デフォルトの名無しさん
09/02/12 13:07:34
Direct2DとかWriteってDirectXになるの?
それともWIn32API?

414:デフォルトの名無しさん
09/02/12 14:51:53
1GBくらいのメモリを確保する場合はnewとGlobalAllocどちらがいいですか?
またその他に適した関数はありますか?

415:デフォルトの名無しさん
09/02/12 14:57:59
VirtualAlloc

416:デフォルトの名無しさん
09/02/12 15:01:48
>>415
ありがとうございます〜
さっそく調べてみます!

417:デフォルトの名無しさん
09/02/12 15:02:22
そんなに独り占めしてずるいわあ

418:デフォルトの名無しさん
09/02/12 15:24:14
1Gバイトのシリコンメモリ領域を明示的に確保し
それにスワップ無しでランダムアクセスするようなアプリを
動作させることが出来る商用パッケージOSは今のところ無い。
(近い将来出るかも知れないが)

Windowsの場合VirtualAllocとか使って、シリコンメモリに
領域を確保したつもりになってももどうせディスクにスワップ
されるので、1Gバイトのファイルを作成し、それにランダム
アクセスするコードと速度面では大差が無い。

419:デフォルトの名無しさん
09/02/12 15:37:20
>>418
使ったこと無いから詳しくは知らんがAWE APIは?

420:デフォルトの名無しさん
09/02/12 15:45:32
>>418
そうなんですか><


すみません。GlobalAllocもVirtualAllocも500Mくらいを超えたらエラーになってしまうんですが
一度に取ってもダメで500Mを2回に分けても2回目のVirtualAllocでエラーになります。

ちなみにVirtualAllocで1回で取れる最大サイズってなんぼなんですか?

421:デフォルトの名無しさん
09/02/12 15:54:29
>>418
本当に欲しければ、VirtualLockがあるよ。Unix系だってmlockがあるだろう。
果たして使いこなせるかどうかはともかく。

422:デフォルトの名無しさん
09/02/12 16:27:46
>>420
環境によるし、その時のアドレス空間の空き状況にもよる。

423:デフォルトの名無しさん
09/02/12 16:35:09
>>422
そうみたいですね・・・
いちおうメモリは4GBあるのですが、1MBづつ取ると970MBの所でエラーになりました
タスクマネージャの利用可能メモリは3.4GBあるのですが
2GBくらい取れないんですか?

424:デフォルトの名無しさん
09/02/12 16:37:58
なるべくプログラム開始直後にVirtualAllocで予約かけたら、
もうちょっと大きくとれないか?

425:デフォルトの名無しさん
09/02/12 16:38:48
>>423
環境によるし、その時のアドレス空間の空き状況にもよる。

426:デフォルトの名無しさん
09/02/12 17:03:25
特に設定しなければ、ユーザーエリアは最大2GB
そこをプログラムで使用中の上、連続したエリアを取りたいんだろうからそんなもんだな

427:デフォルトの名無しさん
09/02/12 18:40:03
PCに1GBのメモリを確保できるだけの余力がなかったりして。:-)

428:デフォルトの名無しさん
09/02/12 18:43:40
そんな大量に物理メモリを取りたければドライバ書けばいいだろ

429:デフォルトの名無しさん
09/02/12 18:45:44
つーか64bitに移行しろ

430:デフォルトの名無しさん
09/02/12 18:57:29
顧客にそんなこと言えますか? ねぇ、あなた

431:デフォルトの名無しさん
09/02/12 19:00:54
こんなとこでそんな質問すんなよ

432:デフォルトの名無しさん
09/02/12 19:02:39
メモリが少ない別PCの方が多く確保できた
これタスクマネージャのコミットチャージの最大値までしか取れないみたいですが
物理メモリが少ない方のPCはここの値がちょっと大きいのですが
これってどこで調整できますか?まあAPIとは関係ないっぽい話になっちゃいますが・・・

433:デフォルトの名無しさん
09/02/12 19:03:09
32APIスレなのに64ビットに移行しろとか言わなくても

434:デフォルトの名無しさん
09/02/12 19:06:56
>>429みたいな馬鹿はスルーしましょう。

435:デフォルトの名無しさん
09/02/12 19:12:15
>>432
強制的にramdiskとしてメインメモリより1GB搾取して
それをおれおれ専用メモリにしたら?
でも、どうやればよいのしらん

436:デフォルトの名無しさん
09/02/12 19:14:13
うんこしてきます。
しばらくお待ちください

437:デフォルトの名無しさん
09/02/12 19:15:02
>432
合計はスワップファイル+物理メモリでしょ。

438:デフォルトの名無しさん
09/02/12 19:21:46
>>413
そもそもDirectX自体、広義にはWin32 APIの一部分ということはともかく、
DirectXの一部みたいだけど、GDI/GDI+の置き換えとか言っているし、
どっちで質問するのがふさわしいかまだよく分かんないね。

439:デフォルトの名無しさん
09/02/12 19:31:47
ここ → DirectXスレへ行け
DirectXスレ → Win32APIスレへ行け
って言われるんですね、分かります

440:デフォルトの名無しさん
09/02/12 19:34:34
だったらDirect2Dのスレでも立てればいいだけだろうが

441:デフォルトの名無しさん
09/02/12 19:38:20
実装はCOMだろうしここになるとは思えない。

442:デフォルトの名無しさん
09/02/12 19:38:32
>>440
スレ立てできないくせにレスしないで下さい。ウザいだけです。

443:デフォルトの名無しさん
09/02/12 19:42:29
>>441
(´,_ゝ`)プッ

444:108
09/02/12 20:16:11
>>408
ありがとうございます、勉強になりました。
>>409
ありがとうございます。
CommonControl 6.0を使用出来るようになりました。

445:デフォルトの名無しさん
09/02/12 20:21:02
ま、Win7のリボンコントロールもCOMだからな

てかIUIFrameworkでググっても日本語のサイトが1件も出ねぇw

446:デフォルトの名無しさん
09/02/12 20:26:02
これをwin32の質問と見なして良いかどうか微妙ですが、
考えていると脳みそが沸騰して訳が分からなくなったので質問させていただきます。
質問
・VISTAのAero ON でウィンドウを作成する前にそのサイズを知る方法。
開発環境 SDK/VC++ 2005

問題の解決には、通常GetSystemMetrics()かAdjustWindowRectEx()を使うと思います。
ところが、VISTAのAeroが有効なときは奇妙な現象が起こります。
そこで実験してみました。
dwStyleA = (WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN);
dwStyleB = dwStyleA | WS_THICKFRAME;
の設定で、100,100 (800x600)をAdjustWindowRectEx すると
dwStyleA: 97,76 806x627
border w,h: 3,3
dwStyleB: 92,71 816x637
border w,h: 8,8
という結果が返ります。各borderは、次の式で求めています。
横は(ウィンドウ幅-クライアント幅)/2
縦は(ウィンドウ高-クライアント高-::GetSystemMetrics(SM_CYSMCAPTION))/2
一見して当たり前で、作成されたウィンドウをキャプチャしてサイズを確認した
ところ、確かに2000/Xp/VISTA aero off の時は見た目もこの通りになります。
しかし、VISTAのaeroが有効な環境では、dwStyleAでもdwStyleBでも、
見た目はdwStyleBと同じ(!)になるのです。
しかも、GetSystemMetricsもAdjustWindowRectExもAero on/off で同じ値を返します。
もちろん作成後に GetWindowRect()した場合、AdjustWindowRectEx()と
整合性のある値(つまり見た目とは違った値)を返します。
これがAPIのバグでないとしたら、dwm.exeが独自にウィンドウを装飾している
ものと思われますが、その値を取得する方法がわかりません。

1.Aero on時に見た目通りのウィンドウサイズを取得する方法は?
2.Aero on時のウィンドウサイズは常に thickframeと同じと見なしていいの?
3.2が良いとした場合、Aero on を手軽に知る方法は?

447:デフォルトの名無しさん
09/02/12 20:54:38
Theme系のAPIを使えば、もう少しまともな値が得られそうな予感。
あまりに面倒臭そうで試す気にもならんが。

ちなみに、AdjustWindowRectExは
必要なクライアント領域を確保するのに指定すべきウィンドウサイズを求めるAPIだから、
その周りのフレームについては何の保証もしていないと思う。

448:デフォルトの名無しさん
09/02/12 20:57:20
そもそも2000/XPでもメニューが2段以上になる場合とかは想定してくれないからな

449:デフォルトの名無しさん
09/02/12 21:06:00
>>447
theme系APIというと、uxtheme.dll のあれですね?
チェックしてみます。ありがとうございました。

例えば>>446は、800x600のクライアント領域を指定して、AdjustWindowRect を呼び出すことで
作成されるはずのウィンドウの大きさを取得してチェックしたものですが、問題なのはそれが見た目の
サイズと異なってしまうことなのです。
見た目だけの問題なので、だれも気にしないのかな・・・

450:デフォルトの名無しさん
09/02/12 21:56:02
 小学生の頃
 必死で買ったエロ本を母親に捨てられた
 恥ずかしいから怒る事もできず
 できるだけゴミ箱から回収するように頑張っていた
 しかし母親が何度も何度も捨てるもんだから
 ついに親父がブチ切れた

 切れた親父は母親に
 「これは!この本は!」とエロ本をゴミ箱からすくい上げ
 見せながら力説してくれた
 「これはな!このくらいの年のガキにとっちゃ!
 金払えば買えるもんじゃないんだ!お前はなぜこれを捨てるんだ!」

 俺は感動した

 親父はエロ本を俺に投げつけて
 「もう絶対捨てさせないし隠す必要もないからな!」
 と言ってくれた

 俺は泣いた

 でも次の日にエロ本は親父の部屋にあった
 何か複雑な気持ちだった



451:デフォルトの名無しさん
09/02/12 22:13:29
>>445
COMだとネイティブだけでホストするのめっさめんどくせぇじゃねぇか・・・

452:デフォルトの名無しさん
09/02/12 22:29:42
んなこたーない
WindowProc書いてSendMessage連発する方が面倒

453:デフォルトの名無しさん
09/02/12 22:30:29
>>450
今日VIPでできたコピペじゃないか

454:デフォルトの名無しさん
09/02/12 22:33:19
>>450=>>453
はいはい良かったね
さっさとVIPへ帰れ

455:デフォルトの名無しさん
09/02/13 00:29:23
くけいと読むんだ、たんけいかと思ってた

456:デフォルトの名無しさん
09/02/13 00:37:53
あるある。

457:デフォルトの名無しさん
09/02/13 00:55:29
方形

458:デフォルトの名無しさん
09/02/13 17:59:29
くけいでよかったんだ、ホッとした

459:デフォルトの名無しさん
09/02/14 16:14:29
チョコ欲しくない?

460:デフォルトの名無しさん
09/02/14 16:19:57
くれ

461:デフォルトの名無しさん
09/02/14 16:42:54
チンコほしい

462:デフォルトの名無しさん
09/02/14 17:20:30
ひぃ

463:デフォルトの名無しさん
09/02/15 00:25:44
いま、注目されている劇団のHPの中身。
URLリンク(circus.main.jp)

2ちゃんにもスレがあるよ。
スレリンク(drama板:901-1000番)

464:デフォルトの名無しさん
09/02/15 01:47:50
お前ら出番だ
スレリンク(tech板)

465:デフォルトの名無しさん
09/02/15 05:07:59
マルチ乙

466:デフォルトの名無しさん
09/02/15 05:30:18
MAXIMIZEBOXを表示し、且つキャプションバーダブルクリックでの動作をすり替えるにはどうすればいいのでしょうか?
WM_SYSCOMMANDのように最大化動作の直前に知りたいのですが.

467:デフォルトの名無しさん
09/02/15 07:03:31
WM_SYSCOMMAND

468:デフォルトの名無しさん
09/02/15 09:28:32
独自のキャプションバーを作る

469:デフォルトの名無しさん
09/02/15 11:44:50
msg が WM_SYSCOMMAND かつ wParam が 0xf012 の時に摩り替える処理を行って
かつ DefWindowProc にデフォルト処理をさせなけりゃおk

470:デフォルトの名無しさん
09/02/15 11:47:26
間違えた
×0xF012
○0xF032

471:デフォルトの名無しさん
09/02/15 12:10:42
///<summary>
/// Sent when form maximizes because of doubcle click on caption
///</summary>
SC_MAXIMIZE2 = 0xF032,

これですね、ありがとうございます。
膨大で、やりたいことやろうと思うとすごく難しい

472:デフォルトの名無しさん
09/02/15 12:18:12
/// Sent when form maximizes because of doubcle click on caption
///</summary>
SC_RESTORE2 = 0xF122,

これも忘れずになー

473:デフォルトの名無しさん
09/02/15 12:20:52
ダブルクリックの時だけ動作を変えるってどういう状況?
ウィンドウシェードでも実装したいのか?

474:デフォルトの名無しさん
09/02/15 12:30:37
DirectXプログラムで最大化ボタンでフルスクリーンにしようかと.

475:デフォルトの名無しさん
09/02/15 12:35:30
昔の俺と同じ動機だ
当時最大化ボタンにマウスカーソルを合わせた時ツールチップで「フルスクリーン」と出るようにもしたかったけどそっちは挫折した

476:デフォルトの名無しさん
09/02/15 12:41:13
こうやって先人がレールを敷いてくれると助かりますよ、本当に。

477:デフォルトの名無しさん
09/02/15 13:32:27
>>474
普通にWM_SYSCOMMAND/SC_MAXIMIZEが飛んでくるのを処理すればいいし自ら答え出してるだろ

で、SC_MAXIMIZE2とか定義してる馬鹿がいるみたいだけどMSDNをしっかり読もうな

> In WM_SYSCOMMAND messages, the four low-order bits of the wParam parameter are used internally by the system.
> To obtain the correct result when testing the value of wParam, an application must combine the value 0xFFF0
> with the wParam value by using the bitwise AND operator.

478:デフォルトの名無しさん
09/02/15 13:54:51
>>477
最大化ボタンもタイトルバーダブルクリックもmsgはWM_SYSCOMMANDだが
前者のwParamはSC_MAXIMIZE(0xF030)で後者のwParamは0xF032なんだよ

479:478
09/02/15 13:57:20
MSDNも>>477のレスもしっかり読んでなくてごめんなさい


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5396日前に更新/103 KB
担当:undef