- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:40:03 ]
- スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-10くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage 【前スレ】 61 ttp://pc11.2ch.net/test/read.cgi/tech/1199514664/
- 855 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:39:24 ]
- >>852
>>853 TCHARにすると error C2664: 'wsprintfW' : 2 番目の引数を 'const char [26]' から 'LPCWSTR' に変換できません。 こんなエラーが出ます このエラーからすると第一引数にはchar型が入るように見えるんですが、違う、のかなぁ >>chStrをLPWSTR[128]で宣言してもエラーは相変わらずです。 >ってLPWSTR chStr[128]ってしたってこと? です、エラーからしてそういうことかなぁと思いまして
- 856 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:40:49 ]
- >>855
TCHAR chStr[128]; wsprintf(chStr , TEXT("インスタンスハンドル : %d") , hInstance);
- 857 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:41:54 ]
- * UNICODE, ANSI ビルド
* TCHAR, CHAR, WCHAR 型 * TEXT, _T マクロ この辺についてちゃんと調べるなりドキュメント読んだほうが良いと思う
- 858 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:48:20 ]
- >>855
違うよ。>>852の意味は [プロジェクト]-[プロパティ]-[構成プロパティ]-[全般]-[文字セット]をマルチ バイト文字セットを使用する に変更するという意味だよ。
- 859 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:50:30 ]
- error C2664:〜〜〜〜 'A’ から 'B' に変換できません。
※ABは char / wchar_t / LPSTR / LPWSTR / LPCSTR / LPCWSTR など 巷のサンプルコードがこのようなコンパイルエラーを発生させる場合、文字セットが適切ではないです。 開発環境の文字コードの設定をソースにあわせるか、ソースを開発環境の設定にあわせるかしましょう。 方法は各々の開発環境のスレへどうぞ。 この辺の文言がテンプレにあったほうがいいような気がするがお前らはどう思うか
- 860 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:50:41 ]
- >>849
コード見ないとわかんね ここエスパースレじゃねえし
- 861 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:52:53 ]
- >>860
分からないなら無理に答えていただく必要はありません
- 862 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:55:44 ]
- >>861なりすまし乙
>>860エスパーレスが欲しかったんですけど、ダメですかねえ
- 863 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:58:31 ]
- 違うプロセスのウィンドウに SetWindowText を使っているとか
- 864 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:58:37 ]
- 無茶言うなw
- 865 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:36:24 ]
- >>863
SetWindowText(WM_SETTEXT)は他プロセスでも平気じゃなかったか
- 866 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:04:58 ]
- >>865
WM_SETTEXT は大丈夫だけど SetWindowText は駄目 msdn2.microsoft.com/en-us/library/ms633546.aspx >To set the text of a control in another process, >send the WM_SETTEXT message directly instead of calling SetWindowText.
- 867 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:15:11 ]
- ちょっと占ってみると
HWNDを間違えてる、とでますた。
- 868 名前:855 mailto:sage [2008/03/01(土) 00:27:56 ]
- ありがとうございました、1~10辺り200回くらい読みなおしてきます
- 869 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:47:18 ]
- VCってどの辺のバージョンからUnicodeビルドがデフォになってるの?
- 870 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:59:55 ]
- 2005。Expressロハ化と軌を一にしており
全国の初心者をドツボにハメた。
- 871 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:07:34 ]
- なんかしらんが、Unicodeが楽すぎ。マルチバイトで文字区切りなんて悪夢だ。
- 872 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:15:58 ]
- >>871
で、油断してるとサロゲートペアとかにはまると。
- 873 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:19:47 ]
- UTF16じゃなくて32ならよかったのにな
- 874 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:32:53 ]
- まだWin98が現役だというのに・・・
- 875 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:34:54 ]
- 現役じゃねえよバカ
LANケーブル引っこ抜け
- 876 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:47:15 ]
- Windowsフォームアプリケーションでデザイナを使って生成されるコードはMFC?
- 877 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:47:54 ]
- 開発環境のスレで聞け
- 878 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 03:17:58 ]
- >>870
VS2005インスコして確かめてみたら、マジだ なんでデフォの動作をころころ変えるかねぇ・・・ つうかメモリ128MBでVS2005が予想以上に重いw
- 879 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 03:24:58 ]
- オレは今どきデフォでMBCSの方が嫌だよ
- 880 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:49:41 ]
- >>849ですが解決しました、Win32APIと関係無いところでミスってたようです。
どもでした。
- 881 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:58:54 ]
- ktbr
- 882 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 07:44:23 ]
- ころころ動作を変えてねぇだろ。
いままでずっとMBCSだったじゃないか。 というかおれとしては2002か2003の時点で変えてほしかった。
- 883 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 08:41:54 ]
- 2005でもコマンドラインからclやnmake叩いてコンパイルすればデフォはMBCSじゃないの?
- 884 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 08:53:56 ]
- プロジェクト作ったときに、デフォルトで/DUNICODE /D_UNICODE
あたりが定義されるだけだからなー。 だから、nmakeについてはMAKEFILEをどうやって作ったかにもよるんじゃね? あと、環境変数CLとかw
- 885 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:35:16 ]
- つーか今時メモリ128MBで開発しようなんて思うほうがどうかしてるよ。
- 886 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:23:20 ]
- UNICODE文字が全角幅か半角幅か簡単に調べる方法はありますか?
デバイスコンテキストに固定長フォントセットしてGetTextExtentPoint32()呼び出すしかないでしょうか?
- 887 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:36:01 ]
- 一部罫線系の記号なんかは、フォントによって
全角半角の扱いがちがったりするし。 UNIXなら、wcwidthでいけるんだけどね。 まー、64Kbit程度のテーブル一回作れば終わるわけだし作れば。
- 888 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:37:29 ]
- 日本語ターゲットなら、SJISに変換して何バイト取るか調べる手もあるか。
BMP外にあるSJIS表現不能な連中はシラネ。
- 889 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:39:19 ]
- >>885
エミュレータだよ >>886 >>462
- 890 名前:886 mailto:sage [2008/03/01(土) 13:03:39 ]
- >>887-888
ありがとうございます。 記号なんかを含めるとそっちのほうが手っ取り早い気もしますね。 >>889 同じスレ内に答えあったとは・・・ ありがとうございました&すいませんでしたszo
- 891 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:12:53 ]
- >>889
エミュレータでしかもメモリ128KBなら、さくさく動くと思う方がおかしい。
- 892 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:52:39 ]
- >>891
うむ、たしかにそれは桁違いにおかしいな。
- 893 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:05:19 ]
- 今時128kのメモリなんて手に入らないだろw
- 894 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:08:47 ]
- 今時のCPUのキャッシュよりも小さいな。
- 895 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:41:47 ]
- 64KBのおれのマシンじゃ
このスレのdatすら入らないんだぜ(現在194KB)
- 896 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:43:22 ]
- まぁ、基本的に文字が幅をもってるじゃなくてグリフが持ってるんだけどね。
- 897 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:13:11 ]
- ZwSetSystemInformationの使い方教えて〜
- 898 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:59:39 ]
- >>895
オンメモリ前提なんてここ数年の出来事なんだぜ もうちょっと前はオンディスクもほぼ不可能で人間様の手と手書きラベルが前提だったんだぜ もちっとまえはきりが無いので止めとく
- 899 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:00:53 ]
- 第一引数に動作モードの定数
第二引数に結果を受け取る構造体のポインタ 第三引数の第二引数が示す構造体のサイズ 戻り値はNTSTATUS 構造体と定数は目的によるのでぐぐる
- 900 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:02:57 ]
- ASIC内に内蔵されているメモリとかだと、128Kはそれなりに。
- 901 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:30:01 ]
- WindowsをスタンバイにするAPIは何でしょうか?
- 902 名前:デフォルトの名無しさん [2008/03/01(土) 19:38:13 ]
- 最小化されている任意のウィンドウの通常時のサイズを取得するには
どうすればいいでしょうか?
- 903 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:23:34 ]
- GetWindowPlacement
- 904 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 22:26:34 ]
- IShellFolder::ParseDisplayNameの第3引数
MSDNの説明では入力専用のはずなのに、LPCWSTRじゃなくてLPWSTRです。 これは間違いという事でconstな文字列渡してもいいんでしょうか?
- 905 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:54:43 ]
- ぜんぜん知らんけど、コンパイラに怒られなかったら大丈夫なんじゃね
コンパイラに怒られたら、渡す以前の問題だわな
- 906 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:14:17 ]
- さー?
CreateProcessみたいな例もあるし、 いまのMSDNでconstじゃないなら、一応従っておいたほうがいいんじゃない?
- 907 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 04:09:43 ]
- フォルダを作成すると通知コードはどんなのが来るのでしょうか。
- 908 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 04:19:46 ]
- 来ねーよ
自分で待ち構えてないとな
- 909 名前:907 mailto:sage [2008/03/02(日) 05:01:13 ]
- >>908
ありがとうございます。 WM_で探してみたけどたしかにそれらしいものはありませんでした。 調べてみたところ、 RemoveDirectory()、CreateDirectory()はkernel32.dllの関数らしい のですが、これをフックして、戻り値を調べればわかるような気がしました。 難しそうなので、まだ自分には早そうですね。
- 910 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 05:05:17 ]
- >>907
そのディレクトリを作成したディレクトリをFindFirstChangeNotification()で監視しておけばいい。 どういうパラメータを設定すればいいかは忘れた。
- 911 名前:907 mailto:sage [2008/03/02(日) 05:23:18 ]
- >>910
ありがとうございます。 これは相当使えそうです。
- 912 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 06:15:29 ]
- ファイルやフォルダが作られる度に全ウィンドウへ WM_ なんて投げてたら重くてやってられないだろw
>>911 ReadDirectoryChangesW を使った方がいい
- 913 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 07:16:31 ]
- 今回は選ばれない可能性が高いが、選択肢としてSHChangeNotifyRegisterもある
- 914 名前:907 mailto:sage [2008/03/02(日) 12:07:17 ]
- >>912 >>913
ありがとうございます。 ファイルなど個別に調べる場合に使えそうです。
- 915 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 12:35:32 ]
- ダイアログボックスのプロシージャの戻り値って、BOOLかINT_PTRどっちが正解ですか?
- 916 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 12:37:27 ]
- BOOL
- 917 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 12:40:46 ]
- 64 ビットのことも考えると INT_PTR じゃないの?
- 918 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 12:51:00 ]
- BOOL=INT_PTRだとばかり思ってたらwindef.hに
typedef int BOOL; と書いてあって鬱になった俺が通りますよ
- 919 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 12:55:13 ]
- DLGPROC 型の定義を見てみたら?
仕様としては TRUE/FALSE 返すから BOOL なはずではあるけど、 知らない間に仕様拡張されてたら知らん。
- 920 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:18:00 ]
- あれってポインタ値以内ならなんでも返せるんじゃなかったっけ?
- 921 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:21:46 ]
- >通常、ダイアログボックスプロシージャはメッセージを処理した場合に 0 以外の値(TRUE)を、
>処理しなかった場合に 0(FALSE)を返すべきです。 >ダイアログボックスプロシージャが 0(FALSE)を返した場合、 >ダイアログマネージャはそのメッセージに応答して既定のダイアログ処理を実行します。 > >ダイアログボックスプロシージャが、特定の戻り値を必要とするメッセージを処理する場合、 >ダイアログボックスプロシージャは 0 以外の値(TRUE)を返す直前に >SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult) を呼び出し、 >希望の戻り値を設定するべきです。 >0 以外の値(TRUE)を返す直前に、 >SetWindowLong を呼び出さなければならないことに注意してください。 >それより早く呼び出すと、ネストされたダイアログボックスメッセージが、 >DWL_MSGRESULT の値を上書きする可能性があります。 って書いてあるけど。
- 922 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:42:58 ]
- msdn2.microsoft.com/en-us/library/ms645469(VS.85).aspx
MSDNにはINT_PTRと書いてある
- 923 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:46:12 ]
- しかし、MSDN はたまに嘘書いてるからなあ。
- 924 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:50:11 ]
- 例えば?
- 925 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:07:04 ]
- GetModulePathName の MAX_PATH 以上のパスを取得する方法が
実は使えないとか?
- 926 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 14:14:50 ]
- >>438
セットアップファイル群の中にそれらしいcabファイルがあるから、 VS2008が入ってない環境だと入るのかもしれない。
- 927 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:02:29 ]
- すげー亀レスだな
- 928 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:05:52 ]
- 最近のSDK
typedef INT_PTR (CALLBACK* DLGPROC)(HWND, UINT, WPARAM, LPARAM); 古いSDK (VC6付属) typedef BOOL (CALLBACK* DLGPROC)(HWND, UINT, WPARAM, LPARAM);
- 929 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:25:55 ]
- 仕様変わったのか・・・。
何で INT_PTR にしたんだろう?
- 930 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:31:10 ]
- TRUEかFALSEを返すをかえす仕様なんだから、BOOLだったんだろ。
INT_PTRにかえた理由は、64bitコードでは64bitにしたかったんじゃない?
- 931 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:33:23 ]
- せめて 32/64 を切り替えるような BOOL 型を導入するべきだと思うんだけどな。
- 932 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:33:35 ]
- TRUEFALSEっていうよりはなから0かそれ以外か負の数っていってほしい
- 933 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:34:29 ]
- 負の数はここでは関係ないと思うが。
GetMessage は別だが。
- 934 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:09:07 ]
- GetMessageは未だに使い方間違ってる例を見かけるなぁ
- 935 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:16:56 ]
- VS 2008 EE の 「Windows アプリケーション」のテンプレートでも
>while (GetMessage(&msg, NULL, 0, 0)) 吐き出すんだけど
- 936 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:30:22 ]
- GetMessageって-1とかちゃんと見てないとアチョーなんだっけ?
- 937 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:31:30 ]
- 実はエラーなんて返さないのかもしれない・・・。
- 938 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 18:09:39 ]
- いまだにIEとかメモリ無くなるギリギリまで
複数インスタンス立ち上げると リソースがボロボロ欠けたウィンドウが開いて そのうち黙り込んで応答もしなくなって システム全体再起動しないといけなくなるのは IEの中のひとがメモリ確保時にエラーチェック してないからだと思うんだけどどう?
- 939 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 18:21:27 ]
- 100個近くWin95時代のブラクラ状態でIE立ち上げてもヌルヌルにはなるけどシステム落とすまでは逝かないぜ?
環境になんかヘンなもん突っ込んでるんじゃねーの?
- 940 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 18:36:41 ]
- デスクトップヒープの枯渇じゃないの。
- 941 名前:デフォルトの名無しさん [2008/03/02(日) 18:42:50 ]
- ここで質問させてください。
とりあえずC言語の基本を学んだので、ゲーム作りをしてみたいと思った のですが、Win32APIで1からゲーム作りをするのは効率が悪いのでしょうか? DirectXから学んだ方がいいのでしょうか?
- 942 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 18:45:42 ]
- どっちでもいいんじゃない
- 943 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 18:47:52 ]
- DirectX自体は、DXライブラリっての使えば簡単に扱えるよ。
ゲーム作りの本質と関係ないところは、既存のライブラリを利用するので充分。 俺に言わせて貰えば、ゲームみたいなシビアというか、ちょっと変わった処理が多いような場合は、 WinAPI直接叩く方が、やりたいことが直にやれるし、ベンキョにもなっていいと思う。
- 944 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 18:49:31 ]
- ある程度頑張ったら、
自分で全部やってみるのも勉強になると思う。
- 945 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 18:51:55 ]
- C++をやりながら、DirectX9か10をやるといい。
C++は使えないと困ることになる。
- 946 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 18:52:29 ]
- C で DirectX 使うのは面倒いからな。
- 947 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:00:37 ]
- C#のほうがいいと思う
- 948 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:01:20 ]
- 折角高速さを追求してるのに
C++ 使わないのはもったいなさ過ぎる。
- 949 名前:デフォルトの名無しさん [2008/03/02(日) 19:06:08 ]
- レスありがとうございます。
C++は現在勉強中です。APIでもいろいろ出来そうなのでこれも並行して 勉強しようと思います。 それと最後に、Win32APIでは、PS2レベルの滑らかな3D描写は出来ないのでしょうか?
- 950 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:10:15 ]
- そもそも Win32API には 3D 描画機能が用意されてないから
全部ソフト的に対処する必要があるぜ。 要するに 3D 描画エンジンを自作するという。 しかもハードウェアの助けが得られないから遅い。 まあ、DirectX を通さずにグラフィックボードを直接操作するんなら話は別だが、 あまり意味がないよね。
- 951 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:12:47 ]
- これを見て勉強しる!
www.geocities.jp/higuchuu4/index.htm
- 952 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:16:00 ]
- >>950
OpenGLがあるじゃないか 微妙な所だがChoosePixelFormatなんかはgdi32にあるからWin32APIということにする
- 953 名前:デフォルトの名無しさん [2008/03/02(日) 19:29:29 ]
- DIRECTXはマニアがやってたハードを解析して最大限の性能を引き出す
というのをMSが肩代わりしてくれる仕組みだ winAPIでは3Dは無理
- 954 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:45:52 ]
- こんなのもあるよ
DarkGDK www.microsoft.com/express/samples/GameCreators/
- 955 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:59:43 ]
- >>953
全角厨キモイ
|

|