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

Win32API質問箱 Build47

レス数が950を超えています。1000を超えると書き込みができなくなります。
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などの質問はそれぞれの言語や開発環境スレで
0886デフォルトの名無しさん2006/12/11(月) 23:04:30
Win32プログラミングでペイントに近いソフトを作りたいのですが、
何かおススメの参考書はありますか?
とりあえずWin32APIオフィシャルリファレンス改訂3版グラフィック・GUI編は購入しました

具体的には以下のサイトにあるようなアプリケーションを作成したいと思ってます
http://www.cs.washington.edu/homes/yangli/research/sketchpoint/

0887デフォルトの名無しさん2006/12/11(月) 23:25:42
gimpとかオープンソースを参考にする と言おうと思ったけど
ペイントならMSDNのサンプルにあったような気がする
0888デフォルトの名無しさん2006/12/12(火) 03:33:13
マウスキャプチャって他のプロセスにはできないんですか?
0889デフォルトの名無しさん2006/12/12(火) 06:23:39
>>885
んなこたぁ無いから、黙って>>720に付いてるレスを全部見るんだ
0890デフォルトの名無しさん2006/12/12(火) 10:45:53
プログラミングWindows 上下
Advanced Windows
MSDNライブラリ
以外でWin32API、SDKプログラミングを学ぶ上で日本語なおすすめ良書教えてください。
0891デフォルトの名無しさん2006/12/12(火) 10:52:35
猫
0892デフォルトの名無しさん2006/12/12(火) 11:00:27
猫はWebで十分な気が。
てかプログラミングWindowsで何の不満が‥‥

あとはMFCやVCLのソースくらいじゃないか?日本語じゃないけど。
0893デフォルトの名無しさん2006/12/12(火) 11:00:30
>プログラミングWindows 上下
>Advanced Windows
>MSDNライブラリ
これだけやったらあとは自分で判断できるだろう
その本持て余すようだったら向いてないからあきらめた方がいい。
0894デフォルトの名無しさん2006/12/12(火) 11:09:06
>>892
猫シリーズも読みました
丁寧な本だとおもった

>>893
えらく厳しいですね
ほかになんかイイ本ないかなーとおもってきいてます
ある程度読んで実践できるようになったから
0895デフォルトの名無しさん2006/12/12(火) 11:18:58
>>890
このスレと過去スレ
0896デフォルトの名無しさん2006/12/12(火) 11:29:21
ある程度読んで実践できるにしては質問が漠然としてる。
0897デフォルトの名無しさん2006/12/12(火) 11:34:02
>>894
基礎はできてるみたいだから作りたいもの作れ
その都度MSDN等を参照しつつ覚えていけばいい
0898デフォルトの名無しさん2006/12/12(火) 11:38:04
たぶん本に書いてある範囲ならできるけど、自力では何も作れないタイプ
08998902006/12/12(火) 11:39:33
>>895
みたよ

Amazon見てたときは
Windows Server2003完全技術解説
インサイドMicrosoft Windows
Win32システムサービスプログラミング
とかをよもうとおもいましたがどんなもんでしょ

>>896
みんなどんなのよんでんのかなーとかいうレベルの質問ですよ

>>897
やっぱそうなりますよね
通勤長いんで(90分)本読むんですが、そのとき読みたいなーというかんじ

>>898
想像におまかせ
0900デフォルトの名無しさん2006/12/12(火) 12:10:15
>>899
批判じゃないけどなんか漠然としてるんだよね
俺も楽しい本探すことが半ば趣味だからこの手のレス書いてみたいともったことはあるし

でも>>892の言うとおりで、ある程度知識吸収すると、
もうテクニック的には適当なソース読むのぐらいしかないんだよね
で、WTLとかWineとかおもしれーぞ、と
始発で座れるならノートにソース落としておくと退屈しねーぞ、と
0901デフォルトの名無しさん2006/12/12(火) 12:53:09
通勤途中で見るとかなったら、後はアルゴリズム本とか開発系雑誌なんじゃね?
0902デフォルトの名無しさん2006/12/12(火) 15:48:25
Robbinsのデバッグ本
0903デフォルトの名無しさん2006/12/12(火) 16:37:53
>>898
俺...orz
0904デフォルトの名無しさん2006/12/12(火) 17:14:17
実践的なことができるようになったなら本はそろそろ卒業したら?
何か実用的なプログラムのソースコードを読むのはどうかな。
数百〜数千行がいいかな。
きっと本を読んだ程度じゃスッと理解できない事が出てくるよ。
本のサンプルには載らないようなテクニックとかも学べそうだし。
0905デフォルトの名無しさん2006/12/12(火) 18:00:10
基礎が終わったなら、コーディングスタイルとかの思想的な
部分の勉強もいいいけどスレ違いだな。
0906デフォルトの名無しさん2006/12/12(火) 18:45:29
>みんなどんなのよんでんのかなーとかいうレベルの質問ですよ
本は読まないよ。
本に載る程度の簡単な内容ならネット上にごろごろ解説サイトがあるし。
詳しさを求めるならMSDN読むし。
0907デフォルトの名無しさん2006/12/12(火) 18:46:17
>>900さんの見てふと思った。
このソースは読んどけ、みたいなお勧めはありますか?
0908デフォルトの名無しさん2006/12/12(火) 19:53:14
自分のレベルに合ったソースじゃないと意味がないし
何のためにプログラムを勉強するのかにもよる
目的すら無いならやめちまえ
0909デフォルトの名無しさん2006/12/12(火) 19:58:05
半年前の自分のソースを読むといいってのをスラドで見かけた。
0910デフォルトの名無しさん2006/12/12(火) 20:15:26
勉強中だと半年前の自分のソースって見てて恥ずかしくなるよね。
0911デフォルトの名無しさん2006/12/12(火) 20:39:02
勉強初めて3ヶ月余りの俺は(ry
0912デフォルトの名無しさん2006/12/12(火) 21:03:56
WinMainにシューティングゲームのソース1万行を全て書いていた俺
0913デフォルトの名無しさん2006/12/12(火) 21:33:12
目くそが鼻くそをばかにしててワロタ
0914デフォルトの名無しさん2006/12/13(水) 00:19:04
↑のどくそ
0915デフォルトの名無しさん2006/12/13(水) 01:14:41
>>912
俺と同じ事してる奴がいるとはwwwwwwwwww
引数付関数なんてほとんど作ってなかった俺wwwwwwwww
0916デフォルトの名無しさん2006/12/13(水) 08:30:44
>>912
メッセージの処理をどうやってたのか疑問
0917デフォルトの名無しさん2006/12/13(水) 08:43:39
>>916
自前でループ回して
GetAsyncKeyStateとか使ってたんじゃないのw
WM_CLOSE拾えないから少なくともクローズボックスは反応しないな。
09188902006/12/13(水) 08:52:35
>>891-917
なるほど。プログラミングWindowsやAdvancedWindowsみたいな入門書ではなく、
入門書の次に読むような本を期待していたんですがないんですね。
Windows、SDKとかの知識を深めようとおもったら、MSDN読み、人のソース読みしかなくなるっぽいので、
通勤にノートPCの導入を考えてみます。参考になりました。ありがとうございます。
0919デフォルトの名無しさん2006/12/13(水) 09:02:53
Advanced Windowsが入門書…?

>>918
もう知ってるとおもうけどMSDNは日本語でおkな文面が多いから読むには結構気合が居るぞ。
あとこれは個人的な意見でしかないから深く考えないで欲しいんだが
電車の中とかでノート開いてる人ってキモくないか…?
0920デフォルトの名無しさん2006/12/13(水) 09:13:58
>>919
ぁぁ、キモイとおもう。けど、知識はほしいから天秤にかけたら知識に成った。
すでにDELLに発注してしまった。自分のキモサが+1された。
0921デフォルトの名無しさん2006/12/13(水) 09:23:31
>919
あどばんすどういんどうずハにゅうもんしょデス
ほんとうニミタコトアリマスカ
かくしょうのタイトルをみてみましょう
0922デフォルトの名無しさん2006/12/13(水) 12:10:52
ttp://pc8.2ch.net/test/read.cgi/tech/1164376287/から誘導されてきました。

 SetWindowsHookExとWH_CALLWNDPROCを使ってよそのプロセスに送られるメッセージを
見ることができるようになったのですが、この方法だとメッセージを見るだけで変更することが出来ません。
 一部のメッセージ(WM_KILLFOCUS)が渡されることを阻止したいのですが、どうすればいいでしょうか?
0923デフォルトの名無しさん2006/12/13(水) 12:21:22
>>922
WH_CBTを使うとか
0924デフォルトの名無しさん2006/12/13(水) 12:55:46
WH_CBTはWM_KILLFOCUSを扱ってくれないんですよ。
0925デフォルトの名無しさん2006/12/13(水) 12:58:02
殺したいメッセージはWM_NULL二置換するとかいう方法もあるらしい
やったことないけど
0926デフォルトの名無しさん2006/12/13(水) 14:18:14
WH_CALLWNDPROCじゃメッセージ書き換えも破棄も無理だった気がする
WH_GETMESSAGEならできたと思うけど
0927デフォルトの名無しさん2006/12/13(水) 15:14:23
サービスからアプリケーションにメッセージを送るため、ウィンドウハンドルを
探したのですが見つかりません。どこにあるんでしょ・・・。(環境:Vista)
0928デフォルトの名無しさん2006/12/13(水) 16:18:03
どんなウィンドウをどうやって探してたのよ。
0929デフォルトの名無しさん2006/12/13(水) 16:20:38
ウィンドウハンドルがどこにあるのか、という疑問が出る時点で何かがおかしい気がする
0930デフォルトの名無しさん2006/12/13(水) 16:22:40
notepadのウィンドウをEnumWindowで列挙して探してました。
0931デフォルトの名無しさん2006/12/13(水) 16:44:12
FindWindowを知らないでEnumWindowでガリガリやるヤツなんて初めて見た
0932デフォルトの名無しさん2006/12/13(水) 17:00:16
ウィンドウタイトルとか可変なのでEnumWindowで列挙してexeのフルパスで検索してたのです。
0933デフォルトの名無しさん2006/12/13(水) 17:05:04
クラス名で検索できないの?
0934デフォルトの名無しさん2006/12/13(水) 17:09:25
テストでnotepadを対象にしてたのですがクラス名も不明というか可変なので・・・。
0935デフォルトの名無しさん2006/12/13(水) 17:26:17
Vista以外では動いてんの?
サービス(違うユーザー)からのEnumWindows等はできなくなったんじゃない?
0936デフォルトの名無しさん2006/12/13(水) 17:35:11
ちょwwww
クラス名も可変ってwwww
何言ってんだwwww

それとも、vistaから可変になったのか?
0937デフォルトの名無しさん2006/12/13(水) 17:42:08
.netアプリは可変だな
0938デフォルトの名無しさん2006/12/13(水) 17:46:36
xpでは動いてました。
0939デフォルトの名無しさん2006/12/13(水) 17:49:36
EnumWindowsProcにハンドルって返ってきてるんじゃマイカ?
0940デフォルトの名無しさん2006/12/13(水) 17:58:36
ウインドウのクライアント領域の左上の座標はとることはできないでしょうか?
GetWindowRectで取得したRect.Left及び、Rect.Topは、ウインドウの左上のようです。
クライアント内の座標がほしいです。
0941デフォルトの名無しさん2006/12/13(水) 18:01:00
>>940 Rect の意味を調べればわかるはず
0942デフォルトの名無しさん2006/12/13(水) 18:02:17
読み間違えた。ごめん。
GetWindowRectに対して、ゲットクライアントレクト(つづり忘れた)があるよ。
0943デフォルトの名無しさん2006/12/13(水) 18:05:47
まぁGetClientRectのLeft:Topは0だけどな
0944デフォルトの名無しさん2006/12/13(水) 18:06:03
わかった。
ClientToScreenに、0, 0 の座標を渡せばいいんですね。
なあんだ、こんなことか。
0945デフォルトの名無しさん2006/12/13(水) 18:09:51
まぁ、概それでいいんだが
GetClientRectの結果を渡した方が、何かあった時困らなくていいと思うけどな
0946デフォルトの名無しさん2006/12/13(水) 18:15:25
>>922-926
フックして潜り込んだ後、サブクラス化してしまえばどうにでもなるのでは?
09479222006/12/13(水) 20:02:40
>>946
それだ。
何とかうまく行ったよ、サンクス。
0948デフォルトの名無しさん2006/12/13(水) 22:41:30
ShellExecuteExでhtmlを開きたいのですが、
どうもVistaで動作しません。
対策を御存知の方はいらっしゃらないでしょうか。


SHELLEXECUTEINFO sei;
ZeroMemory(&sei, sizeof(sei));

sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.hwnd = 0;
sei.lpVerb = "open";
sei.lpFile = FileName;
sei.lpParameters = NULL;
sei.lpDirectory = NULL;
sei.nShow = SW_NORMAL;

ShellExecuteEx( &sei );


FileNameが".\\xxx.txt"だとしっかりメモ帳が開きますが、
FileNameが".\\xxx.html"だとIEが開いてくれない。。
0949デフォルトの名無しさん2006/12/13(水) 22:42:47
対策:Vistaを使わなければいい
0950デフォルトの名無しさん2006/12/14(木) 00:24:50
>>948
verbが"open"で登録されてないんじゃないか?

sei.lpVerb = NULL;

で、やってみ?
0951デフォルトの名無しさん2006/12/14(木) 01:02:22
ochinchin.h を omanko.cpp に #include したのに IsDoutei() で TRUE が返って来るんですが。
0952デフォルトの名無しさん2006/12/14(木) 01:26:52
>>948
sei.lpIDList
0953デフォルトの名無しさん2006/12/14(木) 01:28:38
>>917
WM_CLOSE、WM_COMMANDを拾えないのホント不便だよな。
0954デフォルトの名無しさん2006/12/14(木) 01:30:07
>>951
omanko.cppをよく見ろ

#if AGE <= SYOUGAKUSEI
#include "ochinchin.h"
#else
#error doutei ga yurusareru noha syougakusei made dayone
#endif
0955デフォルトの名無しさん2006/12/14(木) 09:05:51
SendMessage(GetDlgItem(hWnd,CTR_LIST),LB_ADDSTRING,0,(LPARAM)"TEST");
で、LISTBOXにアイテムを追加したいのですが、
Windowプロシージャの中に書かないとLISTBOXにアイテムが追加されません。
Windowプロシージャの外からはできないのでしょうか
0956デフォルトの名無しさん2006/12/14(木) 10:07:32
Windowプロシージャの外ってどこだ?
その場合ちゃんとウィンドウハンドルはとれてるのか?
0957デフォルトの名無しさん2006/12/14(木) 10:40:57
フロントエンドアプリを作りたいのですが、
コンソールアプリを実行して、コンソールに表示される文字列を拾ってくるには
どうやったらいいのでしょうか?
0958デフォルトの名無しさん2006/12/14(木) 11:01:53
>>957
パイプ
0959デフォルトの名無しさん2006/12/14(木) 13:48:22
ShellExecuteでホームページを
0960デフォルトの名無しさん2006/12/14(木) 13:51:34
その後>>959の姿を見た者は誰もいなk
0961デフォルトの名無しさん2006/12/14(木) 13:57:14
httpプロトコルに関連付けられたブラウザを調べるにはどうすればいいですか?
0962デフォルトの名無しさん2006/12/14(木) 13:59:43
>>961
>httpプロトコルに関連付けられたブラウザ
意味不明
0963デフォルトの名無しさん2006/12/14(木) 14:02:03
>>962
例えば
ShellExecute(NULL, "open", "http://www.google.co.jp/";, NULL, NULL, SW_SHOWNORMAL)
ってやったら漏れの場合operaが開くんですが、
開く前にどのブラウザが関連付けられているか調べたいのです。
0964デフォルトの名無しさん2006/12/14(木) 14:10:32
>>963
HKEY_CLASSES_ROOT\http\shell\open\command
HKEY_CLASSES_ROOT\http\shell\open\ddeexec\Application

このへん
0965デフォルトの名無しさん2006/12/14(木) 14:21:38
>>964
ありが�d�d�d
0966デフォルトの名無しさん2006/12/14(木) 14:36:57
個人的にはFindExecutableの方が好み。

レジストリのHKEY_CLASSES_ROOT\http\shell\openとかいう部分は
95からvistaまで同じなんだろうか?
0967デフォルトの名無しさん2006/12/14(木) 14:46:36
>>966
それ、試してから言ってる?

ローカルの.htmlならそれでいけるだろうけどねー
0968デフォルトの名無しさん2006/12/14(木) 14:51:00
勘違いスマソ
0969デフォルトの名無しさん2006/12/14(木) 16:37:15
デフォルトのVerbがopenでない可能性もあるよね。
HKEY_CLASSES_ROOT\htmlfile\shellの既定の値も見ないと。
0970デフォルトの名無しさん2006/12/14(木) 16:39:21
間違えた。
HKEY_CLASSES_ROOT\HTTP\shellの既定の値。
0971デフォルトの名無しさん2006/12/14(木) 17:15:28
>>955
hWndが適切な値になってないだけとか。
0972デフォルトの名無しさん2006/12/14(木) 17:32:49
>>969-970
>>963は"open"と指定してるから既定値みる必要ないんでない?
0973デフォルトの名無しさん2006/12/14(木) 22:02:58
タブ付?リストボックスの作り方がいまいちよくわからないのですが
教えていただけませんか?

エクセルでいうなら一番上のA,B,Cとかいう選択できるタブみたいな奴なんですが
うまく言葉で表せれないorz
09749732006/12/14(木) 22:19:08
こういうのです
http://chiffon.ty.land.to/src/Chiffontea0457.bmp
0975デフォルトの名無しさん2006/12/14(木) 22:23:03
>>973
ListViewでググれ
0976デフォルトの名無しさん2006/12/14(木) 22:26:52
>>927
ヒント: ウィンドウステーションとデスクトップ
09779732006/12/14(木) 22:30:33
>>975,976
うおおおおう!!
ありがとうごぜぇますだ!!!リストビューって名前だったのね
09786102006/12/15(金) 00:22:48
>>976
ヒント:対話的?
0979デフォルトの名無しさん2006/12/15(金) 08:48:46
閉じたウィンドウの、ウィンドウハンドルの値って、他のウィンドウが生成される際に再利用されるんでしょうか?
というか、されると思うのですが、それって、直ぐに再利用の対象になるのでしょうか?それともずっと後になるのでしょうか?
0980デフォルトの名無しさん2006/12/15(金) 09:42:30
デバッガ持ってないの?
0981デフォルトの名無しさん2006/12/15(金) 10:54:23
>>979
システムによるし、そういうのを前提としたものを作ってはいけない
0982デフォルトの名無しさん2006/12/15(金) 14:59:13
MSDN見てたら

Microsoft is conducting an online survey to understand use of MSDN Online.
We’d like to see which pages you visit today and then have you complete a
survey when you leave MSDN Online. Would you like to participate?

ってウインドウが突然上から降りてきて死ぬほどびびった〜

ええかげんにせえよ心臓止まるかと
0983デフォルトの名無しさん2006/12/15(金) 15:14:07
メインウィンドウに貼り付けてあるリストボックスで、
項目がダブルクリックされたときにだけイベントを発生させるにはどうすればいいのでしょうか
0984デフォルトの名無しさん2006/12/15(金) 15:31:53
WM_COMMAND
LBN_DBLCLK
0985デフォルトの名無しさん2006/12/15(金) 15:41:42
>>984
case WM_COMMAND:
  switch(LOWORD(wParam)) {
    case .....
となっているのですが、switch(LOWORD(wParam)){
のcaseに
case LBN_DBLCLKを書くんですか?
それとも、case リスト:内にif文を書くんですか?
レス数が950を超えています。1000を超えると書き込みができなくなります。