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

Win32API質問箱 Build68

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/07/06(日) 21:53:24
スレ立てるまでもない、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質問箱 Build67
http://pc11.2ch.net/test/read.cgi/tech/1212931246/
0153デフォルトの名無しさん2008/07/12(土) 21:39:46
>>150
もはや過去の関数だもん。しかたない
0154デフォルトの名無しさん2008/07/12(土) 21:42:06
バージョン判定なんて不要だろ
最も普及しているバージョンのWindowsだけ対応してりゃいいじゃない
0155デフォルトの名無しさん2008/07/12(土) 23:15:52
環境:Windows XP Home, Visual Studio 2005 Academic Editionで、
WIN32APIとC++を使った、ダイアログをメインウインドウのような用途で動かしているアプリケーションを作成しています。

コンボボックスの選択されている項目が変更された瞬間をつかまえて、
他のコンボボックスの内容を書き換えたいのですが、
どんなメッセージを指定すれば、コンボボックスの項目変更を捕まえることができるでしょうか?

…質問の情報不足があれば、またおっしゃってください。
よろしくお願いいたします
0156デフォルトの名無しさん2008/07/12(土) 23:16:58
しまった、新規の質問ですので、ageさせてください
0157デフォルトの名無しさん2008/07/12(土) 23:45:51
情報不足を心配する前に検索不足を自覚しよう
0158デフォルトの名無しさん2008/07/12(土) 23:53:02
>>157
検索は・・・かれこれ1時間弱ほど
検索したキーワードはグーグルでコンボボックス コントロール メッセージ 変更 イベント win32API ダイアログなど
MSDNでのMessage ComboBoxで検索など

ちょっと、キーワードのネタ切れもしてきて、直接こちらでお聞きするという選択を最終手段としてとってしまいました

何か、ヒントやウェブページのリンクだけでもかまいませんので、お教え願えませんか?
0159デフォルトの名無しさん2008/07/12(土) 23:58:49
俺は3分で見つけたけどなぁ。
CBN_EDITCHANGE, CBN_EDITUPDATE, CBN_SELCHANGEこの辺じゃないか?
0160デフォルトの名無しさん2008/07/13(日) 00:01:45
>>159
まだ未確認ですが、ありがとうございます!
0161デフォルトの名無しさん2008/07/13(日) 00:26:49
普通見つかるもんでは
0162デフォルトの名無しさん2008/07/13(日) 00:45:23
普通見つからないよ
0163デフォルトの名無しさん2008/07/13(日) 00:47:40
なんでWinAPIはC言語なの?
0164デフォルトの名無しさん2008/07/13(日) 01:00:27
早い
0165デフォルトの名無しさん2008/07/13(日) 01:07:56
VS2008です。

プロシージャの中で
case MM_WON_DONE
でwaveファイルの再生が終わったときに処理を書きたいんですが、
コンパイルするとMM_WON_DONEが定義されてないって出るんですが・・・
使い方間違ってます?
0166デフォルトの名無しさん2008/07/13(日) 01:18:46
WOMでしたね・・・すいません
0167372008/07/13(日) 02:07:12
>>38
ありがとうございます!リッチエディットです。

>> EN_IMECHANGE 捕まえて ImmGetContext() 〜 ImmSetCompositionFont()
これ参考にさせて頂いて以下のようなコードを書いてみたのですが、

--------------------------------------------
LPCWSTR window_class = _T("SampleClass");
LPCWSTR window_title = _T("title");
LWND hWND = FindWindowW(window_class, window_title);
HIMC hIMC = ImmGetContext(hWND);
---------------------------------
みたいなコードを書いてみたのですが、
HIMC hIMC = ImmGetContext(hWND);
のところで

undefined reference to `ImmGetContext@4'
のようなエラーが出ます。

これは該当のウィンドウが見つからなかった、ということなのでしょうか・・
アプリケーションのウィンドウを生成する時に使うクラス名と、生成したウィンドウのタイトルを引数にすればよいのですよね・・?
どなたかアドバイス頂けると幸いです。

0168デフォルトの名無しさん2008/07/13(日) 02:14:05
>>167
1.まずヘルプでImmGetContextの説明を開く
2.必要なライブラリを調べる
3.リンクする
0169デフォルトの名無しさん2008/07/13(日) 02:47:10
LPCWSTR window_class = _T("SampleClass");
LPCWSTR window_title = _T("title");

こんなの書いてる時点でWin32の基礎も分かって無さそうだなあ
てか変数に代入する必要あるか?
0170372008/07/13(日) 03:09:07
レスありがとうございます。

>> 169
HWND hWND = FindWindowW(_T("SampleClasss"), _T("title"));
これでよかったですね。。
Win32apiもここ2〜3日で触り始めたばっかりですがC++も初心者です(^^);

>> こんなの書いてる時点でWin32の基礎も分かって無さそうだなあ
どこがマズいのでしょうか??


>>168
imm.hだけではだめだったんですね・・
libimm32.aをリンクしたらエラー出ずにビルドできました。(MinGWです。)ありがとうございますm(_ _)m


ただビルドは出来たのですが、ちゃんとIMEとやりとりできていないようです・・
ImmGetOpenStatus() も試してみましたがIMEのON状態が検地できません。
FindWindowW() で正しいウィンドウハンドルを取得できていないってことでしょうか。
0171デフォルトの名無しさん2008/07/13(日) 03:10:46
>>170
>> どこがマズいのでしょうか??
何のために_Tを使ってるのかよく考えろ。

HWND hWND = FindWindowW(_T("SampleClasss"), _T("title"));
これもおかしいだろ。
0172デフォルトの名無しさん2008/07/13(日) 05:08:05
>>170
A版関数とW版関数の違いはWin32apiで必須の知識なんで注意
0173デフォルトの名無しさん2008/07/13(日) 06:49:30
ここであれこれ聞く前に基礎を勉強した方がいいと思うよ
0174デフォルトの名無しさん2008/07/13(日) 10:01:21
C#とか使わずにAPI直叩きするメリットってなに?
0175デフォルトの名無しさん2008/07/13(日) 10:11:26
・速い
・かゆいところに手が届く
・C#の裏で行われていることについて理解が深まる

当てはまらなければC#使ってなさい。
0176デフォルトの名無しさん2008/07/13(日) 12:02:29
・このスレで>>174のような奴を見下せる
0177デフォルトの名無しさん2008/07/13(日) 12:44:51
まぁ結局面倒だからC#に行くんだけどな
0178デフォルトの名無しさん2008/07/13(日) 12:53:25
C#はCERとかすごく面倒だった気が
0179デフォルトの名無しさん2008/07/13(日) 13:17:37
Constrained Execution Region?
C#でなきゃ楽になるって話でもないような……
0180デフォルトの名無しさん2008/07/13(日) 15:02:01
結論:C#は神 Win32はうんこ
0181デフォルトの名無しさん2008/07/13(日) 15:16:52
C#じゃやりたいことがちっともできん
お遊び用の言語だな
0182デフォルトの名無しさん2008/07/13(日) 15:17:32
みんな何かしらの言語を使ってて、必要に応じてAPIを使ってるんで、比べるもんじゃないだろ。
0183デフォルトの名無しさん2008/07/13(日) 15:30:24
>>181
やりたい事ができないのは言語のせいじゃなくてお前の能力のせい
0184デフォルトの名無しさん2008/07/13(日) 15:34:16
はいはい
0185デフォルトの名無しさん2008/07/13(日) 16:23:02
はいはい
0186デフォルトの名無しさん2008/07/13(日) 16:52:09
うんうん
0187デフォルトの名無しさん2008/07/13(日) 19:15:42
わんわん
0188デフォルトの名無しさん2008/07/13(日) 19:19:20
にゃーにゃー
0189デフォルトの名無しさん2008/07/13(日) 19:38:01
特定のエディットボックスで入力された
キャラクターコード(WM_CHARのwParam))を取得したい場合
対象エディットボックスをサブクラス化させないとできないのでしょうか?
0190デフォルトの名無しさん2008/07/13(日) 22:51:27
ボタンって子ウィンドウを使ってそれっぽく見せてるの?
0191デフォルトの名無しさん2008/07/13(日) 23:31:19
うん
0192デフォルトの名無しさん2008/07/13(日) 23:49:14
そうか、おれがんばるよ
0193デフォルトの名無しさん2008/07/14(月) 05:22:25
>>189
EN_UPDATEとかそういうNotificationに乗ってやってくるかどうか。
来るならそれ使えばいいし、来ないならサブクラス化。
0194デフォルトの名無しさん2008/07/14(月) 07:22:41
>>193
調べてないなら回答するなカス
0195デフォルトの名無しさん2008/07/14(月) 07:24:48
>>194
そんくらい自分で調べろカス
0196デフォルトの名無しさん2008/07/14(月) 07:35:30
EN_UPDATEやそれ系の通知でそんな情報は貰えねーよ

つうか、調べもしないで的外れな回答する奴って何考えてるのかね?
余所の掲示板ならポイント稼ぎの為にそういう事してる馬鹿がいるが2ちゃんじゃそんなの無意味だろうに
0197デフォルトの名無しさん2008/07/14(月) 09:14:22
>>196
まったくだ。
回答するなら調べてテストコード書いて確認してからにするよなJK
0198デフォルトの名無しさん2008/07/14(月) 09:47:52
で、テストコード書いて確認したにもかかわらず、
質問者からの返事は一言、「だめでした」
01991932008/07/14(月) 10:05:31
>>196
的外れじゃないよ?
回答のとおりに調べれば正解にたどり着くもの。
質問者にとって役に立つでしょう。
役に立つのに何で怒ってんの?
0200デフォルトの名無しさん2008/07/14(月) 11:21:24
キチガイの相手するな馬鹿。しかもわざわざageて
0201デフォルトの名無しさん2008/07/14(月) 12:01:16
>>199=基地外
0202デフォルトの名無しさん2008/07/14(月) 12:19:11
適当にいい加減なレスして指摘されたら逆ギレする奴、価格COMとかでよく見かけたなあw
中の人は多分、プライドだけは人一倍高いオッサンだと思うけど
0203デフォルトの名無しさん2008/07/14(月) 12:36:56
唐突に価格COMで見かけたとか、何言っちゃってんの
0204デフォルトの名無しさん2008/07/14(月) 12:51:01
いろいろと暑いよ
0205デフォルトの名無しさん2008/07/14(月) 12:53:36
プライドが高いだけのオッサンは何処にでもいるという事だろう
0206デフォルトの名無しさん2008/07/15(火) 02:30:52
・知識をひけらかして悦に浸る
・人の揚げ足取ったり見下すのが大好き
・基本的に性格が悪い
・プライドが異様に高い
・自分の主張は絶対に譲らない頑固者

1 つでも該当する技術者は周囲から嫌われやすいので注意しましょう。
0207デフォルトの名無しさん2008/07/15(火) 02:49:43
人類の7割が最低でも1つ当てはまる気がする
0208デフォルトの名無しさん2008/07/15(火) 03:42:00
悦に入るもの浸るのは優越感
0209デフォルトの名無しさん2008/07/15(火) 03:59:59
>>208
・人の揚げ足取ったり見下すのが大好き
0210デフォルトの名無しさん2008/07/15(火) 04:03:03
啓蒙主義なんだよ
0211デフォルトの名無しさん2008/07/15(火) 04:08:39
まあこのスレは嫌われ者の巣窟だろ
0212デフォルトの名無しさん2008/07/15(火) 08:45:14
夕べの4チャンネルの「深イイ話」だったか、いじめの話題で、さかなクン
の話の紹介があって、海では争いなく泳ぐのに水槽に入れるといじめが始ま
るといっていた。関心が内向きになるとそういう性向になるんだろう。

だからと言ってはナンだが、よその国では敵を海外に作って、国民の目を
そっちへ向けさせ、国内の矛盾への関心を希薄にする手も取られる。
0213デフォルトの名無しさん2008/07/15(火) 10:11:23
日本も似たような物だろ
毒入り餃子だ何だってマスゴミに洗脳されてる
0214デフォルトの名無しさん2008/07/15(火) 10:30:03
>>209
こういう開き直りは嫌われる条件には入っていないのかな?
0215デフォルトの名無しさん2008/07/15(火) 11:13:12
>>214
こういうしつこい性格は嫌われる条件には入っていないのかな?
0216デフォルトの名無しさん2008/07/15(火) 11:17:27
 
        *'``・* 。
        |     `*。
       ,。∩      *    糞スレストッパ〜
      + (^ω^) *。+゚
      `*。 ヽ、  つ *゚*
       `・+。*・' ゚⊃ +゚
       ☆   ∪~ 。*゚
        `・+。*・ ゚
 
0217デフォルトの名無しさん2008/07/15(火) 11:17:42
いや、つまんないから
0218デフォルトの名無しさん2008/07/15(火) 12:36:18
>>216
ワロタ
0219デフォルトの名無しさん2008/07/15(火) 16:08:24
>>208は揚げ足取りじゃないだろう。
自分だったら間違いを直してくれて感謝するだろうな。
0220デフォルトの名無しさん2008/07/15(火) 16:48:19
またまた〜
0221デフォルトの名無しさん2008/07/15(火) 16:50:40
すっかり雑談スレですね。
0222デフォルトの名無しさん2008/07/15(火) 17:02:23
すっかりってずっと前からじゃん
0223デフォルトの名無しさん2008/07/15(火) 17:42:17
子ウィンドウ(CreateWindowでWS_CHILDしたもの)のウィンドウメッセージを親ウィンドウが拾うにはどうすれば良いですか?
0224デフォルトの名無しさん2008/07/15(火) 17:46:40
サブクラス化するかスーパークラス化するかフックする
0225デフォルトの名無しさん2008/07/15(火) 18:01:39
すみませんが、そのサブクラス化あるいはスーパークラス化というのはどうすれば良いんでしょうか?
0226デフォルトの名無しさん2008/07/15(火) 18:04:14
>>225
どうして調べもしないで質問するのかね?
0227デフォルトの名無しさん2008/07/15(火) 18:10:25
親子関係だと、何がしたいかによっては子への通知が親に行くように用意されてるものもある。
サブクラス化は親子じゃなくても、自前のプロシージャを通過するようにできる。
0228デフォルトの名無しさん2008/07/15(火) 18:26:19
>>227
いや別にそんなこと聞かれてないから。
0229デフォルトの名無しさん2008/07/15(火) 18:29:19
だから、何がしたいのか聞いてるんだよ
0230デフォルトの名無しさん2008/07/15(火) 18:29:40
>>226
調べたら解決しました。不快なおもいをさせてしまいすみません。

>>227
関係ないです。ありがとうございました。
0231デフォルトの名無しさん2008/07/15(火) 18:30:04
>>228
質問者じゃないならすっこんでな
0232デフォルトの名無しさん2008/07/15(火) 18:31:15
>>227
関係ないです。
0233デフォルトの名無しさん2008/07/15(火) 18:31:58
親子関係じゃないということか、spyみたいなのを作りたいのかな。
0234デフォルトの名無しさん2008/07/15(火) 18:34:40
>>233
どうでもいいです。
0235デフォルトの名無しさん2008/07/15(火) 18:42:47
>>211
実は一人なんじゃないか。
0236デフォルトの名無しさん2008/07/15(火) 19:05:44
一人で24時間レスしてるのか。頑張ってるなぁ。


んな訳ねーだろ
0237デフォルトの名無しさん2008/07/15(火) 20:56:27
\_____ ___________________________/
         ∨
           ___                _
       / ____ヽ           /  ̄   ̄ \
       |  | /, −、, -、l           /、          ヽ きみ頭だいじょうぶ?
       | _| -|○ | ○||         |・ |―-、       |
   , ―-、 (6  _ー っ-´、}         q -´ 二 ヽ      |
   | -⊂) \ ヽ_  ̄ ̄ノノ          ノ_ ー  |     |
    | ̄ ̄|/ (_ ∪ ̄ / 、 \        \. ̄`  |      /
    ヽ  ` ,.|     ̄  |  |         O===== |
      `− ´ |       | _|        /          |
0238デフォルトの名無しさん2008/07/15(火) 21:07:24
SHGetFileInfoを使ったら解放しないとメモリリークするって
記述を見つけたんだけど何を解放してあげればいいの?
定義がDWORD_PTR *SHGetFileInfo
ってなってるから
DWORD *pRet = SHGetFileInfo()
delete pRet
とかってやればいいの?

0239デフォルトの名無しさん2008/07/15(火) 21:39:39
ImageList_Destroy((HIMAGELIST)SHGetFileInfo( ... ));
0240デフォルトの名無しさん2008/07/15(火) 22:13:59
>>238
MSDN嫁
アイコンハンドルのことだ。
>If SHGetFileInfo returns an icon handle in the hIcon member of the SHFILEINFO structure pointed to by psfi,
>you are responsible for freeing it with DestroyIcon when you no longer need it.
0241デフォルトの名無しさん2008/07/16(水) 00:09:26
すみません。
サウンド、プログラムの起動で音がなる設定をしている環境で、
CreateProcessを使ってバックグラウンドでexeを動かした時も音が鳴ってしまいますが
これをプログラムのコードで抑止する方法がありますか?

0242デフォルトの名無しさん2008/07/16(水) 00:12:21
またウイルス作成者か
0243デフォルトの名無しさん2008/07/16(水) 00:29:52
一時的にミュートする
02442412008/07/16(水) 00:47:17
>>243
やっぱそれしかないですかね…
ありがとう御座いました。
0245デフォルトの名無しさん2008/07/16(水) 07:29:47
コンソールプログラムで
コマンドライン引数処理したいのですが
パースしてくれるような関数ってありますかね?
0246デフォルトの名無しさん2008/07/16(水) 07:35:05
>>245
コンソールならエントリポイントを
int main(int argc, char *argv[])
にしてみては?

for(int i=0;i<argc;i++) printf("%s\n", argv[i]);
でどんなものが渡されるか確認できる
0247デフォルトの名無しさん2008/07/16(水) 07:51:49
CommandLineToArgvW
0248デフォルトの名無しさん2008/07/16(水) 08:05:15
>>247
A版とペアになってないしargv[argc]がNULLでなかったりするから却下
0249デフォルトの名無しさん2008/07/16(水) 08:12:48
何でもかんでもNULL終端に頼るな。
0250デフォルトの名無しさん2008/07/16(水) 08:39:36
>>249
ばーか
argv[argc]はNULLでないといけないんだよ
0251デフォルトの名無しさん2008/07/16(水) 08:42:16
気になるなら wrap しろよ
0252デフォルトの名無しさん2008/07/16(水) 08:42:45
>>249
↑話を理解してない馬鹿
■ このスレッドは過去ログ倉庫に格納されています