Win32API質問箱 Build38
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/12/06(火) 00:59:05やさしいお兄さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
0002デフォルトの名無しさん
2005/12/06(火) 00:59:2637 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/
0003デフォルトの名無しさん
2005/12/06(火) 01:00:1831 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html
0004デフォルトの名無しさん
2005/12/06(火) 01:00:59http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
http://www.google.com/
- Windows® Server 2003 SP1 Platform SDK Full Download
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
- 書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055
-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&H=&view=table&shw=&D=tech
0005・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/06(火) 01:10:07http://trip.jp.land.to/2ch-log/tech/1084697545.html
0006デフォルトの名無しさん
2005/12/06(火) 01:20:20このAPIが返すファイル名リスト(実際はリスト構造にはなってませんが)
は日付が最新のものから順に入っているのでしょうか?
そうでない場合、日付順にファイル名を取得する良いAPIはありますか?
0007デフォルトの名無しさん
2005/12/06(火) 01:23:22順番は不定。
自分でソート。
0008・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/06(火) 01:23:23たしかASCII順(ただし大文字小文字区別なし)
構造体の配列に溜め込んで日付でソートするといいよ
00096
2005/12/06(火) 01:28:06ということはいったん全部吸い上げてから調べないといけないんですね。
フォルダは所属しているファイルのうちどれが最新か知ってるはずだと
思うのですが、そういうAPIが無いのは意外でした。
0010・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/06(火) 01:35:05Windowsエクスプローラは、FindFirstFile/FindNextFileで取ってきた結果を
リストビューコントロールに一覧表示してるだけですよ。
0011デフォルトの名無しさん
2005/12/06(火) 01:36:59これどっから来たんだろう
00126
2005/12/06(火) 01:37:12勉強になりました。ありがとうございました。
0013デフォルトの名無しさん
2005/12/06(火) 01:37:48フォルダは知らないだろw
0014デフォルトの名無しさん
2005/12/06(火) 01:38:33FAT32だと物理的順序だったと思う
001514
2005/12/06(火) 01:39:5600166
2005/12/06(火) 01:40:520017デフォルトの名無しさん
2005/12/06(火) 01:41:590018デフォルトの名無しさん
2005/12/06(火) 01:42:21NTFSだとそうかもしれんが、それ以外だとそうとは限らん。
確実なのはディスク上の順番で返すということだけ。
0019デフォルトの名無しさん
2005/12/06(火) 03:46:46フォルダは概念、ディレクトリは実体。
例えば「デスクトップ」はフォルダ、"c:/Doc.../user/デスクトップ/"はディレクトリ。
0020デフォルトの名無しさん
2005/12/06(火) 04:11:09乙
0021デフォルトの名無しさん
2005/12/06(火) 11:12:48コントロールをサブクラス化して、メッセージを処理するなり親ウィンドウに渡すなりすれば?
0022デフォルトの名無しさん
2005/12/06(火) 12:14:340023デフォルトの名無しさん
2005/12/06(火) 12:18:41WM_LBUTTONDOWN
直接SendMessegeする手もあるけど。
0024デフォルトの名無しさん
2005/12/06(火) 12:18:42ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/sendinput.asp
よく嫁。特にINPUT構造体。
0026デフォルトの名無しさん
2005/12/06(火) 16:59:44WM_MOUSEMOVEメッセージについてなんですけど、
マウスカーソルがスタティックテキスト(含むグループボックス)の子ウィンドウ上の時にはメッセージ来るようなんですが、
他の子ウィンドウ(エディットコントロールやチェックボックスなど)上だとメッセージが来ないようなのです。
うまくスタティック以外のウィンドウ上でのマウスカーソルの動きをキャッチする方法はないのでしょうか。
0027デフォルトの名無しさん
2005/12/06(火) 17:03:470028デフォルトの名無しさん
2005/12/06(火) 18:09:17それはコモンコントロールだけで、
エディットコントロールやチェックボックスなどでは来ませんし、
ステータスバーもクリックされないと親ウィンドウにWM_NOTIFYメッセージを発しませんが…
0029デフォルトの名無しさん
2005/12/06(火) 22:04:15このDiagAを作るあたってDialogBoxマクロを利用する訳ですが、
DialogBoxの引数にプロシージャを指定する部位がありますよね。
ダイアログが作られた時、プロシージャへWM_CREATEメッセージは発行されないのでしょうか?
0030デフォルトの名無しさん
2005/12/06(火) 22:09:48その通り
0031デフォルトの名無しさん
2005/12/06(火) 22:11:58なんかいい方法ないでしょうか。
0032デフォルトの名無しさん
2005/12/06(火) 22:17:02WM_INITDIALOGメッセージだったかな。
聞いてることとずれてたらスマソ
0033デフォルトの名無しさん
2005/12/06(火) 22:17:370034デフォルトの名無しさん
2005/12/06(火) 22:18:300035デフォルトの名無しさん
2005/12/06(火) 22:21:15ありがとうございます・・・
0036デフォルトの名無しさん
2005/12/06(火) 22:57:29>>21
親にPost
0037デフォルトの名無しさん
2005/12/06(火) 23:00:04ごめんあそばせ。
21さん見過ごしてました
どうもサンクスです。
0038前スレ959
2005/12/07(水) 03:46:57UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg == WM_INITDIALOG)
{
SetWindowLong(hdlg, GWL_STYLE, GetWindowLongPtr(hdlg, GWL_STYLE) | WS_CLIPSIBLINGS);
MoveWindow(hdlg, 30, 17, 300, 22, FALSE);
CreateWindow("ComboBox", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_GROUP | WS_TABSTOP, 130, 0, 164, 100, hdlg, (HMENU)0x1000, Instance, 0);
}
return 0;
}
0039デフォルトの名無しさん
2005/12/07(水) 09:18:22IStreamを実装してMyStreamってクラスを作りたいのですが
この場合、IStreamで定義されているメソッドを使うためには、
IMyStream* mystream = hoge();
mystream->QueryInterface(...);
でIStreamのインタフェイスを取得しないと使えないのでしょうか?
そして、もしIMyStream*から直接使うためには、
多少宣言がIStream*と重複しようが、
idlでReadやWrite等を再定義していくことになるのでしょうか?
0040デフォルトの名無しさん
2005/12/07(水) 09:36:47C++の入門書読んだ方がいいと思うお
0041デフォルトの名無しさん
2005/12/07(水) 09:57:46class MyStream :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<MyStream, &CLSID_MyStream>,
public IDispatchImpl<IMyStream, &IID_IMyStream, &LIBID_MyLib>,
public IStream {};
C++的に考えれば、これはMyStreamのポインタでIStreamのメソッドを呼べることになりますよね
でもこれはあくまでCOMライブラリを作る際に派生させただけであって、
結局COMを扱う側から見たら
interface IMyStream : IDispatch {}
でしかないのだから、MyStreamでIStreamを幾ら実装しようと、
直接はIStreamのメンバを呼び出せない、ということでいいのかな?
ていうか微妙にWin32の話じゃなくてすみません
ATLスレに行った方がよかったのかな
0042デフォルトの名無しさん
2005/12/07(水) 10:17:34IStreamの各メンバはvirtual 〜 〜(〜) = 0;の抽象メソッド。
MyStreamはIStream派生クラスとして定義するからMyStreamをIStreamにキャストしてもMyStream上の実体を呼び出す。
0043デフォルトの名無しさん
2005/12/07(水) 11:38:35LRESUTLはtypedefされたC言語のデータ型と思っておいて良いですか?
0044デフォルトの名無しさん
2005/12/07(水) 12:07:27そうだよ。
>>41
ところでIMyStreamがIStreamから派生しているのであれば、
MyStreamはIStreamを継承する必要はないと思うが。
0045デフォルトの名無しさん
2005/12/07(水) 12:31:05すいません、また色々考え込んでしまって混乱してしまいました。。
IMyStreamはIStreamの派生ではありませんでした。
IMyStreamはプロジェクト構築時にデフォルトでIDLで
interface IMyStream : IDispatch {}
と定義されていました。
よく考えたらIDispatchの機能が必要がなければIDispatchから派生させる必要ないですね。
インタフェイスの継承をIDispatchからIStreamにすればよかったのかな、、
ちょっとこれから書き換えてきます。どうもありがとうございました
0046デフォルトの名無しさん
2005/12/07(水) 12:42:5545は別にIMyStreamやIStreamを実装したいのではなく、
CreateStreamOnHGlobalとかSHCreateStreamOnFile(Ex)を活用するだけで十分ではないか?
0047デフォルトの名無しさん
2005/12/07(水) 12:54:16いあ、やろうとしてるのは、あるIStreamを食わせて加工出力するIStreamなんです。
COMは使うだけならあるにしても、作る側になったことは全然ないので
ATLとかの勉強ついでにやってる感じです。
で、とりあえずできたようです。本当にありがとうございました。
そしてなんか妄想まで働かしてもらってすみません。
0048デフォルトの名無しさん
2005/12/07(水) 12:56:070049デフォルトの名無しさん
2005/12/07(水) 16:35:56比較する関数を教えて下さい
0050デフォルトの名無しさん
2005/12/07(水) 16:38:180051デフォルトの名無しさん
2005/12/07(水) 16:42:41同じかどうかだけなら、ファイル開いてメモリにマッピングしてmemcmpするのが速い。
でもさ、作ろうとしてるものなら既にコマンドとしてあると思うよ。
http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/comp.shtml
http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/fc.shtml
テンポラリファイルにリダイレクトして比較結果取り出すほうが早いかもな
まあ別にパイプでもいいけど。
0052デフォルトの名無しさん
2005/12/07(水) 16:45:21GetFileSize
xxxxAlloc
ReadFile
lstrcmp
005349
2005/12/07(水) 17:22:21あざーっす
0054デフォルトの名無しさん
2005/12/07(水) 17:27:000055デフォルトの名無しさん
2005/12/07(水) 19:15:38ファイルのHash値かmd5計算して比較するのが今風
0056デフォルトの名無しさん
2005/12/07(水) 19:26:53完全ハッシュでなければ衝突がありえるだろ。
0057デフォルトの名無しさん
2005/12/07(水) 19:32:210058デフォルトの名無しさん
2005/12/07(水) 19:33:33同じファイルを何度と無く調べる、かつ各ファイルのそれなりの部分が同じとか言う場合にはまあ有効かな。
突発的にファイルを比較するだけなら無駄だけど。
0059デフォルトの名無しさん
2005/12/07(水) 19:41:03WS_EX_CLIENTEDGE
0060デフォルトの名無しさん
2005/12/07(水) 21:55:20に出てくるマクロのINFINITEって何の略なんですか?
0061デフォルトの名無しさん
2005/12/07(水) 21:57:08略ではないです。
http://dic.yahoo.co.jp/bin/dsearch?dtype=1&p=INFINITE
0062デフォルトの名無しさん
2005/12/07(水) 22:37:030063デフォルトの名無しさん
2005/12/07(水) 23:40:590064デフォルトの名無しさん
2005/12/08(木) 02:47:51でもinfiniteくらいは、日常生活で1度は耳にしたことがあるはず
0065デフォルトの名無しさん
2005/12/08(木) 07:23:530066デフォルトの名無しさん
2005/12/08(木) 07:54:310067デフォルトの名無しさん
2005/12/08(木) 08:00:250068デフォルトの名無しさん
2005/12/08(木) 08:43:570069デフォルトの名無しさん
2005/12/08(木) 08:56:03通常2000とかXPには
システムイベントログ
アプリケーションログ
セキュリティログ
などがありますが、
それ以外のログを自前で生成し、
「コンピュータの管理(MMC)」に
追加することは可能でしょうか?
0070デフォルトの名無しさん
2005/12/08(木) 09:03:560071デフォルトの名無しさん
2005/12/08(木) 09:18:130072デフォルトの名無しさん
2005/12/08(木) 09:21:38finit state machine の検索結果のうち 日本語のページ 約 250 件
250件もあるのかよ
0073デフォルトの名無しさん
2005/12/08(木) 20:37:29知りたいんだけど、何かいい方法はないでしょうか?
0074デフォルトの名無しさん
2005/12/08(木) 22:17:31ProcessWalkerで見れたと思う。
0075デフォルトの名無しさん
2005/12/09(金) 03:31:22C言語とAPIでMS-Word やメモ帳で入力されたキーを取得するプログラムを
組んでいます。グローバルフックで MW_KEYDOWN を取得する方法でやって
いるのですが、MS-Word の場合だけ、1回のキー入力に対して5回の
WM_KEYDOWN が来ます。WM_KEYDOWN メッセージの lParam の31バイト目を
チェックしてみたのですが、キーを押し続けたことによる連続メッセージ
ではないようです。また、MW_KEYUP でも同じく5回メッセージがきます。
1キーに対して1回のメッセージを受け取りたいのですが、よい方法は
ないでしょうか。よろしくお願いします。
0076デフォルトの名無しさん
2005/12/09(金) 03:36:04俺のPCにWord入ってないから試せないんだが、Spy++でも5回表示される?
あとWordのバージョンは?
0077デフォルトの名無しさん
2005/12/09(金) 05:40:25>>76
レス遅れてすみません。Spy++ っていうのがググッたけどちょっとわからないん
ですが、BCC のコマンドラインコンパイラなんでたぶん使ってないと思います。
Word のバージョンは 2003 です。
一応、フックしたキーをウインドウに表示するようにしているんですが、
メモ帳やInternetExplorer に入力した場合、そのとおり別ウインドウにも
表示されるんですが(1キー入力に対して1文字)、WORDの場合だけ1入力に
たいして5回分表示されるんです。"aiu"だったら"aaaaaiiiiiuuuuu"という
具合です。ちなみに、Enter や Shift なども同じです。
とりあえず、Spy++についてもう少しググッて見ます。
0078デフォルトの名無しさん
2005/12/09(金) 06:40:04Spy++はMSの開発環境についてくる便利なツール。
特定ウィンドウに送られたメッセージのログを表示することができる。
BorlandにもWinSight32っていう同じようなソフトあるんだけど、
無料のBCCに付いてくるのかは知らない。
0079デフォルトの名無しさん
2005/12/09(金) 07:22:390080デフォルトの名無しさん
2005/12/09(金) 08:29:54使ってみた結構いいかも新米 thx
0081デフォルトの名無しさん
2005/12/09(金) 12:16:13必要なのは脳とやる気だけでおk?
0082デフォルトの名無しさん
2005/12/09(金) 12:31:430083デフォルトの名無しさん
2005/12/09(金) 12:43:120084デフォルトの名無しさん
2005/12/09(金) 14:58:33MFC使えば楽だお
0085デフォルトの名無しさん
2005/12/09(金) 16:27:56edit boxでやったら改行ができませんでした。
static textでやったら、改行はできましたが、自動スクロールができません。
両方とも必要なのですが、簡単に実現する方法はありませんでしょうか?
ありましたらお教えください
0086デフォルトの名無しさん
2005/12/09(金) 16:29:31特警ウィンスペクターを思い出した漏れはおこちゃまですか?
0087デフォルトの名無しさん
2005/12/09(金) 16:39:28style に ES_MULTILINE (+ WS_VSCROLL|WS_HSCROLL) で エディットCTRL生成
nLen = GetWindowTextLength(エディットCTRL);
EM_SETSEL で START:nLen END:nLen で末尾を選択
EM_REPLACESEL でLogとして追記したい文字列を渡す (改行したいなら CRLF を入れること)
0088デフォルトの名無しさん
2005/12/09(金) 16:44:40VCL使うともっと便利だお
0089デフォルトの名無しさん
2005/12/09(金) 17:22:01CでMFCが使えるかよ
0090デフォルトの名無しさん
2005/12/09(金) 17:29:32例えば現在4個のクリッポボードビュアA,B,C,Dが起動してるとします。
そしてそれぞれのビュアの順位はAを最上として
A B C Dとします。
例えばBがChangeClipboard()を実行しますと、AにはWM_CHANGECBCHAINが送られてきますよね。
WPARAMにはBのhWndが、LPARAMにはCのhWndが格納されているはずですので、
Aは自分の次のビュアのウィンドウハンドルを確認し、もしWPARAMと等しければAの次のビュアのハンドルを、
LPARAMのハンドルに入れ替えればいいと思います。
しかしBではなくCがChangeClipboard()を実行した場合どうしますか?もし上の手順をしてしまったら、
Aの次のビュアはDとなってしまい、Bの存在がまずい事になります・・・
かといってこのメッセージを無視し、実行するとBの次のウィンドウはCだが・・・Cのハンドルは無効
という事態になると思います。
長くなりましたが、上のような場合はSendMessageでBにWM_CHANGECBCHAINを送れば回避されます。※1
しかし、例えばA B C D E Fとチェインがあった場合、DがChangeClipboard()を実行し、Aが※1を実行するとなると
Cのハンドルを知る必要があるのです。ですが、WM_CHANGECBCHAINのパラメータにはDとEしかありません。
どうすればよろしいでしょうか・・
0091デフォルトの名無しさん
2005/12/09(金) 17:31:330092デフォルトの名無しさん
2005/12/09(金) 17:41:14ChangeClipboardChainだよな。
> しかしBではなくCがChangeClipboard()を実行した場合どうしますか?もし上の手順をしてしまったら、
そのときにWPARAMの中身はCとなり、Aにとっての次であるBとは違うから、
「Aは自分の次のビュアのウィンドウハンドルを確認し、WPARAMと等しければ」という条件が成り立たない。
0093デフォルトの名無しさん
2005/12/09(金) 17:43:29ありがとうございます
ちょっとやってみます
0094デフォルトの名無しさん
2005/12/09(金) 17:53:48else if (hNextWnd) SendMessage(hNextWnd,msg,wParam,lParam);
と流していけばちゃんと修正されますね・・自己完結してすみません
009573
2005/12/09(金) 19:14:32無事に各ハンドルの状態を調べることが出来るようになりました。
0096デフォルトの名無しさん
2005/12/09(金) 19:54:00さっきのはうまくできましたが、また問題点が発生しました。。
入力が終了してenterを押すとボタンがおされたのと同じ処理をできるようにできませんか?
dialogでやる方法はわかったのですが,通常windowでやる方法がわかりません
0097デフォルトの名無しさん
2005/12/09(金) 20:06:51[Enter]にアクセラレーターを割り付けてしまう。
0098デフォルトの名無しさん
2005/12/09(金) 21:16:43に出ると思ったら出ないのな・・・
0099デフォルトの名無しさん
2005/12/09(金) 21:22:12CreateService()つかって、Windowsサービス作ってるのですが、
メールスロットでイベント起動される(サーバー側)ように
作りたいのだけど。イマイチよくわかりません。
もしかして、Windowsサービスには向かないの?
0100デフォルトの名無しさん
2005/12/09(金) 21:24:37■ このスレッドは過去ログ倉庫に格納されています