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

Win32API質問箱 Build47

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/13(月) 08:56:12
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
07577482006/12/08(金) 15:39:20
オレ・オワタ
0758デフォルトの名無しさん2006/12/08(金) 16:50:47
JavaでいうところのSystem.currentTimeMillisはありますか?
0759デフォルトの名無しさん2006/12/08(金) 16:54:01
途中で投稿してしまいました。

JavaでいうところのSystem.currentTimeMillisはありますか?
GetLocalTimeでSYSTEMTIMEとって自分で掛け算ですか?
0760デフォルトの名無しさん2006/12/08(金) 17:00:46
ttp://msdn.microsoft.com/library/en-us/sysinfo/base/time_functions.asp
0761デフォルトの名無しさん2006/12/08(金) 18:57:27
ほかのプログラムにバイナリデータを渡して起動するには
どんな方法がよさげ?

コマンドラインパラメータ以外で。
0762デフォルトの名無しさん2006/12/08(金) 19:10:59
量とかどういう処理なのかとかもっと具体的じゃないと検討しようがない。

コマンドライン以外だと渡して起動というよりも起動後通信だな。
pipe、共有メモリ、ネットワーク等。
0763デフォルトの名無しさん2006/12/08(金) 19:18:10
>>762
量は多くても1KBくらい。
確実に渡せる方法がいいです。
0764デフォルトの名無しさん2006/12/08(金) 19:39:20
データ受け渡し用ファイルでも作れば?
0765デフォルトの名無しさん2006/12/08(金) 19:46:54
>>764
そうしてみるわ
トンクス
0766デフォルトの名無しさん2006/12/08(金) 20:30:14
質問です。
Windowsのエクスプローラの、ファイルやフォルダが表示される部分を
自分で作ったウィンドウに埋め込むにはどうすれば良いでしょうか。
0767デフォルトの名無しさん2006/12/08(金) 20:37:23
ttp://www.nitoyon.com/vc/tips/ie_component.htm
IEコンポーネントを使っている例だが参考になる。
アドレスバーに入力すればわかるが、フォルダだって表示できる。
0768デフォルトの名無しさん2006/12/08(金) 20:43:30
右クリックで警告がでたりするがな。
0769デフォルトの名無しさん2006/12/08(金) 20:52:36
うさみみハリケーンとか、ねこまんまとか ollydbg とかで
メモリマップの表示っていうのありますが、あれはどの API
をつかってるんでしょうか?

開始アドレス フラグ サイズ
00010000 -RW- 1000
00020000 -RW- 1000
0011F000 -RW- 11000
....

77FDF000 -ERW- 1000
77FFE000 -R- 1000

こういうやつです。
0770デフォルトの名無しさん2006/12/08(金) 21:02:39
VirtualProtectExとかReadProcessMemoryとかそこらへんだと思う。
0771デフォルトの名無しさん2006/12/08(金) 21:46:58
WinMainをDLLに置くことは可能ですか?
0772デフォルトの名無しさん2006/12/08(金) 21:50:10
>>771
無理。

スタティックリンクライブラリに置くことは可能。
0773デフォルトの名無しさん2006/12/08(金) 21:53:06
エントリポイントから自分で書けばできるのではないだろうか。
0774デフォルトの名無しさん2006/12/08(金) 22:23:21
FindFirstFile()/FindNextFile()で教えて下さい。

ワイルドカード+拡張子でファイルを検索してるのですが、これで引っ張ってくる
ファイル名の順番はどういう順で返されるのでしょうか?
最初は名前順かと思ったのですが違うようで…
0775デフォルトの名無しさん2006/12/08(金) 22:44:57
>>774
MSDN読めよ
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findnextfile.asp
>The order in which this function returns the file names is dependent on the file system type.
>With the NTFS file system and CDFS file systems, the names are returned in alphabetical order.
>With FAT file systems, the names are returned in the order the files were written to the disk,
>which may or may not be in alphabetical order.
0776デフォルトの名無しさん2006/12/08(金) 22:51:29
>775
それは邦訳を読んだけどそれでもイマイチ疑問なのヨ

具体的な例で、検索対象フォルダに名前が"a.txt"と"_.txt"で始まるファイルがあるとき、
explorerで「アイコンの整列->名前順」とすると

_.txt
a.txt

という順で表示されますが、FindFirst/FindNextで検索すると逆に出てくる。
なぜ?('A`)

'_' = 0x5f
'a' = 0x61

ってことを考慮するとexplorerの名前表示順がしっくりくるんだけどな…
0777デフォルトの名無しさん2006/12/08(金) 22:52:55
>>776
>>775 読め
0778デフォルトの名無しさん2006/12/08(金) 23:00:34
質問の意図を伝えられなかったようで

回避方法見つけたからもういいわ
0779デフォルトの名無しさん2006/12/08(金) 23:03:26
ファイルシステムに依存すると書いてあるじゃないか
てか自前でソートすれ
0780デフォルトの名無しさん2006/12/08(金) 23:05:34
>ファイルシステムに依存すると書いてあるじゃないか

それを解った上で776を書いたんだが

>てか自前でソートすれ

そうしたよ
0781デフォルトの名無しさん2006/12/08(金) 23:23:39
すると何か、FindFirst/FindNext を呼ぶたびに、
内部でファイルを列挙して並び替えて・・・って処理をやってくれというのか?
0782デフォルトの名無しさん2006/12/08(金) 23:29:18
explorerとFindNextFile()の名前順の解釈が違うのは何故かを聞きたかったのだが

>781
誰が何時そんな事を言ったのか言ってみ
0783デフォルトの名無しさん2006/12/08(金) 23:34:48
つうかexplorerもXPとそれ以前でソートの仕方が違うよね
ファイル名に数字がついた時とか
0784デフォルトの名無しさん2006/12/08(金) 23:51:57
Explorer が >>779 だからに決まってるじゃないか
0785デフォルトの名無しさん2006/12/09(土) 00:09:27
>>776
FindNextFileはファイルシステムに物理的に格納されている順番で列挙するんだから。
z.txt
a.txt
の順で格納されていたら。その順で出てくるだけだと思うが。
たぶん、その実験した環境では、
a.txt
_.txt
の順番に格納されていたんだろうね。

explorerは表示する時に、ソートしなおしているんだから、「しっくりくる」順番なのは当然。
0786デフォルトの名無しさん2006/12/09(土) 00:19:13
>>785
>>775 読め
0787デフォルトの名無しさん2006/12/09(土) 00:30:07
見えないリストボックスに読み込めばソートもしてくれると思うんだけど...
0788デフォルトの名無しさん2006/12/09(土) 00:30:17
12520850.cpx
2052
3076
3com_dmi
6to4svc.dll
a15.tbl
a234.tbl
aaaamon.dll
Accesor.dll
access.cpl
acctres.dll
accwiz.exe
acelpdec.ax
acledit.dll
aclui.dll
acode.tbl
activeds.dll
activeds.tlb
actmovie.exe
actskin4.ocx
actxprxy.dll
adddrv.exe
admparse.dll
ADODC.SRG
ADODCJP.DLL
adptif.dll
adsldp.dll
adsldpc.dll
adsmsext.dll
adsnds.dll
adsnt.dll
勝手にソートしてんじゃん
07897742006/12/09(土) 00:33:39
>787
正にそれで済ませたワケだが

>788
先頭に'_'の付いたファイルも検索すれば言ってる事判ると思われ
0790デフォルトの名無しさん2006/12/09(土) 00:40:13
>>789
b.txt、c.txtも検索すれば皆が言ってる事判ると思われ
0791デフォルトの名無しさん2006/12/09(土) 00:41:36
取り敢えず名前順といってもAPIとExplorerで一貫してないっぽい
何故か?については誰も答えられない
0792デフォルトの名無しさん2006/12/09(土) 00:43:35
>790
多分一番解ってないのはお前
0793デフォルトの名無しさん2006/12/09(土) 00:48:34
>>769
GetSystemInfo
VirtualQueryEx
0794デフォルトの名無しさん2006/12/09(土) 01:01:25
Windowsのファイルシステムドライバがファイル名の大文字小文字の
区別をつけないように組まれていることを考えればわかるだろうに。
0795デフォルトの名無しさん2006/12/09(土) 01:02:28
>>789
LBS_STANDARDフラグは付けたの?
0796デフォルトの名無しさん2006/12/09(土) 01:03:28
と、今更解ったような口を利く奴が登場ですよ
0797デフォルトの名無しさん2006/12/09(土) 01:09:12
つうか>>774はどのファイルシステム使ってるんだよ?
NTFSなのかFATなのかくらい書けよ。
0798デフォルトの名無しさん2006/12/09(土) 01:16:44
知ったかが答えられずに妙な突っかかり方してるようにしか見えんな
0799デフォルトの名無しさん2006/12/09(土) 01:39:48
例えば、_, a, B, c, D を並び替えた場合、文字コード順にやってしまうと、
B < D < _ < a < c と並び替えられる。

a より B が前に来るのは、直感的に分かりにくい。
そのためエクスプローラでは、いわゆる辞書順に並び替えるため、
おそらくアルファベット大文字を小文字に変換してからソートしている。

_, a, B, c, D
→ _, a, b, c, d
→ _ < a < b < c < d
→ _ < a < B < c < D

こうして、アンダーバーは先頭に持ってこられる。

全部予想だけど。
0800デフォルトの名無しさん2006/12/09(土) 01:50:29
全角のA、aも半角と入り混じって辞書順になるよ
言語の設定を日本語にしてるときだけかもしれんけど
0801デフォルトの名無しさん2006/12/09(土) 03:25:26
Zipフォルダを、エクスプローラだけじゃなくて
任意のアプリからフォルダのように見えるようにする事は無理なのでしょうか?
0802デフォルトの名無しさん2006/12/09(土) 05:40:17
エクスプローラで全角スペースで始まるファイル名より前に来るファイル名を探せ
0803デフォルトの名無しさん2006/12/09(土) 08:12:36
ファイル順がどうのと訳知り顔で囁いてる香具師らはまとめて>>775見ろ
0804デフォルトの名無しさん2006/12/09(土) 08:39:04
>>801
それはAPIの質問なのか?
そのアプリ作った奴に頼め
0805デフォルトの名無しさん2006/12/09(土) 08:43:41
おはようございます
0806デフォルトの名無しさん2006/12/09(土) 09:11:45
ExplorerとAPIは同じであるべきだ、という前提が間違っているとは考えないのかな
0807デフォルトの名無しさん2006/12/09(土) 09:36:30
>>803
英文を読めるような頭を持った人間なら、そもそもここまで話を引き伸ばせません。
0808デフォルトの名無しさん2006/12/09(土) 09:47:51
NTFS上のソート順は
! < 0 < A,a < _ < α < あ < ア < 亜 < A,a

Unicode順で、英字は大小の区別なし(大文字と見なす)、全角半角の区別あり、カタカナひらがなの区別あり
といった感じだな。

explorerは、英字は大小の区別なし(小文字と見なす)、全角半角の区別なし、カタカナひらがなの区別なし、
漢字はJISコード順って感じかな。
0809デフォルトの名無しさん2006/12/09(土) 09:56:13
>>807
本当に知らなくて恥ずかしかったんだろうな
0810デフォルトの名無しさん2006/12/09(土) 09:57:22
>>806-807
何故なのかが話題であって誰も同じであるべきとは言っていない事に気付け
0811kk2006/12/09(土) 10:37:43
GetDlgItemText()で文字列を取得できたと思ったのですが、
うまく取得できてなく、
取得した文字列をatoiでintで変換したときにエラーになります。
エディットボックスに何を入れても、PTSTRにはいるのは「・U駆Qテ・」となっています。
何が原因なのでしょうか。
0812デフォルトの名無しさん2006/12/09(土) 10:43:15
エクスプローラの順序でファイル名比較をするAPIがshlwapiか何かにあったはず
0813デフォルトの名無しさん2006/12/09(土) 10:59:50
URLDownloadToFile関数で
返り値が返されるタイミングというのは
ダウンロードが完了した時、接続に成功したときのどちらでしょうか?
0814デフォルトの名無しさん2006/12/09(土) 12:04:57
自分のプロセスがどのくらいメモリを使用しているか取得する API はありますか?
0815デフォルトの名無しさん2006/12/09(土) 12:05:34
ありますよ
0816デフォルトの名無しさん2006/12/09(土) 12:07:16
>>815
すいません。教えていただけると幸いです。
0817デフォルトの名無しさん2006/12/09(土) 12:28:14
PurosesuMemoriDorekurai( PUROSESUHANDORU ph );
0818デフォルトの名無しさん2006/12/09(土) 12:36:03
>>811
そもそも整数値を取るつもりなら始めからGetDlgItemIntを使ったらどうか。
0819デフォルトの名無しさん2006/12/09(土) 13:39:16
>>810
アンカーの間違いに気づけ
0820デフォルトの名無しさん2006/12/09(土) 18:04:38
Process Explorerみたいに他のプロセスの環境変数を取得するには
どのAPIをつかえばいいの?
0821デフォルトの名無しさん2006/12/09(土) 18:22:43
ツリー構造のデータを外部に保存したいんだけど、データが大きいんでINIファイルだと遅くなりそう・・・
というわけでXMLに保存しようかと思うんだけど.NET使わずにXMLにアクセスする手段はありますか?
MSXMLとかになるんでしょうか
0822デフォルトの名無しさん2006/12/09(土) 18:28:52
>>821
XMLのほうが遅くなるんじゃね?
0823デフォルトの名無しさん2006/12/09(土) 18:30:04
MSXMLは高機能で便利だけど遅いよ。
0824デフォルトの名無しさん2006/12/09(土) 18:44:15
iniファイルって64KBの制限があったような。
0825デフォルトの名無しさん2006/12/09(土) 18:45:55
ありがとう、じゃあINIファイルで一度やってみる
INIで木構造を維持するいい方法があったら教えてもらえると助かる
0826デフォルトの名無しさん2006/12/09(土) 18:57:12
そのぐらい自分で考えろよ
0827デフォルトの名無しさん2006/12/09(土) 19:01:31
分かった
0828デフォルトの名無しさん2006/12/09(土) 19:02:45
別に ini にせんでも、独自形式にして
タブの個数とかでやってみたら?
0829デフォルトの名無しさん2006/12/09(土) 19:34:57
車輪の再発明は馬鹿げているので今後ともiniファイルでいきます
どうもありがとうございました
0830デフォルトの名無しさん2006/12/09(土) 19:44:16
ファイルの拡張子がINIということ自体は問題ないけど
Get/WritePrivateProfile系APIでの読み書きしてるなら絶対遅いよ。
内部で1行ごとにOpen/Closeされてるだろうし..
0831デフォルトの名無しさん2006/12/09(土) 19:49:08
試してから言えや
0832デフォルトの名無しさん2006/12/09(土) 19:52:04
コーディング量が一番少ないのを薦めるよ
RUBY最強だけどね
0833デフォルトの名無しさん2006/12/09(土) 19:55:25
実行環境が問題無いならxmliteという手もある
0834デフォルトの名無しさん2006/12/09(土) 20:06:19
>>820
ちゃんとしたやり方 or もっとスマートなやり方があるかも知れんけど、
SetWindowsHook系のAPI使うなりなんなりして自前のDLLを調べたい
プロセスにロードさせてやればそのDLLから取得できるべ。
0835デフォルトの名無しさん2006/12/09(土) 20:08:18
>>816
GlobalMemoryStatus
0836デフォルトの名無しさん2006/12/09(土) 21:02:27
>>829
これは車輪の再発名なんていう問題じゃないだろ。

すべてのソートにバブルソートを用いるとか、
君がツリーで管理しているデータなんかをすべて、たんなる配列で管理するとか、そういうレベルだろうが。
0837デフォルトの名無しさん2006/12/09(土) 21:04:43
まぁ、スレ違いの質問するぐらいだから
その程度の知識しか無いんだろ。
0838デフォルトの名無しさん2006/12/09(土) 21:11:01
>>824
Delphi/BCBなら64KBの制限なくて早いよ('(゚∀゚∩
0839a2006/12/09(土) 22:28:52
既出かも知れないけど

Microsoft の Windows 開発者 Dave 氏による Windows NT カーネル
解説講義のビデオをストリーミング公開!
http://d.hatena.ne.jp/softether/20061209#p2
0840デフォルトの名無しさん2006/12/09(土) 23:21:26
俺にとっては既出じゃないからありがとうと言ってやる
0841デフォルトの名無しさん2006/12/10(日) 00:45:12
カトラーかと思ったら違うのね
0842デフォルトの名無しさん2006/12/10(日) 01:56:12
>>820
ちなみにProcess Explorerはドライバをロードしているので
自前でカーネル空間から情報収集していると思う。
08438012006/12/10(日) 03:13:03
そうじゃなくて・・・
SUBSTってコマンドとかありますよね。
仮想ドライブにアクセスすると
代わりに実際のフォルダをシステムが提供してくれるわけじゃないですか。
その場合任意のアプリが「だまされる」事になりますよね。
Windows、もしくはデバイスドライバなどの機能でそういった事ができないか、
という質問な訳です。
0844デフォルトの名無しさん2006/12/10(日) 04:28:34
たぶんできないから、ドライバ書くかAPIフック。
0845デフォルトの名無しさん2006/12/10(日) 05:15:25
APIフックじゃできない事が大杉。
0846デフォルトの名無しさん2006/12/10(日) 05:21:28
すなおにドライバ書いた方がよさげ。
ようこそカーネルモードの世界へ。
0847デフォルトの名無しさん 2006/12/10(日) 06:02:37
すいません、教えてください。
win32apiを使って、c言語での処理の仕方を一通り学びました。
で、c言語での処理をしていたら、メッセージが来た時にそこに
長々とした処理を書くしか無い(知識不足ですが)ように思うんですが
api関数をC++で独自でクラス化していく方法は有るんでしょうか。
mfcのヘッダーを見てたら、afx_msgが付いてる関数と#pragma comment(lib, "・・・")が目に付き
で、#pragma commentを見てると、libを#ifdef#undef等で詰め込んでるように
見えます。あとPASCAL形式が気になります。
ついで、afx_msgがmessageに送られるWM_・・・ととらえて良いんでしょうか
なぜ、このような質問をするかというと、単純にMFCがとっつきにくいというか
マクロ等で、フレームワークとその子ウィンドウ、ツールバー等が最初の設定時点で
作成されてしまい、順序としてはフレーム、ビュー(子ウィンドウ)←→ドキュメント
となってるのはわかりますが、マクロや関数が呼ばれていく順序が
Cなら、WinMainのHINCTANCEをグローバルで持っておき、WNDCLASSEXで
RegisterClassExで登録しウィンドウの生成でならまずNULL指定でオーナーとして存在させ・・・
と順に理解できるんですが、MFCだと、どうしても僕のレベルでは可読できません。
どなたか、このページなら参考になるとか、このオープンソースならわかりやすい
と言う物を教えていただけないでしょうか。
初心者の質問でもうしわけありませんが、どなたかお願いいたします。
0848デフォルトの名無しさん2006/12/10(日) 07:04:57
>>847
まず日本語を勉強しましょう。
言葉を理路整然と書き連ねる工夫をしましょう。
改行を不自然な位置で使用するのをやめましょう。
初心者である事は免罪符になりません。
0849デフォルトの名無しさん2006/12/10(日) 09:04:48
subst自体は単にDefineDosDeviceを呼んでいるだけ。
もちろん、それで801のやりたいZipをということはできないだろうが。

>>847
> 長々とした処理を書くしか無い
そんなことはない。処理毎に関数を書いて、全てのメッセージの処理を関数呼出だけにすれば、
それだけでウィンドウプロシージャはだいぶすっきりする。
というわけで、とりあえずメッセージクラッカはどうよ。
0850デフォルトの名無しさん2006/12/10(日) 09:48:54
>>843
いったんどっかの隠しディレクトリに物理的にファイルを展開しておいて
ファイルシステムフィルタドライバでパスをリダイレクトすればできる。
ネットワーク上のファイルをアクセスする時も同じような方法で処理されている。
0851デフォルトの名無しさん2006/12/10(日) 12:46:32
Windows2000だけどポップアップメニューが馬鹿過ぎる…
フォーカスを失っても閉じないことが結構あるんですが何で?
0852デフォルトの名無しさん2006/12/10(日) 12:49:31
>>851
タスクトレイの話?
だったら、WM_NULL
0853デフォルトの名無しさん2006/12/10(日) 13:06:34
> ネットワーク上のファイルをアクセスする時も同じような方法で処理されている。
それはオフラインファイルの場合だけじゃまいか
0854デフォルトの名無しさん2006/12/10(日) 14:24:34
>>853
自分で作ったもんでもなければクラックして動作確認したわけでもないから
違うかもしれんが、少なくとも俺はそう聞いている。なんでも、ネットワーク
上のものだからいつアクセスできなくなるかわかったもんじゃないし、
第一、ファイルI/Oがある度にネットワーク経由のアクセスしてたんじゃ
パフォーマンスが最悪になるとかで、ネットワーク上のファイルが開かれる
場合はとにかくいったんファイル全体をダウンロードしてしまうらしい。
0855デフォルトの名無しさん2006/12/10(日) 14:36:34
smbではそんな事してない。
0856デフォルトの名無しさん2006/12/10(日) 14:40:46
VB NETスレで聞いてみたのですが、.NETでの関数では無理なようなのでここで質問させてください
他のアプリケーションプログラムを起動させたりするのはSystem.Diagnostics.Processで可能らしいのですが入力ボックスに自動で入力したり、ボタンを押したりさせるような
関数とかってWIN32APIで準備されているのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています