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

Win32API質問箱 Build71

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

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build70
http://pc11.2ch.net/test/read.cgi/tech/1221446107/
0082デフォルトの名無しさん2008/10/25(土) 16:06:43
昇格はプロセス単位で管理される
だから、その機能部分だけを別のプロセスにして、そいつを昇格して起動させる必要がある

Advanced Windowsの5版に書いてあっただろうが! といってみる
0083デフォルトの名無しさん2008/10/25(土) 16:14:40
COMにして呼ぶ方法が一応はある
0084デフォルトの名無しさん2008/10/25(土) 17:21:16
SQL Server を「SQLS」って略す奴を初めて見た・・・
0085デフォルトの名無しさん2008/10/25(土) 17:29:05
すきゅるず
0086デフォルトの名無しさん2008/10/25(土) 17:33:37
「きゅ」じゃなくて「く」で頼む
0087デフォルトの名無しさん2008/10/25(土) 17:43:37
スクルト!
0088デフォルトの名無しさん2008/10/25(土) 17:46:03
スカルズならいいのに
0089デフォルトの名無しさん2008/10/25(土) 18:07:04
スクールズ
0090デフォルトの名無しさん2008/10/25(土) 19:23:02
>>84
MPLSを連想した俺はラノベ板住人
0091デフォルトの名無しさん2008/10/25(土) 20:19:32
TCHARのconst版なんてないですよね。
const TCHARとするしか。
0092デフォルトの名無しさん2008/10/25(土) 20:35:29
TSTRならともかくTCHARのconst版なんかあってなんか嬉しいか?
0093デフォルトの名無しさん2008/10/25(土) 20:35:33
必要なら const 書く方が普通だろ
そんなところで手を省こうとするのが間違ってる
0094デフォルトの名無しさん2008/10/25(土) 20:36:04
×手を省こうと
○手間を省こうと
0095デフォルトの名無しさん2008/10/25(土) 20:38:58
よく
TCHAR hoge[] = TEXT("hogehoge");
というようなコードがありますが、これってだいたいの場合固定で使うので
正確には
const TCHAR hoge[] = TEXT("hogehoge");
とすべきでは?と思ったもので。
0096デフォルトの名無しさん2008/10/25(土) 20:45:57
固定で使わないから定数を表すconstがついていないんだろ。
0097デフォルトの名無しさん2008/10/25(土) 20:50:26
ペゾルドは、const付けてないね。アプリネームとかも。
0098デフォルトの名無しさん2008/10/25(土) 20:59:37
constなTCHAR配列わざわざ作るぐらいならPCTSTR使わね?
0099デフォルトの名無しさん2008/10/25(土) 21:10:28
やっぱ好みかなぁ。
PCSTRとかだとポインタなのに*使わずに宣言するのが違和感あるとかw
0100デフォルトの名無しさん2008/10/25(土) 21:39:45
ARRAYSIZE(hoge) - 1で文字列の長さを求められる(もちろんマクロ化)から、
俺は95みたいにconst配列が好み。
0101デフォルトの名無しさん2008/10/26(日) 02:43:36
流れぶったぎってスマソ

プログラムでスクリーンキャプチャする時に、レイヤードウィンドウもキャプチャしたいのに
GetDesktopWindowだとキャプチャできないんですよね。
レイヤードウィンドウもキャプチャできる方法ってありますか?

keybd_eventとかSendInputで「PrintScreen」を押した事にすれば可能っぽいんですが、
他の方法で出来ないものかなぁと…
0102デフォルトの名無しさん2008/10/26(日) 03:02:48
もちろんBitBltにはCAPTUREBLTを指定しているよな。
01031012008/10/26(日) 05:17:11
>>102

ありがとうございます。
こんなROPがあったんですね。
自分が参照しているリファレンスには載ってなかったもんで知りませんでした。

MSDNを参照する、という基本的な事を欠いてしまっていたのは反省すべき所でした。
0104デフォルトの名無しさん2008/10/26(日) 05:28:50
ROPじゃなくてフラグだろ
0105デフォルトの名無しさん2008/10/26(日) 12:39:20
>>104

引数にラスターオペレーションコードって書いてあったのでそのまま書いてしまいました。
失礼しました。
0106デフォルトの名無しさん2008/10/26(日) 16:58:38
そういやマウスカーソルも含めてキャプチャできるソフトがあるけど、
あれってもしかしてキャプチャした画像の上にGetCursorInfo→DrawIconExで描いてるだけ?
0107デフォルトの名無しさん2008/10/26(日) 17:07:55
>>106
うん
0108デフォルトの名無しさん2008/10/26(日) 17:36:54
>>106
DIB取得して合成

>>107
バーカ
0109デフォルトの名無しさん2008/10/26(日) 17:42:57
「DIB取得して合成」という何か革新的に方法があるらしいね。
0110デフォルトの名無しさん2008/10/26(日) 17:51:29
ワロタ
0111デフォルトの名無しさん2008/10/26(日) 18:25:33
なんでMSDNのWin32APIリファレンスって英語やねん。
本買うしかないのか!
0112デフォルトの名無しさん2008/10/26(日) 18:28:52
英語の参考書は必須だよな
0113デフォルトの名無しさん2008/10/26(日) 18:51:04
>>109
バーカ
0114デフォルトの名無しさん2008/10/26(日) 19:13:23
ttp://www.woodybells.com/delphi_tips/index.cgi?mode=view&no=5
0115デフォルトの名無しさん2008/10/26(日) 19:25:06
#define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
これってなんで0xffffでマスクする必要あるの?

#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
でよくね?意図がわからん。
0116デフォルトの名無しさん2008/10/26(日) 19:47:55
>>115
そんなどうでもいい事をわざわざ質問するお前の意図がわからん。
0117デフォルトの名無しさん2008/10/26(日) 19:53:54
知らないならレスしないでください
0118デフォルトの名無しさん2008/10/26(日) 19:55:56
知らないならレスしないでください
01191152008/10/26(日) 19:57:11
>>116
興味本位だよ、技術的な。俺の考えに間違いがあるのかもしれないし。
0120デフォルトの名無しさん2008/10/26(日) 19:57:42
WORD型が16ビットで無くなっても大丈夫。
0121デフォルトの名無しさん2008/10/26(日) 19:59:48
>>119
そんなのコンパイラの最適化でどうとでもなるだろ
cl /FAcs でコンパイルしてアセンブリソースでも眺めとけ
01221152008/10/26(日) 20:04:38
>>121
どうとでもなるというか、別に何かをしたいわけじゃなくて
興味本位で聞いてただけなんだ。

つまり>>120ぐっじょぶ
0123デフォルトの名無しさん2008/10/26(日) 20:06:13
WORDが16ビットで無くなるなんて有り得ないだろ・・・
0124デフォルトの名無しさん2008/10/26(日) 20:08:53
2bytesであっても16bitsであるかは不定じゃないの
0125デフォルトの名無しさん2008/10/26(日) 20:10:30
でも、それ以外にわざわざマスクする理由もなさそうだな。
意図としてはそういうことなんだろう。
安全策だな。
WORDを再定義するやからがいるかも知れないし。
0126デフォルトの名無しさん2008/10/26(日) 20:20:59
DWORD_PTRが32ビットより大きいときにまずいだろ。
0x123456780000 >> 16 → 0x12345678

昔はDWORD_PTRではなくDWORDだったと思うが、
それなら確かに0xffffでのマスクは不要ではある。
0127デフォルトの名無しさん2008/10/26(日) 20:23:46
DWORD_PTRが32ビット越えしてても、WORDが16ビットなら無問題だから
やっぱWORDのサイズがポイントやろ。
0128デフォルトの名無しさん2008/10/26(日) 20:37:47
>>126
バーカ
0129デフォルトの名無しさん2008/10/26(日) 21:05:21
>>115
http://msdn.microsoft.com/ja-jp/library/8wtf2dfz.aspx
無いとVC++のチェックに引っ掛かるからでは?
0130デフォルトの名無しさん2008/10/26(日) 21:19:25
>>129
それって、単に上位ビットがすべて0だろうとそうでなかろうと
切り捨てられるときの話じゃないの?マスクする・しないの問題じゃ
ないと思うが。
0131デフォルトの名無しさん2008/10/26(日) 21:21:43
↑話を理解してない馬鹿
0132 ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄2008/10/26(日) 21:42:18
    _____
   /::::::::::::::::::::::::::\                  _
  /::::::::::::::::::::::::::::::::::::::\             /  ̄   ̄ \
  |:::::::::::::::::|_|_|_|_|           /、          ヽ ・・・
  |;;;;;;;;;;ノ   \,, ,,/ ヽ          |・ |―-、       |
  |::( 6  ー─◎─◎ )          q -´ 二 ヽ      |
  |ノ  (∵∴ ( o o)∴)          ノ_ ー  |     |
/|   <  ∵   3 ∵>          \. ̄`  |      /
::::::\  ヽ        ノ\           O===== |
:::::::::::::\_____ノ:::::::::::\        /          |
0133612008/10/26(日) 22:22:00
>>64
自分で作ったプログラムがOpenGLでレンダリングした画像を保存するのは出来ます。
でも人が作ったプログラムでやるにはどうすれば?
0134デフォルトの名無しさん2008/10/26(日) 22:27:30
キャプチャ Win32
あたりで検索すれば色々でてくんだろ
0135デフォルトの名無しさん2008/10/26(日) 22:50:51
バーカ をNGにするだけでも結構快適になるものだな。
0136デフォルトの名無しさん2008/10/26(日) 22:53:28
バーカ
0137デフォルトの名無しさん2008/10/26(日) 22:55:38
>>135
自分のレスも見えなくなってる馬鹿
0138デフォルトの名無しさん2008/10/26(日) 23:21:41
このスレには、人を安易に馬鹿呼ばわりする奴が後を絶たないな。
プログラマの人格が疑われるぜ。
0139デフォルトの名無しさん2008/10/26(日) 23:22:56
>>138
ヽ(`Д´)ノバーヤ
0140デフォルトの名無しさん2008/10/26(日) 23:26:55
俺はプログラムを組めるんだ!それも硬派なWin32だ!
という感じで、えらそうに街中歩いていそうだなw
あ〜やだやだ。
0141デフォルトの名無しさん2008/10/26(日) 23:42:14
高校生?
0142デフォルトの名無しさん2008/10/27(月) 00:11:03
やーーーい、バカ、おまえ、バカだ、馬鹿だ
馬鹿じゃなければ底辺産業のドカタやってられんよなー、同職ドカタ諸氏だろ
0143デフォルトの名無しさん2008/10/27(月) 01:31:10
>>133
自分のとこのならどこがキモになっててどう保存してんだか分かるだろ。
あとはどれを他のウィンドウから貰ってくれば同じことが出来るかだけやん。
0144デフォルトの名無しさん2008/10/27(月) 04:41:33
IT産業のドカタ、プログラマーw
0145デフォルトの名無しさん2008/10/27(月) 05:25:49
IT産業のドカタ、プログラマーw
0146デフォルトの名無しさん2008/10/27(月) 08:48:58
>>144 >>145
まぁアセンブラ組みに殺されろ
0147デフォルトの名無しさん2008/10/27(月) 09:02:49
アセンブラ組に入るんだ
アセンブラ組はやわじゃねえ
0148デフォルトの名無しさん2008/10/27(月) 22:46:36
_WIN32_IEや
WINVER
_WIN32_WINNT
といったWindowsやIEのバージョンを表すマクロは、
Win32APIでプログラムする場合、自分で定義するものなのですか

てっきりVC++が開発環境のバージョンをデフォルトで設定してくれると思い込んでました
0149デフォルトの名無しさん2008/10/27(月) 23:18:31
入れるべきは開発環境のバージョンではなく、
「動作させたいターゲット環境」のバージョンだから。
01501482008/10/27(月) 23:21:14
そうですね
その通りなんですが、
開発環境のパラメータをデフォルトで設定してくれてもいいんじゃね?
プロジェクト設定でGUIでできてもいいんじゃね?

と甘えたくなっただけですごめんなさい
0151デフォルトの名無しさん2008/10/27(月) 23:43:40
http://d.hatena.ne.jp/firewood/20080304/1204560137
ココ見ると、デフォルトの設定があるようだけど?
01521482008/10/28(火) 00:05:42
WINVERには確実に数値が入ってそうですね

定義されてないとそのヘッダファイルのリリース時の最新バージョンが定義される
ってかんじなんですかね
気をつけてないと無意識にVistaでしか動かないアプリとか作ってしまいそうです

明示的にターゲットのバージョンを定義するのが良い作法の様ですね

>>149
>>151
ありがとうございました
0153デフォルトの名無しさん2008/10/28(火) 01:56:16
プロポーショナルフォントの場合、文字の横幅はバラバラなんですよね?
で、TEXTMETRIC構造体のtmAveCharWidthというメンバで文字横幅の平均値は
得られるようですが、この横幅を基準に文字列がどのくらいのフィールドを
必要とするかを考えても、文字の組み合わせによっては、想定したフィールドの
横幅からはみ出すこともあるってことで、OK?
対処法は余裕をもって場所確保しておけってことなのかな。
0154デフォルトの名無しさん2008/10/28(火) 02:01:52
それでいいと思われ
万全を期すならGetTextExtentPoint32使った方がいいんだろうけど
0155デフォルトの名無しさん2008/10/28(火) 02:06:36
レスどうもです。
GetTextExtentPoint32というのは、文字列ごとに計算するって奴ですよね。
0156デフォルトの名無しさん2008/10/28(火) 02:51:07
最大字数が決まってて、どんな組合せでもはみ出さないようにしたい
という用途みたいだから、tmMaxCharWidth*nでないの
0157デフォルトの名無しさん2008/10/28(火) 03:42:24
たしかにそのやり方がよさげですね。
大文字の場合も考慮に入れてくれるんですよね、その関数。
0158デフォルトの名無しさん2008/10/28(火) 07:23:44
.exeと同じフォルダに○○.chmがあれば
ShellExecute(hwnd,"open","○○.chm",NULL,NULL,SW_SHOWNORMAL);
って書けばふつーにchmが開くんですか?
0159デフォルトの名無しさん2008/10/28(火) 07:36:28
>>158
やってみれば?
01601582008/10/28(火) 08:32:13
嫌です
0161デフォルトの名無しさん2008/10/28(火) 09:05:07
いやーん
0162デフォルトの名無しさん2008/10/28(火) 09:16:37
>>159
できました、どっかでID、ヘッダーファイルがどうこうと見たので
たんに開くだけの場合も何か必要と思い込んでました…
0163デフォルトの名無しさん2008/10/28(火) 09:51:10
パス省略できるのはカレントディレクトリだから
0164デフォルトの名無しさん2008/10/28(火) 10:32:37
「カレントディレクトリ」≠「exeのあるディレクトリ」の時に正常動作しない糞アプリの完成ですね
0165デフォルトの名無しさん2008/10/28(火) 14:15:49
GetObject( hbmp, sizeof( BITMAP ), &bmp );
とした時の BITMAP::bmBits は解放する必要ないのでしょうか?
0166デフォルトの名無しさん2008/10/28(火) 14:27:05
LocalFreeで開放しろと書いてあるだろ
01671652008/10/28(火) 14:40:05
>>166
http://msdn.microsoft.com/ja-jp/library/cc410355.aspx を見ただけでは
その記述を見つけることはできませんでした。
ありがとうございました。
0168デフォルトの名無しさん2008/10/28(火) 14:51:21
いや、DIBSECTION以外はNULLのままじゃないか?
0169デフォルトの名無しさん2008/10/28(火) 14:55:22
CreateDIBSectionのppvBitsに入るのと同じアドレス値でしょ
0170デフォルトの名無しさん2008/10/28(火) 15:02:51
>>167のリンク先なんだけど

> この関数は、、、、、、or いずれかの構造体、またはテーブル内のエントリ数(論理パレットに対応)を格納します。

何これ
0171デフォルトの名無しさん2008/10/28(火) 15:05:38
>>170
8ビット以下のbmpはパレット付き
0172デフォルトの名無しさん2008/10/28(火) 15:09:15
>>171
いやそうじゃなくて、機械翻訳がおかしいと言いたいのだが・・・
01731652008/10/28(火) 15:15:15
>>166
LocalFree() するとアクセス違反が起こりました
問題なく処理は進んでいますが、
念のためコメントアウトしておきます

>>168
ヘルプを見る限りそのようなので、
CreateDIBSection() でBITMAPを作成しています

>>169
同じアドレスということは
メモリの管理はAPI側がやってくれるということなのでしょうか?

>>170
日本語版ヘルプはそういうのが多いですね
特にWin32APIで
0174デフォルトの名無しさん2008/10/28(火) 15:17:04
>>173
自分で作ったバッファのアドレスが入ってるだろうってことじゃないか?
01751652008/10/28(火) 15:20:01
>>174
自分でバッファを作ったわけではなく、
CreateDIBSection() の引数で void** を渡し、
そこにアドレスが入っています。
なのでシステムが用意したバッファだと思っているのですが・・・
0176デフォルトの名無しさん2008/10/28(火) 15:21:29
自分で(CreateDIBSectionで)作ったバッファの(中のどこかの)アドレスが入ってるだろうってことじゃないか?
0177デフォルトの名無しさん2008/10/28(火) 15:25:32
だからCreateDIBSectionで作ったやつはGetObjectに関係なくDeleteObjectすればいい
01781652008/10/28(火) 15:27:37
>>176
すみません読み違えていました

>>177
つまり DeleteObject() さえしていれば
解放の必要はないということですね?
ありがとうございました。
0179デフォルトの名無しさん2008/10/28(火) 15:28:24
>>168-169が正解
>>166は大嘘
0180デフォルトの名無しさん2008/10/28(火) 17:43:45
タスクマネージャで見てハンドル値とかが増加していかなければおk
0181デフォルトの名無しさん2008/10/28(火) 19:11:35
おれつえええええええええええええええ
0182デフォルトの名無しさん2008/10/28(火) 23:47:58
タスクトレイに常駐して、任意のキーが押されたらある処理をするアプリを作ろうと思ってます

実現するには、アプリケーションのウィンドウがアクティブではない時も
キーイベントを拾う必要があると考えてます

この場合、
・キーボードフックを使う
・GetAsyncKeyStateでポーリングしながらキー入力をチェックする

以外の方法が思いつかないんですが、他にやり方はありますか?
■ このスレッドは過去ログ倉庫に格納されています