1 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:51:24 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-10 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build64 pc11.2ch.net/test/read.cgi/tech/1207099291/
231 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:36:15 ] MAX_PATHはかなり前に出てる 質問者が勝手に260に変換しただけ
232 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:06:42 ] この中に、「MAX_PATH を超えるパス名など存在しない」と思ってる人が!
233 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:11:35 ] そんなのexplorerだっていい加減だから気にしなくていい
234 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:15:23 ] www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D+%E6%9C%80%E5%A4%A7 嘘書いてるのも多いしなあ(FAT32の話をしてるのかも知れんが)
235 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:20:11 ] ↑話を理解してない馬鹿
236 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:26:07 ] double型の数値を表示するのに、 double dbl=1.23; char res[32]; wsprintf(res,"%f",dbl) SetWindowText(hWnd, res); とするとfと表示されるだけです。 どこがおかしいでしょうか?
237 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:47:49 ] >>236 L"%f"
238 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:49:19 ] wsprintfは実数使えないよ
239 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 15:05:48 ] せめてMSDNでAPIの説明を読んでから質問しろよ
240 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 15:06:22 ] StringCchPrintf
241 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 19:45:36 ] >>237-240 超亀ですが、ありがとうございました。 もっとちゃんと勉強しなおします。。
242 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 23:13:13 ] >>191 ttp://web.archive.org/web/20030625222552/www.osr.com/ntinsider/1996/fastio.htm
243 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:14:39 ] wsprintf の 'w' って "Windows" のことだよね? lstrcpy の 'l' はさっぱり分からん
244 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:19:29 ] 同じように95時代のソースみてると _lopen とかつかってて _l ってなによって思う
245 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:38:55 ] LPSTRと同じようにlong pointerじゃないの?
246 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:39:42 ] 指定の他のソフトにきているメッセージを調べる方法ってありませんか?
247 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:48:22 ] グローバルフック
248 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:58:24 ] lsprintfでも良かったのにwsprintfなのが謎 kernel32.dllじゃなくてuser32.dllにあるのも謎 しかもWin9x系だと実体はkernel32.dll内にあってuser32!w(v)sprintfは実体にjmpしてるだけだし
249 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 03:00:35 ] swprintf と wsprintf があるからややこしいんだよな。 しかもそれでいて wsprintf は %f がないという大きな仕様の差があるし。
250 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 03:07:23 ] CRT: sprintf, swprintf Win32: wsprintf CRT: vsprintf, vswprintf Win32: wvsprintf CRT: _snprintf, _snwprintf Win32: wnsprintf CRT: _vsnprintf, _vsnwprintf Win32: wvnsprintf >>249 それだけじゃないぞ。 wsnprintf じゃなくて wnsprintf とか、もうアホかと。
251 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 04:42:39 ] >>250 こういうの、1〜2回/年くらいしか趣味でWinアプリをつくらない ハード屋のおいらにはつらい
252 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 05:07:35 ] シーケンシャルで読み捨てるんだったら メモリマップトファイル使っても効率落ちるだけですかね?
253 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 06:03:19 ] 読み捨てるのに明示的にマップする必要なんてあんのか
254 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 08:03:24 ] ReadDirectoryChangesW() を同期モードでワーカースレッドで使用した場合に, メインスレッドから制御を変えさせる(中断させる)方法ってありますか?
255 名前:デフォルトの名無しさん [2008/04/27(日) 11:04:31 ] multimedia timerとhigh-resolution timerの使い分けはどのようにすればいいのでしょうか?
256 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:09:24 ] 気分しだい
257 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:17:27 ] 同期用のディレクトリハンドルを閉じてみるとか
258 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:38:51 ] >>252 数MBくらいのファイルだが、 シーケンシャルな読み取りしかしないときにメモリマップしたら、 バッファリングありで普通に読み取るよりは速かった覚えがある。
259 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:41:45 ] バッファリングぐらい自前でしろよ
260 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 11:43:18 ] >>257 今やってみたけど制御帰らなかった…(´・ω・`)
261 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:36:16 ] 1.clやgccでコンパイル・リンクして出来上がった*.exeファイルは、 CPU(ペンティアム等)が直接理解できる形式のファイルなのでしょうか? 2.上記の答えが「直接理解できないファイル」の場合。 CPUが直接理解できるファイルを、clやgccで作成することは出来ますか? 質問の意図。 出来るだけ速く動作させたいとか直接的な理由はありません、 知識として知っておきたいのが質問の意図です。
262 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:37:42 ] ほぼ直接理解できる形式になっている。 ほぼってのは、プログラムをメモリ上にロードする際に OS が少し手を加えるから。
263 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:44:42 ] そもそもCPUは命令をデコードしてから実行してるからCPUが直接理解できるなんて有り得ない訳だが
264 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:51:20 ] デコーダも CPU 内にあるし
265 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:57:23 ] いや、IntelやAMDが配ってる命令リストに記述されてるもんであれば 直接解釈しているとみなして良いと思うが
266 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:15:32 ] >>261 exeやdllは必ずしもCPUネイティブなマシン語とは限らんぞ。 /clrでコンパイルしたらMSILになるからな。
267 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:17:04 ] そうか cl だとそれがあったか
268 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 20:11:29 ] マイクロプログラムってソフトウェアなのかハードウェアなのかよくわからんよな。
269 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 02:47:55 ] Win32APIで.NETのexeからリソースを取り出すのってどうすればいいの? FindResourceじゃ取れないし
270 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 03:06:49 ] アンマネージホスト用のインタフェース・関数がmscoree.dllとかから出ているから、 それを使ってやればいいんじゃないかな? CLRを読み込んで、アセンブリ (EXE)を読み込んだら、 あとはCOMインタフェースで.NET Frameworkクラスライブラリを使う。 実際できるかどうかわからないけど、100%ネイティブでやれるとしたらこんな感じのはず。
271 名前:デフォルトの名無しさん [2008/04/28(月) 04:50:39 ] >>270 それネイティブじゃないだろw
272 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:36:29 ] GetGlyphOutline で TrueType font の情報を取ってきているんですが、 OUTLINETEXTMETRIC 構造体の otmsCapEmHeight って何の値が入っているか 知っている方いらっしゃいますか。 MSのヘルプ系には Not supported.ってしか書いてないんですよね そのわりにはしっかり値入ってるし、どうもほしい値っぽいし・・・
273 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:46:02 ] Caption Embed Height キャプションに配置した時の高さ 勘で言った。気にしないでくれ
274 名前:デフォルトの名無しさん [2008/04/28(月) 15:46:22 ] 32bitOS上で、32bitアプリは特別なことしないとユーザー2GB、 カーネル2GBですよね。 64bitOS上だと、この2GB&2GBは変わらないのでしょうか? ちとスレ違いかも知れんけどWin32アプリの仕様に関してなので、 ここで質問してみました。 ググっても資料見つかんなかったです。検索下手ですね。すみません
275 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:03:00 ] >>274 これがそれっぽい? msdn2.microsoft.com/en-us/library/aa384219 (VS.85).aspx >On the x64 processor, each 32-bit application receives 4 GB virtual address space in the WOW64 environment, >if the application has the IMAGE_FILE_LARGE_ADDRESS_AWARE flag set in the image header. >If this flag is not set, the 32-bit application receives 2 GB virtual address space.
276 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:07:54 ] 64bitOS上で、32bitアプリってこと? リンカでスイッチ入れない場合は上限2GBでかわらない。 入れた場合は4GBまで使える。
277 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:15:25 ] >>276 一つ上のレスも見えんのか
278 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:42:04 ] >>277 お節介な話だが、>>276 氏は>>274 を見てレスを考えている最中に先に >>275 が入って、ちぐはぐになったんじゃね。
279 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:46:20 ] ファイルパスが長い場合に途中を...に置き換えてくれる関数みたいに 指定された長さ以下になるまで8.3形式に縮めてくれる関数ないですか。
280 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:52:47 ] >>278 つまりこういう事か ケコーンしる>>276 >>277 >>279 > 指定された長さ以下になるまで8.3形式に縮めてくれる 何が言いたいのかさっぱり分からん
281 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:53:30 ] まつがえた ケコーンしる>>275 >>276
282 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:00:00 ] >>279 上のほうはPathCompactPath(Ex)
283 名前:282 mailto:sage [2008/04/28(月) 17:01:52 ] 質問ちゃんと読んでなかった。忘れて
284 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:21:02 ] なんでお前らそんなに物知りなんだ……?
285 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:25:28 ] ・指定された長さ以下になるまで縮める PathCompactPath、PathCompactPathEx、DrawTextEx ・8.3形式に縮める GetShortPathName ・指定された長さ以下になるまで8.3形式に縮める ???
286 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 18:01:35 ] >>275 >>276 ありがとん 例の3GBスイッチ入れたら64bitOS上でユーザー4GBですね。 もうこれで十分だああああ。 64bitアプリを作るのはいつのことになるやら…
287 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 19:45:30 ] >>272 ぐぐっただけだが。 ttp://source.winehq.org/source/dlls/gdi/freetype.c?v=wine20011226 には「potm->otmsCapEmHeight = pOS2->sCapHeight」と書いてある。 で、「sCapHeight」を調べたら ttp://www.microsoft.com/OpenType/OTSpec/os2.htm This metric specifies the distance between the baseline and the approximate height of uppercase letters measured in FUnits. This value would normally be specified by a type designer but in situations where that is not possible, for example when a legacy font is being converted, the value may be set equal to the top of the unscaled and unhinted glyph bounding box of the glyph encoded at U+0048 (LATIN CAPITAL LETTER H). If no glyph is encoded in this position the field should be set to 0. This metric, if specified, can be used in systems that specify type size by capital height measured in millimeters. It can also be used as an alignment metric; the top of a drop capital, for instance, can be aligned to the sCapHeight metric of the first line of text.
288 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 19:57:02 ] 日本語でおk
289 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:08:53 ] wineのソースかよ
290 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:26:35 ] >286 例の3GBスイッチって何?
291 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:32:24 ] >>290 link.exe /LARGEADDRESSAWARE
292 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:34:42 ] どこらへんが3GBなの?
293 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:36:45 ] ヒントもらったんだから少しは調べて聞けよ・・
294 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:45:32 ] boot.iniに仕込むほうの/3GBと紛らわしくてイケナイし、 内実がしめしているものと意味合いが異なりすぎるのに LARGEADDRESSAWAREを3GBスイッチとか言うのはなぜ?
295 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:56:53 ] ↑話を理解してない馬鹿
296 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 21:16:48 ] >>252 実際にやったことある。 もう必要ないページが物理メモリに残って、また必要になるページが追い出されて、 ぐだぐだな状態になったよ。 ワーキングセットを自分でトリムすりゃいいんだろうけど、 そしたら自分に必要なページまで削られちまうかも。
297 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:34:59 ] >>294 大いに関係ある。 /LARGEADDRESSAWARE付けたEXEが実際に2GB超のメモリを使うには、 boot.iniで/3GBを入れていないといけない。 (あるいは上に話があったように64ビットWindowsにするか)
298 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:41:52 ] 2000だとシステム空間は減るのにユーザのメモリ空間は変わらないんだよな、確か
299 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 23:43:14 ] 煽り目的の人はシンデイイヨ
300 名前:272 mailto:sage [2008/04/29(火) 01:22:40 ] >>287 ありがとう そのあたりも調べてみます。
301 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 01:54:18 ] すみません。質問させていただけますでしょうか。 今現在、SetTimerを用いてWM_TIMERを送ってもらっているのですが、 タイマーの精度が低いので、timeGetTime関数を使ってみようと思ったのですが これがうまくいきません。 具体的なやり方のようなものをご存知の方がいらっしゃいましたら、ご教示くださいませ
302 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 01:59:20 ] マルチメディアタイマーつかっとけ
303 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:32:29 ] パフォーマンスカウンタで測りながらループが最強だと思う
304 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:33:56 ] ちゃんとループにSleep(0);を挟んでおけよ
305 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:44:29 ] system("cls"); みたいな動作する関数って何ですか?
306 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:47:23 ] VOID SystemCLS(VOID){ system("cls"); }
307 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:51:09 ] system("cls"); これを使わなくてもコンソール画面をクリアして カーソルを一番左上に持っていく事はできますか?
308 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:51:36 ] >>306 それじゃWinAPI関係ねぇだろw
309 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 03:03:37 ] CreateProcessに変更すればおk
310 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 03:05:13 ] msvcrt.dllがKnownDLLsの一つだからCランタイム関数もWin32APIだろう まあ"msvcrt.dll"にリンクできるコンパイラ(VC6,DDK,gccなど)を使ってればの話だが
311 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 03:18:02 ] >>307 できます。
312 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 03:19:54 ] どうやって?
313 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 03:21:34 ] 非同期でwav再生してて、wavの再生位置が1分に来たら このメッセージを表示 とかどうやったらできる?
314 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:10:40 ] sndPlaySound("c:\\test.wav", SND_ASYNC); Sleep(60000); MessageBox(NULL, "このメッセージを表示", NULL, 0);
315 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:40:57 ] >>301 マイクロソフトのサンプルはすべてチェックしたか? >>303 パフォーマンスカウンターは正確とは限らない。 一部のCPUでは、CPUが省電力機能でクロックが低下すると、パフォーマンスカウンターまで遅くなる。 また、複数のコアを持つCPUでは、パフォーマンスカウンターの読み出しには結構なコストがかかる。 (かといってRDTSC命令(だったかな)を直に呼ぶのはダメだ。マルチプロセッサやマルチコアなど、 カウンタが複数ある場合、それらが同一にカウント開始するとは限らないからだ。)
316 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:40:58 ] GetAsyncKeyStateでキーの押下状態を取得したんですが、 3つ以上のキーを同時に押下するとき、いくつかの組み合わせでは最後に押したキーが押下されてない事になっています。 たとえばASDやSDFなどでは3つとも取得できていますが、 DFGやHJKをD→F→GやH→J→Kの順番で押していくとDFやHJの2つしか押下されてない事になっていて、 同様にD→G→FやH→K→Jの順番で押していくとDGやHKの2つしか押下されていない事になっています。 何か解決のヒントでもあれば教えてください。 ちなみにGetKeyStateやGetKeyboardStateを使っても同様の現象が発生していました。
317 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:44:20 ] >>307 MSDNライブラリで、 WriteConsole のページを開いて目次を同期し、そこのあたりのAPIを一通り見れ。
318 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:45:14 ] >>314 Sleep(60000)が同期だろうが。 茶化した回答しかできんなら黙っとれ。
319 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:47:51 ] >>316 まずは、あなたの使っているキーボードが、Nキー・ロールオーバーを保証していることを確認せよ。 また、同時押下のキーに制限がないことを確認せよ。 そこいらのキーボードはコスト削減のために、 (シフト系の同時押下前提のキーを除いて) 複数のキーの同時押下を検出できない または、誤検出するような設計になっている。
320 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:54:25 ] >>319 あー・・・なるほど。 1000円くらいの安物なので多分対応してないでしょうね・・・。 確認してみます。 ありがとうございます。
321 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 04:59:18 ] Nキー・ロールオーバーを謳ってるキーボードでも、 PS/2接続ならOKだが、 USB接続だと6キーまでという制限があったりするらしいぞ。
322 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 06:38:42 ] PS/2接続のRealforce使ってるから、GetKeyboardStateで試してみたら、 本当にいくらでも同時押し下げを認識するのな。 別に無制限の同時押し下げのために使ってるわけじゃないが。
323 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 07:42:55 ] >>318 sndPlaySound("c:\\test.wav", SND_ASYNC); CloseHandle(CreateThread(..., ThreadFunc, ...)); DWORD WINAPI ThreadFunc(void* p) { Sleep(60000); MessageBox(NULL, "このメッセージを表示", NULL, 0); return 0; }
324 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 08:13:46 ] というか>>314 のレス内容からこの程度の応用すら思い付かない奴は プログラマに向いていないので転職をおすすめする
325 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 08:22:24 ] sndPlaySound使う時点でプログラマに向いてないと思うがw
326 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 08:25:16 ] 非同期ってのは、そういう意味じゃないだろ。
327 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 08:27:09 ] >>314 や>>323 は、 60秒後に このメッセージを表示 することだよな。 それを求めていたら、そういう質問になるだろう。
328 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 08:30:04 ] >>313 の質問は、 > 非同期でwav再生してて、wavの再生位置が1分に来たら > このメッセージを表示 である。 言葉を補うと、 すでに非同期で再生しているwavが、 その再生位置が1分のところに来たら このメッセージを表示 となるだろう。 どこまで再生しているのか不明な以上、 Sleepなんかじゃ話にならない。
329 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 08:31:42 ] wavの再生速度を変えないなら、再生位置が1分になるのは再生してから1分後だろう
330 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 08:33:04 ] 音とびなどの特殊状況を考えなければね
331 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 08:34:08 ] 今時wavの再生ごときで音とびなんてするかよ