トップページ⇒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などの質問はそれぞれの言語や開発環境スレで
0056デフォルトの名無しさん2006/11/14(火) 19:25:16
このネタスレ違いだろ
0057デフォルトの名無しさん2006/11/14(火) 19:25:20
STLは内部でnewしてるしな
newせず動的にメモリー確保する新しい方法って何だ?
gcnew?
0058デフォルトの名無しさん2006/11/14(火) 19:42:18
おや?アロケータの存在を知っていれば、
「STLは内部でnewしてる」などという(ry
0059デフォルトの名無しさん2006/11/14(火) 20:09:47
黙ってLoadImage使っとけってこった
0060デフォルトの名無しさん2006/11/14(火) 20:34:03
>>55
std::basic_stringが文字列を受け取るバッファに使えないのが痛い。
0061デフォルトの名無しさん2006/11/14(火) 20:51:30
気にせずstd::vector<TCHAR>でGO
0062デフォルトの名無しさん2006/11/14(火) 21:39:16
>>44
他にもいろいろあります。

調べる方法としてはレジストリのDefaultIconキーとshellex¥IconHandlerキーをチェックします。
「DefaultIconキーに%1が*含まれて*いる」もしくは「shellex¥IconHandler キーがあれば」、
ファイル毎にかわるもんだと思っていいです。
0063デフォルトの名無しさん2006/11/14(火) 22:18:24
モーダルダイアログ内でキーボードフォーカスを持つコントロールを調べるAPIってありませんか?
GetFocusはNULLが帰ってくるので・・・
0064デフォルトの名無しさん2006/11/14(火) 22:35:01
>>63
> GetFocus returns the window with the keyboard focus
> for the *current thread's* message queue.

これにひっかかってるとか?

> To get the window with the keyboard focus on the
> foreground queue or the queue of another thread,
> use the GetGUIThreadInfo function.
0065デフォルトの名無しさん2006/11/14(火) 22:35:13
GetFocusだが。
0066デフォルトの名無しさん2006/11/15(水) 04:48:00
1000バイトのファイルがあるとして、先頭の100バイトを削って
900バイトのファイルにしたいんですが、どうやるのが最もよいでしょうか?

お願いします。
0067デフォルトの名無しさん2006/11/15(水) 05:21:10
切り取り線を入れる
0068662006/11/15(水) 05:36:23
SetFilePointer()で一発でできたらうれしいんですが無理ですよね。
0069デフォルトの名無しさん2006/11/15(水) 06:04:19
読んで書くだけ
0070662006/11/15(水) 07:32:56
すいません。もうひとつ質問があります。

WriteFileでファイルに書いている際、PCが落ちた場合、元のファイル
がどの程度まで壊れているかの情報ってありますでしょうか?

それとも全部壊れたとみなすべきでしょうか?

少なくとも、すでに存在していたファイルの場合で、そのファイルに
追加書き込みしていた場合、元のファイル分までは壊れてないと
みなしていいのでしょうか?
0071デフォルトの名無しさん2006/11/15(水) 07:51:17
俺には解答が分からないが
俺なら作業用のテンポラリファイル作って、作業が終わったら上書き保存する。
0072デフォルトの名無しさん2006/11/15(水) 08:16:11
ntfsなら壊れない
0073デフォルトの名無しさん2006/11/15(水) 15:58:11
>>66
SetEndOfFile
0074デフォルトの名無しさん2006/11/15(水) 16:02:24
まぁ
その時書いてた部分までは残ってるわな
0075デフォルトの名無しさん2006/11/15(水) 16:34:32
WriteFileしただけじゃ、バッファに書かれただけで、
実際にディスクに書かれてるかどうかは分からんけどナ
0076デフォルトの名無しさん2006/11/15(水) 20:33:07
>>72
NTFSはメタデータのジャーナルしか取らないよ。
だからファイルシステムが矛盾しないことは保証されるけど
ユーザーデータが壊れてないかどうかまではNTFSの関知するところではない
0077デフォルトの名無しさん2006/11/15(水) 20:33:40
>>73
先頭と末尾を取り違えてませんか
0078デフォルトの名無しさん2006/11/15(水) 21:15:05
ホントダー
0079デフォルトの名無しさん2006/11/15(水) 22:12:24
結論:NTFSは屑(pgr
0080デフォルトの名無しさん2006/11/15(水) 22:43:24
_beginthreadを使用しているコードはWM_CREATEを処理する時に_beginthreadを呼び出しているみたいですが、
ウィンドウプロシージャでスレッドを作成しないとダメなんでしょうか。
0081デフォルトの名無しさん2006/11/15(水) 22:47:49
そんなことはない。
そのプログラムではたまたまWM_CREATEのときに作る必要があっただけだろう。
0082デフォルトの名無しさん2006/11/15(水) 22:48:17
>>80
そのサンプルがたまたまWM_CREATEの処理中に _beginthread を使ってるだけ。
基本的にはどこでやってもええよ。
0083デフォルトの名無しさん2006/11/15(水) 23:14:22
>>81
>>82
ありがとうございます。
0084デフォルトの名無しさん2006/11/15(水) 23:43:27
どこでもいいわけではない。
DllMainや一部のコールバックでは制限されている。
0085デフォルトの名無しさん2006/11/15(水) 23:47:55
スレッドで実行してる長いループはちゃんと1000msでSleep呼び出してるのに、
肝心のWinMainがスレッド作成から動いていない・・・何故だ・・・。
0086デフォルトの名無しさん2006/11/15(水) 23:48:11
>>84
ソースきぼんぬ(死語?)
0087デフォルトの名無しさん2006/11/15(水) 23:53:51
きぼんぬ!出た!きぼんぬ出た!得意技!きぼんぬ出た!きぼんぬ!これ!きぼんぬ出たよ〜〜!
0088デフォルトの名無しさん2006/11/16(木) 00:12:05
>>87
俺は限界だと思った。
0089デフォルトの名無しさん2006/11/16(木) 01:14:04
XPまではデスクトップのlistviewのLVITEM.lParamにpidlが入ってたのに
Vistaじゃ入ってない?
0090デフォルトの名無しさん2006/11/16(木) 02:12:00
MSDNにそんなこと書いてあった?
009184ではない2006/11/16(木) 02:28:16
記憶が確かならCOM関係の本で見かけたような。
具体的にはDLLを動的にロードしたあとDLL側が勝手にスレッドを作ったりして作られたスレッドが走ってる最中にアンロードされたりすると・・・
だったような・・・
・・・でCOMでスレッドを作りたい場合はプロセス内サーバは避けろとかあったような。
(とりあえずEffective COMの項目32で確認)
0092デフォルトの名無しさん2006/11/16(木) 06:40:53
Win32Apiの勉強をかねてVC2005EEでランチャーソフトを作ってます。

ボタンを押し、その状態のままボタン外へマウスをドラッグさせ、マウスのボタンを放すと
ボタンに登録したアイコンを消す。

という動作をさせようと思い "WM_LBUTTONDOWN" / "WM_LNCBUTTONDOWN" /
"WM_LBUTTONUP" / " WM_LNCBUTTONUP" で処理を書いてみたのですが。
どうもメインフォーム上でのみ反応し、ボタン上では反応しませんでした。

ボタンを対象に何かをしなくてはならないとは思うのですが
良い方法が思い浮かびません。アドバイスをお願いします。
0093デフォルトの名無しさん2006/11/16(木) 07:05:11
>>92
SetCapture
0094デフォルトの名無しさん2006/11/16(木) 07:08:52
つ SetCapture/ReleaseCapture
0095デフォルトの名無しさん2006/11/16(木) 07:14:05
>>93-94
ありがとうございます。
早速調べてみます。
0096デフォルトの名無しさん2006/11/16(木) 07:21:25
PtInRegionとの組み合わせで解決しそうですありがとうございました。



.NET Framework 2.0 廃止予定の API 一覧
ttp://www.microsoft.com/japan/msdn/netframework/programming/obsoleteapi/
他スレで見かけたので貼っておきますね。
0097デフォルトの名無しさん2006/11/16(木) 13:48:00
はじめまして、
C++Builderで画像処理ソフトを作っているものですが、
VideoForWindowsで動画をチャプチャしております。
そこで質問なんですが、

1.bmpを介さずに直接メモリにチャプチャする方法
2.動画の描画を行わずに画像を取得(表示すると遅くなるため)

を教えていただけませんか。
いろいろ調べてみたものの解決に至っていません。
DirectShowはちょっと難しかったので使っていません。
どうぞよろしくお願いいたします。
0098デフォルトの名無しさんNGNG?2BP(200)
DirectShowの方が圧倒的に簡単。
0099デフォルトの名無しさん2006/11/16(木) 20:23:43
ttp://wisdom.sakura.ne.jp/system/winapi/win32/index.html
だとCでコンパイルしろっていってるけどC++でWin32APIは使えないの?
このサイトだけでの話?
0100デフォルトの名無しさん2006/11/16(木) 20:28:15
帰れ低脳
使える使えないを語る以前の問題じゃ
0101992006/11/16(木) 20:33:25
自己解決したわ。そのサイトだけっぽい。
猫のとこなら.cppだったわ・・・
0102デフォルトの名無しさん2006/11/16(木) 20:40:23
絶対、注意書きの意味を理解してないな
0103デフォルトの名無しさん2006/11/16(木) 20:52:20
apiの勉強する前に
C/C++の基本を勉強する方が先みたいだな
0104デフォルトの名無しさん2006/11/16(木) 20:54:59
禿do
0105デフォルトの名無しさん2006/11/16(木) 21:31:53
CをC++でコンパイルするとパソコンが爆発するよ。
0106デフォルトの名無しさん2006/11/16(木) 21:44:09
マジで?やべーな・・・
0107デフォルトの名無しさん2006/11/16(木) 23:47:05
C++を学ぶと頭が禿げると聞いたのですが?
0108デフォルトの名無しさん2006/11/16(木) 23:58:32
そりゃコンパイラ開発者がアレだからなぁ
0109デフォルトの名無しさん2006/11/17(金) 00:01:04
Delphiばかりやってると馬鹿になると聞いたのですが?wwww
0110デフォルトの名無しさん2006/11/17(金) 00:04:01
俺はC++勉強し始めて10年後くらいから薄くなってきた。
0111デフォルトの名無しさん2006/11/17(金) 00:05:38
デルポイ
0112デフォルトの名無しさん2006/11/17(金) 00:17:45
>>110
勉強しなかった場合と比較できないので科学的実験結果としては有意でないと考えられる。
0113デフォルトの名無しさん2006/11/17(金) 12:57:59
カレントディレクトリに指定したファイル名のファイルが
存在するかを調べる関数がありましたら教えてください。

CreateFileとかで失敗したらとかでもできると思いますが、
正規のがありましたら教えてください。
0114デフォルトの名無しさん2006/11/17(金) 13:25:32
SearchPath
FindFirstFile

好きな方でどうぞ
0115デフォルトの名無しさん2006/11/17(金) 15:00:48
普通はopenでやっちゃうと思う。
01161132006/11/17(金) 15:16:46
>>114>>115
ありがとうございます。使ってみます。
0117デフォルトの名無しさん2006/11/17(金) 16:39:28
絶対パスを相対パスに変換するAPIがあったら教えてください。
0118デフォルトの名無しさん2006/11/17(金) 16:42:27
PathMakeRelative
0119デフォルトの名無しさん2006/11/17(金) 16:48:43
PathRelativePathTo で出来そうです。
本当にありがとうございました。
0120デフォルトの名無しさん2006/11/17(金) 18:50:32
>>113
PathFileExists というズバリな関数がある
0121デフォルトの名無しさん2006/11/17(金) 19:21:57
>>120
知らなんだー
GetFileAttributes使ってた。
0122デフォルトの名無しさん2006/11/17(金) 23:41:07
おらもだ
0123デフォルトの名無しさん2006/11/17(金) 23:45:50
一応書いておくが、shlwapi.dllの関数で要IE4以上。
0124デフォルトの名無しさん2006/11/18(土) 00:33:17
#pragma comment(lib, "SHLWAPI.lib");
0125デフォルトの名無しさん2006/11/18(土) 01:36:31
shlwapiは便利だね
wsnprintfとかワイルドカードでのマッチングもたしかあの中だったよね?
0126デフォルトの名無しさん2006/11/18(土) 01:40:28
APIらしくGetProcAddressを使うんだよ!

やったことないけどさ

なぜかPath〜系は未だにMSDNが日本語じゃないんだよな
8月版になったからといって更新されるわけもなし
0127デフォルトの名無しさん2006/11/18(土) 01:49:24
ウィンドウズプログラムで質問したい事があります。
ググったのですがいまい解決できそうなページがありませんでした。
作っているのはアナログ時計です。
開発環境はVC++6.0 Proです。SDKで作っています。
丸いリージョンで表示した時計のウィンドウがあります。
ウィンドウのクライアント領域はマウスでドラッグして移動できるように
細工をしております。
アナログ時計のウィンドウをデスクトップ領域の上端より超えて移動すると
ウィンドウのキャプションが隠れるあたりでマウスのボタンを離すと
自動的にキャップションが少しだけ見える位置に移動してしまいます。
ウィンドウのクライアント領域でのマウスの移動が出来るのでできれば
デスクトップの上端から上へキャプションが隠れてもそのままウィンドウが
移動できるようにはできないでしょうか。
よろしくお願いします。
0128デフォルトの名無しさん2006/11/18(土) 02:29:18
>>127
よく分からんけど足りなさそうな情報を質問。
細工ってヒットテストにキャプションって返すやつ?
01291272006/11/18(土) 02:46:30
ヒットテストでクライアント領域はキャプションとして返してます。
それによりウィンドウのクライアント領域をドラッグしてウィンドウを移動できます。

例えると以上の設定をして、普通のウィンドウのクライアント領域をドラッグして、
ウィンドウのキャプションをデスクトップの上端より隠れるように
ウィンドウを移動させると自動的にウィンドウがキャプションを少しだけ表示した状態に
なってしまうのです。それを移動してキャプションが隠れるようにしたいのです。
0130デフォルトの名無しさん2006/11/18(土) 07:25:34
ダイアログ上にグループボックスを配置し、その上辺に重なるように
チェックボックスを置いています。

表示すると、グループボックスのほうが上に来てしまうんですが、
どうすればチェックボックスを上に持ってこれますか?

たぶんZオーダーの問題だと思うんですが、以下のようにしても
うまくいきませんでした。

SetWindowPos(groupbox, checkbox, 0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
0131デフォルトの名無しさん2006/11/18(土) 08:01:48
>>130 逆
01321302006/11/18(土) 10:06:29
逆にしたらできました。orz
0133デフォルトの名無しさん2006/11/18(土) 13:39:41
今読んでる本には
『CreateSolidBrushで得たHBRUSH型変数は、不要になればDeleteObjectで破棄してください』
と書いてあるんですが、その本のサンプルプログラムでは破棄していないみたいなんです。
プログラムが終了すれば自動的に破棄されると考えれば、そのサンプルプログラムが破棄しないのも納得がいくのですが、
自動で破棄されるんでしょうか。
0134デフォルトの名無しさん2006/11/18(土) 13:46:46
プロセスが終了すると、そのプロセスが握っているリソースはすべて解放されるよ
他プロセスと共有している場合は参照カウンタが1減り、0になったらOSにより解放される

現存するメジャーなOSのほとんどはこうなってるよ
0135デフォルトの名無しさん2006/11/18(土) 14:11:19
プロセスが終了するか、DeleteObjectで明示的に破棄しないと解放されないから
プロセスが走ってる間にいくつも作っては捨てをする場合は要らなくなったらDeleteObjectした方がいいね
1個2個作ってそのままくらいなら、プロセス終了時のリソース解放に任せてもいい
0136デフォルトの名無しさん2006/11/18(土) 14:49:31
>>134>>135
ありがとうございました
0137デフォルトの名無しさん2006/11/18(土) 14:53:20
HFONTからLOGFONT取得って可能ですか? 
CreateFontIndirectの逆のことしたいんですけれども
0138デフォルトの名無しさん2006/11/18(土) 15:01:09
GetObject
0139デフォルトの名無しさん2006/11/18(土) 15:04:48
ぉぅぃぇ盲点だった  orz
ありがとう
0140デフォルトの名無しさん2006/11/18(土) 15:25:04
>>136
いちおう念を押しておくとWM_PAINTは再描画のたびに呼ばれるからな
0141デフォルトの名無しさん2006/11/18(土) 23:10:31
ウィンドウを作成して、タスクバーにそのウィンドウを表示させないように
したいのですが、どうしたら良いのでしょうか・・・

ツールウィンドウ を使うしか無いのでしょうか>< 
教えて下さいエロい人
0142デフォルトの名無しさんNGNG?2BP(0)
>>141
不可視のオーナーウィンドウ
0143デフォルトの名無しさん2006/11/18(土) 23:24:28
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_TaskTray.html
0144デフォルトの名無しさん2006/11/18(土) 23:27:26
ありがとう >>142 >>143

解決出来ました。
0145デフォルトの名無しさん2006/11/19(日) 02:24:00
2つのpathが同じかどうか簡単に調べる方法はないでしょうか?
0146デフォルトの名無しさん2006/11/19(日) 02:44:04
GetVolumePathNameとGetVolumeInformationでボリュームが同じかどうか調べて
(同じボリュームでなければ当然同一パスでもない)
GetFileInformationByHandleでファイルIDを比較する。
0147デフォルトの名無しさん2006/11/19(日) 06:06:44
>>145
PathSearchAndQualifyとかPathCanonicalizeが使えないかな?
0148デフォルトの名無しさん2006/11/19(日) 07:32:00
ここかどうか分からないですが
ISUファイルの作り方ってどこかに載っていませんか?
0149デフォルトの名無しさん2006/11/19(日) 07:33:15
>ここかどうか分からないですが
質問がここで良いかどうか分からないという意味です。
01501452006/11/19(日) 09:27:15
>>146,147
ありがとう。API調べてみます。
0151デフォルトの名無しさん2006/11/19(日) 09:36:23
>>148
一般的にアンインストール情報ファイルに付加される拡張子、らしいね。
インストーラ作ってるメーカに問い合わせてみれば?
0152デフォルトの名無しさん2006/11/19(日) 10:16:15
インストーラ作ってるメーカーって、ありゃMSインストーラ・・・
0153デフォルトの名無しさん2006/11/19(日) 11:08:39
再起動しないでアンインストールする方法がないかと思いまして。
BATファイルは自分自身を削除できますが、コマンドプロンプトが表示されてしまいます。
0154Kioo2006/11/19(日) 11:22:32
Dialogにあるエディットボックスの内容を入手して、char[]又はstringにいれたいのですが、
どうすればいいのでしょうか
0155デフォルトの名無しさん2006/11/19(日) 11:25:37
>>154
言語は?
■ このスレッドは過去ログ倉庫に格納されています