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

Win32API質問箱 Build67

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/06/08(日) 22:20:46
スレ立てるまでもない、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質問箱 Build66
http://pc11.2ch.net/test/read.cgi/tech/1210775622/
0153デフォルトの名無しさん2008/06/12(木) 14:41:05
>>152
詳しく
0154デフォルトの名無しさん2008/06/12(木) 14:53:39
クック
0155デフォルトの名無しさん2008/06/12(木) 15:06:35
ドゥ
0156デフォルトの名無しさん2008/06/12(木) 15:16:20
訳:かまってほしいな
0157デフォルトの名無しさん2008/06/12(木) 15:20:03
訳:ググレ
0158デフォルトの名無しさん2008/06/12(木) 15:33:13
いちごみるくうめぇ
0159デフォルトの名無しさん2008/06/12(木) 15:45:14
ヾ(@⌒¬⌒@)ノ ウマヒィ
0160デフォルトの名無しさん2008/06/12(木) 16:49:07
社会から自分が必要とされていないのではないかと思っているから荒らす
少しでも反応があれば自分は必要とされているんだと勝手に勘違いして納得する
それがかまってちゃん

こうして俺たちがかまってあげているうちは街中で無差別殺人なんてしないだろうから
人助けの一つだと考えて適当に相手してあげておいた方がいいかもな
0161デフォルトの名無しさん2008/06/12(木) 16:54:19
>>160
こうですか!わかりません><
0162デフォルトの名無しさん2008/06/12(木) 16:55:35
探すのが面倒だから荒らすんですね(>ω<
0163デフォルトの名無しさん2008/06/12(木) 18:52:04
フックについてググってもvbやらdelphiやらc++やらapiやら混在してる割に
ヒット数が意外と少ないんですがとりあえず
SetWindowsHookEx WH_KEYBOARD WM_INITDIALOG
あたりを使う方法でいいのでしょうか?
0164デフォルトの名無しさん2008/06/12(木) 18:53:22
最後は関係ない希ガス
0165デフォルトの名無しさん2008/06/12(木) 19:20:16
>>164
どうもです。そのものずばりの情報はなかなか見つかりませんね。
範囲があまりにも広いのですが絞るとほとんどhitせず・・・もう少し調べてみます
0166デフォルトの名無しさん2008/06/12(木) 21:02:18
動的に追加したリストボックスをDestroyWindow()する時に予めLB_RESETCONTENTする必要はありますか?
0167デフォルトの名無しさん2008/06/12(木) 21:14:24
>>166
deleteする時に予めデストラクタを呼んでおく必要はありますか?
って聞いてるようなモンだぞ
0168デフォルトの名無しさん2008/06/12(木) 21:26:55
>>167
DestroyWindow()するだけで良いのですね。
ありがとうございました。
0169デフォルトの名無しさん2008/06/12(木) 21:52:18
スレ違いのような気もするけど、気にせず教えてください。

kbdacc とか 秀Caps のようなキーリピートの高速化ってどうやって実現してるんでしょうか?
SystemParametersInfo で設定できる値よりずっと速くできるようですが。
0170デフォルトの名無しさん2008/06/12(木) 22:15:27
>>165
自プロセスへのフックは簡単だと思うけど‥‥他プロセスやグローバルフックになると共有メモリとかの処理が必要になってくるけど
0171デフォルトの名無しさん2008/06/12(木) 22:17:16
>>169
気にせず教えてください…?頭わいてんのか?
0172デフォルトの名無しさん2008/06/12(木) 22:29:33
お忙しい中すみませんが、気にせず教えてください。
0173デフォルトの名無しさん2008/06/12(木) 22:33:16
教えを乞う言葉じゃない気がしますが、気にせず教えてください。
0174デフォルトの名無しさん2008/06/12(木) 22:54:35
>>169
ずっと速くできるようですが気にせず設定してください
0175デフォルトの名無しさん2008/06/12(木) 23:12:31
流れがおかしいようですが気にせず質問してください
0176デフォルトの名無しさん2008/06/12(木) 23:15:39
ツールバーの表示位置を変えたいのですが、どのようにすればいいですか?
0177デフォルトの名無しさん2008/06/12(木) 23:21:10
movewindow
0178デフォルトの名無しさん2008/06/13(金) 00:14:46
>>177
レスありがとうございます。
後一つわからないことがありまして、
ツールバーの高さを変えるにはどうすればいいですか?
0179デフォルトの名無しさん2008/06/13(金) 00:15:13
>>177
APIの大文字小文字は区別されます。嘘を書くのをやめましょう。
0180デフォルトの名無しさん2008/06/13(金) 00:16:35
>>178
ボタンを大きくする
0181デフォルトの名無しさん2008/06/13(金) 00:28:58
>>180
ありがとうございます。
御礼に私の集めた女子高生画像10枚ほどぅpしようと思うのですが
0182デフォルトの名無しさん2008/06/13(金) 00:33:42
>>181
早く汁
ttp://www.uploda.org/
0183デフォルトの名無しさん2008/06/13(金) 01:00:03
>>181-182
偽者&自作自演乙
0184デフォルトの名無しさん2008/06/13(金) 01:10:32
↑はずれ
0185デフォルトの名無しさん2008/06/13(金) 01:13:02
http://mbup.net/p.php?p=44502.jpg
http://mbup.net/p.php?p=44503.jpg
こんな感じのでよいでしょうか?
0186デフォルトの名無しさん2008/06/13(金) 01:36:20
訳:かまってほしいな
0187デフォルトの名無しさん2008/06/13(金) 02:35:45
>>186
かまってほしいです。
実のところMoveWindowでツールバーの移動が出来ませんでした。
0188デフォルトの名無しさん2008/06/13(金) 02:55:07
自プロセスのUIスレッドのIDを取得したいのですが、方法はありますかね?
0189デフォルトの名無しさん2008/06/13(金) 03:12:29
>>188
ググッたらその辺のサンプルは、見つかると思うよ
0190デフォルトの名無しさん2008/06/13(金) 05:09:14
ツールバー移動出来ない……
クローズボタンなんかだと移動出来てるぽいから出来ると思うのですが…
0191デフォルトの名無しさん2008/06/13(金) 10:24:01
Windows Media Playerの埋め込みについて質問させてください。

親ウィンドウ(レイヤードウィンドウ)にメディアプレイヤーを埋め込んでいるのですが、
WS_EX_Layeredで親ウィンドウを生成し、SetLayeredWindowAttributesで透明度を設定すると、
メディアプレイヤーの動画部分が黒く表示されます(再生はされているみたいです)
親ウィンドウを動かしてみると、一瞬だけ動画が表示され、動かすのをやめるとまた消えてしまいます。
これはどういった原因があるでしょうか。
親ウィンドウをレイヤードウィンドウにしなかった場合は、そのまま表示されます。
0192デフォルトの名無しさん2008/06/13(金) 11:24:59
WS_CLIPCHILDRENとかその辺?
0193デフォルトの名無しさん2008/06/13(金) 11:28:43
タブのグレイ表示ってできないんですか?
0194デフォルトの名無しさん2008/06/13(金) 13:57:22
>>190
>>190
>>190
>>190
>>190
>>190
>>190
0195デフォルトの名無しさん2008/06/13(金) 14:12:25
聞きたいのは、何故ツールバーをMoveWindowで移動出来ないのか
です。
0196デフォルトの名無しさん2008/06/13(金) 15:19:53
最近、いろいろなサイトでTEXT("aaa");見たいなの見かけますが
文字型charには代入できなくなったのですか?新しい型?
0197デフォルトの名無しさん2008/06/13(金) 15:21:14
意味不明
0198デフォルトの名無しさん2008/06/13(金) 15:27:26
TEXT("aaa")とか_T("aaa")は、ユニコード対応だったけか?
ググれば、その辺はすぐ見つかるよー
0199デフォルトの名無しさん2008/06/13(金) 15:28:16
最近のVC++はデフォがUnicode版API使うようにマクロ定義さてるんじゃなかったっけ?
2003で止まってるから知らんが。
0200デフォルトの名無しさん2008/06/13(金) 15:39:25
WM_KEYUPでwParamと数値を比較すると警告メッセージがでるのですが
wParamをintでキャストするような方法でいいのでしょうか
0201デフォルトの名無しさん2008/06/13(金) 15:40:25
おk
0202デフォルトの名無しさん2008/06/13(金) 15:41:20
>>201
秒殺レスさんくす
0203デフォルトの名無しさん2008/06/13(金) 16:05:45
>>191
WMPが動画をオーバーレイで表示してるなら、不思議な挙動ではないな。
ビデオオーバーレイは画面上のビデオ表示領域にあるピクセルが特定の色だった場合に、そのピクセルに動画を表示する。
よって半透明にした結果、そのピクセルの色が変わってしまえば動画が表示されなくてもおかしくはない
0204デフォルトの名無しさん2008/06/13(金) 16:20:56
なかなか深い読みだな
0205デフォルトの名無しさん2008/06/13(金) 16:27:34
>>203
アプリの背景色をその色にすると面白い事になるよね
0206デフォルトの名無しさん2008/06/13(金) 16:32:23
自己解決しちゃったぜ!!?
気分がいいので
今から写メを20枚ぅpしてやんよ!!!
0207デフォルトの名無しさん2008/06/13(金) 16:50:01
http://mbup.net/d/44545.jpg
http://mbup.net/d/44547.jpg
http://mbup.net/d/44549.jpg
http://mbup.net/d/44552.jpg
http://mbup.net/d/44554.jpg
0208デフォルトの名無しさん2008/06/13(金) 16:54:40
基地外が沸いてるな
0209デフォルトの名無しさん2008/06/13(金) 17:53:16
>>191
WMPでオーバーレイを使わない設定にすれば見えなくなることはなくなるけど、透けないしちらつくんだよな。
0210デフォルトの名無しさん2008/06/13(金) 20:52:48
ツールチップをCreateWindowEx()してTOOLINFO構造体のlpszTextにLPSTR_TEXTCALLBACKを指定した後、

case WM_NOTIFY:
switch (((LPNMHDR)lp)->code)
{
case TTN_NEEDTEXT:
LPTOOLTIPTEXT ptt = (LPTOOLTIPTEXT)lp;
lstrcpy(ptt->lpszText, 表示するテキスト);
break;

default:
return FALSE;
}

とすると、数十字程度の場合は正常に動作しますが、300文字等文字数を増やすとデバッグ実行時でもエラーが出ずに突然落ちてしまいます。
原因は何でしょうか。
因みにTTM_UPDATETIPTEXTでは正常に動作しました。

>>196
所謂TCHAR型だから、プロパティでマルチバイトを選択すればchar、Unicodeを選べばwchar_tとコンパイラは解釈する。
0211デフォルトの名無しさん2008/06/13(金) 21:18:19
TTN_NEEDTEXT 通知メッセージを処理する場合は、表示する文字列を次のいずれかの方法で指定します。

szText メンバで指定したバッファにテキストをコピーする。

テキストが入っているバッファのアドレスを lpszText メンバにコピーする。

文字列リソースの識別子を lpszText メンバにコピーし、そのリソースが入っているインスタンスのハンドルを hinst メンバにコピーする。

MSDNくらいちゃんと確認汁
0212デフォルトの名無しさん2008/06/13(金) 21:24:54
>>210
バッファオーバーラン

今時そんなバグを平気で出しちゃうCプログラマは
偉そうにTCHAR型の講釈している場合じゃないよ
0213デフォルトの名無しさん2008/06/13(金) 21:25:28
俺も>>211 が正解な気がする
0214デフォルトの名無しさん2008/06/13(金) 21:31:45
タスクの切り替え(アクティブウィンドウを切り替える)のをエミュレートしたいんですけどどうすればいいですかね?

ある条件を満たしたとき、(タスクバーの)(右)隣のウィンドウに切り替えたいんですけど。

Alt+Tabのキーボードエミュレートだと、直前のやつにしか切り替え不可ですよね・・?
Tabの押す回数をうまく制御すればいいんですかね?
他にもっとスマートな方法ありますか??

あと、上記のような不特定多数のタスクがある状況で動くものと、
特定の(例えばWMPとか、決まったアプリをアクティブにする)をアクティブにするものも知りたいです。
ちなみにC++(VC2008ExpressEdition)です。
ご教授のほどお願いします。
0215デフォルトの名無しさん2008/06/13(金) 21:36:05
>>214
FindWindow
GetWindowThreadProcessId
SetActiveWindow
SetForegroundWindow
0216デフォルトの名無しさん2008/06/13(金) 21:36:28
>>210
80文字分しかないバッファに300文字コピーしたら
バッファオーバーランするに決まってるだろ。
0217デフォルトの名無しさん2008/06/13(金) 22:08:45
(誰が決めたのだろう・・・?)
0218デフォルトの名無しさん2008/06/13(金) 22:09:50
俺
0219デフォルトの名無しさん2008/06/13(金) 22:11:45
そいやXPのPowerToyのAlt+TAB乗っ取りプログラムはWS_EX_TOOLWINDOWとかマスクしてなくてPhotoshopとか起動してるとかなり格好悪いことになるんだよな。
0220デフォルトの名無しさん2008/06/13(金) 22:31:36
>>215
単純明快かつわかりやすい回答、ありがとうございます。
0221デフォルトの名無しさん2008/06/13(金) 22:34:57
どういたしまして
0222デフォルトの名無しさん2008/06/13(金) 22:39:30
>>221
騙りウザイ
0223デフォルトの名無しさん2008/06/13(金) 22:40:53
>>192
>>203
>>209
埋め込んだメディアプレイヤーを透明にするということは難しいということですね。。
別の方向で検討します。
レスありがとうございました。
0224デフォルトの名無しさん2008/06/13(金) 22:45:30
どういたしまして
02252142008/06/13(金) 22:48:41
すいません、また質問させてください。
>>215でプロセスIDを習得する意味は何でしょうか?
0226デフォルトの名無しさん2008/06/13(金) 22:49:29
習得?
0227デフォルトの名無しさん2008/06/13(金) 22:54:07
取得、です。
0228デフォルトの名無しさん2008/06/13(金) 22:55:29
同じプロセスで動いてるやつを飛ばすとか?
0229デフォルトの名無しさん2008/06/13(金) 23:10:01
>>225
> 例えばWMPとか、決まったアプリをアクティブにする
とあったので、特定のアプリをアクティブにするならプロセスIDから逆引きすればいいよってこと。
0230デフォルトの名無しさん2008/06/13(金) 23:43:22
GDIのPolygon関数は、与えられた引数によっては交差した図形を描くのですが、
どんな引数を与えられても交差しない図形を描くことは出来ないのでしょうか。
0231デフォルトの名無しさん2008/06/13(金) 23:56:05
>>230
交差しない順で自分で頂点を並べればいいだろう。
ちょっと考えれば、順不同で与えられた頂点から、辺が交差しない図形は
一意で求まらないことくらい分かりそうなもんだが。
0232デフォルトの名無しさん2008/06/13(金) 23:56:42
そんなAPIがあることを初めて知った。。。

質問の意味はよくわからんが、細かく制御したいなら自分でやれば。
0233デフォルトの名無しさん2008/06/14(土) 00:10:18
分からないならレスしないでください
0234デフォルトの名無しさん2008/06/14(土) 00:22:14
>>191のやつをVista DWM有効下で動かすとどうなるんだろうと気になった。
0235デフォルトの名無しさん2008/06/14(土) 00:29:56
オーバーレイは使えないが、動画は表示され、ちらつきも無くなって万々歳と予想
0236デフォルトの名無しさん2008/06/14(土) 00:36:56
それってXPで出力をVMR9にしたのと同じような状況じゃねーの?
0237デフォルトの名無しさん2008/06/14(土) 00:46:13
個人的に、レイヤードウィンドウとDWMの違いがハッキリしないんだけど。
レイヤードウィンドウでもWM_PAINTがほとんど飛んでこなくなるし、DirectXベースっぽいし。

思うに、レイヤードウィンドウがDX7だったのに対してDWMがDX9になっただけな気がする。
もちろん色々と変わってるだろうけど(GDIをソフトレンダラ化とか)、DWMでやってる事って
半分ぐらいはWindows2000で既に実現できていたんじゃないのかなぁ。
02382142008/06/14(土) 01:21:17
あーできません助けてください!

「今アクティブなウィンドウ(アプリ)の、“タスクバーにおける(右)隣”のウィンドウへアクティブを移す」を実現したいのですが、
要はこれって「タスクバーでいうと隣」のウィンドウのハンドルを取得、それを使ってアクティブにすればいいんですよね?

だけど「タスクバーで隣」っていうのをどう条件設定すればよいのかわからず・・・。タスクバーを右に右に推移(+右端だったら左端に動くように)させたいのですが・・。

なんかヒントください!
0239デフォルトの名無しさん2008/06/14(土) 01:25:08
>>238
タスクバーをフックする


そして次のバージョンのWindowsで死亡
0240デフォルトの名無しさん2008/06/14(土) 08:27:48
fprintf等でUTF-8 LF形式で出力したいのですが、どうしてもできません。
どうかご教授おねがいします
。

FILE* fp;
_tfopen_s( &fp, _T("hoge.txt"), _T("w,ccs=UTF-8"));
fseek(fp, 0, SEEK_SET );
_ftprintf_s( fp, _T("hogehoge"));
_setmode( _fileno( fp ), _O_BINARY );
_ftprintf_s( fp, _T("\n"));
_setmode( _fileno( fp ), _O_TEXT );
_ftprintf_s( fp, _T("あいうえお"));
fclose(fp);

MSDN見る限りではこう作れってかいてあるのですが、どうも_setmodeの挙動がおかしいようで...
0241デフォルトの名無しさん2008/06/14(土) 09:14:00
どうせccs=UTF-8なんてVC++限定なんだから、
自分でメモリ上にUTF-8, LF改行のデータを作って、
ただのバイナリモードで一気に書きこんだらどうかと思う。

というかスレ違い。
0242デフォルトの名無しさん2008/06/14(土) 10:13:39
>>240
_setmode( _fileno( fp ), _O_U8TEXT);
0243デフォルトの名無しさん2008/06/14(土) 10:53:27
リッチエディットの背景に画像を表示したいのですが方法はあるのでしょうか?
ググってみても背景色の変更はあるのですが背景に画像を埋め込む方法は見つかりません。
0244デフォルトの名無しさん2008/06/14(土) 10:57:51
>>243
無理。IEコンポーネントでも使え
02452432008/06/14(土) 11:01:49
やっぱりそうですか・・・。ありがとうございます。
0246デフォルトの名無しさん2008/06/14(土) 11:24:30
どういたしまして
0247デフォルトの名無しさん2008/06/14(土) 14:21:30
リッチエディットコントロールで右クリックしても
エディットコントロールと違って何も表示されないんだけど
どうすればいいんでしょか
0248デフォルトの名無しさん2008/06/14(土) 14:54:24
>>241

間違えてここに書いちゃいました。
C++相談室で聞いてきます。

>>242
実はこれはいろいろためしてたときのソースがそのまま残ってました。
_setmode( _fileno( fp ), _O_U8TEXT);
もすでに試してたけど、なぜかCRLFになるので、ダメでした。
0249デフォルトの名無しさん2008/06/14(土) 15:10:51
C++相談室もスレ違いだけどな
0250デフォルトの名無しさん2008/06/14(土) 15:20:35
・スレ違いの質問でも丁寧に答えてくれます。
・かまってちゃんの煽りにもきちんとかまってくれます。

をテンプレに追記汁
0251デフォルトの名無しさん2008/06/14(土) 15:45:05
CreateThreadで作成したスレッドがサスペンドになるまで待機するような関数はありませんか。
WaitForInputIdleのスレッド版、のようなモノです。

自前でフラグでも立てて調べ続けるしかないのでしょうか。
0252デフォルトの名無しさん2008/06/14(土) 15:50:57
訳:おしえてほしいな
■ このスレッドは過去ログ倉庫に格納されています