- 1 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 23:23:58 ]
- スレ立てるまでもない、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 Win32API質問箱 Build68 pc11.2ch.net/test/read.cgi/tech/1215348804/
- 552 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 00:36:18 ]
- GetProcAddressで直接呼んでるのかもしれない。
GetProcAddressもフックしてみては。
- 553 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 00:44:36 ]
- ヒント: ブラウザの実装コードは何処にある?
- 554 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 01:01:52 ]
- 正解:地球
- 555 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 01:27:46 ]
- ありがとうございます。
>>552 GetProcAddressもフックして試してみます。 >>553 実装コード自体はiexplore.exeはもっていないんですね。 もう少し調べてみようと思います。
- 556 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 01:55:53 ]
- フックならジェイソン尾妻に聞くといいよ
- 557 名前:544 mailto:sage [2008/08/27(水) 14:29:36 ]
- <<545,<<546,<<547
ありがとうございます。 ウィンドウを生成した後にこのコードを載せたら そのタイミングでは表示できるのに…… すぐに消えるのはなぜでしょうか。 できればもう少し詳しくお願いします。
- 558 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 14:57:54 ]
- >>557
WM_CREATE の時点ではまだウィンドウが非表示だから 何描いても無駄。
- 559 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 15:00:14 ]
- WM_CREATEの先頭で無理やりShowWindowしたら出たw
- 560 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 15:14:13 ]
- 普通は WM_PAINT だろ
- 561 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 15:55:23 ]
- >>559
そして他のウィンドウを重ねると文字が消えると
- 562 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:07:24 ]
- >>561
それが、Vistaだとなかなか消えないんだよねえ。 リサイズして描画範囲より小さくしてやるとか、最小ボタン押して戻すとかしないと消せなかった・・・
- 563 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:12:46 ]
- そりゃ、DWI動いてるからな。
- 564 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:22:23 ]
- 今すぐAeroGlassをオフにして試せ
- 565 名前:544 mailto:sage [2008/08/27(水) 18:15:33 ]
- 答えてくれた方々ありがとうございます。
このエラーで教えられながらいろいろ調べて こんなに勉強になるとは思いませんでした。 もう一つ気になるエラーがあるのですが、 WM_PAINTの所で hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 20, 20, (LPCTSTR)szStr, (int)strlen(szStr)); EndPaint(hWnd, &ps); hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 90, 90, (LPCTSTR)szStr, (int)strlen(szStr)); EndPaint(hWnd, &ps); とやると初めのTextしか表示されません。これはなぜなのでしょう。
- 566 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 18:17:48 ]
- >>565
なんでBeginPaint と EndPaint は1回でおk
- 567 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 18:18:55 ]
- EndPaintで無効領域が全部リセットされてるから。
デバイスコンテキストは無効領域の部分しか更新しない。
- 568 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 18:20:21 ]
- >>565
BeginPaintとEndPaintは最初と最後に置くだけ。 一回のペアで無効領域(書き換えの必要な範囲)がなくなるから 2回目呼んでも書き換え範囲外になって何もかかない。
- 569 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 19:27:07 ]
- invalidateRectで無効にすれば良い訳ですね?
- 570 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 19:36:52 ]
- >>563
DWIって何ですか?
- 571 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 19:50:06 ]
- ggrks
- 572 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 20:02:11 ]
- DWM、、、ね。ミスったわ。
- 573 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 20:51:18 ]
- >>569
そして、またWM_PAINTが飛んできて無限ループするのですね。わかります。
- 574 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 01:30:33 ]
- こういう通過儀礼って必要だと思います。
自分で考える力を養うためにしばらくそっとしてあげて!
- 575 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 01:56:18 ]
- 一方ロシアは
- 576 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 03:00:52 ]
- WPFを使った
- 577 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 21:13:25 ]
- つまり
- 578 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 23:16:23 ]
- \ /_ / ヽ / } レ,' / ̄ ̄ ̄ ̄\
|`l`ヽ /ヽ/ <´`ヽ u ∨ u i レ' / └l> ̄ !i´-) |\ `、 ヽ), />/ / 地 ほ こ !´ヽ、 ヽ ( _ U !、 ヽ。ヽ/,レ,。7´/-┬―┬―┬./ 獄 ん れ _|_/;:;:;7ヽ-ヽ、 '') ""'''`` ‐'"='-'" / ! ! / だ. と か | |;:;:;:{ U u ̄|| u u ,..、_ -> /`i ! ! \ :. う ら | |;:;:;:;i\ iヽ、 i {++-`7, /| i ! ! <_ の が __i ヽ;:;:;ヽ `、 i ヽ、  ̄ ̄/ =、_i_ ! ! / ヽ ヽ;:;:;:\ `ヽ、i /,ゝ_/| i  ̄ヽヽ ! ! ,, -'\ ヽ、\;:;:;:;:`ー、`ー'´ ̄/;:;ノ ノ ヽ| / ,、-''´ \/ ̄ ̄ ̄ ̄  ̄ ̄ ̄ Y´/;:;:;\
- 579 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 00:38:27 ]
- SetConsoleTextAttribute関数でRGBを任意指定をしたいんですけど、これってできないんですか?
- 580 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 00:43:58 ]
- >>579
無理です
- 581 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 01:49:35 ]
- 頑張れば可能じゃないの?
例えばの話だが、 赤にする→文字を書く→緑にする→同じ位置に文字を書く を目にも止まらぬ速さで繰り返せば理論上は黄色に見えるだろ。 ただポケモンショックでぶっ倒れても俺は知らん。
- 582 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:00:30 ]
- 自分のstartupinfoを書き換えるにはどうすればいい?
- 583 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:02:30 ]
- 自分自身の書き換えではないけど…
差し替えた STARTUPINFO で 自アプリを CreateProcess して、自分自身は死ぬ とか?
- 584 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:06:47 ]
- やだ死にたくない
- 585 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:55:23 ]
- >>582
SetStartupInfo
- 586 名前:デフォルトの名無しさん [2008/08/29(金) 17:58:38 ]
- しにたくないよう
- 587 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 18:08:44 ]
- マジレスするとGetStartupInfoWはRTL_USER_PROCESS_PARAMETERSの内容を写してるだけ
RTL_USER_PROCESS_PARAMETERS* p = (RTL_USER_PROCESS_PARAMETERS*)0x20000; でアドレスが得られるから後は煮るなり焼くなり好きにしろ
- 588 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 18:21:31 ]
- ttp://undocumented.ntinternals.net/UserMode/Structures/RTL_USER_PROCESS_PARAMETERS.html
>>RTL_USER_PROCESS_PARAMETERS is located at address 0x20000 (for all processes created by call WIN32 API CreateProcess). 今はどのOSでもそうなのかもしれないが、将来はどうなるかわからん まあ頑張れ
- 589 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 18:44:01 ]
- そんなの気にしなくていいよ
- 590 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:24:55 ]
- 何という糞プログラムw
- 591 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 19:49:04 ]
- >>587-588 ありがと!
- 592 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 20:17:29 ]
- STARTUPINFOを書き換えるなんてのがそもそも糞プログラムなんだから
方法がOS依存しようがそんな事どうでもいいだろ
- 593 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 21:40:15 ]
- 個人的には、GetCommandLine()の書き換えも同じくらい糞だと思うが、
argvの書き換えが認められているから、こっちは許容されている感じがする……。
- 594 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:19:50 ]
- リストボックスの文字列の高さを決めたいんだけど、
TEXTMETRICのtmHeightじゃ高すぎて(上下の文字列と空間開きすぎ) LOGFONTのlfHeightじゃ低すぎるんだけど(英語OSだとgとかpとかの下が切れた) どうやったらいいのかな?
- 595 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:31:50 ]
- WNDCLASSとWNDCLASSEXの違いってなんですか?
- 596 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 22:56:11 ]
- 拡張版か否か
- 597 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:05:40 ]
- >>581
そんなことでポケモンショックになるならDLPプロジェクタが発売禁止になってるて。
- 598 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:09:12 ]
- >>581
やってみたら?
- 599 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:09:31 ]
- >>594
TEXTMETRIC.tmHeightが開きすぎるように感じるのは、 むしろ日本語フォントが詰めて描画される傾向にあるから。 メイリオの話なら、それはフォント自体の仕様でそれが正常。 LOGFONT.lfHeightが低すぎるのは、 高さを決めたときのフォントと違うフォントで描画している。 とエスパーレスしてみる。
- 600 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 23:29:32 ]
- CreateWindowで作ったウインドウの背景色を後から変更するにはどうしたら良い?
- 601 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:05:33 ]
- >>600
CreateWindowで作ったウインドウの背景色を後から変更したら良い
- 602 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:25:41 ]
- >>600
h ttp://winofsql.jp/VA003334/CprogSTD020726201337.htm など
- 603 名前:600 mailto:sage [2008/08/30(土) 00:27:55 ]
- >>601
なるほど。 ありがとうございます。
- 604 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:29:12 ]
- ある拡張子のファイルを開くプログラムに自作のソフトを設定して複数のファイルを同時に開いた時
コマンドで複数の引数を渡されるのではなく、開いた数だけプログラムが起動してしまうんだけど これを何とか一つのプログラムで開けるようにできないですか?
- 605 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:32:28 ]
- >>604
出来ます。
- 606 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:34:03 ]
- >>604
mutex でググってみる?
- 607 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:34:12 ]
- まあ単色塗りつぶしにPatBltとか使うのは無能なんだが。
- 608 名前:600 mailto:sage [2008/08/30(土) 00:36:53 ]
- >>603は私じゃありません。
- 609 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 00:39:40 ]
- >>600
SetClassLong
- 610 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 01:40:31 ]
- 素直にFillRect使っとけ、って感じはするね。
ExtTextOut使えとは流石に言わないけど。
- 611 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 02:09:48 ]
- >>599
日本語OSだとMS UI Gothicで 外語OSだとMS Shell Dlgとかいうフォントがきてる 日本語OSだとLogFont.lfHeightはちょうどいい感じ 外語OSのときに狭い。tmHeightは広い。 lfHeightt+2か3くらいで出せるとよさげ。 tmExternalLeadingとかいうのが2できてるけど、 日本語だろうと外語だろうと関係なくきてるから根拠がわからん。 tmInternalは常に0だし(´・ω・‘) 情報が良くわかってなくてスマンコ
- 612 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 05:19:24 ]
- >>610
昔はExtTextOut使った方が速かったんだけどね
- 613 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 09:03:08 ]
- >>602>>609>>610
どーも。SetClassLongを使ったら無事できました。
- 614 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 10:03:19 ]
- リッチエディットについて質問させて下さい。
リッチエディットにアイコンまたはビットマップをテキストと混在させて 表示することはできるのでしょうか? また、そのアイコンやビットマップをクリックしたことを検出することは できるのでしょうか。 もし可能でしたら、参考になるサイトや資料へのポインタ等をお教えいただければ ありがたいです。
- 615 名前:604 mailto:sage [2008/08/30(土) 12:11:09 ]
- 一応できたので報告。
mutexで二重起動を防止しつつ既に起動しているなら FindWindowでそのウィンドウを見つけてCOPYDATAメッセージでコマンド引数を渡し 読み込み、後起動のウィンドウを閉じる。 となりました。ありがとうございました。
- 616 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 12:58:30 ]
- // ウィンドウの作成
if(isFullScreen) { // フルスクリーン int sw; int sh; // 画面全体の幅と高さを取得 sw = GetSystemMetrics(SM_CXSCREEN); sh = GetSystemMetrics(SM_CYSCREEN); 画面全体の高さを幅を取得とありますが 今使っているディスプレイのサイズを取得するってことですか?
- 617 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 13:04:24 ]
- プライマリモニタ
- 618 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 13:07:34 ]
- >>616
シングルモニタの場合には解像度が得られる マルチモニタ環境の時には思ってるものと違うものが返ってくるかもしれない
- 619 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 13:09:44 ]
- ありがとうございます
- 620 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 13:34:49 ]
- >>614
リッチエディットにテキストとビットマップを混在させるのは可能。 ttp://www.codeguru.com/cpp/controls/richedit/article.php/c5383/ この辺が参考になるかと。
- 621 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 16:08:24 ]
- パフォーマンスカウンタから自分自身のCPU使用率を得たいのですが、
自分自身を表すインデックスを取得するのにうまい方法は無いのでしょうか。 列挙するしか無いんですかね。
- 622 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 17:03:51 ]
- >>621
WMI
- 623 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 17:26:42 ]
- あー、自分自身ってのはプロセスのことです。説明不足があったらすみません。
自分自身のプロセスのCPU使用率を取得したい、ということです。 >>622 すみません、ぐぐったのですが、具体的な方法が分かりませんでした、、、
- 624 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 20:34:18 ]
- もっともっとぐぐるんだ
|

|