Win32API質問箱 Build80
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/06/04(木) 04:25:40やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!
過去スレ、関連リンクは>>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質問箱 Build79
http://pc12.2ch.net/test/read.cgi/tech/1240411224/
0693デフォルトの名無しさん
2009/07/15(水) 14:24:22エディットボックスの中の文字を書いた後にエンター押させたいんだけどポンッって鳴る
0694デフォルトの名無しさん
2009/07/15(水) 14:27:460695デフォルトの名無しさん
2009/07/15(水) 14:31:070696デフォルトの名無しさん
2009/07/15(水) 14:31:400697デフォルトの名無しさん
2009/07/15(水) 14:37:480698デフォルトの名無しさん
2009/07/15(水) 14:42:50かな
0699デフォルトの名無しさん
2009/07/15(水) 14:48:42KeyPressの中でKeyがVK_RETURNならKey = NULL;しとけ
0700デフォルトの名無しさん
2009/07/15(水) 17:03:320701デフォルトの名無しさん
2009/07/15(水) 18:49:160702デフォルトの名無しさん
2009/07/16(木) 15:02:500703デフォルトの名無しさん
2009/07/16(木) 15:05:420704デフォルトの名無しさん
2009/07/16(木) 15:15:39LoadResource
LockResource
CreateDialogIndirect(Param)
0706デフォルトの名無しさん
2009/07/16(木) 15:36:020707デフォルトの名無しさん
2009/07/16(木) 17:08:57WSAEnumNetworkEvents(Socket, hEvent, &EventFlags);
てやったときに、どちらの関数も 0 を返していて、成功はしているだけど
EventFlags.lNetworkEvents が 0 のときがある。これはなんなの??
何もイベントが発生していないのにWSAEnumNetworkEventsから制御が戻ってきたって事?
0708デフォルトの名無しさん
2009/07/16(木) 20:34:310709デフォルトの名無しさん
2009/07/16(木) 20:57:31ttp://msdn.microsoft.com/ja-jp/library/cc430056.aspx
0710デフォルトの名無しさん
2009/07/16(木) 21:12:07GetAsyncKeyboardStateが無いのは不便ですね
0711デフォルトの名無しさん
2009/07/17(金) 02:43:560712デフォルトの名無しさん
2009/07/17(金) 12:30:09一応メモリ解放とかした方がいいのかな?
ログオフの時はするけど、終了や再起動ならリークもしても関係無いと思うんだが
0713デフォルトの名無しさん
2009/07/17(金) 12:33:34礼儀など気にしないなら、別にどうでも
0714デフォルトの名無しさん
2009/07/17(金) 12:49:030715デフォルトの名無しさん
2009/07/17(金) 13:02:57Memory Mapped FileのことをSectionと呼ぶ場合には、どういった意図が込められているのでしょうか
あるいは殊更に分けて考える必要はないのでしょうか
0716デフォルトの名無しさん
2009/07/17(金) 13:17:07CのmallocとちがってWindowsのresourceは終了時に解放されないものがある
あとはわかるね
0717712
2009/07/17(金) 13:55:09後から追加した機能なので、解放処理をWM_CLOSEや他に混ぜている事もあり
面倒なので、いいかなっと思っていました
アプリが終了してからExitWindowsを呼ぶ為には良い方法は無いでしょうか?
0718デフォルトの名無しさん
2009/07/17(金) 14:24:07そんだけの用途なら、なんかのフラグ立てといて、メッセージループ抜けたらExitWindows呼べば?
0719デフォルトの名無しさん
2009/07/17(金) 14:34:49有難うございます
atexitで設定するか、仰る通りにフラグ経ててループ抜けたら呼ぶようにしてみます
0720デフォルトの名無しさん
2009/07/17(金) 17:18:25は 塩最高 塩以外は邪道 な 素材のうまみを生かす 素材
塩 「塩で」 ぎ の香
甘ったるいタレで焼き鳥が食えるか の タレ厨は味覚障害者
塩もこだわった塩がいい 白.. 異 高い店で食ったことないんだろ?
臭い肉をごまかすためのタレ 焼 . .論 ポテチはうす塩が至高
タレは子供用 AVの見過ぎ き は 素
素 / ̄ ̄ ̄\ 認 タレはタレの味しかしない 材
最終的にたどり着くのは塩 材 .../.\ /. \ め の
の / <●> <●> \ 本 な 焼き鳥=塩 魅
. 「タレ」から「塩」に 味 | (__人__) | 当 い 力
普通は塩 \ `ー'´ / の 高い店なら塩、安い店ならタレ が
シンプルに塩 .. / \ 味 際
甘味にも通ずるものがある 覚 たれ(笑) 食の原点に戻る 立
自分用の塩を携帯してない奴は馬鹿 子供の頃はタレだったが今は塩 つ
塩こそ最高の調味料!!
0721デフォルトの名無しさん
2009/07/17(金) 22:09:37少し調べたんですけど両者の違いがよくわからなくて・・
わかる方いたら教えて頂けませんか?
0722デフォルトの名無しさん
2009/07/17(金) 22:22:030723デフォルトの名無しさん
2009/07/17(金) 22:50:58ISO/ANSI標準規格では、下線部で始まる名前を処理系の独自拡張用に使って良いとしている。
VC++にとっては、strcmpiはなんの標準でもない名前なので、
下線を付けて独自拡張用の名前に適合するようにするのがふさわしいとVC++の制作陣は考えたということ。
ここまで書いたけど、スレ違いだから次はよそで聞け。
0724デフォルトの名無しさん
2009/07/17(金) 23:07:24具体的に言うと、各コントロールにそれぞれ整数を記憶させておきたいです。
現在は、STLのmapを使って、ハンドルとデータを関連付けています。
0725デフォルトの名無しさん
2009/07/17(金) 23:31:15SetProp
0726デフォルトの名無しさん
2009/07/17(金) 23:35:35Set/GetWindowLongPtrでDWLP_USER
Set/GetWindowLongPtrで任意の正整数によるインデックス指定(使用量をWNDCLASS(EX)で指定)
SetProp/GetPropで文字列またはアトムによるキー指定
0727724
2009/07/18(土) 00:40:32自分に最適な方法を吟味して使ってみようと思います。
0728デフォルトの名無しさん
2009/07/18(土) 01:48:56FillRect?PatBlt?それともExtTextOut?
0729デフォルトの名無しさん
2009/07/18(土) 02:14:14自己レス。GWLP_USERだった、すまん。
>>728
自分はExtTextOutが多いなあ。
MFCやWTLだとFillSolidRectという名前でラップされているから、躊躇無く使える。
MFCもWTLも使っていないなら、自前で定義するといいと思う。
0730デフォルトの名無しさん
2009/07/18(土) 10:27:390731デフォルトの名無しさん
2009/07/18(土) 10:28:139x系で実行すると現在のWindowsのバージョンでは起動出来ない
とエラーが発生するんだが、こうなる原因って何かな?
API周りはきちんと動的リンクにしてる
文字列は全てリソースに纏めてしまったが、もしかしてリソースに纏めると9x系って駄目?
0732デフォルトの名無しさん
2009/07/18(土) 10:32:54VisualStudio2008でビルドすると駄目
0733デフォルトの名無しさん
2009/07/18(土) 10:49:23本人に聞けば良いんじゃね?
0734デフォルトの名無しさん
2009/07/18(土) 11:10:18とりあえず質問に対するお答えを待つことにします
0735デフォルトの名無しさん
2009/07/18(土) 11:30:48そう呼んでいる例をあげてくれまいか。
0736デフォルトの名無しさん
2009/07/18(土) 11:34:47有難うございます
borlandでビルドした所きちんと起動しました
VC++2008ではWin9x系に対応出来ないんでしょうか?
0737デフォルトの名無しさん
2009/07/18(土) 11:37:202008はNT4以前、9x系はランタイムでバージョンチェックしてる。
2005にするしか無いかなあ。
0738デフォルトの名無しさん
2009/07/18(土) 12:52:21有難うございます
2008では無理ですか…
別のIDEでビルドするようにしてみます。有難うございました。
0739デフォルトの名無しさん
2009/07/18(土) 14:36:34因みにVC2005でも95だけアウトだった気がする。
0740デフォルトの名無しさん
2009/07/18(土) 15:02:55VS2005でWin95はググれば対処法が出てくる。
0741デフォルトの名無しさん
2009/07/18(土) 15:05:46公式にだめにしたと言っている。
http://msdn.microsoft.com/ja-jp/library/dd695830(VS.100).aspx
0742デフォルトの名無しさん
2009/07/18(土) 16:36:58NTFSで最大のパス長って32768文字ってことになってますが
Vista64bit環境でエクスプローラでフォルダを作ってみると
どうもMAX_PATH制限がかかっているようで250文字付近から
新しいフォルダを作れなくなります
Win32APIでもパス先頭に \\?\付けてUnicode版なら32768文字までと
MSDNに出ていますが
OS標準のエクスプローラで未だMAX_PATH制限があるのは互換性のため?
自分で作るときもMAX_PATH制限のあるAPIで気にせず使えばいいのでしょうか?
0743デフォルトの名無しさん
2009/07/18(土) 17:42:05.NETだと「\\?\」を付ける形式は殆ど通らないしなあ。
(大抵ArgumentExceptionで蹴られる。)
MS的にはMAX_PATHの範囲内でやりくりしろ、って方針に見える。
つまりは、MAX_PATH制限は半ば公式って事でOKなんじゃないかな。
0744デフォルトの名無しさん
2009/07/18(土) 18:29:380745デフォルトの名無しさん
2009/07/18(土) 18:43:39windowsにってことならtaskkillのことになるのか?
0746デフォルトの名無しさん
2009/07/18(土) 18:44:070747デフォルトの名無しさん
2009/07/18(土) 18:49:18何をやりたいかによる。例えば、文字通り殺したいならTerminateProcessだけど。
0748デフォルトの名無しさん
2009/07/18(土) 18:59:41それはコマンドっぽい
>>747
signalハンドラで捕まるもの全て
受け取ったものをそのまま子プロセスに流したい
0749デフォルトの名無しさん
2009/07/18(土) 19:13:56ANSI/ISO Cになぜかsignal/raiseが収録されているせいで、C/C++ではsingal関数が使えるけれど、
Windowsではlibc層でエミュレーション的に実装されている。
そのため、大抵は外から直接シグナルを送る手段なんて存在しない。
CygwinやSFU/SUAなどといったUnix互換環境ならそっちのkill使えよと言うところ。
0750デフォルトの名無しさん
2009/07/18(土) 19:18:05もしかしてTerminalProcess呼ばれたことも知らないまま死亡?
0751デフォルトの名無しさん
2009/07/18(土) 19:57:44コンソールでのCtrl+C入力をWindows APIで取得するにはSetConsoleCtrlHandler。
初期状態のハンドラはExitProcessを呼び出す。
(しかし、C/C++ならSIGINT用にlibcがハンドラを登録しているはず)
こんな調子で、ほかのものもだいたいは別の手段となる。
0752デフォルトの名無しさん
2009/07/18(土) 19:58:14ウィンドウアプリならWaitForSingleObjectでオブジェクトがシグナル状態か非シグナル状態かを確認できる
スレッドが終了すればスレッドのハンドルがシグナル状態になるし、CreateEventとかで自分で好きにイベントを作って
SetEventやResetEventでシグナル状態を変えれるよ…たぶん
0753デフォルトの名無しさん
2009/07/18(土) 20:10:08いや、GUIアプリで、SetConsoleCtrlHandlerに対比させる何かといえばWM_CLOSEだと思う。
0754デフォルトの名無しさん
2009/07/18(土) 22:30:25やっぱエクスプローラでもサポートしてないとこからも
そうなんでしょうね
有り難うございました
0755デフォルトの名無しさん
2009/07/18(土) 23:41:43qが入ると終了する。どうするの?
0756デフォルトの名無しさん
2009/07/18(土) 23:42:360757デフォルトの名無しさん
2009/07/18(土) 23:47:260758デフォルトの名無しさん
2009/07/19(日) 00:08:100759デフォルトの名無しさん
2009/07/19(日) 00:18:070760デフォルトの名無しさん
2009/07/19(日) 00:57:190761デフォルトの名無しさん
2009/07/19(日) 07:44:23ウィンドウプロシージャ内でGetAsyncKeyStateを使ってみましたがうまくいきません。
コンソールだとフォーカス外でも取得できるのですがどのようにしたらいいでしょうか?
環境はXPとBCCです
0762デフォルトの名無しさん
2009/07/19(日) 11:11:04SetWindowsHookEx
0764デフォルトの名無しさん
2009/07/19(日) 15:47:56やはりグローバルフックを使うしかありませんか。サンクス
0765デフォルトの名無しさん
2009/07/19(日) 16:59:54GetLastError()の値が更新されることはあり得るんでしょうか
例外をキャッチする箇所でGetLastErrorを呼ぶという設計に問題があるのかもしれませんが...
0766デフォルトの名無しさん
2009/07/19(日) 17:28:53自分の都合で勝手にAPIの動作が、自分流になることを期待するなんて、どんだけゆとりなんだよ!
0767765
2009/07/19(日) 17:47:38失敗したときにSetLastErrorでエラーコード設定しておいて、例外で抜けるようにしておけば、
呼び出し元のコードで失敗を処理するか、放置するか選択できて、
特に、失敗頻度が低いであろうコードで見通しのよいコードになると思ったのですが...
0768デフォルトの名無しさん
2009/07/19(日) 17:48:20GetLastError()の値が更新される
0769デフォルトの名無しさん
2009/07/19(日) 17:51:57XPのビジュアルスタイルがクラシックみないになってしまうのって
回避できないんでしょうか?
0770デフォルトの名無しさん
2009/07/19(日) 17:58:590771765
2009/07/19(日) 18:12:46やはりそういうことがあるというなら、回避策を検討します
0772デフォルトの名無しさん
2009/07/19(日) 18:16:060773デフォルトの名無しさん
2009/07/19(日) 18:42:57自分は例外クラスにGetLastErrorのコードを渡すようにしている。
__declspec(noreturn)
void ThrowWin32Exception()
{
throw Win32Exception(GetLastError());
}
0774769
2009/07/19(日) 18:59:49ありがとうございます。
調べてきました。
SetLayeredWindowAttributes
UpdateLayeredWindow
ですね。
これ使わないと実現不可ですかね?
可能であればSetWindowRgnが良いのですが。
0775デフォルトの名無しさん
2009/07/19(日) 19:36:330776769
2009/07/19(日) 19:54:51了解。
0777デフォルトの名無しさん
2009/07/20(月) 01:53:07wsprintf(str, "%d", hensu);
CopyMemory(ic.szTip, str, 5);
上のようにして変数が変わっても初期値(0)のまま表示されます
ホバーするたびに値が更新されるにはどうすればいいですか?
0778デフォルトの名無しさん
2009/07/20(月) 02:07:59NIM_MODIFYでShell_NotifyIconを呼び出さないと駄目。
というか、その二行で本当に反映されると思っていたのなら、
APIの一般的な設計を理解していない気がする。
0779デフォルトの名無しさん
2009/07/20(月) 02:24:51できました。本当にトンクス。精進します
0780デフォルトの名無しさん
2009/07/20(月) 03:00:38LATにウィンドウオブジェクトの識別子があって、LATのインデックス、とかでしたっけ?
0781デフォルトの名無しさん
2009/07/20(月) 10:28:030782デフォルトの名無しさん
2009/07/20(月) 14:49:470783デフォルトの名無しさん
2009/07/20(月) 14:52:07突っ込みどころ満載だが、平気で嘘つくの良くない!
0784デフォルトの名無しさん
2009/07/20(月) 14:52:130785デフォルトの名無しさん
2009/07/20(月) 14:58:29別に同期オブジェクトだの共有メモリマップハンドルだのは別腹ですだよ
0786デフォルトの名無しさん
2009/07/20(月) 15:02:280787デフォルトの名無しさん
2009/07/20(月) 15:17:38プロセスBのウィンドウを操作するためのハンドルをプロセスAで取得する
このときプロセスAで取得したハンドルとプロセスBで元々使っていたハンドルは
同じウィンドウを指していても共有されてるわけではない
0788デフォルトの名無しさん
2009/07/20(月) 15:22:580789デフォルトの名無しさん
2009/07/20(月) 15:29:450790デフォルトの名無しさん
2009/07/20(月) 15:38:010791780
2009/07/20(月) 15:52:51HWNDを別プロセスへ何らかの手段で持っていっても、使えない。
WM_COPYDATAの場合だけは、そのメッセージの場合に限りシステムがHWNDを輸送するための特別な処理をしていたと思う。
HWNDの中身はメモリポインタではなく単純な整数(1とか2)になってて
プロセスごとに1つあるシステム的なオブジェクトを管理するテーブルのインデックスだったと思う。
そのインデックスで参照した先にあるのがメモリポインタだったかウィンドウオブジェクトの識別子だったかは覚えてない。
0792デフォルトの名無しさん
2009/07/20(月) 15:57:12■ このスレッドは過去ログ倉庫に格納されています