Win32API 質問箱 Build6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。
過去スレ
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html
参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
は、リダイレクトを指定しないとき、ハンドルが存在するか確認はしてないわけだな?
リダイレクトすると、自動作成されるってのが結論なのかねぇ。
0160デフォルトの名無しさん
NGNGDOS窓から実行させればリダイレクトしなくても表示されますが?
0161127
NGNG以下のよーな感じですよね?GetKeyState関数の使い方は
引っ掛かりませんでしたけど...ね
if(GetKeyState(VK_KANA) & 0x0001){
// かな_ON
}else{
// かな_OFF
}
指定してる仮想キーを間違えてるのかなぁ...
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG9x系ではGetLastError「このアプリケーションの実行に必要なライブラリ ファイル
のうちの 1 つが見つかりません。」と返してきます。
MSDNには、
「DllMainがWin32 関数の Unicode 版を呼び出そうとした場合も、LoadLibrary は失敗します。」
とあるので、これが気になっているのですが・・・。
DLLはCOMサーバで、unicodeプログラムになっています。
0164デフォルトの名無しさん
NGNG表示されないぞ
0165デフォルトの名無しさん
NGNG何のDLL使おうとしてるんだか知らんが、そのDLLがリンクしてるDLLがNT系固有なんじゃないか?
Dependency Walkerでも見ろ。
0167147
NGNGあ、IME2000固有のカナモード切換のこと?
だったら多分無理だよ。
(ごめん、キーボードのカナロックかと思った)
以前にMSのサポート技術情報ページで、
IME97かIME98あたりからAPIでの変更が不可能に
なったというのを読んだことがある。
016993
NGNGありがとうございます。
Stringで宣言していた時は、Chr(0)だのvbNullCharだので初期化してたのですが、
あちこちコードをいじり倒したので、今となってはよくわからなくなってしまいました。
今後の参考にさせて頂きます。
0170名無し@沢村
NGNGいろいろなボタンをクリックしたときに、そのボタンに応じたハンドルを取得できますか?
0171デフォルトの名無しさん
NGNGGetDlgItem
0172デフォルトの名無しさん
NGNGkeybd_event で何か入力させてみて、何が入力されたか調べる・・・とかいう最終手段もなきにしもあらず
0173名無し@沢村
NGNG0174デフォルトの名無しさん
NGNGサブクラス化したほうが早いんじゃない?
0175名無し@沢村
NGNGサンキュー、サブクラス化したらなったよ。
でもCallWindowProcをしたら1番目の引数がlong (__stdcall *)(void *,unsigned int,unsigned int,long)' から 'int (__stdcall *)(void)' に変換できません。(新しい機能 ; ヘルプを参照)とエラーが出たよ。
本に書いてあるようにしたのにどうして?
どうやって解決するの?
017692
NGNGありがとうございました。
サンプルを参考にWaitCommEventの最後の引数をNULLにしたら直りました。
理由は不明ですが・・
0177デフォルトの名無しさん
NGNGCallWindowProcのヘルプ嫁
STRICTを定義するのはデフォルトと思ってたがなあ・・・
0178177
NGNG0179デフォルトの名無しさん
NGNGWin32APIには一行ずつを読むAPIは無いので同じような関数を作るとすれば、
ReadFileで一文字ずつ読み込んでいくのが妥当ですよね?
それとも他に便利なAPIありますか?
0180sage
NGNG0181デフォルトの名無しさん
NGNGありがとうございます。参考にします。
0182デフォルトの名無しさん
NGNGおいおい、ReadFileで1文字ずつ読んだら
めちゃくちゃ時間かかると思うよ。
何のためにストリームがあると思ってんの?
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGやばいね。
>>182
ReadFileってバッファリングしなかったっけ?
0185デフォルトの名無しさん
NGNGやって処理がバッファの終わりまで来たらまた読み込んでじゃ駄目なの?
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG1文字ずつ読むんですか?→バッファに少しずつまとめて読め→メモリマップ使え
の流れ。
0188デフォルトの名無しさん
NGNGで実際メモリマップ最強ってことでええの?
0189デフォルトの名無しさん
NGNGだめ。少なくとも、windowsではローレベルI/O汁
windowsのメモリマップは直接マッピングしてくれずに勝手にキャッシュするから。
0190デフォルトの名無しさん
NGNG「バッファに少しずつまとめて読め」
ということね。FAQ認定
0191デフォルトの名無しさん
NGNGキャッシュされるとなにがまずい?
少なくともNT系ではマップした方が速いのだが。
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNGディスク>キャッシュ>マップされたメモリ となる。
キャッシュの分オーバーヘッドが掛かり、遅くなる。
0194デフォルトの名無しさん
NGNGまともな知識のある奴は一人もいないのかね。
ウィンドウズアプリでは標準出力のハンドルが割り当てられない。
GetFileType(GetStdHandle(STD_OUTPUT_HANDLE))してGetLastError()
を取ると、ERROR_INVAID_HANDLEが返ってくることからも分かる。
ランタイムのstdoutやcoutは存在するため、一見出力できるように思えるが、
バッファがフラッシュされたタイミングでエラーになる。
ただしリダイレクトされている場合は別だ。親プロセスが標準出力に
正しいハンドルを割り当てた状態をリダイレクトと呼ぶのだから、
出力できるのがあたりまえだ。
半日かけて、よく調べた。感動した。
0196151
NGNGさんの言う通りでした。
いつの間に設定がなくなったんでしょう。
XPでは始めは設定されてないのかな。
とにかく無事解決しました。
ありがとうございました。
0197デフォルトの名無しさん
NGNGPAGE_NOCACHEしても?
0198デフォルトの名無しさん
NGNG試してみたらちゃんとハンドルが返ってきましたが?
もちろんリダイレクトなんかしてませんが?
と思ってたらようやく原因が分かった。
エントリをmainにしていて/subsystem:windows /entry:mainCRTStartupで
リンクするとコンソール用のスタートアップが走るせいか標準出力の
ハンドルが準備される。
エントリをWinMainにしたら0(INVALID_HANDLE_VALUEじゃない。MSDNの嘘つき)
が返ってきてGetLastError()もERROR_INVALID_HANDLEになりますた。
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNGことは可能でしょうか?
0202デフォルトの名無しさん
NGNGあとはなんとでも
0203デフォルトの名無しさん
NGNG作りたいんですが検索キーワードを教えて下さい
プラットフォームSDKが英語で嫌になりました
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNGマウスメッセージとキーメッセージをフックしたら?
0206デフォルトの名無しさん
NGNGNC(非クライアント)関係をやれば出来ますか?
0207デフォルトの名無しさん
NGNG私の環境(Win98SE)では0x7FFFまでのようなのですが、
NT系ではどうなんでしょうか?
0208201
NGNGFindWindowでハンドルを得て、CaptionやIconの変更は出来たのですが,,
申し訳ありませんが、もう少しご助言いただけませんでしょうか?
0209デフォルトの名無しさん
NGNGFindWindowで得られるのは親ウィンドウのハンドル。
そのハンドルを元にGetDlgItemやFindWindowExや
GetWindow等を使って、対象のコントロールの
ウィンドウハンドルを取得。
そしてそれをShowWindowかSetWindowPosで非表示にする。
0210名無し@沢村
NGNGサブクラス化したらいいと教わったので、サブクラス化したところ、ちょっとうまういったんです^^;
違う処理についてはちょっとうまういったんですが、ボタンが押されたときも離されたときもじっとして動かない(見た目が)のです。
またボタンの上のフォントも作ったフォントではなく、普通のフォントが表示されるのですが、どうしたらいい?
0211デフォルトの名無しさん
NGNG意味がワカラン
ボタンを持つ主体は自分なのか他人なのか、
フック内でどんな処理を行っているのか
フォントを作った後にどうしているのか
これくらい書け
0212201
NGNG試行錯誤しながらやってみたのですがうまくいきません。
具体的にはMSOffice上のボタンを非表示にしたいのですが、もう少し
ご助言いただけないでしょうか。
現在
HWND thehwnd = FindWindow( "XLMAIN", NULL );
thehwnd = FindWindowEx( thehwnd, NULL, "Button", "ヘルプ(&H)" );
とやっていますが、thehwndにはNULLが入ってしまいます。
0213209
NGNGその前に、そのコントロールは間違いなくウィンドウなの?
Office系では単に親ウィンドウ内にコントロールの絵を
描画しているだけのことが多いよ。
具体的にはExcelのどの部分のボタンですか?
0214201
NGNGプレビュー画面の各ボタンです。
0215デフォルトの名無しさん
NGNGウインドウズプログラムではスレッドごとにカーネルとユーザーモードの
スタックを持っていますが、これはスレッドごとにメモリ上に実際に確保される
スタックの位置が違うと解釈していいのでしょうか?
0216209
NGNGExcel2000で確認してみたところ、
子ウィンドウの子ウィンドウ(孫)だから
HWND thehwnd = FindWindow( "XLMAIN", NULL );
thehwnd = FindWindowEx( thehwnd, NULL, "EXCELC", "" );
thehwnd = FindWindowEx( thehwnd, NULL, "Button", "ヘルプ(&H)" );
のような感じで取得できると思う。
0217デフォルトの名無しさん
NGNG> ウインドウズプログラムではスレッドごとにカーネルとユーザーモードの
> スタックを持っていますが、
こっちの真偽は、よく知らんが...
> これはスレッドごとにメモリ上に実際に確保される
> スタックの位置が違うと解釈していいのでしょうか?
これは、正しい。
0218201
NGNGありがとうございました!期待通りの操作ができました。
わかりやすい説明に確認までしていただきまして感謝しています。
あと、図々しいかと思いますが、もうひとつ。
EXCEL2000で確認とありましたが、それはどのように調べるものな
のでしょうか?
0219209
NGNGExcel2000の印刷プレビューの画面を確認したという意味です。
俺はVC++に付属している SPY++というツールで確認しました。
ただ、EnumChildWindows等を使えばツールがなくても
比較的簡単に調べられます。
0220名無し@沢村
NGNGサブクラス化したらいいと教わったので、サブクラス化したところ、ちょっとうまういったんです^^;
違う処理についてはちょっとうまういったんですが、ボタンが押されたときも離されたときもじっとして動かない(見た目が)のです。
またボタンの上のフォントも作ったフォントではなく、デフォルトのフォントが表示されるのですが、どうしたらいい?
フック内ではボタンが押されたときと、離されたときで違う処理だけ行なっています。
フォントはメインウインドウ内でつくった後なにもしていません。
0221デフォルトの名無しさん
NGNGオモロイ
0222215
NGNGわかったっす。ありがとー
0223名無し@沢村
NGNGコンボボックスをつくったのですよ。
そしてfor(i=0;i<100;i++)
SendMessage(hwnd,CB_ADDSTRING,2,(LPARAM)szbuffer[i]);
としたのですがコンボボックス内に何も字が表示されないのですよ。
本に書いてあるとおりにしたのに、どうしてでしょう?
どう考えてもわかりません…
0224デフォルトの名無しさん
NGNGwParamの2って何?
とりあえずダイアログエディタで、コンボボックスの矢印の部分をクリックして、
出てきた枠を下にぐ――――んと広げてみれ。
0225名無し@沢村
NGNGヌヒよ、ダイアログじゃねーよ、ヌヒよ。
0226名無し@沢村
NGNGコンボボックスをつくるとき高さを充分にとってやればよかったのね…。
でも矢印をクリックしないと字が出てこないのですが…。
つまり一番上のスペースに字が最初から出ていないのですが…。
よくソフトなんかでは一番上のスペースに字もが最初から字が出ていますが、あれはどうするの?
0227デフォルトの名無しさん
NGNGCB_SETCURSEL
0228デフォルトの名無しさん
NGNG具体的には、プリプロセッサーの処理の時点で NT 系だけに存在する関数を
#ifdef で条件コンパイルしたいんです。
関数でなら GetVersionEx() というものを使えばいいらしいんですが、
これだと条件コンパイルできませんし。よろしくお願いします。
0229デフォルトの名無しさん
NGNGもう一度頭の中を整理したほうがいいぞ
0230デフォルトの名無しさん
NGNGコンパイルしている環境のOSと、
動かすべき環境のOSは違うかもしれないんだが。
0231228
NGNGあっ、そういえば……ありがとうございました。
解決できたので吊ってきます。
0232名無し@沢村
NGNGありがとうございました。
CB_SETCURSELとしたところ、初めから字がコンボボックスに出ました!!
それからもうひとつ質問ですが、コンボボックスをつくるとき高さをだんだん低くしてやってみたのですが、
いくら低くしてもこれ以上低くならないというのが何かあるみたいなのです…。
よくソフトなんかでは、もっと低くてカッコいいコンボボックスを見かけるのですが、
よく見かけるソフト並みにコンボボックスの高さを低くするにはどうしたらいいの?
またそんな方法があるの?
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNGconst int id = 123;
bool used[8][256];
for (int mod = 0; mod < 8; mod++){
for (int vk = 0; vk < 256; vk++){
used[mod][vk] = !::RegisterHotKey(hWnd, id, mod, vk);
::UnregisterHotKey(hWnd, id);
}
}
0235デフォルトの名無しさん
NGNGレンダリング結果を自然にするため、
文字のカーニングを行いたいのですが、
フォントから情報を取得する方法が分かりません。
参考になるサイトなど教えて下さい
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNGInternetReadFileで読み込んでいるのですが、読み込み中は
ダイアログの何処をクリックしても反応がありません。
他に良い方法は無いでしょうか・・・
0238名無し@沢村
NGNGCB_SETITEMHEIGHTとすれば良かったのね!!
あと皆様方、コンボボックスにたくさんデータを入れたのですが、
データの一番下までスクロールすると、データの一番下の字のもっと下の部分に空白ができるのですが、この空白のなくす方法はないものでしょうか?
良くソフトなんかでは、データの一番下の字までで終わりになっていてカッコいいので、あんなふうにしたいのですが…?
0239デフォルトの名無しさん
NGNGCBS_NOINTEGRALHEIGHTを外すのだ外すのだ外すのだ
0240デフォルトの名無しさん
NGNGINTERNET_FLAG_ASYNCで開け。
またはスレッドを作る。
0241デフォルトの名無しさん
NGNGasync・・というと非同期ですか。
ちょいとやってみます、thx!
0242名無し@沢村
NGNGそれは{mciSendStringなんですが、{mciSendStringでopenとやってplayとやると、
演奏が終わったあと再びボタンを押しても演奏されないんです。
しかし停止ボタンで演奏途中で停止した場合は、もう一度演奏ボタンを押しても演奏されるんですね…^^;
私はこの事実に注目して演奏がひとりでに終わったあと再びボタンを押しても演奏されるようにする大発見をしたんです!!
それは皆様方、まず、{mciSendStringでcloseとやったあとopenとやってplayとやるといいんですよ!!
何故なら停止ボタンはmciSendStringのcloseから成り立っているからなんですねっ!
ちょっと邪道のような気もしますが何も問題は発生しないのでいいと思うんですが…。
皆様方はどう思われます?
いつも教わってばかりなので、たまには私が教えたのですが、いかがでしたでしょうか?
0243デフォルトの名無しさん
NGNGここに書き散らすよりも、ホームページにTipsとして書いたほうが
後の人のためだと思う。
0244デフォルトの名無しさん
NGNGいや、どう見てもネタだろ・・・
0245デフォルトの名無しさん
NGNGうるせえ黙れオナニーならホムペでやってろ
とやんわりと言ってるのだと思われ
0246デフォルトの名無しさん
NGNG一つだけ言わせてもらえれば、馴れ合いたいだけなら
どっか他所でやってくれ。
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG親ウィンドウを設定したあと子ウィンドウが閉じられるまで
親ウィンドウにフォーカスを移さなくするにはどうすればいいんですか
EnableWindow()ではなんか違うよう気がするんですが…
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNGそのまま一生悩んでろ。
0252デフォルトの名無しさん
NGNGDialogBox()使ってるの?
Win95以降MFC使ってるからDialogBox()の動作よくしらへんけど
0253デフォルトの名無しさん
NGNGいいと思うんだがダメかね。
0254デフォルトの名無しさん
NGNGとしたときのメッセージボックスと
hWndParentの関係のようなものにしたいんですが
なんとかいっぱつでできるような方法はないでしょうか
0255デフォルトの名無しさん
NGNG自前でって書いてるからアプリケーションモーダルの
ふるまいをエミュレートしたいって解釈したんだけど
>>254
違うんだったらDialogBox()
つーか>>252は無視か? とっとと首くくって氏ね
0256デフォルトの名無しさん
NGNG親をEnableWindow(FALSE)してるが。
つか、何がどう違うんだよ。釣れた、とかいうのは勘弁な。
0257252
NGNG>自前でって書いてるからアプリケーションモーダルの
>ふるまいをエミュレートしたいって解釈したんだけど
書き込んでから248を読み直してきがついた。249が正解とオモタ
でも、どうやってダイアログを表示してるか書いてないんで
一応252の書き込みしててもいいかとオモタ
0258デフォルトの名無しさん
NGNG領域が画面内に収まるように位置が自動調整されるじゃないですか。
これを普通のウィンドウでやりたいんですが、位置を計算してくれる APIなど
ありますか?やっぱ、自分でしこしこ計算するしかないんですかね?
■ このスレッドは過去ログ倉庫に格納されています