- 1 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 22:20:46 ]
- スレ立てるまでもない、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質問箱 Build66 pc11.2ch.net/test/read.cgi/tech/1210775622/
- 39 名前:38 mailto:sage [2008/06/09(月) 22:19:08 ]
- ウィンドウを最小化時と元に戻すときにアニメーションさせようと
上記のように元に戻すときのアニメーション書いたんですがうまくいきません。 原因が分かる方教えてください
- 40 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:40:42 ]
- オードーナロー
- 41 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 22:48:43 ]
- >>39
うまくいかない、じゃなくて具体的な現象を書けよ。 原因究明の重要な情報なんだからさ。
- 42 名前:38 mailto:sage [2008/06/09(月) 22:59:19 ]
- >>41
説明足がたらず、すみません。 最小化時はウィンドウのアニメーションが実行されるんですが、 元に戻すときにAnimateWindowが失敗してアニメーションが実行されないんです。 GetLastErrorでエラーをチェックすると正常終了のIDがセットされているので原因がよく分からないのです。 ちなみにCONSOLEMSGはOutputDebugStringのマクロです。
- 43 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:00:57 ]
- LVS_REPORTなリストビューで、カラムの文字列の左右のマージンを知りたいのですが、
どのように計算すればいいのでしょうか?
- 44 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:12:39 ]
- >>43
以下の関数を使う。 int ListView_GetColumnMargin(HWND hwnd) { return 4; } ListView_GetColumnMargin はおおよそのマージンを返します。
- 45 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:45:33 ]
- >>44
これはひどい
- 46 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:49:56 ]
- ワロタ
- 47 名前:44 mailto:sage [2008/06/10(火) 00:18:38 ]
- すまん間違えた。
int ListView_GetColumnMargin(HWND hwnd) { return 6; } >>45-46 一応マジレスなんだが。 正確には GetSystemMetrics(SM_CXEDGE) * 3 らしいが。
- 48 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:26:55 ]
- こいよ、ベネット
- 49 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:32:17 ]
- こいよ、ベネット
- 50 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:44:55 ]
- >>42
AW_ACTIVATEは非表示状態から表示させるもので、Restoreさせるものではないから。
- 51 名前:38 mailto:sage [2008/06/10(火) 01:37:26 ]
- >>50
なるほど! ということは、Restoreさせた後にウィンドウのアニメーションをさせたい場合は、 独自メッセージを飛ばす必要があるのでしょうか? それともRestoreされたことを通知するメッセージがあるのでしょうか? WM_ACTIVEをキャッチすることも考えたんですが、 Restoreされたときだけを抜き出す方法が思いつかなかったのでアドバイスお願いします。 また、アニメーションさせるとき1度SW_HIDEで非表示にしてAW_ACTIVATEで表示させるという流れでいいのでしょうか
- 52 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 03:43:33 ]
- 少しは自分で調べろ
- 53 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 06:09:59 ]
- >>47
間違っています。 以上。 はい次の方。
- 54 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 08:00:26 ]
- >>53
間違ってないよ 知らないならレスしないでね
- 55 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 08:03:19 ]
- Win32APIによるファイルの入出力を実装しています.
入出力自体はできた(と思う)のですが,最後の CloseHandle(hFile); の戻り値を HRESULT result としてデバッガで 追いかけてみると, 正常終了したはずなのに S_FALSE が返ってきます. 下記のサイトのサンプルでも試してみたのですが,同じでした. 同様の問題をご存知の方がいらっしゃいましたら教えて下さい. wisdom.sakura.ne.jp/system/winapi/win32/win113.html
- 56 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 08:05:40 ]
- CloseHandleの戻り値の型はBOOL。
0が偽(失敗)で、それ以外の値は真(成功)。 ちなみにS_FALSEの値ははたしか1のはず。
- 57 名前:55 mailto:sage [2008/06/10(火) 08:40:38 ]
- >> 56
すみません. 調べてみたらその通りでした. CloseHandle() で F1 押して CBlobCache::CloseHandle の説明を見てました. それにしても, 戻り値の 1, 0, -1 の区別は統一性が無いですね. (自分が知らないだけで良い覚え方とかあるのかな.) 素早い返信ありがとうございました. さすが2ch.
- 58 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 09:08:46 ]
- Win32APIは統一性の無さがウリ
- 59 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 09:58:59 ]
- HRESULTはCOMまわり
- 60 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:05:17 ]
- >>56
それ、せめてMSDNには "戻り値はTRUE, FALSE" って書いてほしい 戻り値がnonzeroとか書かれると、if文で戻り値を判定するときにそういう条件文を書くべきなのか迷う
- 61 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:13:43 ]
- いや、最初からC/C++のifその他の判定は0か非0かだろ
- 62 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:24:00 ]
- if (Hoge() == TRUE)
なんてやってる人のコードは信用できないよな
- 63 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:40:28 ]
- BOOLでTRUE/FALSE以外を返す関数の方が信用できない
どういう設計なんだよ
- 64 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:48:10 ]
- おっとGetMessageの悪口はそこまでだ
- 65 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 10:54:53 ]
- 所詮はDWORDさ。
- 66 名前:60 mailto:sage [2008/06/10(火) 11:28:06 ]
- >>62
そういうコードを書きたくないから言ってるんだよ… BOOLを戻すと宣言してあるなら、それ以上の判定は必要ないのはわかるよ。実際書かないし。 nonzero(数値)を戻すなら、せめて "ブール値の真として..." くらい書いてくれないかなってこと CのAPIである以上、数値のnonzeroとブール値の真は同じだからどっちが書いてあっても気にするなってことなのかな
- 67 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 11:44:39 ]
- Cの特徴だしな
- 68 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 11:57:25 ]
- >CのAPIである以上、数値のnonzeroとブール値の真は同じだからどっちが書いてあっても気にするなってことなのかな
間違いだらけだ。
- 69 名前:60 mailto:sage [2008/06/10(火) 12:13:01 ]
- >>68
マジか 規格の少なくともifやwhileの項にはブール値なんて存在しないとかそういうこと?
- 70 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 12:45:31 ]
- C++ならboolがあるが、C99でないCにブール値なんて概念自体存在してるのか?
- 71 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 13:00:18 ]
- >>70
ブール値の概念は存在しているが規格には書かれていない ってところかな
- 72 名前:デフォルトの名無しさん [2008/06/10(火) 15:45:32 ]
- 初歩的な質問なのですが、CreateWindowExでボタンを作りました。
そのボタンにアクセラレータ?(SHIFT+'A')をつけたいのですが、 CreateWindowExで作成したボタンにアクセラレータをつけるにはどうすればいいのでしょうか? 環境はVC+SDKです。よろしくお願いします
- 73 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 15:49:07 ]
- >>72
CreateAcceleratorTable
- 74 名前:72 mailto:sage [2008/06/10(火) 17:07:40 ]
- >>73
レスありがとうございます。 CreateAcceleratorTableで作った場合、 ボタンアクションがありません ><。
- 75 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:16:00 ]
- BM_CLICKでも投げとけ
- 76 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:18:48 ]
- >>74
まさかとは思うが、「ボタン(A)」(Alt+A)のことじゃないだろうな? こっちはボタンのキャプションを「ボタン(&A)」にすれば勝手に機能するぞ。
- 77 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:23:27 ]
- アクセラレータは発動したときにあくまでWM_COMMANDを発行するものであって、
ボタンのクリックをシミュレートするものではない。
- 78 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:34:29 ]
- >>66
Win95で適当に試した結果 EnableWindow(hwnd, TRUE) で成功するとTRUEではなく 8 が返ってくる。 EnableWindow(hwnd, 0x10000) は失敗する。(下位16ビットしか見ていないらしい) GetWindowRect(hwnd, &rect) で成功するとTRUEではなく 500 〜 599 が返ってくる。 ShowWindow(hwnd, SW_SHOW) で直前に表示されているとTRUEではなく 16 が返ってくる。 こういう謎な仕様は9x系で終わっていてほしい。 とりあえず上のAPIはNTでは大丈夫っぽいが。
- 79 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:35:43 ]
- 76が正解の予感
- 80 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:37:41 ]
- TranslateAcceleratorしてないだけだろ
- 81 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:45:39 ]
- >>78
APIのリファレンスに、引数はTRUE/FALSEを指定するとある。 zero/nonzeroとは書いてない。 戻り値は、zero/nonzeroと書いてある。 TRUE/FALSEを返すなんて書いてない。 説明は正しい。
- 82 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:54:05 ]
- >>81
>>78は、仕様がおかしいって言いたいんだろ?
- 83 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:58:44 ]
- >>81
説明の正しさ、じゃなくてBOOLなのにTRUE/FALSE以外を返すなということ。 GetMessageのように意味があってTRUE/FALSE以外を返すわけでも無さそうだし。
- 84 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:27:39 ]
- Win16のときの、1バイトでも節約、て状況のせいなのかもな。
そして互換性のためにうっかり変えられない、と。
- 85 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:30:17 ]
- 8や500を返すのが互換性ってのもおかしな話だなぁ
- 86 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:33:22 ]
- if(GetOpenFileName(&ofn) == IDOK) { 〜 } とか書いてたら正常動作していたので間違いに気付かなかった事ならある
- 87 名前:72 mailto:sage [2008/06/10(火) 18:37:18 ]
- >>75-77 >>79-80
レスありがとうございます >>77 が僕が今詰まってる問題に一番近いっぽいです ><。 アクセラレータは動いてるのですが、ボタンシミュレートが問題です。
- 88 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:38:51 ]
- だからSendMessage(hButton,BM_CLICK,0,0)でいいだろうが
- 89 名前:72 mailto:sage [2008/06/10(火) 18:52:00 ]
- >>88
おおっ ボタンシミュレートできました >>88さん、どうもです。感謝ですー ><。
- 90 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 19:48:36 ]
- 人の話を聞かない性格の典型的パターンだな
- 91 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:50:18 ]
- >>83
実装効率を考えると真の際 TRUE 以外の値を返した方がいい場合もある。 TRUE しか返さない、としてしまうと、その効率のいい実装が取れなくなってしまう。 例えば is 系関数の戻り値を戻り値にしたい場合とか。 is 系関数はメモリ効率のため全ての関数で1つのテーブルを共有し、 ビット演算を使ってそれぞれの関数の戻り値を決めるよう実装されている場合がある。 int isalpha(int letter) { return table[letter] & 1; } int isdigit(int letter) { return table[letter] & 2; } int isalnum(int letter) { return table[letter] & 3; } みたいな感じで。 こういう関数を戻り値に直接指定したい場合とか、0/1 にならないことがある。 そして、果たして BOOL の戻り値を作成する際に使った関数が 全て真偽を 0/1 で返すと確かめることはできるだろうか? もしかしたら急に仕様が変えられるかもしれない。 それを考えて常に isalpha(ch) ? TRUE : FALSE のように書く事はできるかもしれないけど、 無駄も多いし書き忘れるミスを犯す事もあるだろう。 結局、bool 型のように true/false の2値性を保証する型で typedef されていない以上、 BOOL は 0/1 の2値性を保証しない方が安全ということになる。 TRUE や FALSE は真偽値を与える箇所で 条件式を書く事無くダイレクトに真か偽かを指定するために使う物であって、 比較に使う物ではない。 そもそも真偽値をさらに比較するという発想自体が 二度手間の無駄な発想としか言いようが無い。
- 92 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 23:53:36 ]
- C言語なんだから0/1じゃなくて
0/非0で考えろ
- 93 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:28:41 ]
- C言語で考えるとむしろ0/1じゃね?
比較とかの評価結果は0/1で返すと決まってるし。 どちらかというと、アセンブラレベルの話だな。 BOOLを0/1へ変換するなら !!value で一応はできるな。 見た目が宜しくないのでお勧めはしないけど。
- 94 名前:デフォルトの名無しさん [2008/06/11(水) 00:31:39 ]
- HTMLを解析したいのでIHTMLDocument2を使おうと思っています
CComPtr<IHTMLDocument2> aDoc; aDoc.CoCreateinstance(CLSID_HTMLDOCUMENT); aDoc->put_URL(CComBSTR("~")); //URLの読み込み(のつもり) aDoc->get_images() この put_URL を使うとブラウザで引数のURLを開いてしまい、また、get_imagesで取得したイメージコレクションのサイズが0になっています。 まず、「ブラウザを開かないでHTMLを解析したい」のと、「get_images で取得できていない」理由がよく解りません。 コマンドラインから使うツールのつもりなのでCUIの方がうれしいのですが、ダイアログかなにかで表示させる必要があるのでしょうか? #イメージとしてはURLを引数で渡すとそのページのIMG src="***" を抽出するプログラムです。
- 95 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:38:26 ]
- >>93
条件式は 0/1 を返すが、 if 文や while 文などの中身は 0/非0 で判定するから C で考えるなら 0/非0 だな。
- 96 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:50:47 ]
- >比較とかの評価結果は0/1で返すと決まってるし。
処理系依存
- 97 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 00:52:54 ]
- ↑馬鹿
- 98 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 02:58:43 ]
- はあぁ?
- 99 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 03:00:22 ]
- 妄想は日記の中でしてね。
- 100 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 08:44:32 ]
- 馬鹿かお前
Win32なんて基本的に妄想が中心だろ MSDNに載ってないような事をしたければ妄想するしかないし
- 101 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 08:45:32 ]
- ↑馬鹿
- 102 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 09:56:18 ]
- ↑阿呆
- 103 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:03:46 ]
- ↑馬鹿
- 104 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:07:05 ]
- ↑阿呆
- 105 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:08:20 ]
- ↑馬鹿
- 106 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:08:55 ]
- ↑ば、馬鹿じゃないのっ
- 107 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:10:01 ]
- ↑阿呆
- 108 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:21:25 ]
- ↑あ、阿呆じゃないのっ
- 109 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:25:26 ]
- ↑馬鹿
- 110 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:26:12 ]
- ↑ば、馬鹿じゃないのっ
- 111 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:33:12 ]
- 訳:かまってほしいな
- 112 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:36:37 ]
- かまってほしくない人はレスしないでください
- 113 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:39:16 ]
- >>94
IHTMLDocument2 を使うことが絶対条件なの?
- 114 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 12:32:55 ]
- 必要条件
- 115 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 12:36:22 ]
- BOOLを返すAP(Iは必ず
bool Successed = Hoge(...) != 0; としてる。
- 116 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 12:40:17 ]
- だから?
- 117 名前:60 mailto:sage [2008/06/11(水) 12:57:43 ]
- ちょっとした愚痴のつもりだったんだが…
いまさらMSDN書き替えられても困るし で、結局>>68の指摘してる間違いってなんなんだ? すごく気になるんだけど
- 118 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:06:50 ]
- 単なるかまって厨でFA
- 119 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:13:40 ]
- www.open-std.org/jtc1/sc22/wg14/www/standards.html
- 120 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:21:09 ]
- >>68の指摘は分からんが、CのAPIではないなw
API自体は言語関係ないからね。 そう考えると、Cの文法や流儀を元に議論するのはナンセンスかもしれん。
- 121 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:31:32 ]
- 馬鹿だなあ
文字列がナルターミネートな時点でC前提だろ
- 122 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:35:03 ]
- ↑馬鹿
- 123 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:54:48 ]
- ↑阿呆
- 124 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:58:36 ]
- 呼び出し規約そのものは、cdeclとpascalの中間だけど
まあC用だな、他の言語はそれにあわせてるだけ。
- 125 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:05:18 ]
- そもそもwin32API自体がCで書かれているのだからC前提で当然
そんな事もわからない素人が増えちゃったんだね・・・
- 126 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:17:41 ]
- ↑馬鹿
- 127 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:19:19 ]
- ↑阿呆
- 128 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:20:51 ]
- ↑馬鹿
- 129 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:21:36 ]
- 馬鹿も阿呆も漏れだけでいい
- 130 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:29:14 ]
- ↓馬鹿
- 131 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:29:52 ]
- え?おれも?
- 132 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:41:59 ]
- まとめ:かまってほしいな
- 133 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 15:53:55 ]
- (・ω・` )ヾ(・ω・* )ネェネェ カマッテヨ
- 134 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 16:34:53 ]
- 「↑馬鹿」と「↑阿呆」はそれぞれ同一人物による書き込み
つまり荒らしは2名
- 135 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 16:51:30 ]
- ↑はずれ
- 136 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:02:54 ]
- 1人だったのか
- 137 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:06:37 ]
- ↑はずれ
- 138 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:15:14 ]
- 答え:多重人格(一人)
- 139 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:23:45 ]
- ↑はずれ
- 140 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:43:15 ]
- 現在の稼動状況
人格1: >>135 人格2: >>137 人格3: >>139 人格4〜16: Idle 最大16人格まで拡張可能 それぞれの人格は並列動作 (例えば人格1から人格2〜16のレスを見ても同一人物であるという認識は本人には無い) 記憶装置(脳)は16人格で共有されるため、正常な人間に比べて人格それぞれの知識は16分の1
- 141 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:54:06 ]
- >>140みたいな事を平気で書き込めちゃう奴って本気で近づきたくない
- 142 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:57:37 ]
- ↑馬鹿
- 143 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:01:29 ]
- ↑阿呆
- 144 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:06:05 ]
- ビリーミリガンよりは少ないな
- 145 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:20:27 ]
- かまってほしいな
- 146 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:43:19 ]
- (・ω・` )ヾ(・ω・* )ネェネェ カマッテヨ
- 147 名前:94 [2008/06/11(水) 18:45:28 ]
- >>113
> >>94 > IHTMLDocument2 を使うことが絶対条件なの? いえ、HTMLの解析が簡単にできればIHTMLDocument2でなくても問題ないです。 MSDNの中を探してたらそれらしいメソッドがIHTMLDocument2に見つかったので使っている所です。 ブラウザを開かないのはIHTMLDocument4::CreateDocumentFromURLを使えばいいのかなぁ
- 148 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 00:36:01 ]
- >>147
もし、htmlソースが文字列として得られるのなら、 ・空のドキュメントにhtmlをwriteしてDOMを作ったことはあるなあ。 ・普通に文字列処理で何とかするのも手。 ・TidyとかでXHTMLにしてXMLパーサに読ませるとか。 URLがあるんなら、そういう時のためのいいやり方が別にあるような気はするけど。 あと、こっちのスレの方が詳しいかもしれない。 IEコンポーネントを使い倒すスレ Ver.2 pc11.2ch.net/test/read.cgi/tech/1145189322/
- 149 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:24:06 ]
- >>147
用途が分からないから判断が難しいけど、 IHTMLDocument2だとブラウザは開くねぇ。隠したとしても音が残る。 XMLパーサーだと規約に沿ってないとエラーになる。 簡単なのはWinInetを使って、正規表現を使って解析することかなぁ。
- 150 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 03:14:42 ]
- >>149
APIフックして音を消せば?ってのがこのスレ的な回答かな
- 151 名前:デフォルトの名無しさん [2008/06/12(木) 07:03:47 ]
- 全角半角キーをスイッチのように使いたいのですが
押しても全角モードに切り替わらない良い方法はありませんか
- 152 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 12:21:13 ]
- フック
- 153 名前:デフォルトの名無しさん [2008/06/12(木) 14:41:05 ]
- >>152
詳しく
- 154 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:53:39 ]
- クック
- 155 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 15:06:35 ]
- ドゥ
- 156 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 15:16:20 ]
- 訳:かまってほしいな
- 157 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 15:20:03 ]
- 訳:ググレ
- 158 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 15:33:13 ]
- いちごみるくうめぇ
- 159 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 15:45:14 ]
- ヾ(@⌒¬⌒@)ノ ウマヒィ
- 160 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:49:07 ]
- 社会から自分が必要とされていないのではないかと思っているから荒らす
少しでも反応があれば自分は必要とされているんだと勝手に勘違いして納得する それがかまってちゃん こうして俺たちがかまってあげているうちは街中で無差別殺人なんてしないだろうから 人助けの一つだと考えて適当に相手してあげておいた方がいいかもな
- 161 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:54:19 ]
- >>160
こうですか!わかりません><
- 162 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:55:35 ]
- 探すのが面倒だから荒らすんですね(>ω<
- 163 名前:デフォルトの名無しさん [2008/06/12(木) 18:52:04 ]
- フックについてググってもvbやらdelphiやらc++やらapiやら混在してる割に
ヒット数が意外と少ないんですがとりあえず SetWindowsHookEx WH_KEYBOARD WM_INITDIALOG あたりを使う方法でいいのでしょうか?
- 164 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 18:53:22 ]
- 最後は関係ない希ガス
- 165 名前:デフォルトの名無しさん [2008/06/12(木) 19:20:16 ]
- >>164
どうもです。そのものずばりの情報はなかなか見つかりませんね。 範囲があまりにも広いのですが絞るとほとんどhitせず・・・もう少し調べてみます
- 166 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:02:18 ]
- 動的に追加したリストボックスをDestroyWindow()する時に予めLB_RESETCONTENTする必要はありますか?
- 167 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:14:24 ]
- >>166
deleteする時に予めデストラクタを呼んでおく必要はありますか? って聞いてるようなモンだぞ
- 168 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:26:55 ]
- >>167
DestroyWindow()するだけで良いのですね。 ありがとうございました。
- 169 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:52:18 ]
- スレ違いのような気もするけど、気にせず教えてください。
kbdacc とか 秀Caps のようなキーリピートの高速化ってどうやって実現してるんでしょうか? SystemParametersInfo で設定できる値よりずっと速くできるようですが。
- 170 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:15:27 ]
- >>165
自プロセスへのフックは簡単だと思うけど‥‥他プロセスやグローバルフックになると共有メモリとかの処理が必要になってくるけど
- 171 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:17:16 ]
- >>169
気にせず教えてください…?頭わいてんのか?
- 172 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:29:33 ]
- お忙しい中すみませんが、気にせず教えてください。
- 173 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:33:16 ]
- 教えを乞う言葉じゃない気がしますが、気にせず教えてください。
- 174 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:54:35 ]
- >>169
ずっと速くできるようですが気にせず設定してください
- 175 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:12:31 ]
- 流れがおかしいようですが気にせず質問してください
- 176 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:15:39 ]
- ツールバーの表示位置を変えたいのですが、どのようにすればいいですか?
- 177 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:21:10 ]
- movewindow
- 178 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:14:46 ]
- >>177
レスありがとうございます。 後一つわからないことがありまして、 ツールバーの高さを変えるにはどうすればいいですか?
- 179 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:15:13 ]
- >>177
APIの大文字小文字は区別されます。嘘を書くのをやめましょう。
- 180 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:16:35 ]
- >>178
ボタンを大きくする
- 181 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:28:58 ]
- >>180
ありがとうございます。 御礼に私の集めた女子高生画像10枚ほどぅpしようと思うのですが
- 182 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:33:42 ]
- >>181
早く汁 ttp://www.uploda.org/
- 183 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:00:03 ]
- >>181-182
偽者&自作自演乙
- 184 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:10:32 ]
- ↑はずれ
- 185 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:13:02 ]
- mbup.net/p.php?p=44502.jpg
mbup.net/p.php?p=44503.jpg こんな感じのでよいでしょうか?
- 186 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:36:20 ]
- 訳:かまってほしいな
- 187 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:35:45 ]
- >>186
かまってほしいです。 実のところMoveWindowでツールバーの移動が出来ませんでした。
- 188 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:55:07 ]
- 自プロセスのUIスレッドのIDを取得したいのですが、方法はありますかね?
- 189 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:12:29 ]
- >>188
ググッたらその辺のサンプルは、見つかると思うよ
- 190 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:09:14 ]
- ツールバー移動出来ない……
クローズボタンなんかだと移動出来てるぽいから出来ると思うのですが…
- 191 名前:デフォルトの名無しさん [2008/06/13(金) 10:24:01 ]
- Windows Media Playerの埋め込みについて質問させてください。
親ウィンドウ(レイヤードウィンドウ)にメディアプレイヤーを埋め込んでいるのですが、 WS_EX_Layeredで親ウィンドウを生成し、SetLayeredWindowAttributesで透明度を設定すると、 メディアプレイヤーの動画部分が黒く表示されます(再生はされているみたいです) 親ウィンドウを動かしてみると、一瞬だけ動画が表示され、動かすのをやめるとまた消えてしまいます。 これはどういった原因があるでしょうか。 親ウィンドウをレイヤードウィンドウにしなかった場合は、そのまま表示されます。
- 192 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 11:24:59 ]
- WS_CLIPCHILDRENとかその辺?
- 193 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 11:28:43 ]
- タブのグレイ表示ってできないんですか?
- 194 名前:デフォルトの名無しさん [2008/06/13(金) 13:57:22 ]
- >>190
>>190 >>190 >>190 >>190 >>190 >>190
- 195 名前:デフォルトの名無しさん [2008/06/13(金) 14:12:25 ]
- 聞きたいのは、何故ツールバーをMoveWindowで移動出来ないのか
です。
- 196 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:19:53 ]
- 最近、いろいろなサイトでTEXT("aaa");見たいなの見かけますが
文字型charには代入できなくなったのですか?新しい型?
- 197 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:21:14 ]
- 意味不明
- 198 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:27:26 ]
- TEXT("aaa")とか_T("aaa")は、ユニコード対応だったけか?
ググれば、その辺はすぐ見つかるよー
- 199 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:28:16 ]
- 最近のVC++はデフォがUnicode版API使うようにマクロ定義さてるんじゃなかったっけ?
2003で止まってるから知らんが。
- 200 名前:デフォルトの名無しさん [2008/06/13(金) 15:39:25 ]
- WM_KEYUPでwParamと数値を比較すると警告メッセージがでるのですが
wParamをintでキャストするような方法でいいのでしょうか
- 201 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:40:25 ]
- おk
- 202 名前:デフォルトの名無しさん [2008/06/13(金) 15:41:20 ]
- >>201
秒殺レスさんくす
- 203 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:05:45 ]
- >>191
WMPが動画をオーバーレイで表示してるなら、不思議な挙動ではないな。 ビデオオーバーレイは画面上のビデオ表示領域にあるピクセルが特定の色だった場合に、そのピクセルに動画を表示する。 よって半透明にした結果、そのピクセルの色が変わってしまえば動画が表示されなくてもおかしくはない
- 204 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:20:56 ]
- なかなか深い読みだな
- 205 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:27:34 ]
- >>203
アプリの背景色をその色にすると面白い事になるよね
- 206 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:32:23 ]
- 自己解決しちゃったぜ!!?
気分がいいので 今から写メを20枚ぅpしてやんよ!!!
- 207 名前:デフォルトの名無しさん [2008/06/13(金) 16:50:01 ]
- mbup.net/d/44545.jpg
mbup.net/d/44547.jpg mbup.net/d/44549.jpg mbup.net/d/44552.jpg mbup.net/d/44554.jpg
- 208 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:54:40 ]
- 基地外が沸いてるな
- 209 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:53:16 ]
- >>191
WMPでオーバーレイを使わない設定にすれば見えなくなることはなくなるけど、透けないしちらつくんだよな。
- 210 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:52:48 ]
- ツールチップをCreateWindowEx()してTOOLINFO構造体のlpszTextにLPSTR_TEXTCALLBACKを指定した後、
case WM_NOTIFY: switch (((LPNMHDR)lp)->code) { case TTN_NEEDTEXT: LPTOOLTIPTEXT ptt = (LPTOOLTIPTEXT)lp; lstrcpy(ptt->lpszText, 表示するテキスト); break; default: return FALSE; } とすると、数十字程度の場合は正常に動作しますが、300文字等文字数を増やすとデバッグ実行時でもエラーが出ずに突然落ちてしまいます。 原因は何でしょうか。 因みにTTM_UPDATETIPTEXTでは正常に動作しました。 >>196 所謂TCHAR型だから、プロパティでマルチバイトを選択すればchar、Unicodeを選べばwchar_tとコンパイラは解釈する。
- 211 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:18:19 ]
- TTN_NEEDTEXT 通知メッセージを処理する場合は、表示する文字列を次のいずれかの方法で指定します。
szText メンバで指定したバッファにテキストをコピーする。 テキストが入っているバッファのアドレスを lpszText メンバにコピーする。 文字列リソースの識別子を lpszText メンバにコピーし、そのリソースが入っているインスタンスのハンドルを hinst メンバにコピーする。 MSDNくらいちゃんと確認汁
- 212 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:24:54 ]
- >>210
バッファオーバーラン 今時そんなバグを平気で出しちゃうCプログラマは 偉そうにTCHAR型の講釈している場合じゃないよ
- 213 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:25:28 ]
- 俺も>>211 が正解な気がする
- 214 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:31:45 ]
- タスクの切り替え(アクティブウィンドウを切り替える)のをエミュレートしたいんですけどどうすればいいですかね?
ある条件を満たしたとき、(タスクバーの)(右)隣のウィンドウに切り替えたいんですけど。 Alt+Tabのキーボードエミュレートだと、直前のやつにしか切り替え不可ですよね・・? Tabの押す回数をうまく制御すればいいんですかね? 他にもっとスマートな方法ありますか?? あと、上記のような不特定多数のタスクがある状況で動くものと、 特定の(例えばWMPとか、決まったアプリをアクティブにする)をアクティブにするものも知りたいです。 ちなみにC++(VC2008ExpressEdition)です。 ご教授のほどお願いします。
- 215 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:36:05 ]
- >>214
FindWindow GetWindowThreadProcessId SetActiveWindow SetForegroundWindow
- 216 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 21:36:28 ]
- >>210
80文字分しかないバッファに300文字コピーしたら バッファオーバーランするに決まってるだろ。
- 217 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:08:45 ]
- (誰が決めたのだろう・・・?)
- 218 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:09:50 ]
- 俺
- 219 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:11:45 ]
- そいやXPのPowerToyのAlt+TAB乗っ取りプログラムはWS_EX_TOOLWINDOWとかマスクしてなくてPhotoshopとか起動してるとかなり格好悪いことになるんだよな。
- 220 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:31:36 ]
- >>215
単純明快かつわかりやすい回答、ありがとうございます。
- 221 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:34:57 ]
- どういたしまして
- 222 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:39:30 ]
- >>221
騙りウザイ
- 223 名前:デフォルトの名無しさん [2008/06/13(金) 22:40:53 ]
- >>192
>>203 >>209 埋め込んだメディアプレイヤーを透明にするということは難しいということですね。。 別の方向で検討します。 レスありがとうございました。
- 224 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:45:30 ]
- どういたしまして
- 225 名前:214 mailto:sage [2008/06/13(金) 22:48:41 ]
- すいません、また質問させてください。
>>215でプロセスIDを習得する意味は何でしょうか?
- 226 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:49:29 ]
- 習得?
- 227 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:54:07 ]
- 取得、です。
- 228 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 22:55:29 ]
- 同じプロセスで動いてるやつを飛ばすとか?
- 229 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 23:10:01 ]
- >>225
> 例えばWMPとか、決まったアプリをアクティブにする とあったので、特定のアプリをアクティブにするならプロセスIDから逆引きすればいいよってこと。
- 230 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 23:43:22 ]
- GDIのPolygon関数は、与えられた引数によっては交差した図形を描くのですが、
どんな引数を与えられても交差しない図形を描くことは出来ないのでしょうか。
- 231 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 23:56:05 ]
- >>230
交差しない順で自分で頂点を並べればいいだろう。 ちょっと考えれば、順不同で与えられた頂点から、辺が交差しない図形は 一意で求まらないことくらい分かりそうなもんだが。
- 232 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 23:56:42 ]
- そんなAPIがあることを初めて知った。。。
質問の意味はよくわからんが、細かく制御したいなら自分でやれば。
- 233 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:10:18 ]
- 分からないならレスしないでください
- 234 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:22:14 ]
- >>191のやつをVista DWM有効下で動かすとどうなるんだろうと気になった。
- 235 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:29:56 ]
- オーバーレイは使えないが、動画は表示され、ちらつきも無くなって万々歳と予想
- 236 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:36:56 ]
- それってXPで出力をVMR9にしたのと同じような状況じゃねーの?
- 237 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 00:46:13 ]
- 個人的に、レイヤードウィンドウとDWMの違いがハッキリしないんだけど。
レイヤードウィンドウでもWM_PAINTがほとんど飛んでこなくなるし、DirectXベースっぽいし。 思うに、レイヤードウィンドウがDX7だったのに対してDWMがDX9になっただけな気がする。 もちろん色々と変わってるだろうけど(GDIをソフトレンダラ化とか)、DWMでやってる事って 半分ぐらいはWindows2000で既に実現できていたんじゃないのかなぁ。
- 238 名前:214 mailto:sage [2008/06/14(土) 01:21:17 ]
- あーできません助けてください!
「今アクティブなウィンドウ(アプリ)の、“タスクバーにおける(右)隣”のウィンドウへアクティブを移す」を実現したいのですが、 要はこれって「タスクバーでいうと隣」のウィンドウのハンドルを取得、それを使ってアクティブにすればいいんですよね? だけど「タスクバーで隣」っていうのをどう条件設定すればよいのかわからず・・・。タスクバーを右に右に推移(+右端だったら左端に動くように)させたいのですが・・。 なんかヒントください!
- 239 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 01:25:08 ]
- >>238
タスクバーをフックする そして次のバージョンのWindowsで死亡
- 240 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 08:27:48 ]
- fprintf等でUTF-8 LF形式で出力したいのですが、どうしてもできません。
どうかご教授おねがいします 。 FILE* fp; _tfopen_s( &fp, _T("hoge.txt"), _T("w,ccs=UTF-8")); fseek(fp, 0, SEEK_SET ); _ftprintf_s( fp, _T("hogehoge")); _setmode( _fileno( fp ), _O_BINARY ); _ftprintf_s( fp, _T("\n")); _setmode( _fileno( fp ), _O_TEXT ); _ftprintf_s( fp, _T("あいうえお")); fclose(fp); MSDN見る限りではこう作れってかいてあるのですが、どうも_setmodeの挙動がおかしいようで...
- 241 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 09:14:00 ]
- どうせccs=UTF-8なんてVC++限定なんだから、
自分でメモリ上にUTF-8, LF改行のデータを作って、 ただのバイナリモードで一気に書きこんだらどうかと思う。 というかスレ違い。
- 242 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 10:13:39 ]
- >>240
_setmode( _fileno( fp ), _O_U8TEXT);
- 243 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 10:53:27 ]
- リッチエディットの背景に画像を表示したいのですが方法はあるのでしょうか?
ググってみても背景色の変更はあるのですが背景に画像を埋め込む方法は見つかりません。
- 244 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 10:57:51 ]
- >>243
無理。IEコンポーネントでも使え
- 245 名前:243 mailto:sage [2008/06/14(土) 11:01:49 ]
- やっぱりそうですか・・・。ありがとうございます。
- 246 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 11:24:30 ]
- どういたしまして
- 247 名前:デフォルトの名無しさん [2008/06/14(土) 14:21:30 ]
- リッチエディットコントロールで右クリックしても
エディットコントロールと違って何も表示されないんだけど どうすればいいんでしょか
- 248 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 14:54:24 ]
- >>241
間違えてここに書いちゃいました。 C++相談室で聞いてきます。 >>242 実はこれはいろいろためしてたときのソースがそのまま残ってました。 _setmode( _fileno( fp ), _O_U8TEXT); もすでに試してたけど、なぜかCRLFになるので、ダメでした。
- 249 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:10:51 ]
- C++相談室もスレ違いだけどな
- 250 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:20:35 ]
- ・スレ違いの質問でも丁寧に答えてくれます。
・かまってちゃんの煽りにもきちんとかまってくれます。 をテンプレに追記汁
- 251 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:45:05 ]
- CreateThreadで作成したスレッドがサスペンドになるまで待機するような関数はありませんか。
WaitForInputIdleのスレッド版、のようなモノです。 自前でフラグでも立てて調べ続けるしかないのでしょうか。
- 252 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:50:57 ]
- 訳:おしえてほしいな
- 253 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 15:55:11 ]
- >>251
サスペンドにする設計はよしたほうがいい。 同期オブジェクトを使うべき。
- 254 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:11:46 ]
- 自前で Win32API のラッパーライブラリ作って使い回してる人どれくらいいます?
windowsx.h みたいなマクロの集合から本格的なクラスライブラリまで含めて。
- 255 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:35:10 ]
- >>254
自分が使う分はラップしてから使う。
- 256 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:53:37 ]
- そのコードにsetmodeは要らないと思うが。
- 257 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:58:06 ]
- >>254
WTLでいいだろ
- 258 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 17:35:31 ]
- WTLは糞すぎるんで、
自作の、ATLをラップしたテンプレートクラスライブラリでやってるよ。
- 259 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 17:48:36 ]
- VCLで間に合ってます
- 260 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:13:08 ]
- >>258
どう糞すぎるの?
- 261 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:14:18 ]
- TCHAR[]な文字列のバイト数はどうやったら求められるのでしょうか
- 262 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:15:27 ]
- あ、lstrlenでいけるっぽいですね。スレ汚しすみません。
- 263 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:32:21 ]
- わかってるかもしれんけど、
「バイト数」は lstrlen(str) * sizeof(TCHAR) じゃないと求まらんよ
- 264 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:33:36 ]
- >>263
おまい、優しいな
- 265 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:35:55 ]
- strlenとlstrlenて何が違うんだ?ずっとstrlen使ってたんだけぢ
- 266 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:36:19 ]
- 引数の型が違う
- 267 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:44:09 ]
- やっぱり違いが判らない
lstrlenのLPCTSTRって strlenのconst char* と同じでしょ?
- 268 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:45:39 ]
- #define UNICODE
- 269 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:49:57 ]
- じゃあ
lstrlen=_tcslenなわけ?
- 270 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:50:34 ]
- >>265
lstrlenはスレ違いじゃないけどstrlenはスレ違い
- 271 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:54:04 ]
- _tcslenもスレ違い
- 272 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:54:16 ]
- >>269
lstrlen (lstrlenA, lstrlenW) は Win32API (ダイナミックリンク) _tcslen (strlen, wstrlen) は C Runtime (スタティックリンク) この違い重要な
- 273 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:56:17 ]
- > C Runtime (スタティックリンク)
馬鹿は黙っててね
- 274 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 21:58:20 ]
- >>272
CRTもダイナミックリンクできるが? つーか基本的にwsprintfとかlstrlenとかWin16でメモリが厳しくてCRTなんか使ってられるかって時代の遺物なんだから気にするな。使うな。
- 275 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 22:06:41 ]
- Win32API はスタティックリンクできないが
C Runtime は普通スタティックリンクで使うので間違ってはいない
- 276 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 22:09:08 ]
- >>275
VC8はダイナミックリンクがデフォ設定になってたなぁ
- 277 名前:272 mailto:sage [2008/06/14(土) 22:34:54 ]
- >>276
あ、確かにデフォルトで /MD (msvcr80.dll) になってるわ 普段 cl.exe とか nmake.exe とかでやってるから libcmt.lib が当たり前だと思ってた あと誰もつっこんでくれないけど wstrlen じゃなくて wcslen また多分 strlen ぐらいならコンパイラがインライン展開してくれると思う
- 278 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:23:16 ]
- msvcrt.dllはKnownDLLsだから、これを使うならCRTもWin32APIみたいな物じゃね
まーそのせいで最近のVC++はmsvcrt.dllが使用できないが
- 279 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 01:08:48 ]
- リストボックスに横スクロールバーを追加したのですが、項目の文字列の幅を正確に取得出来ないのか全ての文字が表示される所までスクロール出来ません。
GetTextExtentPoint32()は > デバイスの中には、通常のセル配列に文字を配置しないデバイス(すなわちカーニングを実行するデバイス)もあるため、文字列内の個々の文字のサイズの総計と文字列全体のサイズとが一致しないことがあります。 の解説から等幅しか正しく計算出来ないようですが、プロポーショナルフォントで正しく計算する方法はないのでしょうか。 ※これとは別に垂直スクロールバー分のGetSystemMetrics(SM_CXVSCROLL)は足しています。
- 280 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 01:18:08 ]
- その説明は関係ないだろ
(もし1文字分ずつ別々に測って足してったら正しい結果は出ないよって意味だ) ちゃんとDCにフォントを選択したか?
- 281 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 01:32:32 ]
- >>280
誤解を解いてくれてありがとうございます。 > DCにフォントを選択したか 選択したら、未選択の時より短くなってしまいました。 追加したコード HFONT hFont = CreateFont(-MulDiv(9, GetDeviceCaps(hDC, LOGPIXELSY), 72), 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, VARIABLE_PITCH, L"MS UI Gothic"); SelectObject(hDC, hFont); : DeleteObject(hFont);
- 282 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 02:50:21 ]
- >>281
それはリストボックスと同じフォントか? というかWM_GETFONTでフォントもらえ
- 283 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:24:09 ]
- >>282
遅レスすみません。 リストボックスのフォント(ダイアログのフォントと同じ)はMS UI Gothic 9ptですが、WM_GETFONTで取得したフォントは何故かArialの12pt(?)になっていました。 更にウィンドウ上の文字もそれに変わって表示が滅茶苦茶に…。 勿論Arialなんて何処にも使用していません。 何処に原因があるのか解らないので一度Win32APIから離れて.NETでGraphicsオブジェクトを作りMeasureString()で幅を取得してHorizontalExtentプロパティに設定したら、こちらは上手くいきました。 結局の所、正しいフォントが選択されていない事が最大の原因でしょうか。 そうだとしたら何故フォントが正しく取得出来ないのでしょうか。
- 284 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:08:11 ]
- >>282
もらえるのはHFONTだが、それがArialだってのはどうやって調べた (というか調べる必要があった)んだ? DCにハンドル選択するだけなのに。 本当にArialとやらだったら、取得に失敗してシステムフォントが返ってるんだろ。 他のウィンドウのフォントが崩れたのは、 このスレにコード念写できる人はおらんから確かなことは言えんが おおかたもらったフォントをDeleteObjectでもしたんでないの。
- 285 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:24:08 ]
- > それがArialだってのはどうやって調べた
ウィンドウに表示される文字で判別しました。 > もらったフォントをDeleteObjectでも〜 思い切りしていました…。 削除する事でフォントは正常に戻りましたが、やはり文字列の最後までスクロール出来ません。 文字コードは全てワイド文字で処理していますが、これが関係しているのでしょうか。
- 286 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:48:23 ]
- > ウィンドウに表示される文字
それほど信頼できん調べ方はないだろうがw フォントリンクとかでぐぐっとけよ
- 287 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:52:08 ]
- >>285
あなたにWin32APIは無理です。 諦めて.NETを使いましょう。いい時代になりましたね。
- 288 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:30:35 ]
- >>285
>ウィンドウに表示される文字で判別しました。 フォント名がほしいなら GetTextFace() とか使ってくれ とりあえず GetTextExtentPoint32() のリファレンス読み直すとか、 DrawText() に DT_CALCRECT 渡すなどの方法で代用するとか
- 289 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 07:54:20 ]
- Advanced Windows っていい本ですね
高いけど
- 290 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 09:13:10 ]
- >>288
情報小出しする奴はスルーしとけ
- 291 名前:デフォルトの名無しさん [2008/06/16(月) 12:13:15 ]
- テキストエディタ作りたいんですけど、
どうやって日本語入力するんでしょうか?
- 292 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:17:26 ]
- テキストボックスでも貼っとけ
- 293 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:27:58 ]
- 日本人なら日本語ぐらい入力できるだろ
- 294 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:32:31 ]
- msdn.microsoft.com/ja-jp/library/cc422019.aspx
- 295 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:40:26 ]
- >>292
すごく・・・ 完了しました
- 296 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:15:54 ]
- 今時Edit貼っただけのテキストエディタなんて需要ゼロだろ
- 297 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 14:25:39 ]
- コンソールで作るんだろ?
- 298 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 14:29:25 ]
- SEDやEDLINのx64コンソール対応版か
- 299 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 14:56:54 ]
- HTREEITEMのハンドルの比較はどのようにやればいいですか?
- 300 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:12:45 ]
- ==
- 301 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:26:44 ]
- 冗談抜きで==以外にアイテム同一の比較する方法はない
- 302 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:37:52 ]
- >>288
遅レスすみません、DrawText()にDT_CALCRECTを渡す方法で出来ました。 上記方法での取得値 - リストボックスの幅 + 縦スクロールバーの幅 で正確なスクロール幅が算出出来ました。 本当にありがとうございました。
- 303 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 16:20:15 ]
- 一瞬>>300が何のレスか分からないw
- 304 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 17:49:15 ]
- Cから呼び出したDLL内でEXCEPTION_ACCESS_VIOLATION (0xc0000005)
が発生した場合、それをC側から補足できますでしょうか? 例外が発生したことを上の関数に返したいのですが 難しいでしょうか? よろしくお願いいたします。
- 305 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 17:50:49 ]
- VC++なら___try - ___catch(EXCEPTION_EXECUTE_HANDLER)
- 306 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 17:51:01 ]
- ___じゃない、__
- 307 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 18:17:43 ]
- >>305
ありがとうございます。 スーパー助かりました。
- 308 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:33:49 ]
- コンビニどういたしまして。
- 309 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:43:32 ]
- まさか全く関係ない奴が、どういたしましてなんて言ってないよなw
- 310 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:51:31 ]
- 私には心の分身が居るので彼らがどういたしましてを言っています
- 311 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:54:08 ]
- たとえ心が離れていても僕たちはいつもひとつ!
- 312 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 20:21:42 ]
- それ多重人格じゃね?
- 313 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:40:53 ]
- このスレには人工無脳が搭載されてるのを知らないのか?
「ありがとうございます」に対して自動で「どういたしまして」と返信して回答者の煩わしさを軽減してくれてるんだよ。 ただあまり賢くないから、たまに暴走して意味不明なレスで荒れたり 「なぜこんな設計にするのか理解できない」→「分からないならレスしないでください」 と煽ったりして荒れる原因になって迷惑な一面もある。
- 314 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:51:45 ]
- 説明ありがとうございます
- 315 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:53:25 ]
- どういたしまして
- 316 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:48:13 ]
- 質問です。
CreateProcessでメモ帳(notepad.exe)を起動する際に、 ユーザーがCtrlキーを押しながら起動しても最前面にメモ帳を表示させたいのですが、 試行錯誤を繰り返していますが上手くいきません。 ご教授お願いいたします。
- 317 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:49:43 ]
- お断りします
- 318 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:51:32 ]
- お断りじゃあ仕方ないよな
あきらめろ
- 319 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:26:58 ]
- AttachThreadInputとかかね?
- 320 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:30:10 ]
- >>243
規制に巻き込まれて遅レスだが WS_EX_TRANSPARENTスタイルを追加してWM_ERASEBKGNDで背景画像をBitBlt。 ちらつくので親ウィンドウにWS_CLIPCHILDREN追加して RichEditのカーソル付近の表示がおかしくなるので親ウィンドウのWM_PAINTで RichEditのUpdateWindow追加でいけると思う。
- 321 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:56:19 ]
- >>291
IME対応を何もしなくても、確定した文字列は最悪WM_CHARで1文字ずつ送られてくる (IME-unaware)。 ANSIモードだとShift_JISの2バイト文字も1バイトずつ送られてくる。 それだとあまりにも不便すぎるから、IMM APIを使って取得する。 確定文字列の取得はWM_IME_COMPOSITIONかつlParam & GCS_RESULTSTRのとき。 詳しくはググれ。あと、再変換対応も忘れるな。 現在はIMMからTSFへ移ろうとしているんだが、 IMMでしか使えない変換エンジンの1つにATOKもあるし、 XPまでだと様々な理由でTSFをオフにしたり、そもそもTSFが入っていなかったりするので、 TSFのみの対応のアプリケーションは非現実的。IMMのみかIMM/TSF両対応にすべき。
- 322 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 00:40:38 ]
- > ユーザーがCtrlキーを押しながら起動しても
今頃こんな機能があることを知った ありがとう2ちゃんねらー
- 323 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 00:44:18 ]
- Ctrlキー押して起動してみたけど
なんもならないぞ
- 324 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:06:34 ]
- >>322
マジだ・・・今まで知らんかった
- 325 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:13:50 ]
- Shiftを押しながらだと・・・
- 326 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:17:19 ]
- shift 最小化して起動
alt プロパティ 知りませんでした
- 327 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:25:42 ]
- すげぇマジだ。
Windowsのプログラマは只者じゃねーな。
- 328 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:20:05 ]
- スタートメニューやクイック起動からだと
Ctrl+クリック バックグラウンドで起動 (メモ帳だけ?) Shift+クリック メニューが勝手に消えない Shift+クリックなんて知らなかった。これ結構便利だな。
- 329 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:01:57 ]
- > Shift+クリック メニューが勝手に消えない
うおおおお すげえ、これすげえ 感激した
- 330 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:03:29 ]
- 感激したので、これからは
WinMainのnCmdShow引数をまじめに処理しようと思う
- 331 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:55:21 ]
- で、結局Ctrl押しながら起動でZオーダー最前面にする方法は誰も分からんのか、、、
- 332 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:03:25 ]
- 便利な機能を殺すのか。
ウィンドウハンドルをどうにか持って来れれば何とかならんか?
- 333 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:58:07 ]
- メモ帳のソースコードが公開されていて改修できるなら可能だと思うが、
それが出来ないならちょっと思いつかないな。
- 334 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:09:26 ]
- notepad.exeを改造すればいいじゃない
その程度のクラック知識も無い人はWin32APIで開発なんてやめた方がいいと思うよ
- 335 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:10:27 ]
- STARTUPINFOに仕込んでてもダメかな…
- 336 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:15:25 ]
- 流出はしてたかもしれんなw
- 337 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:16:32 ]
- 別に変な事をしなくてもThreadIDから窓を列挙して前面に移動すればいいだけじゃないか
- 338 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:22:58 ]
- 実際にやってみれ
多分無理
- 339 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:27:54 ]
- メモ帳限定でいいなら
CreateProcess→WaitForInputIdle→ウィンドウ列挙してプロセスIDから該当のメモ帳を探す →AttachThreadInputでアクティブプロセスのコンテキストを割り当て→SetForegroundWindow こうかな?
- 340 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:18:04 ]
- メモ帳をフックすればいいだろ
- 341 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:31:43 ]
- ソレダ!
- 342 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:34:47 ]
- んー
Process32FirstとProcess32Nextを使ってNotePad.exeと親のプロセスIDとを取得。 AttachThreadInputでアタッチして制御をもらって、終わったらデタッチ。 ただ、NotePad.exeのウインドウハンドルはどうやって取得するんだろう。 それが出来ればSetActiveWindowなりSetForegroundWindowを呼べるんだが。
- 343 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:41:59 ]
- CreateProcess したのに、わざわざそうやってプロセスID取得するの?
EnumWindows()とGetWindowThreadProcessId()を組み合わせて探すのが バージョン依存しなくていいかも。
- 344 名前:343 mailto:sage [2008/06/17(火) 14:42:45 ]
- 下2行はプロセスIDからウィンドウハンドル探す方法ね。
- 345 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:53:06 ]
- バージョン依存ってProcess32FirstがNT4で使えないとかそういう事かね?
- 346 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 16:57:07 ]
- メモ帳側が変わるかということじゃね
- 347 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:19:45 ]
- 変わらねーよw
・タブ対応 ・正規表現grep ・構文ハイライト ・ソース折り畳み ぐらいは対応して欲しいけどな
- 348 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:33:24 ]
- そんな高機能なメモ帳なんてメモ帳じゃないやい・゚・(つД`)・゚・
でも、Vistaのメモ帳ではCtrl+Gで行番号指定移動に対応していたりと 結構侮れなかったりもする。
- 349 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:36:52 ]
- メモ帳はタブ幅を4に変更可能にしてくれればもう何も言うことはない
- 350 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:45:13 ]
- comctl32を設計した馬鹿をひっぱたきたい。
- 351 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:54:15 ]
- メモ帳に関連づけてるファイルがなくて試せない俺は負け組
- 352 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:57:05 ]
- >>350
つうほうしまたし
- 353 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:18:29 ]
- メモ帳というかEditコントロールが貧弱すぎ。
無制限UNDO/REDOやドラッグドロップぐらい標準で対応しろと。 マウス乗せたらボワっと色が変わるようなくだらん機能つけるぐらいなら基本機能を充実させろと。
- 354 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:22:41 ]
- そんなもの標準でつけられても、結局は込み入ったことするには不足で、自前で実装することになるのが目に見えてる。
- 355 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:31:19 ]
- SetWindowHookEx で、WH_MOUSE を指定し、プライマリスレッドへのローカルフックを
設定しているのですが、MOUSEHOOKSTRUCT.dwExtraInfoは常に0になります。 XBUTTONの番号やホイールの回転量が取れなくて困るのですが、これは仕様なんでしょうか。
- 356 名前:355 mailto:sage [2008/06/17(火) 21:47:41 ]
- すみません。ググったらすぐわかりました。MOUSEHOOKSTRUCTEXを使うべきなんですね。
- 357 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:54:32 ]
- Editコントロールを改良してくれるというなら、TSFに対応してほしかった。
ただ、MS-IMEナチュラルインプットがフェードアウト気味で、どうでもいいと思うようになってきたけど。
- 358 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:59:44 ]
- 時代はATOKです
- 359 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:27:14 ]
- SS_BITMAPを指定したスタティックコントロールにStretchBlt()した画像を貼り付ける方法が判りません。
(WM_PAINT以外) hBmp = (HBITMAP)LoadImage(NULL, L"test.bmp", IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE); HDC hDC = GetDC(hwnd); hMemDC = CreateCompatibleDC(hDC); SelectObject(hMemDC, hBmp); hBackDC = CreateCompatibleDC(hMemDC); hBackBmp = CreateCompatibleBitmap(hMemDC, 256, 192); SelectObject(hBackDC, hBackBmp); SetStretchBltMode(hBackDC, STRETCH_HALFTONE)) StretchBlt(hBackDC, 0, 0, 256, 192, hMemDC, 0, 0, 640, 480, SRCCOPY); ReleaseDC(hwnd, hDC); (WM_PAINT内) BeginPaint(hwnd, &ps); SendDlgItemMessage(hwnd, IDC_BITMAP1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBackBmp); EndPaint(hwnd, &ps); このようにしてみましたが、スタティックコントロール上には何も表示されません。 何が原因でしょうか。 ※便宜上WM_〜と書いていますが、実際はメッセージクラッカーを使用しています。
- 360 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:42:44 ]
- WM_PAINT内
- 361 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:38:47 ]
- マインスイーパの(ニコニコマークの)ボタンのようなものを押そうとしているんですが、
HWND hwnd = FindWindow(NULL,TEXT("マインスイーパ")); POINT pos = {87,27}; int lparam = (pos.y<<16) + pos.x; PostMessage(hwnd,WM_LBUTTONDOWN,0,lparam); PostMessage(hwnd,WM_LBUTTONUP,0,lparam); で押したことにできません。 pos={100,100}とかで下の領域部分は押したことにできます。 調べた感じ、ボタンっぽい部分はハンドルも持ってなさそうなのですが、 どうすれば押せるのでしょうか?
- 362 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:40:11 ]
- >>361
F2を押したことにするんじゃだめなの?
- 363 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:43:35 ]
- >>362
マインスイーパをプログラムで操作したいというよりは、 ハンドルを持っていないボタンを押したいということなんです。
- 364 名前:362 mailto:sage [2008/06/17(火) 23:43:36 ]
- よく考えたらF2よりメニューのID調べてWM_COMMAND送ったほうが楽かも
- 365 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:46:23 ]
- >>363
SendInput
- 366 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:54:28 ]
- >>365
やっぱりそれしかないんですかね? PostMessageでなんとかしたかったけど、SendInputでいってみます。 ありがとうございました。
- 367 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:31:14 ]
- 「チートのためのSendInput」
という本を書いたら売れますか?
- 368 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 02:50:24 ]
- チート専門ならWin32APIなんかよりAHKでも薦めるかな
- 369 名前:デフォルトの名無しさん [2008/06/18(水) 13:13:44 ]
- すみません、ちょっとお聞きしたいんですが、
CreateFileMappingAの戻り値のHANDLEから _open_osfhandle()と_fdopen()とで FILE*を取得することは出来るんでしょうか? どうもやってみても_open_osfhandle()が-1を返すんですが、 失敗する理由が自分のコーディングミスなのか仕様なのか分からないです。
- 370 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:27:41 ]
- そのハンドルは別のものだから使えないよ
- 371 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:25:33 ]
- >>360
遅レスすみません、漸く解りました。 ありがとうございます。 (WM_PAINT以外) hBmp = (HBITMAP)LoadImage(NULL, L"test.bmp", IMAGE_BITMAP, 640, 480, LR_LOADFROMFILE); HDC hDC = GetDC(hwnd); hMemDC = CreateCompatibleDC(hDC); SelectObject(hMemDC, hBmp); hBackDC = CreateCompatibleDC(hMemDC); hBackBmp = CreateCompatibleBitmap(hMemDC, 256, 192); hPrevBmp = SelectObject(hBackDC, hBackBmp); SetStretchBltMode(hBackDC, STRETCH_HALFTONE)) StretchBlt(hBackDC, 0, 0, 256, 192, hMemDC, 0, 0, 640, 480, SRCCOPY); ReleaseDC(hwnd, hDC); (WM_PAINT内) BeginPaint(hwnd, &ps); HBITMAP hTempBmp = (HBITMAP)SelectObject(hBackDC, hPrevBmp); SendDlgItemMessage(hwnd, IDC_BITMAP1, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBackBmp); SelectObject(hBackDC, hTempBmp); EndPaint(hwnd, &ps);
- 372 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:27:16 ]
- >>371
そのソースじゃ何も解っていないようだな
- 373 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:28:40 ]
- WM_PAINTの度にSTM_SETIMAGEを送る必要はない気がするんだけど、自分の勘違いか?
- 374 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:40:35 ]
- てかStretchBlt自体が不要。SS_REALSIZECONTROLでいいじゃん。
それとも、XP未満にも対応する必要でもあるの?
- 375 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:02:36 ]
- 戦略からコードの細部にいたるまで間違いだらけだな、感動した。
またクライアント領域の人か?基礎からちゃんと勉強しないと話にならんぞ。
- 376 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:40:19 ]
- 今更Win32の基礎を勉強するなんて馬(ry
|

|