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

Win32API 質問箱 Build10

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、質問する前に検索ぐらいしる!!
過去スレ・参考は>>2-5

MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
0153デフォルトの名無しさんNGNG
間違った
×IL32ならlong=int32で(Win32)
○IL32ならlong=int32で(Win64)
0154デフォルトの名無しさんNGNG
>>152
ソースは?
0155デフォルトの名無しさんNGNG
http://www15.big.or.jp/~kaini/image/img-box/img20030321215209.jpg
0156デフォルトの名無しさんNGNG
>>155
グロ
0157デフォルトの名無しさんNGNG
コンソールプログラムにおいて Sleep()で休止中に Ctrl-Cを入力すると、完全に
凍ってしまうんですが、これはどうにかならないのでしょうか?
0158 NGNG
SleepEx() 使え
0159デフォルトの名無しさんNGNG
自作のコントロールにマウスカーソルをあわせてホイールを
回すと何らかの動作するようにしたいのですが、Spy++で調べても
WM_MOUSEWHEELが送られてこないようです。
どうすればホイールの動きを感知できるでしょうか?
0160デフォルトの名無しさんNGNG
>>158
SleepExつかっても凍ってしまうのですが。
0161 NGNG
>>160
ごめん、記憶で適当に言っちゃった。でも SleepEx() て割り込み受け付けるために
使うんじゃなかった?

明日検証してみるからちょっとまっててね。
AppWizard で作った Win32コンソールの hello world くらいで再現するよね?
0162デフォルトの名無しさんNGNG
>>157
どんな環境でそうなるの。98でもXPでもきちんと止まるのですが。
0163デフォルトの名無しさんNGNG
>>159
WM_MOUSEWHEEL はキーボードフォーカスを持つ
ウインドウに送られるそうだけど、その辺は大丈夫?

0164デフォルトの名無しさんNGNG
>>157 これでどうだ?
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/10811
0165161 NGNG
>>160
ごめん、まじで再現しない。

#include <stdio.h>
#include <Windows.h>

int main(int argc, char* argv[])
{
printf("Hello World!\n");

::Sleep(10000);

return 0;
}
で、コンソールアプリ実行しても、Ctrl+c で止まる。
>>164さんの情報でも解決しない場合は、詳しく環境を教えて。
0166デフォルトの名無しさんNGNG
160じゃないけど、MFCをサポートするコンソールアプリでやったら例外で落ちた。
一応報告。
ウィザードが吐いたコードの最後に ::Sleep(10000); を追加しただけだが……

Win2000 VC6SP5
0167165NGNG
>>166
Win32 Console Application を AppWizard で作らせて、
MFCサポートにした。
if () ~ else の最後に ::Sleep(10000); を追加したけど落ちない。

WinXP home VC6SP5
0168デフォルトの名無しさんNGNG
FindFirstChangeNotificationでフォルダを監視して、その変更通知は受け取ることが
できたのですが、その中で変更のあったファイルのみ列挙するには
どのようにしたらよいでしょうか?
0169159NGNG
>>163
SetFocusを実行するようにしてみたのですがダメでした。

普通のウィンドウ(WS_OVERLAPPEDWINDOW)で
ホイールの動きを感知できるか試してみたのですが、
Spy++で見る限りWM_MOUSEWHEELが送られているのに、
ウィンドウプロシージャのブレークポイントには止まりません。

WM_MOUSEWHEELがちゃんと定義されていないのかと思い、
case 0x020a:としてみたのですがダメでした。

メッセージループに何か仕掛けが必要なのでしょうか?
0170デフォルトの名無しさんNGNG
マウスユーティリティにホイールメッセージ奪われて
WM_VSCROLLにすりかえられてたりしない?
0171168NGNG
やっぱり、無理みたいですね。(´・ω・‘)ショボーン
0172デフォルトの名無しさんNGNG
>>160
SetErrorModeするとか明示的にsignalハンドラ書くとかはどうよ?
0173デフォルトの名無しさんNGNG
猫プロのWindows SDK一番最初のプログラムがコンパイルできません

'void *' 型は 'HBRUSH__ *' 型に変換できない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )

とエラーが出ます
BCCです
早くも挫折の予感です
みなさんこれを乗り越えてきたのでしょうか
0174デフォルトの名無しさんNGNG
>>173
http://pc2.2ch.net/test/read.cgi/tech/1030493157/733 を見てください

bccだと猫のサンプルはエラーが結構出たような気がするけどがむばれ・・・
0175デフォルトの名無しさんNGNG
>>173
windowsx.h, GetStockBrush, DeleteBrush 等のキーワードで調べる……は駄目かな?
0176デフォルトの名無しさんNGNG
>173
C言語の第1章からやれ
0177デフォルトの名無しさんNGNG
>>173
エラーと言われたソースのファイル名と行番号は認識してるか?
その行で使っている型識別子は1つずつgrepしてみたか?
typedefは見つけたか?
0178デフォルトの名無しさんNGNG
#define NOSTRICT
…は素人にはお勧めできないからがんばって適切な型の指定に置き換える
0179173NGNG
>>174のリンク先の方法で解決できました
意味はよくわかりませんでしたが、HBRUSH型にキャストしてやれば良いんですね

>>174>>175>>176>>177>>178
アドバイスありがとう
また明日から頑張れそうです
0180デフォルトの名無しさんNGNG
>>179
憶えたこと、その場でちゃんとメモっとけよ
そのメモの束が、お前が先輩になった時の財産になるぞ
0181デフォルトの名無しさんNGNG
http://cos.site.ne.jp/img-box/img20030325172722.jpg
0182デフォルトの名無しさんNGNG
>>181
おお。
0183名無し@沢村NGNG
>>124
ははは、昨日会社でソースを確認したらUpdateWindowじゃなかったよ。
正しくはこうだな。

ShowWindow(hWnd, SW_HIDE);
MoveWindow(hWnd, .....);
ShowWindow(hWnd, SW_SHOW);
0184デフォルトの名無しさんNGNG
>>181
( ●ω●) オトーサン・・・
0185デフォルトの名無しさんNGNG
>>183
禿しくちらつく。
そんなもん実用にならねぇ
0186デフォルトの名無しさんNGNG
>>170
WM_VSCROLLにすり替えられていたようです。
Spy++で表示されているのは、送られているメッセージで、
受け取ったメッセージではないんですね?
ありがとうございました。
0187名無し@沢村NGNG
>>185
ヌヒよ、WS_EX_TRANSPARENT のポップアップウィンドウの話をしているのだぞ。
ユーザには存在していないように見えるウィンドウをいったん非表示にしたところで
ちらつくわけがないだろ。わかったか、ヌヒよ。
0188デフォルトの名無しさんNGNG
リソース食いそうだね。
0189デフォルトの名無しさんNGNG
質問です。
PC に PS/2 キーボードと USB キーボード みたいに
キーボードが複数繋がっているとして、
この両者の入力を、どちらのものか識別したりする方法ってないでしょうか?
一応、デバイスマネージャにはデバイスドライバが2つある状態になっています。
多少低レベルな API とかでもいいのですが…
(さすがにデバイスドライバを作るとか、そういうレベルだと厳しいのですが)

識者の方、指揮者の方問わずよろしくおねがいします。
0190デフォルトの名無しさんNGNG
ウィンドウアプリ(非コンソールアプリ)で、起動後に
GetStdHandleすると返ってくる値がとても変なのですが
なにか関連情報ありませんか?

例えばWindows2000Sp3のExplorerから起動すると、
標準出力ハンドルとして0x00010001が返ってきます。
NULLでもINVALID_HANDLE_VALUEでもない、しかし無効なハンドル。
一方CMD.EXEからstartコマンドを使って起動するとハンドルはNULL
その他、起動方法を変えるといろいろな結果が得られます。

今手元に詳しい結果が無いのですが
WinMain
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
MessageBox(...)
}
とかで簡単に調べられます。なんでしょねこれ。
0191デフォルトの名無しさんNGNG
>>190
explorerがなにがしかハンドルを渡してるんじゃないのか?
0192デフォルトの名無しさんNGNG
>>190
GetStdHandle 関数が返すハンドルは、コンソールからの読み取りまたはコンソールへの書き込
みが必要なアプリケーションで利用できます。
(MSDNより)

ウィンドウアプリでは必要ないと思うんだけど。
0193デフォルトの名無しさんNGNG
>190
CreatePipe()しないと駄目とか
0194193NGNG
9x系がCreatePipe使えないから違うか…
0195デフォルトの名無しさんNGNG
>>194
使えるよ
使えないのはCreateNamedPipeのサーバ側
0196デフォルトの名無しさんNGNG
質問お願いします。VC++6を使っていますが、
newよりもGlobalAllocを使った方が良い場面というのは、どういう場合なんでしょうか

なんとなく、大きいメモリを確保する必要が有るときは
GlobalAllocかなぁ、などと思っているのですが。
0197デフォルトの名無しさんNGNG
>>196
APIがGMEM_MOVEABLEとかで指定する移動可能メモリを要求してるときぐらい
クリップボード系でGMEM_SHAREを指定するときもあるかも
0198デフォルトの名無しさんNGNG
クリップボード使う時はGlobalAllocじゃないとね
0199デフォルトの名無しさんNGNG
おねがいします!
_beginthreadexの戻り値のハンドルをクローズする場所は
たいていWaitForSingleObjectなどでスレッド終了を確認した後で
行われていますが、
スレッド関数内の最後(まだスレッドは終わってない)の所で
CloseHandleして良いものなのでしょうか ?
いちおうCloseHandleは成功はしているけど・・・やばいのかな?
0200デフォルトの名無しさんNGNG
>>199
WaitForSingleObjectなどでスレッド終了を確認する必要が無い場合は
CloseHandleしてかまわない、WaitFor...使ってる場合にCloseHandleすると
どうなるかしらない。WaitFor...がハンドルの参照カウンタをインクリメント
しているなら大丈夫だが、、、普通どおり終了確認してからCloseHandleする
のが安全だろ。
0201デフォルトの名無しさんNGNG
ダイアログボックスに描画したグラフィックを消すにはどのようにしたらよいでしょうか?
グラフィックはLineToやPolylineで書いています。
0202デフォルトの名無しさんNGNG
>>201
InvalidRectとか?
0203デフォルトの名無しさんNGNG
>>202
即レス、ありがとうございます。
できました。
0204デフォルトの名無しさんNGNG
>>200
良く分かりました。さんくす。
0205196NGNG
>>197-198
レスありがとうございます。
良かった、用途はかなり限定されてるんですね。
悩まずに済みそうです。感謝です。
0206デフォルトの名無しさんNGNG
文字列が数値かどうか判定するAPIってありましたでしょうか?
VBでいうところのIsNumericです。
0207デフォルトの名無しさんNGNG
>>206
GetStringType, GetStringTypeEx かなぁ?
0208デフォルトの名無しさんNGNG
>>206
IsCharAlphaNumeric() && !IsCharAlpha()
ではどうか?
0209デフォルトの名無しさんNGNG
マウスカーソルを指マークにしたいのですがデフォルトではないようです。
みなさんどうやっていますか?
0210デフォルトの名無しさんNGNG
沢村か?
0211デフォルトの名無しさんNGNG
IDI_HANDのが気に入らなかったら
自分の手を見ながら描く
0212デフォルトの名無しさんNGNG
>>211
IDC_HANDですね。ありました。2000以上だったのか。
0213190NGNG
>>191-195
ありがとうございます。
ウィンドウアプリから子プロセスとしてコンソールアプリを起動する
時に標準出力などを一旦待避しておいて後で
また戻してるだけなので、使わないといえば使わない
ハンドルなんですけどね。
ちょっと気持ち悪かったもので。
0214デフォルトの名無しさんNGNG
>213
とりあえず猫プロとか見ながら組んでみたけど
SetStdHandle()でエラー返さないからええんでない?
0215デフォルトの名無しさんNGNG
カーソルがウィンドウの外に出ていったことを
知るにはどうしたらいいのでしょうか?
できればキャプチャーせずに知りたいのですが。
0216デフォルトの名無しさんNGNG
>>215
キャプチャーするのが一番だと思うんだけど・・・
タイマーで監視するか
透明なウインドウを置いてそこで検出するか

キャプチャーしたくない理由ってなによ?
0217デフォルトの名無しさんNGNG
用途によってはタイマーで監視する方法も。
例えば、
 プッシュボタンを押したとき → キャプチャー
 フラットなボタンを凸表示するとき → タイマー
みたいに。
0218デフォルトの名無しさんNGNG
>>217
ウインドウ上でボタン押下したならウインドウからはずれてもMOUSEMOVEが拾えなかったっけ?
0219デフォルトの名無しさんNGNG
DIB通さずに高速に描画する関数ってどんなのがありますか?
点とか円とか線とか
0220215NGNG
>>216-217
ありがとうございます。

カーソルが載っているときだけボタンの色を
変えるということをしたかったのです。

カーソルが外に出た瞬間別のボタンの上に
載った場合、キャプチャー解除しても直後は
WM_MOUSEMOVEを拾えないのではないか、
と思ったのですが、実験してみたら拾えました。(汗)
スマソです。
0221デフォルトの名無しさんNGNG
>>219
点とか円とか線を描くのにDIB以外の手段つーとメタファイルか?
そんなん実測したらええやん
0222デフォルトの名無しさんNGNG
>>221
GDIと混同してる?

>>219
LineToとかArcとか
0223221NGNG
>>222
GDI以外の何と混同してると重田?
0224デフォルトの名無しさんNGNG
>>218
いや気になったのは、キャプチャだとキーボードメッセージもキャプチャしているウィンドウに取られてしまい
マウスがボタンの上に乗っているときにメニューのショートカット(Alt + H でヘルプとか)が使えなくなったりしないかなぁ、と。
アクセラレータやMFCを使っていると何故か大丈夫なのかもしれないけど。
0225デフォルトの名無しさんNGNG
TrackMouseEvent() は?
0226デフォルトの名無しさんNGNG
ダイアログボックスの背景の色を指定するにはどうしたらいいでしょう
0227デフォルトの名無しさんNGNG
>>226
WM_ERASEBKGNDで処理
0228デフォルトの名無しさんNGNG
http://www15.big.or.jp/~kaini/image/img-box/img20030329222324.gif
0229デフォルトの名無しさんNGNG
>>228
はいはい面白い面白い
0230228NGNG
中学の同級生の大ちゃんを思い出させるセリフだな、それ…。
気に食わない事があると良くそのセリフを吐いていたっけ…。
はあ、金返せよ…。
0231yosoでやってくれNGNG
少なくとも一方はスレ違いと思われ
0232デフォルトの名無しさんNGNG
自分以外のプロセスが使っているWindows Common Controls
にアクセスしたいんですけどどうやったらいいんでしょうか?

で、そこに表示されているテキストを読み取りたいんですが?

95系とNT系で違う処理になると思いますがXPで動けば十分です。
0233デフォルトの名無しさんNGNG
>>232
>そこに表示されているテキストを読み取りたいんですが?

煽られた・・・・
0234デフォルトの名無しさんNGNG
te
0235デフォルトの名無しさんNGNG
ボタンを押すと凹みますよね。で、中の文字が右下にずれる。
このずれの量って、GetSystemMetricsか SystemParametersInfoあたりで決まってるんでしょうか?

標準では横方向1px、縦方向1pxのようですが。
0236デフォルトの名無しさんNGNG
WINAPIじゃないんですけど、
レジストリ操作でフォルダにあたるキーはなんですか。
ファイルならわかるけどフォルダがわかりません。
0237デフォルトの名無しさんNGNG
>236

意味不明
0238デフォルトの名無しさんNGNG
猫でも分かるよりさらに超初心者向けのwindowsプログラミングサイトを
教えてください。
0239デフォルトの名無しさんNGNG
>>238
http://hima-doki.s13.xrea.com/x/_cgi/a-column/data/motties/1036074275.html
0240デフォルトの名無しさんNGNG
>>238
サルでもわかるWindowsプログラミング
http://life2.2ch.net/test/read.cgi/credit/1041764551/
0241デフォルトの名無しさんNGNG
>>238
バカは死ね。
0242デフォルトの名無しさんNGNG
>>235
決まってないと思われ。と言うかボタン作ったヤツが決めてるだけ。
0243yosoでやってくれNGNG
>>238
くめい氏がここを見ていることを祈りながら、
どの説明のどこがどのようにわからないのか
その恥のかきついでに、克明に表現しろ

この世のどこかにものすごく奇特な人がいて
おまえの悩みにつきあってくれるかも知れんぞ
0244デフォルトの名無しさんNGNG
あり、コテハンのままだった(欝だ詩嚢
0245yosoでやってくれNGNG
あげ
0246デフォルトの名無しさんNGNG
>>232
VirtualAllocEx
0247デフォルトの名無しさんNGNG
>>232
GetWindowText()が使えそうなら使う。(WM_GETTEXTを送るのは×)
無理ならシステムフックを使う。
http://home.att.ne.jp/yellow/hide_n/programming/tips03.html


0248デフォルトの名無しさんNGNG
>>247
>他のプロセス内のコントロールのテキストを取得するには、GetWindowText 関数を
>呼び出すのではなく、直接 WM_GETTEXT メッセージを送ります。
ってかいてあるよ?

0249デフォルトの名無しさんNGNG
WM_SETTEXTとWM_GETTEXTはWin16との互換性を保つために、自動的に
メモリマップを介してプロセス間で文字列を共有できる、というようなことを
Advanced Windowsに書いてあった気がするが。
0250デフォルトの名無しさんNGNG
WM_GETTEXTで読み取れるのはステータスバーくらいだろ
0251デフォルトの名無しさんNGNG
GetWindowText() って何のためにあるの?
全部 WM_GETTEXT でいいじゃん。
0252ネタにマジレスNGNG
>>251
GetWindowText
指定されたウィンドウが持つタイトルバーのテキストを取得します。
指定されたウィンドウがコントロールのときは、コントロール内のテキストを取得します。

(中略)

解説
この関数は、指定したウィンドウ (またはコントロール) にWM_GETTEXT メッセージを送ります。
この関数で、他のアプリケーション内のエディットコントロールのテキストを取り出すことはできません。

                                                (MSDNより抜粋)
■ このスレッドは過去ログ倉庫に格納されています