スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは
>>2-5 くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(
http://msdn.microsoft.com/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2 :
デフォルトの名無しさん :2007/03/21(水) 03:46:45
見落とした。ごめんぽ
般 羯 多 呪 多 得 想 掛 所 亦 無 耳 不 是 異 蘊 観 摩 若 諦 呪 能 是 阿 究 礙 得 無 意 鼻 増 舎 色 皆 自 訶 心 羯 即 除 大 耨 竟 無 故 老 識 舌 不 利 色 空 在 般 経 諦 説 一 神 多 涅 掛 菩 死 界 身 減 子 即 度 菩 若 呪 切 呪 羅 槃 礙 提 盡 無 意 是 是 是 一 薩 波 波 曰 苦 是 三 三 故 薩 無 無 無 故 諸 空 切 行 羅 羅 真 大 藐 世 無 陀 苦 明 色 空 法 空 苦 深 蜜 羯 実 明 三 諸 有 依 集 亦 聲 中 空 即 厄 般 多 提 不 呪 菩 佛 恐 般 滅 無 香 無 相 是 舎 若 心 虚 是 提 依 怖 若 道 無 味 色 不 色 利 波 経 波 故 無 故 般 遠 波 無 明 觸 無 生 受 子 羅 羅 説 上 知 若 離 羅 智 盡 法 受 不 想 色 蜜 僧 般 呪 般 波 一 蜜 亦 乃 無 想 滅 行 不 多 羯 若 是 若 羅 切 多 無 至 眼 行 不 識 異 時 諦 波 無 波 蜜 顛 故 得 無 界 識 垢 亦 空 照 羅 等 羅 多 倒 心 以 老 乃 無 不 復 空 見 菩 蜜 等 蜜 故 夢 無 無 死 至 眼 浄 如 不 五 提 薩
ぎゃーてーぎゃーてー はら ぎゃーてー が好きです
萌える般若心経
ツンデレ般若心経
今からここは、ツンデレ般若心経に萌えるスレになりました。
ちょっとまて 意味が分らんぞ
わかったぞ!わかったぞ!わかっt(ry
いきなりの狂信者フイタ
17 :
は@c178.016.c3-net.ne.jp ◆cplnFO9T0I :2007/03/21(水) 18:40:26 BE:176526757-2BP(1000)
VC++.net2003で勝手にベースを作らすとstdfx.h内で#define WIN32_LEAN_AND_MEANしていたせいでOPENFILENAME構造体を定義出来なかった。 これをコメントアウトしたら出来ましたよ。なんつーか、馬鹿らしい。
18 :
11 :2007/03/21(水) 19:58:53
すまない カオスなのは多分俺のせいだ
ちなみに一応言い訳しておきますと、ちょっと長目の文章だと すぐ容量制限オーバーになるので そのままページに作るのはちょっと無理だったのです。 そのままZIPとかでUPできればよかったんですが、 画像以外はUPできない所なので・・・ 別に何か怪しくしたい訳ではないのです(^^; せっかく誰かが作ってくれたので利用しようかな・・・と。 でも勝手にこういう事をしていいものかよくわからなかったので ダメだったら消します。 どうもありがとうございましたm(_ _)m
>>19 つまり役立たずなページってことじゃないか?
消えていいよ^^;
22 :
デフォルトの名無しさん :2007/03/21(水) 20:52:23
【ネガティブ派遣根性チェック】 3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。 □派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする □派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい □自社で仕事なんてできるわけがない □派遣労働の問題点の話題が出ると感情剥き出しにして反論する □派遣労働の問題を指摘する人は嫌いだ □派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい □奢ってくれる派遣先正社員を尊敬する □自分の月額金額を知らないのは当然だ、単金を聞いてはいけない □派遣先正社員より自分の生涯収入が低いのは当然だ □派遣先に尻尾を振り、いつまでも派遣を続けることが大切だ
このスレを見てる愛しの姉へ 彼の仕事はプログラマぁ♪ そんな私もプログラマぁ♪ ちなみ胸はAカップ♪ ぃぇい! 自作の歌か知らんけど、もうすこし小声で唄ってくれ。 会社で思い出して、笑い死にそうになる。 あと、ぃぇい!の指差しポーズは止めた方がいい。
グラマーときいてやってきました (;・∀・)ハァハァ
チェックした四角ってどうやって出すんだったかな?
☐ฺ ☑ฺ
☑派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする ☑派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい ☑自社で仕事なんてできるわけがない ☑派遣労働の問題点の話題が出ると感情剥き出しにして反論する ☑派遣労働の問題を指摘する人は嫌いだ ☑派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい ☑奢ってくれる派遣先正社員を尊敬する ☑自分の月額金額を知らないのは当然だ、単金を聞いてはいけない ☑派遣先正社員より自分の生涯収入が低いのは当然だ ☑派遣先に尻尾を振り、いつまでも派遣を続けることが大切だ これでOKか?
☑
>>25 マジレスしとく
DrawFrameControl(hdc, lprc, DFC_BUTTON, DFCS_BUTTONCHECK|DFCS_CHECKED);
>>23 女でここに来てる奴なんて多分いないだろうw
やさしいお兄さんやお姉さんたちが答えてくれるかも。
もし俺が次スレを立てる事があればそこを改変しよう。 約束する。
やさしいキモオタやバーコード親父たちが答えてくれるかも。 こうですか? わかりません!><
2001年のHALとか電人HALとか
☑プライドは、ない
☐ プライド
プリンセスプライド
☑ プライドや友達などといった定義が曖昧な物事は プログラムを生業とするすべての人間にとって考えるべき領分ではない
ケンタッキープライドチキン
☑ す、すげぇ! こんな記号があったのが驚きだ。
□す、すげぇ! こんな記号があったのが驚きだ。
ちょっと質問させてください。 ソースの失われたアプリケーションがあります。(おそらくMFCで作られている) このアプリケーションの特定の処理(関数になっている)を 新しく作る外部のアプリケーションから実行したいのです。 ここで分からないのが、既存のアプリケーションのユーザ関数を外部のプログラム から実行することが、そもそも出来るのか。出来るのであればAPIのどの様な 関数を調べていけばいいのか教えていただければと思います。 仕様書は残っているようなので、関数名は何とか調べたいと思いますが、 関数名も分からなかったら、さすがに無理でしょうか。 OSはWindowsXPでC++かC#で実現したいと考えています。
有料になります
DLLのこと?
>>44 まぁできない。
リリースビルドの.exeにシンボル情報は残らないから、関数のアドレスとかわからない。
逆コンパイルして出たもの使うとかしかない。(俺は逆コンパイル自体したことないけど)
DLLならもちろんできる。ライブラリってのは他から呼ぶためにある。
>>44 結論から言うと、既存のアプリケーションのユーザ関数を外部のプログラム
から実行することはできます。
ですが、私の知っている方法では逆アセンブルを行う必要があります。
逆アセンブルを禁止されているのであれば、この方法は使えません。
ついでにいうと exe 内の関数については関数名が失われている可能性が高いです。
(build オプションによりますが・・・)
ユーザ関数部分が dll になっている事をお祈りしております。
ちなみに私の知っている方法は
既存アプリケーションを逆アセンブル
↓
実行したい関数のアドレスを調査
↓
既存アプリケーションを起動して DLL 注入
↓
プロセス間通信で必要なときに注入した DLL が実行したいユーザ関数呼び出し
↓
戻り値をプロセス間通信で受け渡す
ソフトウェアライセンスで逆アセンブルが禁止されていることが多いので
この方法は社会的に大変大きな危険性が伴います
よくライセンス条項を調べてから行ってください
ライセンス条項っつーか、自分とこのバイナリのソースを無くしたんだべ
エクスポートされてれば可能
外注に委託していたアプリケーションで その外注と取引中止したとかの理由かと思った
あとはMicrosoft Officeの如く、徹底的にAcitveXオートメーション化されていれば、 中のプログラムを呼ぶというのもできるが、そんなこと期待できる訳が無い。
便乗して・・・ Dependency Walkerってどうやってるの?
54 :
53 :2007/03/22(木) 20:37:37
ごめん。 理解した。
こうして こうして こうやるの
最近寒いVIPPERみたいのが棲みついてるな
バイパー
Diamond Multimedia ?
SetWindowsHookExでフック(複数)かけるのと、 SetWindowLong等でサブクラス化するのと、 ぶっちゃけパフォーマンスに違いでますか?
>>59 やってみればいいんじゃないかと。
違いが出る場合もあるし、出ない場合もあるとしか答えられんね。
知らない奴は無理して答えなくてもいいんだぜ
62 :
44 :2007/03/22(木) 21:39:42
>>47 ,48
逆アセンブルしてどうにかというのは、関数のアドレスが分かったとしても、
関数の引数と戻り値のタイプも分からないと駄目ですよね。
おそらく私にはそこまで読めそうにないので、上司を説得する方法を考えます。
情報ありがとうございました。
☑ フックするイベントや頻度によるので答えられませんが、SetWindowLong で済ませるのが良いと思います。
>>62 ついでにいうと呼出規約?も必要です
__fastcall とか __cdecl とかそういう奴
☑
☑逆汗すれば全部わかる
特定のアプリケーションの使用メモリを制限する方法ありませんか? 制限対象のアプリケーションは修正できません。 なんかメモリリークするバグがあって、最悪でもメモリが一定使用量に なったらそのアプリケーションを一度殺して再起動したいのです。
>特定のアプリケーションの使用メモリを制限する方法ありませんか? それは大変そうだが・・・ >なんかメモリリークするバグがあって、最悪でもメモリが一定使用量に >なったらそのアプリケーションを一度殺して再起動したいのです。 これなら比較的簡単にできないか? 常駐監視プログラム作ってその対象のアプリのメモリ使用量を監視して 一定量に達したら TerminateProcess でサヨウナラとかでいんじゃね?
SetProcessWorkingSetSizeとかかな?
そうですね。 特定アプリのメモリ使用量を外部のプログラムから得る方法あるでしょうか?
>>69 それは物理メモリの使用量を調整する為のAPIなんじゃないの?
>>69 んー、そのAPIはメモリ不足時に仮想メモリに逃がすだけみたいですね。
GetProcessMemoryInfoというのを見つけました。
psapi.dll使うやつみたいですね。
これの引数の構造体メンバのWorkingSetSizeが
タスクマネージャで表示されるメモリ使用量と同じらしいです。
ううう…
>>72 WorkingSetSize +PagefileUsage あたりでいんじゃね?
なんとかできそうです。 ありがとうございました。
対象アプリケーションを作った奴に文句言うのが正しい解決法だろう。
教えてください。とあるサイトで見たコードなんですが DWORD WINAPI oreore(LPVOID p) { MSG msg; /* メッセージキューを作る。*/ PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); SetEvent((HANDLE)p); while (GetMessage(&msg, NULL,0,0) > 0) { switch (msg.message) { case WM_SURE_TEST1: puts("WM_SURE_TEST1"); break; case WM_SURE_TEST2: puts("WM_SURE_TEST2"); break; case WM_SURE_TEST3: puts("WM_SURE_TEST3"); break; default: puts("理解できないメッセージです"); } } ExitThread(0); } このコードの最初のPeekMessageの必要性がよくわからないです。 そもそも必要なのでしょうか?
79 :
78 :2007/03/23(金) 02:01:44
因みにこれはCreateThreadで作られたスレッドです。
80 :
デフォルトの名無しさん :2007/03/23(金) 02:06:13
職業物体
>>78 スレッドが作成された時点ではメッセージキューが作成されていない。
(メッセージキューはスレッド単位で存在するもの)
PeekMessage等のAPIが初めて呼ばれたときに作成される。
詳しくはPostThreadMessageでググってくれ。
>>80 CreateJobObject & SetInformationJobObject
# 日本語でおkと言われたのに英語になったw
>>83 肝心のパラメーターが判りません。
クラスに応じた構造体を渡すみたいですが
情報出てきません…
Richeditでキーワードに色を付けたいのです。 // 赤色に変更するためのCHARFORMAT CHARFORMAT cf; cf.cbSize = sizeof(cf); cf.dwMask = CFM_COLOR; cf.crTextColor = RGB(255, 0, 0); // 選択範囲を反転表示しないように設定 SendMessage(hwndEdit, EM_HIDESELECTION, TRUE, 0); for(/* begin〜end を Richedit 内のキーワードの位置に設定しながら繰り返す */){ SendMessage(hwndEdit, EM_SETSEL, (WPARAM)begin, (LPARAM)end); // ← ※ SendMessage(hwndEdit, EM_SETCHARFOTMAT, SCF_SELECTION, (LPARAM)&cf); } ↑のように処理すると、※の場所で、スクロールバーが連動して動いてしまいます。 スクロールバーをシンクロさせない方法はありませんか? もしくはキーワード部分を選択せずに色分けする方法はありませんか?
88 :
デフォルトの名無しさん :2007/03/23(金) 10:36:42
すいません誘導できますた。 IsWindow(handle)みたいなプロセスIDかスレッドの生死を判断するものはあるんでしょうか?
,、‐ " ̄:::゙:丶、 ,r: ,' 3゙ :::::::/ハヽ:ヽ::::、:ヽ {::://:::::::// ヽ\ト、:::::::! ヾ l:::::::/ 丶 `ヾ ィ、:::| |;:r::| O` 'O ゙ハ| < ないない ヽハ :.:. :.: レ ´\ r‐--‐、,ノ r、 r、/ヾ ̄下ヘ ヽヾ 三 |:l1、_ヽ/__ .ィヽ \>ヽ/ |` } n_n| | ヘ lノ `'ソ l゚ω゚| | /´ /  ̄|. | \. ィ ___ | | | ノ l | | | | i:| |
HANDLEを引数にするAPIに無効なHANDLE渡すとAPIは失敗して、 そういう意味のエラーコードが設定されるからそれで判断するとか?
GetProcessVersionとかOpenProcessなどが使えそうだけど Session境界を超えた場合の挙動とかわからないな
GetExitCodeProcess はどう?
プロセスを全部列挙してみるとか
94 :
88 :2007/03/23(金) 12:34:45
>>89-92 皆さんありがとうございました。
>>91 氏のGetProcessVersion() = 0 で死亡確認できました。
ありがとうございました。
ものすごい基本の質問なんですが charとchar*やTCHARとTCHAR*のように 最後に*が付くのと付かないのではどう違うんですか?
ぬるぽ
一応マジレスすると、*がつくのはポインタ型。全然違うもの。 詳しくはC言語のスレ行ってくれ、そっちなら真面目に答える(かもしれない)。
>>97 ありがとうございます。
ググってみて少し分かったような気がします。
スレ違い失礼しました。
a*は黄門、aは体
>>94 プロセスIDが再利用されると生きてると誤判定する可能性があるぞ。
OpenProcessでハンドルを持っておいた方がいい
(ハンドルが1つでもある限りプロセスIDは再利用されないことが保証される)
死亡確認はGetExitCodeProcessかWaitForSingleObject
>>95 俺ならTCHAR *じゃなくてLPTSTRだぜwwwwwwwwww
32APIはよく知らないんですが、24bitsのDIBって有効なんでしょうか? #define WIDTH 100 #define HEIGHT 50 LPDWORD lpPixel; BITMAPINFO bmpInfo; : : lpPixel=(LPDWORD)HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, WIDTH*HEIGHT*3 //Alpha保持しないから3でいいんだろうか ); : : //3bytesだから24でいいよね? bmpInfo.bmiHeader.biBitCount=24;
1行辺りのバイト数を4の倍数に揃えないといけないとかなんとかあったはず。
106 :
104 :2007/03/24(土) 00:31:22
>>105 それってファイルフォーマットじゃなくてDIBにもそういうルールがあるんですか?
うん
108 :
104 :2007/03/24(土) 00:38:28
ググったら自己解決しました
BMPファイルはヘッダの後にDIBをそのまま並べただけなのだから、 ファイル上でそうなっているということはメモリ上でもそうなっているということ。
質問です。ポップアップウィンドウを表示したいのですが HWND hWnd; hWnd = CreateWindow(TEXT("STATIC"),NULL,WS_POPUP | WS_BORDER, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInst,NULL); ShowWindow(hWnd,SW_SHOW); としても何も表示されません。原因が分からず困っています。 間違いがあれば指摘して下さい。コンパイラはBCCです。
>>110 間違いを指摘してなんとかなるってレベルじゃねぇぞ!
・・・メッセージポンプ、メッセージループでググれ。
グーグってもしーかたない 迷わーずにすすめよ 行けばわかるのさ♪
113 :
110 :2007/03/24(土) 04:20:22
自己解決しました。 CW_USEDEFAULTを具体的な数値に置き換えると表示されました。(^_^;)
解決してねぇぇぇぇぇぇ
おう
>>101 ありがとうございます。早速ハンドルを持ったままに変更しようと思います。
>>111 それはここに書いていないだけに違いない
24bitDIBに4の倍数の縛りはなかったと思うぞ。 ただ1ピクセルの転送にWord、Byteそれぞれ1回づつ必要だからDoubleWord1回ですむ32bitのほうが扱い易いのは確か。 4の倍数は24bitDIB扱うライブラリの制限じゃ?(高速化のために4バイトづつ処理する関係上4の整数倍ピクセルじゃないと問題が出る)
要はアライメントの問題って事?
Win32の非圧縮DIBでは、スキャンライン毎のDWORDアラインは必須。 あと、HeapAllocとか使うくらいならCreateDIBSectionの方が楽だな。
>>118 「1行辺りの」バイト数に4バイトアラインの制限がある。1ピクセルあたりではない
>>122 今日寝る前に
>>5 をインストールしたばかりだというのに、
この仕打ちはあんまりだorz
Win32APIのコモンコントロールにデータグリッド(Excelの表みたいなやつ) ってないんでしょうか?
つ[リストビュー]
>>124 リストビューコントロール(エクスプローラの右側のペインのヤツ)ぐらいしかない。
オーナードロー駆使しまくって無理やり似せたことがあるけど なかなか死ねる
>>127 それ、壱からコントロールをフルスクラッチしたほうがまだ楽なんじゃないのか?
描画位地の調整が半端じゃなく大変だったろうに。
ActiveXコントロール
>>128 五時間くらいhDCと格闘してからそうしたorz
フルスクラッチでも挙動や見た目をコモンコントロールに似せようとするとどのみち大変なんじゃねえの
>>131 それはそうなんだが、コモンコントロールってWindowsのバージョンによって
微妙に挙動が異なったりするし、描画位置の調整が恐ろしく大変だから
>>124 みたいなのはフルスクラッチしたほうが楽なんだよ。
そういや、NT3.51以前にListBoxを基底にしてListView作ったっけな
あるファイルを開いているプロセスの一覧を取得するアプリを 作りたいのですが、どのようなAPIを使えばよいでしょうか? ヒントになるようなことだけでもよろしくお願いします。
135 :
124 :2007/03/26(月) 10:49:37
データグリッドをフルスクラッチってどどどどんな感じで作るんでしょうか。
どんなって、普通にウィンドウプロシージャ書いて、ウィンドウクラス登録して、ウィンドウ作るんだろ?
まず縦横に線を引くことからはじめるんだ
データ構造決めてからやればそんなに手間でもないけど 使う人が慣れてるやつとかけ離れてると使ってくれないかもな
オブジェクトの動作の一部だけを上書きするのがサブクラス化、 構築からウィンドウクラスの登録から全部最初から 書くのがフルスクラッチという解釈でいいんすか?
140 :
124 :2007/03/26(月) 11:39:08
自分で線引くってことは、もしかして、クリックされたセルの色反転させるのも 一々座標見て、「ここは上から2番目、左から3番目のセルだから、 座標x、y−s、tで描かれる長方形の色を今ある色と反転させる」とか やる必要あるんですかねッ!?行列のソートも自前!?
>>140 内部でこっそりListBoxとかを持っておくとか。
>>140 ListCtrlで足りない機能を列挙するところから始めたら?
Cでスクリーンショット撮ってクリップボードや適当な画像ファイル形式に保存する プログラムを作成したいんだけどどうしたらいい?
GetDC(NULL)
CreateDC "DISPLAY", 0, 0, 0
便乗質問なんですが 他のWindowで隠れてるWindowのキャプチャって可能ですか?
hDC取得出来ればいけるんじゃね?
150 :
145 :2007/03/26(月) 14:10:59
FindWindow GetDC(hWnd)
隠れてるウィンドウは表に出てWM_PAINTメッセージがきて初めて描画される だから裏にいるときにDC取得しても上に乗っかってるウィンドウの内容がとれる
153 :
148 :2007/03/26(月) 14:26:23
>>149 >>151 GetDC + BitBlt で試してみましたがやはり上のWindowが写りこんでしまいました。
>>152 ああ、やっぱり普通には無理なんですね。
ありがとうございました。
vistaだと、その辺の様子変わるのかねぇ・・・
ビットマップのDC作成して、レンダリングさせればいいじゃまいか。 でも対象プロセスの中で動作させないと色々リソース管理が面倒そうだ。DllInjectionでちょっと実行が楽かな。
>>154 どっかのブログで見た。
DWMまわりをごにょごにょするんだったかな。
あえろが効いていればできるって聞いたけどな vistaいじってみてえ
DirectX使ってるならレンダリングイメージを保持してるのはサーフェスだからなぁ
>>158 ゲームの動画取るソフトで、パフォーマンスのために
APIフックとかしてサーフェイス取得してるのもあるな
ReadFileの第3パラメータ「読込バイト数」を、MessageBox()で出力したいのですが、 下だとエラーが出ます、どうすればいいですか? MessageBox(NULL ,GetFileSize(hFile, NULL) , TEXT("読込バイト数") , MB_OK); エラー↓ error C2664: 'MessageBoxW' : 2 番目の引数を 'DWORD' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
char buff[256]; wsprintf(buff, "%d", GetFileSize(hFile, NULL)); MessageBox(NULL ,buff , TEXT("読込バイト数") , MB_OK);
VB出身かなぁ
まぁ誰もが一度は通る道だ。 最近の.NETとか触ってからWindowsAPIをやろうとすると 文字列→数値や数値→文字列変換を自前でやらないといけないめんどくささにびっくりするもんだ。
うーすみません
>>162 をchar→TCHARにして実行したところまたエラーが・・
error C2664: 'wsprintfW' : 2 番目の引数を 'const char [3]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
一応環境です
Windows2000SP4
VC++2005ExpressEdition
PlatformSDK
>>166 wsprintf(buff, "%d", GetFileSize(hFile, NULL));
↓
wsprintf(buff, TEXT("%d"), GetFileSize(hFile, NULL));
何のためにTEXT()マクロを使っているかを自分で調べた方がいいな
できました!ありがとうございました!
MDIがこうなってるのはわかったのですが、 フレームウィンドウ ↓ クライアントウィンドウ ↓ 子ウィンドウ1 子ウィンドウ2 子ウィンドウ3 フレームウィンドウはWinMainで作るとして、 クライアントウィンドウはWinMainの中でフレームウィンドウ作成後に作るのと、 CALLBACK FrameProc関数がWM_CREATE:を受け取ったときに作るのと どちらがいいのでしょうか??
172 :
171 :2007/03/26(月) 20:51:10
動けばいいんだから細かいところを ゴチャゴチャゴチャゴチャ ゴチャゴチャゴチャゴチャ ゴチャゴチャゴチャゴチャ ゴチャゴチャゴチャゴチャ 気にするな。
>>172 WinMain が管理すべきものはフレームウインドウだけであって、
クライアントウインドウはフレームウインドウが管理すべきだから。
oo に従っておくと同時に考えなくてはいけないことが減ってうれしい。
というか不正なウインドウを操作しようとするようなバグが減る。
>>148 XP以降限定でもいいならPrintWindow()でも使え。
http://www.microsoft.com/japan/msdn/windows/windowsxp/xpvisualstyles.aspx // メモリ デバイス コンテキスト hdcMem に格納されている、
// ウィンドウ hwnd のスナップショットを受け取ります。
HDC hdc = GetWindowDC(hwnd);
if (hdc)
{
HDC hdcMem = CreateCompatibleDC(hdc);
if (hdcMem)
{
RECT rc;
GetWindowRect(hwnd, &rc);
HBITMAP hbitmap = CreateCompatibleBitmap(hdc, RECTWIDTH(rc), RECTHEIGHT(rc));
if (hbitmap)
{
SelectObject(hdcMem, hbitmap);
PrintWindow(hwnd, hdcMem, 0);
DeleteObject(hbitmap);
}
DeleteObject(hdcMem);
}
ReleaseDC(hwnd, hdc);
}
>>175 > WinMain が管理すべきものはフレームウインドウだけであって、
> クライアントウインドウはフレームウインドウが管理すべきだから。
なるほど目から鱗ですWinMainから除きます
そういう考え方ってどうやったら身に付くのでしょうか
本屋行ってもWin32APIのいい本になかなか出会えないです
> oo に従っておくと同時に考えなくてはいけないことが減ってうれしい。
ooはメッセージキューという意味ですよね??
oo = オブジェクト指向 だ
>>177 >ooはメッセージキューという意味ですよね??
たぶんオブジェクト指向( object oriented )のことだと思うよ。
oo == おっぱいおっぱい
oo == ∞
182 :
148 :2007/03/26(月) 21:58:56
183 :
176 :2007/03/26(月) 22:06:53
あ、
>>170 で既出だったのか。ポイントしてるURLまで一緒だし。orz
XPでVistaのサムネイルみたいなの実現してるフリーソフトがあるけどあれは どうやってるんだろう やっぱりPrintWindow?
>>178 >>179 ありがとうございます無知なのが恥ずかしいです><
てっきり無限→ループ→キューかと・・
>>184 それって Vista みたいにリアルタイムで表示が更新されてるってこと?
だとしたら PrintWindow() じゃないと思う。
そうじゃないなら多分、PrintWindow() だと思う。
〜 ∞ [ノ゚д]ノ <キュー待ってー [_] ■■■■◇_◇_□□□□_□ / >
>>184 マジレスすると、
IExtractImageインターフェイス
>>189 ウィンドウじゃなくてファイルの話だったのか?
指定したフォルダに書き込み権限があるかどうかというのは、 どのAPIを使えばいいんでしょうか? サンプルとか置いてあるサイトをご存知でしたら、教えてください。
実際に書き込んでみる…という手がVistaまでは使えた
>>192 サンクス! Vistaでもそれでいけるんだね!・・・という意味になるぞ。お前の日本語ちょっと変。
じゃあXPまでは使えたに訂正
に、2003は……?
書き込めたと思ったら、仮想ナンチャラフォルダに書かれてた、ってことがあるから使えないんじゃね?
ACLちゃんとたどる
(Media Playerの様に、アプリケーション再利用を行いたい為) 多重起動を抑止のアプリケーションを作るのですが、 後起動のアプリケーション(多重起動を抑止破棄される予定)から 既に起動しているアプリケーションにデータを送るには、 WM_COPYDATAの他にどういう手法があるのでしょうか? 説明が不明瞭ですかね?
>>198 ファイルを介してもいいしメッセージでもいいしイベントでもいいし、プロセス間通信の好きな手段が使える。
200 :
198 :2007/03/27(火) 12:24:55
>>199 ご回答ありがとうございます。
数点質問させてください。
@ファイルというのは、FindFirstChangeNotification関数を利用する事でおk?
AメッセージはWM_COPYDATAの他なにかいいのがありますか?
あれば、メッセージ名を教えていただきたいです。
(メッセージ動作は調査しますんで)
B先も書いたとおり、メディアプレイヤーの様な動作を想定する場合、
プロセス間通信ではパイプ?メールスロット?どっちがお勧めでしょうか?
以上です。
多重起動禁止なんてぐぐればいくらでも
>>201 この場合、意図は多重起動禁止というより、
プロセス間通信なんでしょうかね?
WM_COPYDATAじゃいやなのは何で? 他のアプリから送ることが可能になるから?
>>200 (1)通知は別にやった方が安全だから、情報量が多くないならファイルにする必要はないかと。
(2)通知するだけなら、ユーザ定義メッセージでもできる。そのとき32bitのデータは一緒に送ることができる。
(3)どれだけデータを送りたい? それによって手段は変わるわけだけど。
俺はファイルを経由するくらいなら、VirtualAllocExを選ぶな。 送りたいのが255文字以下の文字列ならアトムを使うという手もあるよ。
206 :
198 :2007/03/27(火) 13:38:23
>>201-205 WM_COPYDATAの場合、FindWindow→SendMessageの手順となります。
この時、FindWindowでキャプションをヒントにウィンドウを検索するのに抵抗があり、
もっとスマートでエレガントな方法があるんではないかと思って、
皆様に質問をだした次第です。
ちなみに、コマンドライン情報(ファイルパス)を渡そうと考えています。
FindWindowでタイトル検索するしか知らないならしょうがないな 名前付きパイプでもメールスロットでも好きなほう使えばいいじゃん
209 :
デフォルトの名無しさん :2007/03/27(火) 14:01:24
セカンダリのディスプレイにアプリケーションを起動するにはどうすればよいのでしょうか? GDIでデバイスコンテキストとかモニタハンドルとか探ればセカンダリのディスプレイは特定出来そうですけど, それとCreateProcessのデスクトップ/ウィンドウステーションとどう結びつけるのか良く判りません.
>>198 FMOにウィンドウハンドルつっこんどけば?
多重起動抑止かつプロセス間通信だとFMOが定石じゃね?
211 :
198 :2007/03/27(火) 14:26:23
>>207 Mutexを利用して判定していますね。
んで、既にハンドルがあれば死にに行くみたいなことをしています。
>>208 パイプは考えていましたが、メールスロットは知りませんでした。
調査してみます。
一度ここで質問をクローズしますね。
レスを下さったみなさま、ありがとうございました。
212 :
198 :2007/03/27(火) 14:27:48
>>210 申し訳ありませんが、
FMOってなんですか?
FRONT MISSION ONLINE
ファイル マッピング オブジェクト のことだと思う
215 :
198 :2007/03/27(火) 15:38:44
>>214 ありがとうございます。
皆様、ご回答ありがとうございました。
そういうのってDDEを使ったり そうか、ROTに登録してGetObjectしたりとか
DDE は Vista でほぼ廃止と聞いた(NetDDE が廃止なのは確実)
VistaでDDEがごく一部しかまっとうに動かないって嘆いていた人がいたのはこのスレだっけ?
>>197 それでもVistaでは仮想フォルダにファイルが作成済みだとうまくいかない場合がある。
それを何とか検出しようとすると泥沼になるから(つーか検出させないための互換性機能
なわけだし)素直にmanifest付けるのが良さそうだ
こんにちは、質問させて下さい。 WindowsXPにて、MFCライブラリを使わずに、 バイナリデータを転送する方法ってありますか?? もしあるのでしたら、サンプルを下さい。御願いします。
どこに転送するのさ
int a = 1;
これはエスパーの出番だな
socket
これだけ情報が抜けてるってことはhttpで転送とか?
MDIのフレームウィンドウにステータスウィンドウを表示させたら MDIの子ウィンドウが表示されなくなったんだけど、原因なんでしょう? エスパーさん助けて
ステータスウィンドウ→ステータスバーです
呼んだ?
>>228 ステータスバー表示させるだけで、他のウインドウが表示されなくなる
バグってあるんですか??
LRESULT CALLBACK FrameProcの中の以下が追加されるとMID子ウィンドウが 表示されなくなるみたいです、、、助けて、、 // ウィンドウサイズが変更されたとき case WM_SIZE: SendMessage(hStatusbar, WM_SIZE, wp, lp ); return 0;
returnの下に文が続いてるとか言わないよな? とりあえず return 0; ↓ break; にしてみ
>>231 すごい!!!!出てきました!!!ありがとうエスパー!
case WM_CREATE:とかだとreturn 0;でいいのに
なんでcase WM_SIZEはbreak;なんだろう!?
switchのdefaultにDefWindowProc入れて他はbreakしてreturn 0;にしてる。
げ、俺が学習に使ったページまで・・ こういう場合ってreturn 0;が定石なのか? デフォルトプロシージャに処理させたくないとき以外は デフォルトプロシージャに処理がわかるようにするもんだと思ってた。
>>237 その4個だけでDefWindowProcに渡す必要があるのならこれが正解?
{
case ↓の4個以外のWM_
break;
case WM_COMMAND:
case WM_MENUCHAR:
case WM_SETFOCUS:
case WM_SIZE:
default DefWindowProc
break
}
とりあえずC言語の勉強からがんばれ…
>>238 DefWindowProcじゃなくて、DefFrameProcの話しだろ
>>239 その前に日本語の勉強から頑張れと言うべき
ごめん寝起きでボケてたんで書き直したw DefFrameProcはDefWindowProcと異なり、WM_COMMAND,WM_MEMUCAHR, WM_SETFOCUS,WM_SIZEの4つのメッセージに関しては、ユーザーで行いさせ たい処理を記述した後に、DefFrameProcを呼ぶ必要がある ってことね { case WM_CREATE等 //WM_COMMAND,WM_MEMUCAHR,WM_SETFOCUS,WM_SIZE以外のメッセージ break;// breakしてDefFrameProcに処理を渡す必要なし case WM_COMMAND: case WM_MENUCHAR: case WM_SETFOCUS: case WM_SIZE: default: DefFrameProc(); break; }
自分が処理しないメッセージだけを渡せばよい。 というのは 例えばWM_SIZEなら 「自分でサイズ変更の処理を書く」や「新しいサイズを調べて制限値に引っかかるならサイズ変更しない」というのが「自分で処理した」にあたる。 だから「フォームのどこかに新しいウィンドウサイズを表示する」といった処理は 「自分で処理した」内に入らないのでデフォルトプロシージャを呼び出す必要がある。 こんな風に理解していたんだが間違ってる?
244 :
220 :2007/03/28(水) 12:26:34
どうもすみません、質問の仕方が悪かったです。 2台のPC間で、SOCKETを使い、 片方をサーバー、もう片方をクライアントにして通信しているのですが、 一方から一方にバイナリデータのファイル(拡張子が jpeg, exe 等)を送りたいのです。 テキストデータなら、send,recvで簡単に送受信できたのですが、 バイナリデータは同じ方法で転送できない事に気付きました。 ググってみたところ、MFCを使う方法しか探せなかったんです・・・。 もしかして、バイナリデータを送受信できるSocketAPIって、 提供されていないんでしょうか?? コンパイラはVC.NET 2003です。 エスパーの皆様、ヨロシクお願いいたします m(。−_−。)m
バイナリデータをsend/recvで送受信できないわけが無い。 MFCのソケット関連だって所詮winsockのラッパに過ぎない。
バイナリもsend/recvで送受信できるお
ファイルをテキストモードでオープンして送ってんじゃないの?
MDI子ウィンドウをステータスバーに重ねると、ステータスバーが消えてしまいます。 消えないようにするにはどうすればいいのですか? WM_PAINTになにかすればいいのはわかるのですが、うまくいきません・・・。 (消えたステータスバーはMDIフレームウィンドウのサイズを変えるとまた表示されます) (1)MDIフレームウィンドウ (2)MDI子ウィンドウ (3)ステータスバー +---------------------+ |(1). +---------+ | | |(2).. | | | +---------+ | +---------------------+ |(3). | +---------------------+ ↓ (2)を(3)に重ねてから、(2)を元の位置に移動するとこうなる +---------------------+ |(1). +---------+ | | |(2).. | | | +---------+ | +-----+ +----+ |(3).. | | | +-----+---------+-----+ ↑ステータスバー消える!!
ステータスバーの親を MDIフレーム から MDIフレームの親にすれば?
>>249 できました
だめだ親とか子とか全然理解してないみたい・・・Orz=3
親の心子知らず
子の心親知らず アスペ親子乙
>>244 まさか strlen(buf) とかやってないよな?
254 :
デフォルトの名無しさん :2007/03/28(水) 19:38:04
SetBkMode(hdc , TRANSPARENT)するとして、 透過度の濃度はどうやって設定するのでしょうか?
無理 AlphaBlend
strlenしててもbase64とかでエンコしてればだいじょぶさー してないだろうけど
IEのお気に入り表示した時のように、お気に入りの画面とIE本体の画面と バー(?)のようなもので自由に画面分割を変えるのってどうやってるんですかね?
スプリットウィンドウでぐぐるといい感じになれるけど、 実装していくうちにやな感じに面倒くさくなってくると思う WTLとか使っちゃうのが楽なのかな
>>258 どうもです
ぐぐってみたけど面倒だねこれ・・
MFCを使わずにDAOかADOでSQLServerかAccessとアクセスするサンプルどこかに落ちて無いでしょうか。 ぐぐってみたらMFCばっかでした。
ODBCじゃダメなわけ?
ぶっちゃけ、ADOならVBのサンプルみれば判らないとおかしい。 あとデータアクセスなら、ATL OLEDBという手もあるが
263 :
260 :2007/03/29(木) 02:02:09
解決しましたありがとうございました。
メニューの開くと終了の間にセパレータを入れたい場合、 リソースにはどのように書けばいいのでしょう? IDM_MAIN MENU { POPUP "ファイル(&F)" { MENUITEM "開く(&O)" , ID_OPEN ---ここにセパレータ入れたい--- MENUITEM "終了(&X)" , ID_EXIT } }
MENUITEM SEPARATOR つーか、それくらいぐぐれ
メッセージフックでWMメッセージを破棄する場合、CallNextHookExしなければいいんだっけ?
WM_NULL に置き換えればいい。
サンクス!
リソースエディタで作って、ソース見るという手もある
>>270 最初XN Resource Editorでそうしようと思ったんですけど
出来たファイルがバイナリーで見れなかったよ
名前無しパイプとメールスロットは、 どっちもWaitForSingleObjectで待機できないの? それとも実は待機できるとか? やっぱ、ポール牧んぐしなきゃ無理?
スレッドでポーリング
つか、スレッドなら待ちっぱなしでいいか
・標準入力に対するReadFile()でブロックしている状態に他スレッドから 割り込んでブロックを解除する良い方法はありますか。 ・cookedモードで動作しているConsoleへの入力を、Unixのselect() のように待機する方法はありますか。 改行が入力され、プログラム側が読み込み可能になった時点で待機が 解除されることが望ましいです。
276 :
272 :2007/03/29(木) 14:37:31
>>273−274 おー。その手があったんですね。 姉さん感動したわ。
277 :
デフォルトの名無しさん :2007/03/29(木) 17:35:30
ATL使ってCOM DLL作っているんだが、 メソッド内でCreateDialog呼び出す際のhInstanceって何設定すればいいんだ? hwndないからGetWindowLongも呼べないし え?もしかしてすげー低次元な質問?
>>277 GetModuleHandle(NULL)
DllMain
CComModule::m_hInstだっけな?
ATLならGetResourceInstance?
283 :
280 :2007/03/29(木) 17:53:54
284 :
デフォルトの名無しさん :2007/03/29(木) 18:49:13
>>278-282 thx!!
皆のアドバイスから紐解いていったら
_Module.m_hInst に入ってた!
まじありがとう
285 :
284 :2007/03/29(木) 18:49:45
sage忘れスマソorz
DLLファイルとDEFファイルとHPPファイルがあって LIBファイル無しでコンパイルする方法教えてください
>>286 DEF があれば LIB を作ることは可能
gcc だと LIB 作らずに DLL をリンクに加えるだけでもコンパイルできる
他のコンパイラはどうだか知らない
GCCってmingwのことですか? dlltoolをつかったらエラーが出てlibが作れませんでした。 lib.exeでdefからlibは作くれても リンクで「〜は未解決です」の エラーが出来ませんでした
開発環境がMSVCだとして話をするが。 dumpbin -EXPORTS foo.lib してみて、インポートライブラリのエクスポートシンボルを確認汁。 ヘッダとつきあわせて、名前がヘッダで宣言されている呼び出し規約と 適合しているかチェック汁。 cdeclなら_で始まっているのが正しいし、 stdcallならうしろに@ほにゃららがつく。 つうかC++か。名前マングルされてるとマンドいな。 DEFファイルは本当に正しいのか?
XXX.h #ifdef _EXPORT_LIB_ #define __PORT __declspec(dllexport) #else #define __PORT __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif __PORT WINAPI プロトタイプ定義 #ifdef __cplusplus } #endif
すみません↓をビルドするとエラーが出ます HINSTANCEの型は後ろから二番目の引数なのでキャストしたのですが消えません どこが間違ってるのでしょうか?? (コード) hChild1 = CreateWindowEx( WS_EX_CLIENTEDGE, clsChild1Window, (LPCWSTR)"", //タイトルバーにこの名前が表示されます WS_CHILD | WS_VISIBLE | WS_THICKFRAME, //ウィンドウの種類 -frame, // x座標 -frame, // y座標 x1, // 幅 y1, // 高さ hWnd, // 親ウィンドウのハンドル、親を作るときはNULL (HMENU)1, // メニューハンドル、クラスメニューを使うときはNULL (HINSTANCE)hInstance, // インスタンスハンドル NULL ); (エラー) error C2440: '=' : 'HWND' から 'HINSTANCE' に変換できません。
hChild1の宣言を確認してみればいい予感
「hChild1の型がHINSTANCEだからだ死ねぼけ」 みたいなエラーに思えるがどうか?
とりあえずあれだ、何も考えずにキャスト乱用するの止めれ。
HWND型の方は確認してないだろ。CreateWindowExの戻り値の型はHWND
みなさん、質問があります。 CreateMutex, CreateSemaphore, CreateEventとか、 引数に名前があるCreate〜関数がありますよね。 また、これと対のOpen〜関数もありますよね。 これらは以下のシナリオで利用されると思いますが・・・ ・ハンドルが定義されてない場合 @.Open〜関数→失敗(ハンドルがない) A.ハンドルがないのでCreate〜関数→成功 B.(゚Д゚)ウマー ・既にハンドルが定義されている場合 @.Open〜関数→成功(ハンドルがある) A.ハンドルを流用 B.(゚Д゚)ウマー しかし、ハンドルが定義されてない場合で @とAの間に別プロセスかスレッドで、 ハンドルが生成される可能性もあるんですよね? もし可能性があるなら、矛盾がないように生成シナリオを組むには どういう手法をとるべきでしょうか? それとも、考え違いなんでしょうかね?
常に Create 使えば良し。
クレアテ
Create〜系は、既に同名のオブジェクトがあればそれを開くという動作をする。
MSDN読んでればこんな疑問湧かないのに
MSDNがどんな専門書籍よりも早く正確に理解できるのに なんで読まないんだろうね
MSDNは重いし目次分かりにくくて調べにくいからキライとか言ってみる
関数の詳細調べるにはいいけど、 「何をしたいときには、どの関数を使えばいいか」 っていうのは調べられない
まあ、リファレンスマニュアルだしな。
あと、リファレンスって結構サンプルコードがあってなんぼな面もあるのに MSDNはサンプルコードがろくになかったり、あっても酷いサンプルだったりする。 まぁ、昔に比べれば少しはよくなりつつあるようにも見受けられるが。
MSの解説って日本語でおkなとこが一杯あるしな。 関数リファレンスとかはまだマシだけど。
SDKの中にサンプルあるだろ?
>>310 お前、ちゃんと見たことないだろ。 メチャクチャだぞ、SDKのサンプルは。
あんまりにも酷いんで近年はあんまりみてないけど、ひょっとして最近はマシになってんのか?
そういえば最新版のWindowSDKからSampleがいくつか削除されてるな ATLとMFCを使ってた奴がが全滅っぽい
313 :
298 :2007/03/30(金) 08:12:39
>>303 MSDN読んだ上の疑問だったのです。
用途としての理由というか裏づけがイマイチだったし、
家にある参考文献も役に立たなかったので・・・
また、関数の命名上、Create〜系とOpen〜系には
ルールがあるんではと思い、ここに質問した次第です。
>戻り値
>関数が成功すると、ミューテックスオブジェクトのハンドルが返ります。
>この関数を呼び出す以前にそのミューテックスオブジェクトが存在していた場合は、
>この関数は既存のオブジェクトに対するハンドルに返し、GetLastError 関数は
>ERROR_ALREADY_EXISTS を返します。
MSDNのCreateMutexより。本当にMSDNを読んでいたのであれば、
>>301 が初耳だなんてことはないのだが。
そろそろカチンときそうです。
メインスレッドから直接リストボックスにログ表示していますが、 ログが増えるとメイン処理の速度低下が著しいので、 ログ表示スレッドを分離しようかと思います。 ログ情報(テキスト)はパイプで渡そうかと考えているのですが、 他に良い方法ありませんか?
分離ってどこに分離? syslogにのっとって作ると何かと便利
WM_SETREDRAW
スレッドって言ってるな・・・ 同じプロセスならパイプ使うまでもないと思うんだけど。 メモリ空間は同じだぜ?
320 :
デフォルトの名無しさん :2007/03/30(金) 12:09:53
ChooseFont関数でフォント名とサイズを初期設定する方法を教えてください
LOGFONT構造体に値をセットして CF_INITTOLOGFONTSTRUCT フラグ入れればできないか? つか説明に書いてあると思うんだけど
322 :
デフォルトの名無しさん :2007/03/30(金) 13:39:28
>>321 ありがとう。
確かにかいてあった・・・
>FlagsメンバにCF_INITTOLOGFONTSTRUCTを指定した場合は、この構造体で指定したフォントに最も近いフォントが選択されている状態でダイアログボックスが初期化されます。
これちょっと説明的にわかりずらかった・・
>>316 同一プロセス内のスレッド間通信なら、普通にポインタを渡すだけでいい。
(バッファの確保・更新・解放には同期処理が必要)
ただし、リストボックスを作成したのがメインスレッドだと、リストボックスの管理は
メインスレッドが行うので、リストボックスの動作そのものが問題になっていると
意味がない。この場合、ログ表示スレッドからSendMessage等をしても、それを実際に
実行するのはメインスレッドになる。
(ログ表示スレッドはメインスレッドがメッセージ処理を終えるまで待たされる)
また、上手くスレッドを分けたところで、マルチプロセッサでなければ魔法のように
速くなるわけではないので、単純に処理が重いだけだとスレッドを分けても
全体の速度は変わらない。
逆に、可能であれば速度低下を嫌うメイン処理こそワーカスレッドにするとよいのだけれど。
リストボックスをLVS_OWNERDRAWFIXED|LVS_NODATAで作成して オーナードローで描画、実データを持たさないようにすれば多少速くなるかな。
スレッドにしたところでリストボックスが著しく負荷高いってことには変わりがないと思うよ。 標準のコントロールは大量データを高速に処理できるようになっていないと思う。
大量のデータを高速に処理するために標準機能として仮想リストがついているんだが。
重くなるってリストに何件データ保持してるんだろ? 実際にそこまで過去のログを表示しておく必要があるか考えてみる …これは実装とは関係ないか
3Dモデリングのライブラリってありますか? 街作ったり、車作ったりの
スレタイよく嫁
自アプリのwebbrowserコントロール内でユーザが文字列を選択し、 コンテキストメニューから「コピー」を選んだとき、 クリップボードに書き込まれる前になんらかのイベントを 捕捉することはできますでしょうか? おねがいします。
ヒント:DDR
ヒント:DDR2
ヒント:DDRMAX
EDORAM SIMM
EROIM ESSAIM
┏┳┳┓ ハイ. ┏┳┳┓ ┏┫┃┃┃ 雑談は ┃┃┃┣┓ ┃┃┃┃┣┓ ここまで.┏┫┃┃┃┃ ┃ ┃┃┏━━━┓┃┃ ┃ ┃ 雑談 ┣┫ . ・∀・ ┣┫. STOP!┃ ┗━━━━┛┗┳━┳┛┗━━━━┛ ┏┻┓┃ ┏━┛ ┣┻┓ ┗━━━┫ ┗━┓ ┗━━━┛
339 :
316 :2007/03/31(土) 22:49:05
共有のメモリでリードライトポインタを制御するって意見が多いですね。 パイプにしとけば別プロセスにしたときにも使えるかなってのはあるんですが。。。 速度低下ってのは言葉足らずで、メイン処理を一定周期で 回したいのでログが多くなった瞬間にメイン処理が 待たされるのを避けたいという意味です。 最悪、ログのバッファオーバーフローもあり得るってことで。
ソケットにしておけば別マシンからでも使えるぞ。
DLLの中からCreateWindowでウィンドウを表示できますか? でもってその場合hInstanceにはHMODULEを渡すですか?
>>341 出来る。それでおk。つーか試した方が早くね?
ありがと
344 :
デフォルトの名無しさん :2007/04/01(日) 00:15:48
しつもんがあります。 かなり大量のメモリ確保したいのですがGlobalLockは最高何個まで メモリ確保できますか?上限とかありますか?メモリが許す限り 無制限でしょうか? よろしくお願いします。
ヒント32ビットOS
346 :
デフォルトの名無しさん :2007/04/01(日) 00:24:18
2^32個ということですね ありがとうございました
ポインタやハンドルは4バイトだから それを記録する変数のために(2^32)*4を引くのを忘れるなよ。
SysListView32で「キーボードカーソル」 の現在位置の取得及び設定はどうやるのですか? ウィンドウの中で点線で囲まれていて、 Ctrl + 上下キーで移動する部分です。
GiBってなんだ
MiBはあちこちで記憶を消して回るやつらのことだろ
>>352 DELIVER THE GALAXY OR EARTH WILL BE DESTROYED.
SORRY!
ウィルスミスカコイイ
virus miss?
32ビットでもWindows Server 2003 R2 Datacenterなら128GBまでOK。 Windows 2000 Datacenter Serverでも64GB
知識としては良いのかも知れんが 本当に2GBのメモリを要求するようなプログラムは 設計から間違ってる気がする
科学計算やるソフトなら本当に2GBまで使ったりするけどね〜
32bitのWindowsでやるようなことじゃないな。
>>331 IHTML*Events::oncopy()
書き込み前か書き込み後かは知らん
タスクトレイのアイコンはウィンドウがないと作れないの?
>>361 志村、AWE、AWE
>>362 ウィンドウがないとタスクトレイメッセージが受け取れない
>>359 修士論文ならそれでもなんとかなる@理論化学
Shell_NotifyIconにもNOTIFYICONDATAにも コールバック関数を指定する所は見当たらんが
プロフィールなどに Microsoft MVP for Windows SDK とか書いてる人がいるんですが、どう言う意味なんでしょうか?
しっ、見ちゃいけません
クライアント領域の更新にInvalidateRect(hWnd,NULL,TRUE);を使っているのですが画面がちらつきまくります。 他に良い方法はないでしょうか?
InvalidateRect(hWnd,NULL,FALSE);
>>372 ありがとうございます。
マシにはなりましたが書き直す量が多くなって間隔が短くなるとどうしてもちらつくもんですね……
>>373 背景を消す
新しいのを書く
これを繰り返すからちらつくんだよ。
WM_ERASEBKGNDが呼ばれているなら何もせずreturnする。
ダブルバッファリングをつかう。
方法は検索すれば見つかると思う。
要するにメモリ上で背景や絵を描画して
その完成させた絵をウィンドウに描画する。
全然確認してないけど後者はマングリの問題な気がする
>>375 エラーはコピペしろ。エスパーに期待するな。
だけど俺も
>>376 に一票。
そのlibpngもbccでビルドしたのか?
Error: 'C:\PROGRAM FILES\BORLAND\BCC55\LIB\LIBPNG.LIB' contains invalid OMF record, type 0x21 (possibly COFF) です。すいません。 ビルドは説明通りVC++EEでやりました。それがいかんのですね。 bccならどうコンパイルしていいのかがわからなかったもので。
逆にお前が書くプログラムもVC++でコンパイルすればいい。
>>379 コンパイルはうまくいったみたいなのでこれから実際にloadpngが使えるか試してみます。
>>380 猫で始めたんですがVC++の使い方がよくわからないんですよね。
PSDKのインストールまではやってみたんですがコンパイルもエラーでまくるし……
プログラム→Visual C++ 2005 Express Edition→Visual Studio Tools→Visual Studio 2005 コマンド プロンプト コンパイラのコマンド名はbcc32ではなく、VC++ではcl。これでVC++コンパイラが使える。 コンパイラオプションも色々違うが、MSDN2を見てくれ。
連投すいません。 プログラム内で hBmpBackGround = LoadPng("./images/background.png"); 記述したところ Error: 外部シンボル '_png_create_read_struct' が未解決(D:\MY DOCUMENTS\VISUAL STUDIO 2005\PROJECTS\****.OBJ が参照) などのエラーが16個出ました。 そのままloadpng.cppをコンパイルすると 警告 W8017 loadpng.cpp 1: マクロ 'STRICT' の重複定義 エラー E2109 loadpng.cpp 123: 許されない型(関数 LoadPng(const string &) ) エラー E2108 loadpng.cpp 124: typedef 'png_color' の使い方が間違っている(関数 LoadPng(const string &) ) とかforループの行に対して 警告 W8008 ****.cpp 432: 条件が常に真(関数 ***() ) が出るので1、4、11行目はコメントアウトしています。 他の必要なファイルは***.cppと同じディレクトリです。画像は./images/以下にあります。
>>382 bcc32もVisual Studio 2005 コマンド プロンプトから動かしているんですが、
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\windows.h(28) : warning C4068: 不明なプラグマがありました。
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\windows.h(200) : fatal error C1083: include ファイルを開けません。'windef.h': No such file or directory
というエラーが出てコンパイルできないので仕方なくbccを使ってます……
英語だからって条件反射でエラー文読むの拒否してないか?
>>385 ではなくて、自分の作ったファイルならともかくVCの用意してるファイルでのエラーなんかどう対処すればいいんだ……
ってのとマイクロソフトへの不信感から勝手にお手上げしてる感じですね……
はあ?
面白くなってまいりました
>>384 なぜbcc32でVCのインクルードフォルダが現れる?
1つめは対処法がわからないのでとりあえず置いておいて、 2つめに関してはPSDKのincludeにあったものをVCのディレクトリにコピーしました。 とりあえずC1083になるファイルは全部コピーしたのですが C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xlocale(326) : warning C4530: C++ 例外処理を使 っていますが、アンワインド セマンティクスは有効にはなりません。/EHsc を指定してください。 d:\my documents\visual studio 2005\projects\nyaopuyo\loadpng.cpp(121) : error C2664: 'memset' : 1 番 目の引数を 'std::_Vector_iterator<_Ty,_Alloc>' から 'void *' に変換できません。(新しい機能 ; ヘルプ を参照) with [ _Ty=png_color, _Alloc=std::allocator<png_color> ] この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 等のエラーが多数出ます。
>>389 あ、それはVC++コマンドからclでコンパイルしたときのものです。
>>384 > bcc32もVisual Studio 2005 コマンド プロンプトから動かしているんですが
エラーメッセージの内容から言って、それはVC++のclコンパイラが出しているものだ。
bcc32じゃない。
それにしても、clがwindows.hを読んでunknown pragmaとか、
windef.hが無いだとか、明らかにおかしい状態になっているな。
インストールミスかなにかじゃないのかな。あるいはウィルスにでも
食い荒らされたか。
>>390 C4530はエラーではなくワーニングだが(それぐらいは区別しろ、頼むから)
clに-GXオプションを与えればよい。
2番目はあんたのユーザコードloadpng.cppの問題だろ。
>>390 >memset(vPalette.begin(), 0, nPal * sizeof png_color);
こんなことをやっている糞コードのようだな。
こんなコードはドブに捨ててしまえ……と言いたいところだが、とりあえず
vPalette.begin -> &vPalette[0]
とでも書き換えるんだな。
>>390 コピーする必要は無い。
単にPlatfrom SDKのIncludeフォルダをインクルードディレクトリに追加すれば十分だ。
>>393 -GXよりも警告メッセージのとおり/EHscがお勧め。
VC++ 8からGXは推奨しないというような警告が出るようになったはず。
397 :
デフォルトの名無しさん :2007/04/01(日) 23:15:04
コンパイルが通ったら今度は「うまく動きません。どうすればいいんでしょうか?」と長いソースを張り付ける予感。 しかし、画像のロードとセーブだけならもっと簡単なライブラリがあるんだけどなw
>>390 2番目のはイテレータとポインタをごっちゃにしているのが悪い。
イテレータ⊇ポインタだが、逆は成り立たない。
std::vector<png_color> v;というのがあったとしたら、
vの先頭要素へのポインタは&v[0]で取得できる。
memsetを使わずに、std::fill使えとか、vectorのメンバでどうにかしろとも言えるが。
みなさんありがとうございます。+゚:。(つД`)*.゚。
>>392 自分でincludeディレクトリいじったことはもちろん無いし、ウィルスも恐らく無かったので
インストールミスなんでしょうかね……
>>393 >>396 仰る通りで申し訳ないです。/EHscでコンパイルを試みました。
>>394 3箇所書き換えたらエラーが
loadpng.cpp(121) : error C2064: 0 引数を取り込む関数には評価されません。
に変わりました。
>>395 そうだと思ったんですがその方法を調べるとまた時間がかかりそうだったのでその場しのぎの苦肉の策ということで……
400 :
デフォルトの名無しさん :2007/04/01(日) 23:23:15
>カスタムリソースのPNGをHBITMAPで読み出してBITMAPと同じように扱うにはどうすればいいのでしょうか? >PNG GDI+ libpng カスタムリソース等であらかたググってみましたが理解できませんでした。 この質問を自分もしたかったので、成り行きに注目していたんだが。。。
>>399 vPalette.begin() -> &vPalette[0]
↑
かっこぬけてはるみたいやね。
もう一つも同じ要領。
402 :
394 :2007/04/01(日) 23:26:07
>>399 悪い悪い、
&vPalette[0]()にしちゃったのか?
正しくは、
vPalette.begin() -> &vPalette[0]
だ。
コンパイルはできてオブジェクトファイルまでは作成できました。 ライブラリが見あたらないと出たのでSDKから根こそぎコピーしました。 MSVCRT.lib(MSVCR80.dll) : error LNK2005: _abort は既に LIBCMT.lib(abort.obj) で定義されています。 LINK : warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 error LNK2019: 未解決の外部シンボル __imp__ReleaseDC@8 が関数 "struct HBITMAP__ * __cdecl LoadPng(中略) で参照されました。 等のエラー、警告が山ほど出てきました…… 根こそぎコピーがマズかったのでしょうか。
memset(&vPalette, 0, nPal * sizeof png_color); もしこう書いているのであれば、単にvPalette.resize(nPal)で十分なはず。 png_colorはどうせただのPODな構造体だろ。 デフォルト初期化と0クリアは同じような結果になるはず。
もう働きたくない
つうか
>>375 のリンク先のLoadPng()って、ファイルからロードする仕様じゃん。
カスタムリソースをロードしたいんじゃなかったの?
つうかVC++持ってるんなら素直にCImage使えやってのは禁句か。
GDI+が対応してるフォーマット(PNGを含む)は全対応だし、リソースからの
ロードも出来るぞ。
atlimage.hな。
Express EditionにはATLないだろ。
ああ、Express Editionか。これは失礼。
410 :
375 :2007/04/01(日) 23:53:23
>>407 カスタムからロードしたかったんですが、できるかどうかわからなかったのでとりあえずやってみようって感じです。
で、できないんですか……残念です。
VC++はウィンドウ表示するだけのプログラムすらコンパイルできなかったので(↑でコンパイルまでは解決)bccに乗り換えてました。
本格的にやりたいので製品版も買おうと思うんですが、製品版も今のような調子だったりしないか怖くて手が出ません。
あと、EEでも猫の本とだいぶ違っているし(猫のが古いんだと思いますが)、C++はまだ始めたてだったりするのでそれも手が出ない理由です。
ちなみに製品版買うならVisual Studio 2005 Standard Edition(Academic Edition)ですかね?
やりたいことはWINAPI(将来的にはDirectXでも)でゲーム制作です。
libpngはPNG_SETJMP_NOT_SUPPORTEDを指定してビルドしない限り、
longjmp()でエラーレポートを行う。
>>375 のコードはsetjmp()を呼んでいないようだから、多分全く
エラーに対応していないな。
もっとマシなコードを探せ。
setjmp(), longjmp()である以上、デストラクタは実行されないから、
その区間でvectorなんぞを使うのは論外だ。
ま、CreateDIBSection, png_create_read_structあたりのキーワードで
google codesearchでもすれば、色々引っかかるだろ。
>>410 > 本格的にやりたいので製品版も買おうと思うんですが、製品版も今のような
> 調子だったりしないか怖くて手が出ません。
PlatformSDKはEnterprise Editionではそもそも付属してなくて自分で別途
インストール&環境設定しなきゃいけないからな。
あんたがインストールにミスったってだけの話だろ。
Visual Studioの品質の問題じゃない。
あんたに問題解決能力がないだけの話。それは、どんな製品を使おうが変わらないよ。
413 :
348 :2007/04/02(月) 00:02:25
おながいします・・・orz
>>411 VC++ならSEHとの絡みでsetjmp/longjmpでも自動変数のデストラクタが呼ばれるはず
お前らスルー汁
ていうかもう、API全然関係ないなwww
>>414 へぇ。それはいいことを聞いた。教えてくれてありがとう。
ま、それに依存したコードは書く気になれないが……
何だこのスレの伸び具合は
419 :
375 :2007/04/02(月) 00:08:05
Platform SDKよりもWindows SDKのほうがお勧め。 スタートメニューの中にVS 2005への設定を行うショートカットがある。 それを実行するだけで、VSコマンドプロンプトからもIDEからも インクルードパスの設定を含めWindows SDKを使用できる状態になる。
開発環境すらちゃんと構築できないような奴には無理ということで
>>413 取りあえず LVM_ 以下の全メッセージを調べてみろ。話はそれからだ。
初心者叩きはその辺にしておいて結局のところこれは誰もわからんのだね? >カスタムリソースのPNGをHBITMAPで読み出してBITMAPと同じように扱うにはどうすればいいのでしょうか?
普通にLoadResourceで読んでBITMAPに変換すれば
EE使ってるちょちんちゃだから、PNGのリソースは妄想に過ぎないに1000ペリカ と思ったら今日は四月馬鹿じゃんw
もう四月馬鹿は終了している件
>>423 リソースをバイナリデータとして読み取り、それをストリーム化、
Gdiplus::BitmapのIStream*を受け取るコンストラクタへ渡す。
そしてメンバのGetHBITMAPでビットマップハンドルを得る。
これでいい?
428 :
デフォルトの名無しさん :2007/04/02(月) 01:01:58
UpdateLayeredWindowでウィンドウを透明化させると黒色が完全透明扱いに なっちゃうんだけどどうやったらSetLayeredWindowAttributeと同じような処理にできるかな
黒でもアルファ値は255にする
>>427 横やりでなんですが僕も気になるので実装を詳しく書いて頂けると助かります。
>>430 詳しくも何も、書いてあることそのままやればいいだけじゃないのか?
さっきから「僕も気になる」って人が多い件
GDI+を使うんならPNGのローディングの面倒はGDI+が見てくれる。
>>427 そのままでいいはずよ。
Bitmap::Bitmap(HINSTANCE,WCHAR*) 使えるか知らんがこんなコンストラクタもあるみたいだ
435 :
デフォルトの名無しさん :2007/04/02(月) 02:39:41
TreeViewのExpandをキャンセルするにはどうしたらいいんでしょうか?
僕も気になってるので完全なソースコードをください
僕も絶対に気になります。 ソースコードお願いしますこれは絶対に必要ですね。
438 :
432 :2007/04/02(月) 03:10:06
すまない。俺が悪かったwww
439 :
432 :2007/04/02(月) 03:15:06
>>435 ツリーが展開される直前に親ウィンドウに
TVN_ITEMEXPANDINGが通知されるからそれを引っ掛ける
僕も「僕も気になります」が大杉て気になります
441 :
デフォルトの名無しさん :2007/04/02(月) 07:05:30
質問スレで言うのもなんだけど、
>>427 のレスだけでコードが書けない奴って真性のバカだろ。
確実に言えるのは書けなかったとしたらもはやこのスレで扱う内容ではない
443 :
428 :2007/04/02(月) 08:24:22
>>429 SetPixelで0x00ffffffは白が表示されて0xffffffffだと透明になるから
アルファ値は読んでるみたいなんだけど、
0x00000000でも透明になっちゃうんだよ
444 :
デフォルトの名無しさん :2007/04/02(月) 11:37:15
>>439 ありがとうございました。
もうひとつお願いしたいんですが、
イメージインデックスを変える方法はどうしたらいいんでしょうか。
445 :
439 :2007/04/02(月) 11:47:50
>>444 イメージリスト作ってLVM_SETIMAGELISTでSendする
間違えたTVM_だった
448 :
デフォルトの名無しさん :2007/04/02(月) 12:26:55
猫でも分かる〜でWin32プログラミングの基礎は分かりますか?
猫のWin32は言っちゃ悪いけどひどいコーディングしてると思う メニューのとこ見たら右クリックごとにメニューの生成と破棄繰り返してたよ。
オブジェクト指向的でいいじゃん
>>449 そうですか・・・
本を買う金がないので、400章まであるサンプルを一つ一つ手打ちで勉強してるんですが、
ところどころ非効率なコードが書いてあるということですね。注意して読みます。
ありがとうございました。
452 :
デフォルトの名無しさん :2007/04/02(月) 12:38:09
方法論を学ぶ所であってコードを学ぶ所ではないと意識しておけばおk
効率に限らず、独学の初心者的な泥臭いコードが多い あれは教科書ではなくノートだと考えろ 丸写しすると他人の変な癖まで取り込むことになる
反面教師なんだよ。
ついでに思うのは果たして400章までやる必要があるかどうか? 応用って言葉の意味が無いよな
必要な動作を追うには、再利用性を考えて効率的に使えるように書かれたコードよりも見やすい。 STLやboostのコードを逐次追うような状態を想像してみると分かりやすいだろう。
まぁでもなーーーーんもわかんない人にはわかりやすいとは思う。 俺も猫からプログラミング入ったクチだし。数年前の話だけど。
猫は雰囲気だけ掴んで詳細はMSDNって感じだな。
猫とMSDNの間に差ありすぎだろ
猫を含めたWEBサイトだけで窓プログラミングを覚えた
(正確にはMFCの本を1冊だけ買ったけど)俺でも
猫のコードを「あまり良くない」と思えるぐらいには成長した
結局
>>452 と
>>456 だと思う
猫はほとんど見ないで解説サイトだけで勉強したけど 猫のコードが何故よくないのかわからない俺もいますよ まだまだ勉強不足ってことだろうか・・・
後学のために質問なんだけど、 GDI+とか他のライブラリ使わないで、 PNGの画像ファイルをDCに描画する方法って、 どうやればいいのか、解説してるところあったら教えてほしい。
libpngでテンポラリメモリ上に展開したのち、SetDIBitsToDeviceとか DIBSectionのメモリ上に展開してBitBltとか。 OleLoadPictureしてRenderとか。
windowを必要としないソフトでメッセージだけを受け取られますか?
投げる側がPostThreadMessage使うなら、ウインドウは要らない。
libpngが既に外部ライブラリだと思うんだけど そういうことでなくて?
468 :
デフォルトの名無しさん :2007/04/02(月) 18:42:51
>>465 エスパー回答するとシステムトレイ上のアイコンからWM_COMMANDを投げたりできる
でもこれは厳密にはWindowを作ってることと一緒
>windowを必要としないソフトでメッセージだけを受け取られますか? Windowを作らずに、Windowメッセージだけを取れるか?という意味? 例えばタイマーとか
他のコントロールを変更するときに使う。 もちろん、LTEXTも変更できるので、位置だけ取って、あとから必要に応じて書いたり
何でもかんでも静的に決まると思ったら大間違いだ
475 :
デフォルトの名無しさん :2007/04/02(月) 20:10:20
俺はlibpngとlibjpegとlibtiffを使って相互にフォーマット変換できるクラスを作った。 もちろん、DIBに変換できるのは言うまでもない。 いや、ただそれだけなんだけど。
>>473 他のコントロールを変更するとは、どういう意味なんでしょ??
ボタンならボタンに表示されてる文字列が変わる。 というかSetDlgItemTextを何だと思ってたんだ。
動的に変えたい場合
逆に考えるんだ OSもダイアログテンプレートのLTEXTの文字列を読んで SetDlgItemTextを呼び出してるのだと
CreateDialogを使用してダイアログを表示したいのですが戻り値がNULL、GetLastErrorの値が1812 になり表示できません。 ボタンを押したときに表示したいのでメッセージループに下のように埋め込んでいるのですが。 (ShowWindowとUpdateWindowは省略しています) case WM_COMMAND: hDlgWnd =(ghInst, MAKEINTRESOURCE(IDD_DIALOG1), ghWndKihon, (DLGPROC)MyDlgProc); なにか、こうじゃないの?的な物でもいいのでヒントください。
肝心の「CreateDialog」が抜けていますがコピペミスなのでw気にしないでくださいw
エラーコード1812の意味を調べりゃ一目瞭然
481ではないしついでに聞こうとも思っていないが、 調べてみたらなるほど一目瞭然だな。
Error Lookupで見ると「指定されたイメージ ファイルはリソース セクションを含んでいません。 」。 ごめん、馬鹿なんです。resource.hの中に手動で何か追加するとか、そんな感じなの?
EXEの中にダイアログのデータが入っていないということ。 EXE内にリソースを入れるようなことをしたか?
>>486 おお!VCにScript1.rcを追加したら表示されまいた!
ありがとー!
また来ますノシ
低脳の悪寒
GetLastErrorの値まで調べておきながらエラーメッセージを調べないって何なんだ・・。
491 :
471 :2007/04/03(火) 00:04:38
>>443 アルファ値って255が不透明のはずだったけど
VCのリソースエディッタでダイアログをデザイン、ラジオボタンを並べました。 グループボックス内に配置し2グループに分けたのですが どうも両グループ同一と認識いされているようで、2個同時にオンにできません。 同時に2個オンにするにはどうすればいいのでしょうか?
各グループで先頭のタブオーダーを持つラジオボタンのグループプロパティをTRUEにする
>>493 ラジオ1 ラジオ2 ラジオ3 で1塊、ラジオ4 ラジオ5 ラジオ6 で1塊 として
(レイアウト - タブオーダー で順序そろえてから)
「ラジオ1」 と 「ラジオ4」 のプロパティ グループ にチェック
それ以外のラジオのプロパティ グループ はアンチェック
これで望みの動作になると思われ
Vistaの検索を自分のプログラムから利用するための 情報へのポインタはないでしょうか?
はい。
499 :
デフォルトの名無しさん :2007/04/03(火) 11:54:20
>>492 そういえばそうだ
ますますわかんなくなってきた
ストリーミング放送(livedoorのネットラジオ)を録音するのに良い方法はないでしょうか? 放送をダウンロードするのではなくて、現在再生中の放送を録音するみたいなAPIとか無いものでしょうか? ちなみに当方VB6です。
>>499 RGBQUAD の rgbReserved が 0 デフォルトなんだよね…
1-alpha と alpha がごっちゃごちゃだわ
>>500 せめてもう少しマトモな書き方ができないものか
LivedoorStreamingRecording()
>>500 物理的にライン出力と入力を線でつないで録音するといいよ。
プログラム中で生成したカラーのビットマップをマウスカーソルに 設定するにはどうしたらいいでしょうか? マウス用のリソースを 用意せずにリアルタイムにマウスカーソルを書き換えたいのです。
win32APIの勉強し始めたばかりのオレが答えてみる マウス表示を消してマウス位置を調べてそこにBMPを描画すればいいんじゃね?
CreateCursorしといて、WM_CURSORとかでSetCursorでなくて? システムグローバルに書き換えたい、というなら話は別だが
509 :
デフォルトの名無しさん :2007/04/03(火) 20:17:44
よろしくお願いしまっす。 SetForeGroundWindow等でもフォアグラウンドになったりしない ウィンドウってできないんでしょうか。 現在はWS_EX_NOACTIVATEをつけて、 WM_MOUSEACTIVATEにMA_NOACTIVATEANDEATを返すようにして 普通ではアクティブ化しないようになっています 具体的にはツールチップのようなウィンドウを マウ筋の「スクロールを監視」に引っ掛からないようにしたいんですが。 当該ウィンドウ上でホイールを回転させると アクティブ化しないまでも他のウィンドウのフォーカスを奪ってしまうんです
制御したい動作のはフォアグラウンド化なのか、アクティブ化なのか、フォーカス持ちなのか。
511 :
509 :2007/04/03(火) 21:02:37
どうも。言葉が曖昧ですんません 現在アクティブなウィンドウが非アクティブにならなきゃいいんです。。 つまりアクティブ化しないように出来ませんかってことで
512 :
506 :2007/04/03(火) 21:02:43
>>508 CreateCursorを調べてみましたが、モノクロのビットマップカーソルは
作成できるようです。今回はカラー(24bit以上か、せめて16bit以上)
のマウスカーソルを作りたいのです。
システムグローバルではなくて、自アプリのカーソルのみです。
>>507 その方法だと、自アプリの縁を少しはみ出した状態で(ホットスポットが
自アプリ内)、クライアント領域の外にマウスが描画されないです。
513 :
506 :2007/04/03(火) 21:11:20
カラーのマウスカーソルに関しては、CreateIconIndirectっていうのを 見つけました。
Response & Balance 2600cc Dohc Engine Twin Turbo
516 :
デフォルトの名無しさん :2007/04/04(水) 01:19:05
>>511 違う方法になるけどWS_EX_TRANSPARENTは駄目?
517 :
509 :2007/04/04(水) 02:20:26
>>516 ありがとうございます。
マウスホイールが透過するようになりました
が、クリックも透過してしまいます。
なんか情報後出しになってしまいましたが。
518 :
517 :2007/04/04(水) 02:36:46
>>517 WM_COMMANDを監視してマウ筋から送られてくるコマンド(message)に対して
return値をごにょごにょする
>>509 WM_WINDOWPOSCHANGINGでSWP_NOACTIVATEを強制的に立てる
>>520 その先読んでみたけど仕様を勘違いしているただの間抜けにしか見えないんだが
ウィンドウ上にボタンを配置し、クリックで新しいウィンドウを表示するプログラムを作成しています。 クリックで呼び出される側は WM_DESTROY メッセージが来たときに SendMessage(hWnd, WM_CLOSE, 0, 0L); として終了しています。 で、質問なのですがクリックで表示するウィンドウのCreateWindowで取得したハンドルは クローズしなくてもリークしませんか? しないといけない場合、どこですればいいのでしょうか?
親ウィンドウが破壊されるとき、 子ウィンドウも一緒に破壊される。
524 :
デフォルトの名無しさん :2007/04/04(水) 17:07:22
rand()の代替ルーチンがあったら教えてください
CryptGenRandom 再現性で問題が出るかもしれないが。
Win32APIにはないから自分で作れ。
まあ2000以降は仕様上プロセスが終了したら基本的にオブジェクトは何も残らんけどな
お○んこ!しかも無修正!!
こんやのおかずにちょうどいい。くれ。
俺、今がちょうどこういうのが欲しくなる時間なんだ
>>527 終了したプロセスへのハンドルをつかんでい00る、別プロセスがあるかもしれない。
> つかんでい00る 00ってなんじゃらほい
パーマン絵描き歌を思いだした
ここ何スレだよw
プロセスの実行時間を計るのはどうしたらいいんでしょうか? 実時間じゃなくてプロセスの一部の処理に使ったユーザー時間のようなもの が欲しいです。 PDHとやらを使うのかと思ったんですがよく分かりません。
>>539 timeGetTimeの差分じゃダメ?
GetProcessTimesじゃらめぇ?
>>539 >実時間じゃなくてプロセスの一部の処理に使ったユーザー時間のようなもの
>が欲しいです。
ここを詳しく。
処理に費やした時間を計測したいのか?
544 :
539 :2007/04/05(木) 13:24:19
>>542 そうです。Unixのtimeの結果のようなものを計算したいんです。
GetProcessTimesを使ってみます。ありがとうございました。
545 :
デフォルトの名無しさん :2007/04/05(木) 13:46:06
モジュール内で抜けるまでどれくらい時間がかかてtるのかを計測したいなら GetTickCountでいいような希ガス
すいませんWin32API入門の第72章リソースで詰まってしまいました BorlandC++にBCCFormを入れてます EDGEで32×32のtest.bmpを作って、アイコンとして読み込みたいんですが LoadIcon()は分かるんですが、そこに至るまでが???で 宜しくお願いします
>>546 「メニュー」→「プロジェクト」→「プロジェクトに追加」
ファイルの種類を「リソースファイル (*rc)」にして、作成したrcファイルを指定する。
これだけで、後はその例通りに行けるよ。
>>547 レスありがとうございます
でもどうやらどつぼにはまったようで、さっぱり分かりません
.RES拡張子のファイルがないので
リソースコンパイラがよく分かってないようです
BorlandC++なら自前で .res にコンパイルしなくても コンパイラが自動でやってくれる。
550 :
デフォルトの名無しさん :2007/04/05(木) 18:45:41
FILETIME構造体の DWORD dwLowDateTimeと DWORD dwHighDateTime の各ビットの意味教えてください。 年と月と日と時間が何ビットに書かれているかわかりません。
直接ビット見たことないな
554 :
デフォルトの名無しさん :2007/04/05(木) 19:17:29
素直にfiletimetosystemtime使ったほうが早そうですね こちらで検討してみます。 ありがとうございました
555 :
デフォルトの名無しさん :2007/04/05(木) 19:25:07
Notepadのように、フォームの領域一杯にEDITを表示してフォームのサイズ変更に追従させたい。 ドットネットで言う textBox1.Dock = DockStyle.Fill; をやりたいのですが これってCreateWindow時にウィンドウスタイルのようなもので設定するとばかり思っていたのですが そのような設定が見あたりません。 もしかしてウィンドウプロシージャのWM_SIZEのところで、自分でEDITのサイズを変更しないといけないんでしょうか?
そのまんまサイズ渡してやるだけ
>>549 >>541 レスありがとう
EDGEに.icon保存形式があったのでそれにしました
色々弄ってみて最後にBCCデベロッパーのDOSアイコン(コマンド実行)から
brc32 test.rc main.exe と入力したら
何とかmain.exeのアイコンだけ変えることができました
exe起動後のウィンドウタイトルバーの横のアイコンが変わらないので
また弄ってみます
>>557 それはウィンドウクラスのアイコンを設定すればいい
>>556 できました。
覚悟はしていたが本当に全部で自分でやらないといけないんだな・・。
>>558 この部分のことですよね? winc.hIcon = LoadIcon();
一応LoadIcon(hInstance, TEXT("KITTY") );とやってるんですがならないので
初めからやり直してみます
何とか上手くやれるようになりました! 何度も聞いて申し訳なかったです レスしてくれたみなさんありがとうございました
デモ落としてみたけど根性ありすぎwww
>>561 これWin32APIで作られてるのか!?
>>565 思いっきりWTLって書いてあるじゃねえか
mcisend
VC++とplatformSDKで mcisendcommad()でデバイスを開くときに MCI_OPEN_PARMS構造体を使う場合でデバイスタイプにMPEGVideoを指定する事は出来るんでしょうか? mmsystem.hにはMCI_DEVTYPE_SEQUENCERまでしか定義されてないようですが…
64ビット環境では___asmが使えないってのは本当なの?
571 :
は@c178.016.c3-net.ne.jp ◆cplnFO9T0I :2007/04/06(金) 21:30:33 BE:90784692-2BP(1000)
リストビューを使うためにLV_COLUMN構造体を定義しようとしても「定義されていない識別子です」と突っぱねられます。 VC.net20003を使っているのですが、どうすればいいでしょう。 前に痛い目を見たので#define WIN32_LEAN_AND_MEANはカットしているんですがね....
573 :
デフォルトの名無しさん :2007/04/06(金) 21:35:36
UNIXでの ls -a -r に相当するコードが知りたいです。 隠しファイル等を含む全てのファイルを再帰的に取得する方法を教えてください。
>>573 っ FindFirstFile
っ FindNextFile
っ FindClose
UNIX系のファイルシステムに、そもそも隠しファイルという概念など無い。 lsが勝手にフィルターしているだけ。
576 :
デフォルトの名無しさん :2007/04/07(土) 02:09:16
>>575 それを隠しファイルというんじゃないのか
WinだってExplorerが勝手にフィルターしてるだけだし
Win(というかFATとNTFS)にはファイル属性に隠しファイルビットがあるだろ つーか質問はWindows上で隠しファイルを含めて検索する方法じゃないのか? もう回答出てるけど
VC2005でダイアログボックスを作りたいのですが、どうやって作ったらいいのかわかりません。 VC2003だったらリソースの追加でできたのですがorz ググッてみましたがわかりませんでしたので、教えてもらえると助かります。
>>578 Express Editionにはリソースエディタは付属しないので作れない。
別途にリソースエディタを用意するべし。
リソースエディタとはなんですか? リソースの作り方すらわからない(´・ω・`)
これだからVCはオススメできない。 とりあえず、今までに作ったプロジェクトの拡張子が.rcの奴をテキストエディタで開け
開きましたー!!
>>580 2003で作ったときには開発環境でダイアログボックスを作れたでしょ?
あれは内部的にリソースエディタと呼ばれるツールを呼び出してただけなの
んでExpress Editionではその機能が削除されてるので作ることができない。
作ることができないといってもVCの開発環境で作ることができないだけで
リソースをプログラムから読み込むといったことは可能なので
フリーソフトのリソースエディタでダイアログを作るしかない、ってこと
リソースって言っても二種類の意味で使われてない? バイナリで書かれたリソースとテキストで書かれたのリソース どう呼び分ければいいんだろう??
「書かれたリソース」の間違い
っ「リソーススクリプト」
リソース ├フォーマットがテキストの └フォーマットがバイナリの
コンパイル済みリソースがバイナリリソース。
テキストのリソースファイル(.rcファイル)+バイナリ(画像など)を リソースコンパイラでコンパイルして .res ファイルをつくり リンカで EXEにバインドする。直接.resを編集するツールもある。
僕ハッカー
僕バッカー
バカバッカー
バカばっかー
けこん
winAPIでテキストエディタに文字列を書き込んで保存したいのですが、どのようにしたらよいですか? VC使って組んでいます。
意味が分からんな 外部のテキストエディタに文字を送り込むのか? 自前でテキストエディタを作るのか? …単にテキストエディタじゃなくてテキストファイルってオチか?
普通にfopen、fwrite?
他のアプリケーションのウインドウの座標と大きさを取得するにはどうすれば良いですか? また、座標と大きさを指定するにはどうすれば良いですか?
GetWindowRect MoveWindow プロセス跨いで使えたかはシラネ 春 の 香 り 乙 !
602 :
596 :2007/04/08(日) 10:28:48
マウスフックについての質問です。MOUSEHOOKSTRUCT構造体の内容を フックプロシージャから他のウィンドウプロシージャへ渡したいのですが、 上手くいきません。フックプロシージャのコードは次の通りです。 LRESULT CALLBACK HookProc(int nCode,WPARAM wp,LPARAM lp) { COPYDATASTRUCT cds; if (nCode < 0) CallNextHookEx(hHook,nCode,wp,lp); cds.dwData = wp; cds.cbData = sizeof(MOUSEHOOKSTRUCT); cds.lpData = (PMOUSEHOOKSTRUCT)lp; SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cds); return CallNextHookEx(hHook,nCode,wp,lp); } 間違いがあれば指摘して下さい。又、参考になるソースがあれば教えて下さい。 お願いします。<(_ _)>
相手が別プロセスなら自メモリ領域のポインタを渡しても無意味。 相手のメモリ内に領域を確保してそのポインタを渡す。
Windows XPでのCPU使用率の取得方法を教えてください
606 :
603 :2007/04/08(日) 14:19:45
>>603 その中だとhWndが一番怪しい。
SendMessageするときにhWndにちゃんとした値が入ってる?
608 :
603 :2007/04/08(日) 14:36:11
問題ありません。 「猫でもわかる」の162章のように、フックプロシージャ内での処理には成功しました。
そもそもうまくいかないって何が巧くいってないんだ? WM_COPYDATA が hWnd の WindowProc に来ないのか、来た WM_COPYDATA からデータが取れないのか
610 :
603 :2007/04/08(日) 15:00:54
>>609 WM_COPYDATAメッセージは届くのですが、COPYDATASTRUCT構造体の内容の参照が上手くいきません。
フックは次のようにセットしています。
#define EXPORT __declspec (dllexport)
#pragma data_seg(".shared")
static HHOOK hHook = NULL;
static HWND hWnd = NULL;
#pragma data_seg()
EXPORT HHOOK SetHook(const HWND hCaller)
{
hWnd = hCaller;
hHook = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)HookProc,hInst,0);
return hHook;
}
ウィンドウプロシージャでは次のように処理しています。
case WM_COPYDATA:
if (((PCOPYDATASTRUCT)lp)->dwData == WM_NCLBUTTONDOWN) {
pmhs = (PMOUSEHOOKSTRUCT)lp;
if (pmhs->wHitTestCode == HTCAPTION) {
SetWindowText(pmhs->hwnd,"猫でもわかるフック");
}
}
break;
>>610 > pmhs = (PMOUSEHOOKSTRUCT)lp;
pmhs = (PMOUSEHOOKSTRUCT)((PCOPYDATASTRUCT)lp)->lpData;
だろ常識的に考えて
612 :
603 :2007/04/08(日) 15:38:41
>>611 すみません。ウィンドウプロシージャの処理を訂正します。(^_^;)
PCOPYDATASTRUCT pcds;
PMOUSEHOOKSTRUCT pmhs;
case WM_COPYDATA:
pcds = (PCOPYDATASTRUCT)lp;
pmhs = (PMOUSEHOOKSTRUCT)(pcds->lpData);
if (pcds->dwData == WM_NCLBUTTONDOWN) {
if (pmhs->wHitTestCode == HTCAPTION) {
SetWindowText(pmhs->hwnd,"猫でもわかるフック");
}
}
break;
ローカルフックには成功したのですが、グローバルフックに失敗します。
SetWindowText が気になって仕方ないが、 WindowProc 内での pcds->dwData とか pmhs->wHitTestCode とかはどうなんだ? 正しい値を示してるのか?
614 :
603 :2007/04/08(日) 16:46:12
他のアプリケーションにフックDLLがロードされていることは確認できたのですが、 COPYDATASTRUCT構造体の内容が空のようです。
616 :
603 :2007/04/08(日) 18:54:38
あたながたが思いのほか低スキルだったのでがっかりしています。 2ちゃんもたいしたことないですね。
↓真603による「616は私ではありません」というレス
615は無視かよ
619 :
603 :2007/04/08(日) 19:50:46
>>615 SendMessage(pmhs->hwnd,WM_SETTEXT,0,(LPARAM)"猫でもわかるフック");
としたのですが、ウィンドウタイトルは変更されません。
間違ったソースを掲載したことについては深くお詫びします。大変申し訳ありませんでした。
>>619 dll.defに
SECTIONS
.shared SHARED READ WRITE
が有るか確認するとか
char sz[100];
wsprintf(sz, "pmhs->hwnd:%p ", pmhs->hwnd);
SetWindowText(hWndExe, sz);
として様子を見るとか
うまくいかないときには何がおきてるのかを見極めて原因究明。 期待通りにいくかいかないかだけを判断してたらいつまでたってもなおらん
デバッガ使ってないのかね? 1ステップずつ確認すれば、問題点はすぐに分かると思うが。
フックプロシージャのステップ実行なんて出来るの?
フック先のプロセスにアタッチしろ。
別にデバッガ使わなくてもログをファイルに書き出せばいいだけだし
626 :
603 :2007/04/09(月) 10:33:11
>>620-624 レスありがとうございます。
>>620 モジュール定義ファイルは作成済みです。内容は次の通りです。
LIBRARY hook
SECTIONS
.shared READ WRITE SHARED
EXPORTS
HookProc @1
ResetHook @2
SetHook @3
pmhs->hwndの値をウィンドウプロシージャ内で出力したところ、
ローカルフックでは00060AA2でした。グローバルフックでは何も出力されませんでした。
グローバルフックではWM_COPYDATAメッセージが届いていないようです。(^_^;)
>>622 デバッガは使用していません。OutputDebugStringを使って変数の値をトレースしています。
>>623 プロセス間を跨いだデバッグ作業はどのように行うのでしょうか?
>>624 明示的にアタッチする方法があるのですか?
>>621 今までの状況を整理してみました。
・ローカルフックには成功し、グローバルフックには失敗する。
・ローカルフックの場合、フックDLLがロードされ、WM_COPYDATAメッセージが届く。
・グローバルフックの場合、フックDLLはロードされるが、WM_COPYDATAメッセージは届かない。
627 :
デフォルトの名無しさん :2007/04/09(月) 11:00:13
WindowsXPの[ユーザのログオフ]−[ユーザー切替]−[指定したユーザーのログオン] という作業をプログラムから操作したいんですけど可能でしょうか? 可能なら使用するAPIを教えて頂けないでしょうか?
不可
629 :
627 :2007/04/09(月) 11:11:17
やっぱりですね 即レスありがとうございました。
>>627 Ginaで何とかなるでしょ。Ginaでぐぐってみたら?
>>627 レジストリに自動ログオンの設定を書き込んで再起動
>>626 プロセスにアタッチするのははDLLをデバッグする場合の基本操作なんだが、
そんな当たり前のことを自分で調べられないのか?
グローバルフック成功してないんじゃね?
634 :
デフォルトの名無しさん :2007/04/09(月) 15:14:14
Windowsで標準入力や出力がリダイレクトされてるかどうか知る方法を教えてください。
635 :
デフォルトの名無しさん :2007/04/09(月) 15:56:31
現在VS2005を使っているのですが、作成してるネイティブアプリのVisualStyleを切るにはどの様な方法がよろしいでしょうか? よろしくお願い致します。
まにふぇすとぶっこわす
むしろバージョン5のcomctl32.dllを使うようにマニフェスト書け
>>626 コードを一から書いたら、グローバルフックでもタイトルバーが変わった。
期待した動作にならなかったら、一から作り直すのも手かと。
つか、サンプルコードのコピペはおすすめできない。
>>636-637 レスありがとうございます。
というか何か勘違いしてました。。
VS2005では勝手に有効になると思ってましたがならないんですね・・・
この前作ったときはなってたような・・・気のせいか・・・orz
640 :
デフォルトの名無しさん :2007/04/10(火) 00:34:29
ツリービューのノードのアイコンを一つだけ変える場合って どうすればええすか? Expandしたら広がったフォルダを表示とか。
TVM_SETIMAGELIST で ImageList セット TVM_SETITEM での fMask に TVIF_IMAGE|TVIF_SELECTEDIMAGE なり TVIF_STATE なり...
642 :
デフォルトの名無しさん :2007/04/10(火) 12:49:04
USBリムーバブルハードディスクのデバイス識別子?(USB\Vid_04xx&Pid_10xx)とかから 割り当てられている論理ディスクのボリューム名を取得したいのですが どの辺を参照したらいいでしょうか。 「管理ツール」→「ディスクの管理」で下側ビューの左側「ディスクn」を右クリックしてプロパティを表示させて、 「ボリューム」プロパティーシートの下側リストビューに表示されているものが欲しいです。
643 :
デフォルトの名無しさん :2007/04/10(火) 16:50:17
SetMenuContextHelpIdに渡す「ヘルプコンテキスト識別子」ってなんなんですか? 「ヘルプコンテキスト」ってリソースで用意するんでしょうか? それってどのような物で,どうやって作るんでしょうか?
644 :
デフォルトの名無しさん :2007/04/10(火) 18:08:33
Win32API を使って、DLL 中のダイアログリソースの PUSHBUTTON の文字列を取得することはできますでしょうか? FindResource -> LoadResource -> LockResource まではできましたが、文字列の取得が分からない。
自分で解析
ゲームプログラムで質問ですwin32apiの関数を使うよりdirectxを使った方が画像の描画は早いですか
シューティング系ゲームです。既にwin32apiで作ったのですが画面のスクロール速度を一定以上にあげるとフレームスキップが起こるです。
650 :
648 :2007/04/10(火) 21:38:04
>>649 画面更新に速度を要求するなら、 DirectXなんじゃね? DirectX〜系の別スレがよろしいかと・・・
>>644 MSDN に PEFILE.cpp というサンプルがあって、.exe/.dll の先頭から
.rsrc section を割りだし、section 内のテーブルを追い掛けると、
個々の rsrc leaf に行き付ける例があったと思う。
dialog template の構造は MSDN に説明があった。
ただ、これらを取り出したり、差し替えたりするのに、ファイルとして
開く際、使用中だと開けないことがある。開く際の属性を指定すると
可能なのかも知れないが。
>651 いや、メモリに一度読み込めば問題なし。 昔、ダイナミックにダイアログリソース作ったときはそうやったよ。
GetCommandLine関数を利用する場合、 みんあはや空白の分割とかどしてる? 思いつき関数作ったけど、意見求む。
654 :
653 :2007/04/10(火) 23:38:46
前半 DWORD OrderCommandLine(LPTSTR lpBuffer, LPDWORD lpcchBuffer) { DWORD i, dwLen, dwPos, dwCnt, dwDiv; TCHAR tcChr; TCHAR szCmd[0xFFFF]; TCHAR szDmy[0xFFFF]; int fDQ; LPTSTR lpszCur; /* 初期化 */ ::lstrcpy(szCmd, ::GetCommandLine()); dwLen = (DWORD)::lstrlen(szCmd); szCmd[dwLen++] = _T('\0'); /* 捜査 */ for (i = 0, dwPos = dwDiv = 0, fDQ = 0, lpszCur = szCmd; i < dwLen; i++, lpszCur++){ tcChr = *lpszCur; if (tcChr == _T('\"')){ fDQ = !fDQ; }else if ((!fDQ) && (tcChr == _T(' '))){ tcChr = _T('\0'); } szDmy[dwPos++] = tcChr; if (tcChr == _T('\0')){ dwDiv++; } } szDmy[dwPos++] = _T('\0');
655 :
653 :2007/04/10(火) 23:39:39
後半 /* 整理 */ dwCnt = 0; if (dwDiv > 0){ for (i = 0, dwPos = 0, lpszCur = szDmy; i < dwDiv; i++, lpszCur++){ dwLen = (DWORD)::lstrlen(lpszCur); if (dwLen > 0){ ::lstrcpy(&szCmd[dwPos++], lpszCur); lpszCur += (dwLen); dwPos += (dwLen -1); szCmd[dwPos++] = _T('\0'); dwCnt++; } } szCmd[dwPos++] = _T('\0'); } /* 結果 */ if (lpcchBuffer){ if (*lpcchBuffer >= dwPos){ *lpcchBuffer = dwPos; if (lpBuffer){ ::CopyMemory(lpBuffer, szCmd, dwPos * sizeof(TCHAR)); } } } return dwCnt; }
656 :
653 :2007/04/10(火) 23:42:59
DWORD OrderCommandLine(LPTSTR lpBuffer, LPDWORD lpcchBuffer)の LPTSTR lpBufferはバッファ LPDWORD lpcchBufferはlpBufferのサイズ(文字単位)の入った変数のポインタ んでOrderCommandLineは分割した数を返す。 どっかおかしいとこない?
自作せずにCommandLineToArgvWを使ったほうが楽なのでは?
658 :
653 :2007/04/11(水) 00:01:57
>>657 CommandLineToArgvW関数はしりませんですた... orz
調査してみますね。
main関数のargc, argvは駄目なの? main関数から始まるけどコンソールプログラムでないというのは変わっているかもしれないけど。
boostにコマンドライン解析があった希ガス
__argv,__argcとかいうのもあったような
CommandLineToArgvW以外はスレ違いじゃね?
>>661 _tWinMain
VC++以外や、VC++でもバージョンによっては存在しないみたいだが
その場合はGetCommandLineW
つーかCommandLineToArgvWは_tmainが存在しなかったバージョンのVC++で
GetCommandLineWと組み合わせて使うために提供されていた(だからW版しかない)ので
665 :
653 :2007/04/11(水) 08:17:09
>>664 情報ありがとうございます。
へー_tWinMain関数ってあるんですかー。
特に変な意識して、関数作る必要もなかったのかな?
一回、整理して考え直してみます。
皆様ありがとうございました
>>644 不可視でダイアログ開いて、GetDlgItemText()したら?
667 :
デフォルトの名無しさん :2007/04/11(水) 11:33:08
CSV(カンマテキスト)を分割するAPIを教えてください
ない
ウィンドウズの起動時間(timeGetTimeやGetTickCountで返される数値)を変更する方法ありますか? DirectShow辺りが怪しいので デバッグで24日間放置した状態にしたいのです
672 :
デフォルトの名無しさん :2007/04/11(水) 13:45:05
猫でもわかる・・の第10章タイマーで、コーディングして実行したところ、 一応動くのですが、文字列が再描画されず、字が重なったようになって しまいます。この場合、うまく表示するにはどうしたらよいでしょうか? よろしくお願いします。
673 :
デフォルトの名無しさん :2007/04/11(水) 13:56:55
大学院レベルの猫にしかわからないってことだね
674 :
672 :2007/04/11(水) 13:57:59
↑で質問したものです。 InvalidateRect(hWnd, NULL, FALSE); こいつを InvalidateRect(hWnd, NULL, TRUE);にしたらなおった。 でも載ってるのは最初のほうですよね。 なんかほかに方法があるのかなぁ
つ SetBkMode
676 :
672 :2007/04/11(水) 14:04:28
前と同じ幅の文字で上書きしてないとか
>>676 TRANSPARENT で描画、リクエストをInvalidateRect(...FALSE) にしてたら
672 のように多重の重ね書きになるわけだが?
まぁ、OPAQUEにしたところで、文字列の実描画長が短くなったら
なんらかの方法で背景色で消すコードを書くはめにはなるがね
fillrect
ExtTextoutを結構多用したなあ
681 :
デフォルトの名無しさん :2007/04/11(水) 16:34:21
質問です。 親のウインドウとは独立した子ウインドウで、親よりは必ず前面に。 ただし他のアプリのウインドウがより前面にある時は(親ともども)きちんとそのウインドウの背面に。 というウインドウをCreateWindowExで簡単に作ることはできないでしょうか。 ・子ウインドウは、親ウインドウの中に存在するわけではない(つまりWS_CHILDではない?) お絵かきツールのパレットウインドウなんかがこんな感じ。 ・WS_EX_TOPMOSTにすると、他のアプリのウィンドウよりも前にきてしまう
殆ど自分で答え言っているような気がす… 親をオーナーにして (WS_CHILD と排他な)WS_POPUP で作れば良いんじゃない?
>>681 WS_POPUPとWS_EX_TOOLWINDOWつけてみたらどう?
日本語でおk
アドバイスありがとうございます。
とりあえずWS_CHILDとWS_POPUPは共存できないようです。
D-Pixedのツールウインドウが同じ実装になっていたのを思い出し、Spy++で覗いてみました。
>>683 さんの言うとおりのオプションを使っていましたが、それが原因で望んだ挙動をしているわけではないようです。
とりあえず下記を、親と子両方に入れてやったところ上手く狙った挙動ができているようです。
なので問題ないといえばないのですが、より上手い方法があれば教えていただけると幸いです。
if (WA_INACTIVE != wParam)
{
::SetWindowLong(hChildWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW | WS_EX_TOPMOST);
::SetWindowPos(hChildWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
else
{
::SetWindowLong(hChildWnd, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
::SetWindowPos(hChildWnd, hParentWnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
::SetWindowPos(hParentWnd, hChildWnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
他アプリウィンドウ - オーナー - ポップアップ - (最前面) で 他アプリウィンドウをタスクバーのクリックでアクティブにすると、 オーナー - 他アプリウィンドウ - ポップアップ - (最前面) ってなることがあるんだよなあ。 Alt+Tabだと発生しないけど、なんだかなあと思う。
>>687 >より上手い方法があれば教えていただけると幸いです。
そういうウィンドウはOwned Windowと言います。
>>685 のリンク先を読んでください。
…なぜに SetWindowLog & SetWindowPos なんだ? CreateWindowEx でのスタイル指定で解決できるのに… ターゲットの窓が他プロセスの持ち物なのか?
>>689-691 すいません、682さんを誤読した上に、685さんのレスとレスがすれ違いました。
WS_POPUPとは、親ウインドウを持つウインドウのことだったのですね。
正直、オーバーラップウインドウと、ポップアップウインドウの区別がわからず
今ググっていて682さんの文章に対する誤読に気づきました。
685さんのリンク先を実践してみます
解決できました。 WS_POPUPの解説である「ポップアップウインドウを作成する」の「ポップアップウインドウをはなんぞや? という知識が無かったのが問題でした。 ポップアップウインドウそのものが、私の望んでいたもののようです。 WM_ACTIVEなどをまったく使わずWS_POPUPを指定しただけで解決できました。 ありがとうございました。
DOS窓で、CreateWindowてどうやるの? メッセージループとか。
どうやってやるも何も普通に出来るだろ。 いったい何を言っているんだ?
697 :
デフォルトの名無しさん :2007/04/12(木) 03:17:19
ソースコードを読んで勉強したいのですが、C言語 + Win32 API で書かれたオープンソースのアプリケーションでお薦めって何かありますか? 実践的なコードの書き方を勉強したいので、お手本になりそうなアプリがあったら教えてください。 また逆に、「このソフトの書き方は真似するな」的なのもあれば教えて頂けると有り難いです。 宜しくお願いします。
> お薦めって何かありますか 猫でもわかる > このソフトの書き方は真似するな 猫でもわかる
あまりにも禿同杉てワラタw
ヒントにはなるが真似は出来ない
702 :
デフォルトの名無しさん :2007/04/12(木) 09:19:39
左右分割ウインドウをMFCを使わずに作っているのですが、相談させてください。 まず、ウインドウ全体を親ウインドウとします。 子ウインドウとして 「左側用にWS_THICKFRAMEを使ったウインドウをちょっと大きめに作って配置」 「右側に余り部分の大きさ分のウインドウ」 を貼り付けて実現しています。 左側用のウインドウの大きさが変化するたびに、右側のウインドウの大きさも変更されるようにしています。 ただ、WS_THICKFRAMEは角の近くだと「マウスドラッグで縦横の大きさを変えられる」モードになってしまいます。 まず「横の大きさしか変えられないウインドウ」は作れないのでしょうか? それをさせないために今は「上下に大きめに作る」ようにしているのですが(角付近を触れないように)、ウインドウはデスクトップウインドウのサイズより大きくは作れないようです(?)。 そのため親ウインドウをデスクトップ画面並に大きくされてしまうと困ってしまいます。 何か対策はありませんでしょうか? 左右ができれば、上下はその応用で作成可能だと思います。
>>702 左右の境界に少し隙間を開け、そこをドラッグすると左右に大きさが変わるようにする。
というようにMFCはなってたと思う。
>>703 なるほど。つまり自前でドラッグシステムを作っているわけですね。
WS_THICKFRAMEを使った方法も、この斜め問題さえ解決すれば実用に耐えるのですが…。
とはいうものの、WM_SIZEを捕まえて上下の大きさが変更されたら強制的に元に戻す処理は入れています。
ただそれは格好悪いもので、もし良い方法があればと思って相談しにきました。
WM_GETMINMAXINFO捕まえたらどうだろう MFCしか使ってないんで良く分からないけど
>>705 できました!
まったく知らないWMでした。ありがとうございます。
これで
tagMINMAXINFO *p = (tagMINMAXINFO*)lParam;
p->ptMaxTrackSize.y += 128;
としてやることで、デスクトップサイズよりでかいウインドウを作ることに成功。
期待通り動作できるようになりました。
>>702 ,706
WM_NCHITTESTを捕まえてDefWindowProc()が
HTTOP,HTBOTTOM,HTTOPLEFT,HTTOPRIGHT,HTBOTTOMLEFT,HTBOTTOMRIGHTのときだけ
もみ消してしまう方がいいのでは?
708 :
デフォルトの名無しさん :2007/04/12(木) 11:53:52
スクリーンショットを撮るAPIってありますか
>>707 ウィンドウの四隅(スプリットバーの端っこ)が使えなくなるんでお薦めできない
それで無効になる領域って結構大きいし
>>709 言われてみれば確かに…。16*16ほどか。
なら、座標計算して嘘の値を返すなんてのはどう?
例えば、DefWindowProc()がHTBOTTOMRIGHTの場合で
マウスが右の方にあるときはHTRIGHTを返し、下の方にあるときは0を返すとか。
>>707 そこまでするぐらいなら普通に
>>706 でいいと思うんだが…
まあどっちみちWM_NCHITTESTは使うんだけど。
例えば左右に動くスプリットバーがあったとして、
その端っこにポインタを合わせたら斜め向いたカーソルが出るんじゃ
格好がつかないんで
HTTOPLEFTを受け取ったらHTLEFTを返す、みたいなことをする
なんかアンカー間違えたり誤読したりで嫌になってきた
>>713 斜め向いたカーソルがでないように、上下64ドットずつ大きいウインドウを作りました
普通は自前で全部やるものだよ。作り直したほうがいい。
>>717 ______ _ _| ̄|_ _ _
|____ | | | 口口 |_ _| \\ | | __ __ __
/ / | | | | _  ̄ ___ | | |__| _| |_| |_
/ / | | _ | | _| |_ |___| | | |_ _ _\
| | | \_/ / / / /。 _| | | ___ .| |.|__|/ /
\\ \ /  ̄ \/ | | |___| |__|  ̄
 ̄  ̄ ̄  ̄
WTLのスプリッタのソースが見やすいと思われ
721 :
デフォルトの名無しさん :2007/04/12(木) 21:58:22
すみません いまコンソールのC言語のプログラムを WinMainで始まるプログラムでも使えるようにしようとしている のですがエラーがでてしまいコンパイルできません エラーの内容はunsigned char*をchar*に変換できません等のものなのですが なんとかソースを書き換えずにコンパイルできるようにできないものでしょうか?
え、キャストしちゃいけないの?
723 :
デフォルトの名無しさん :2007/04/12(木) 22:10:59
キャストすると1000ヶ所以上あってどうにもならない感じです
BCCにするんだ
置換使えないのかい
1000箇所ぐらいなら1時間で何とかなると思うが・・・ というかSuletiGay
727 :
デフォルトの名無しさん :2007/04/12(木) 22:20:01
置換も使えなさそうです 文字列の型にunsigned char*を使っているのが問題のようで 置換をしようにもどうにも絞れません
#define unsigned
charをデフォルトでunsignedとみなすコンパイルオプションがなかったっけ?
VCには存在するな
unsigned char*からchar*へ変換できないなんて、 単にWindowsプログラムのほうではC++としてコンパイルしているだけだと思う。 Cなら(警告は出るだろうが)エラーにならずにコンパイルできるはず。
732 :
デフォルトの名無しさん :2007/04/12(木) 23:21:58
コンパイルオプション/Jでは配列のunsignedchar*がchar*に変換できないらしく だめでした情報ありがとうございます
とりあえず F4 でエラー行に飛べることを知ってるだけで 効率はかなり変わると思うよ F4 → カーソル移動 → Ctrl+V → (以下ループ)
ごめん、VC 限定ね… VC スレと勘違いした
735 :
デフォルトの名無しさん :2007/04/12(木) 23:52:06
いえ、ありがとうございます ですが元のソースはいじるわけにはいかないんですよ ちょっと勝手に書き換えるとまずい事情がありまして
WinMainから始まろうと、mainから始まろうと、
同じCのソースコードであることに変わりはない。
片方でコンパイルできたものが、もう片方でコンパイルできないなんて、
(argc/argcやmainそのものに依存している場合などを除いて)有り得ない。
>>731 は試した?
>>735 そういうことってよくあるよね。
あ〜邪魔臭いコードでもいじれない。
>>735 Cでは警告は出ないようだ。
こんな感じでC++とCのコードは混ぜることが出来る。
extern "C" {
#include "古いコード.h"
}
cl 新しいコード.cpp 古いコード.c
739 :
デフォルトの名無しさん :2007/04/13(金) 01:03:16
とりあえず古いソースのヘッダをincludeしている箇所を extern "C"{}で囲ってみましたが効果ないっぽいです 情報ありがとうございます
IDEから使うと /TP がデフォになってるな。 これをはずせば拡張子に応じたコンパイルをしてくれるが、 プリコンパイルヘッダーやら他のところで引っ掛かりが出てるよ。 混ぜるのはこいつのレベルじゃ無理かもしれんね。
文字列に付けるszってなんですか?
Win32APIでは構造体のサイズを取得してそのサイズを構造体にセットするというのをよく使いますが、 何故このようなやり方をするのでしょうか?
>>743 バージョンが上がって仕様が変わって構造体の内容が変わっても
互換性を維持するため。
まじ?
>>742 zero(\0)終端string(文字列)の略
nsはなんですか?
ちょっと思うんだけど、 ファイルパス長ってMAX_PATHバイト?MAX_PATH文字数? MAX_PATHバイトだったら、マルチバイト文字で半分になるんだけどいいの? それとも、 #define MAX_PATH_NAME (MAX_PATH * (2 / sizeof(TCHAR))) な事すんの?
文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するからMAX_PATH自体あまり意味無いような・・・
753 :
751 :2007/04/13(金) 13:50:49
補足 TCHAR szFile[MAX_PATH_NAME + 1]; とつかうとして
まあDOS/Windows 3.1時代の遺物なんで
755 :
751 :2007/04/13(金) 14:01:31
>>752 CreateFileの説明の通り
In the ANSI version of this function,
the name is limited to MAX_PATH characters.To extend this limit to 32,767 wide characters,
call the Unicode version of the function and prepend "\\?\" to the path.
For more information, see Naming a File.
ワイド文字で32767文字って事は、65534バイト宣言しとけばいいの?
ちょいもったいない気が・・・
必要に応じて動的に確保すればいいんじゃないの? どうしても固定長にしたいわけ?
OPENFILENAME の戻り用の器は MAX_APTH 使った固定長だな。
758 :
751 :2007/04/13(金) 14:36:11
>>756 固定長にしたい理由というわけじゃありませんが、
明確な理由があれば、それに準じたいと思っています。
もちろん、実用的な側面でも判断しますが
ぐだぐだ言ってないで実用的な面でどうなるか 試してみろよ。 FAT32,NTFS,共有ドライブで長い名前のファイル名作るくらいできないの?
文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから 文字数でもバイト長でもMAX_PATH以上のファイルパスって普通に存在するから
761 :
デフォルトの名無しさん :2007/04/13(金) 17:07:47
>>758 9x系OSでANSI版のAPIつかってみなはれ
ちなみにMSでは、MAX_PATHは文字数としてあつかっとるよ
稀にMS社内でも開発者が混乱してしもて、
大穴あけてしもうたこともあるけどね
まったく1文字1Byteの連中はこれだから・・
764 :
デフォルトの名無しさん :2007/04/13(金) 17:25:11
>>751 これ以上はスレ違い
APIではなくコーディングの話なら
Cスレに行け
いいえ東亜です。
>>763 いや、ワイドキャラクタでも1文字2バイトじゃ済まないはずなんだが。
サロゲートペアとかあると4バイトになる。
あれ、Win32APIってUCS-2のままだったっけ?
まぁサロゲートペア対応しても、そもそも文字の定義ってなに?ってなるし。
769 :
デフォルトの名無しさん :2007/04/13(金) 18:14:56
ファイルの更新日時を変更するAPIを教えてください
GetFileTime
Sじゃねーのか
お前さん頭いいな。
Mですから
>>768 ビル・G
数種類の奇妙な文字で文章を書く、親愛なる日本人の皆さん。
私はアルファベット26文字で美しい詩的な文章を綴り、人々を感嘆させるビル・Gである。
ユニコードとは何か。簡単に言えば、あらゆるプラットフォームで様々な言語を共通に扱えるようにするための統一的なコード体系のことだ。
もっと簡単に言おう。アルファベット以外の野蛮な絵文字を使ってコミュニケートする第三世界の人間に対する、心からの配慮だ。
今までも手を焼いてきた。2バイトコードの各国語対応も、少しは楽になるのだけどね。
君たちの国でも、ユニコードの問題が盛んに議論されているようだね。
日本や中国や台湾で使っている漢字コードやフォント違うって?
それは君たちが今までに勝手な文字を作りすぎてきたツケに過ぎないよ。
また、『固有の文化』という言葉で語られる微妙な差異に関する議論は、
私にはちょうど「靴下は右足から履かなければならない」
「いや、左足から履くのが伝統だ」と言い争いをしているようにしか聞こえない。そんなことはどうでもいいじゃないか!
拘りすぎてバカを見るのが東洋人 大雑把過ぎてバカを見るのが欧米人
CJK以外にもBidiとか言語タグとか対応するのが 遅かったねぇ。 BMPを16bitじゃなくて32bitにしてれば、もう少し問題先送りできたのに。 あとはユニコードまでも取り込んだGB18030とかどうするんだろうっていう。。。
XP以降のメモ帳で右から左に読むにして Hello, World打つだけでも軽く死ねるなw
神の罰です
>>768 ファイル名の制限という観点ではコードユニットの数で数えるから関係ない
ウニコードはうまそうだ
>>780 NTFSはどのエンコーディングを使ってんの?
>>780 ドキュメント上の問題のことです。
n文字という表現では最大バイト数は判りにくい。
もちろんUTF-16LE
786 :
デフォルトの名無しさん :2007/04/13(金) 23:01:50
結局、MAX_PATHの単位はなんなんだ? 明らかにバイト数じゃない 文字数も数えてみたがなんかちがう 会社によって1バイトのズレも許さないからこのあいまいな仕様がかなりムカつく ちなみにファイルダイアログの最長はXPSP1までは0xFFFFだったがXPSP2からはどこまではいるのかよくわからん ドラッグアンドドロップの限界は一体どこなんだ?
WinNTのNTFSドライバのパス名制限が (2^15-1) UTF-16符号単位だったと思うが
788 :
751 :2007/04/13(金) 23:29:46
>>759 もちろん、\\.\〜の長いファイル名前をCreateFileで作成し、
動作を確認しています。
しかしながら、エクスプローラも捕らえられないファイル名は実用的か?
それともMAX_PATH以上32767文字以下で、もっともらしい定数があり、
自分が知らないだけかわからんとです。
789 :
デフォルトの名無しさん :2007/04/13(金) 23:44:40
GUIアプリでコンソールを表示するにはどうすればいいのでしょうか? やりたいことは、 ・起動した時にはコンソールアプリのように振る舞う。 ・ある入力があった時点でウィンドウを表示し、GUIアプリとして振舞う main()で起動するとコンソールは出ますが、WinMain()の第一引数で取得できる HINSTANCEが取得できないので、GUIアプリとして振舞えない。 WinMain()で起動するとGUIは出せるが、コンソールへ出力を行えない。 WinMain()でGUIアプリとして起動しておいて、必要に応じて(何らかの関数呼び出しによって) コンソールを表示させるのが正しいやり方なのかと思っていますが、調べてもやり方が見つかりません。 どなたかお助けを・・・
>>789 HINSTANCE == GetModule(0) だったハズ。
コンソール部分は別にしてCreateProcessは?
792 :
791 :2007/04/13(金) 23:51:06
あ、すまん間違えた。 ×:GetModule ○:GetModuleHandle
793 :
792 :2007/04/13(金) 23:52:04
>>789 CreateProcess, GetStdHandle, SetStdHandle, CreatePipeでリダイレクト。
AllocConsole stdout
>>789 WinMainから始まるプログラムにAllocConsoleを使う方法も出ているが、
個人的には、手間要らずにC stdioやC++ iostreamを使えるので、
mainから始まるプログラムにした方がいいと思う。
EXEのインスタンスハンドルは791のとおりGetModuleHandleで。
>>777 前からおもってたのだが、右から左に読む文化圏に対応してるなら、
上から下に読む文化圏にも対応してていいんじゃないかと思ったりするのだがまぁいいや。
そういえば、昔、Macのことえりだったか縦書きIME変換やってくれてた記憶があったな〜
MS-IMEも、Wordなんかで縦書きにすればそれにあわせてくれる。
質問です。GetProcAddressを使ってDLL内の関数を呼び出したいのですが、 上手くいきません。プログラムを実行すると、そのまま強制終了してしまいます。 FARPROC SetHook,ResetHook; SetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),TEXT("_SetHook")); ResetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),TEXT("_ResetHook")); として関数のアドレスを取得しています。各関数のアドレスは SetHook : 011412A0 ResetHook : 011412D4 でした。tdump.exeでは Exports from hook.dll 3 exported name(s), 3 export addresse(s). Ordinal base is 1. Sorted by Name: RVA Ord. Hint Name -------- ---- ---- ---- 000012D4 1 0000 _ResetHook 000012A0 2 0001 _SetHook 00009158 3 0002 ___CPPdebugHook という結果が得られました。 GetProcAddressの使い方が間違っているのでしょうか? コンパイラの設定に問題があるのでしょうか? どのあたりに原因があるのか指摘して下さい。お願いします。<(_ _)> コンパイラはBCCです。BCC Developerでビルドしています。
GetProcAddress の第2引数は LPCSTR だが。
802 :
800 :2007/04/14(土) 06:38:04
>>801 SetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),"_SetHook");
ResetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),"_ResetHook");
としたのですが、上手くいきません。関数名の指定が間違っているのでしょうか?
>>800 まずは「強制終了」する場所を探らないと。
その情報だけじゃ、GetProcAddress() 絡みの問題かどうかなんてわ
からん。
804 :
800 :2007/04/14(土) 06:57:58
>>803 関数の呼び出し時に強制終了します。
インポートライブラリを通しての呼び出しには成功したのですが。
それはGetProcの問題じゃないだろうな FARPROCの宣言はどうなってる?
>>804 インポートライブラリを通しての呼び出しには成功ってんだったら
GetProcAddressで失敗なんじゃなくて
それで取った情報を使う時の失敗だろ
どうやって関数呼び出してんのか見せてみぃや
>>805 VCだと「typedef int (*FARPROC)(void)」だが、BCCはどうなんだろう・・・
ていうかそのまんま使ったら普通コンパイルとおらないかも?
呼び出し規約が間違っている。それでスタック壊れているんだろ。
普通目的の関数に合致した関数ポインタの型を定義してそれで使うもんじゃね? ただのFARPROCにぶち込んでるヤツ初めて見た
810 :
800 :2007/04/14(土) 07:39:35
>>805-809 レスありがとうございます。
#define EXPORT __declspec (dllexport)
typedef EXPORT HHOOK (*SETHOOK)(const HWND hCaller);
typedef EXPORT void (*RESETHOOK)(void);
SETHOOK SetHook;
RESETHOOK ResetHook;
と関数ポインタの型を定義してから
SetHook(hWnd);
ResetHook();
という感じで呼び出してみたのですが、やはり上手くいきません。
もう一度レスを見直すんだ。そこに答えがある。
VC2005でstrlen等を使うと
813 :
800 :2007/04/14(土) 08:17:48
>>811 呼び出し規約の整合性に問題があるのでしょうか?
もう少し詳しく教えて頂けないでしょうか?
提供する側では__declspec (dllexport)が必要だろうが 使う側では要らないだろ。 提供する側でも使う側でも__stdcallとかを指定したほうが安全。 デフォルトに任せれば同じになっている可能性が高いけど 不一致になる危険性がある。 GetProcAddressじゃなくて暗黙のリンクでもいえることだけどね。 GetProcAddressの戻り値が0ってことはないよね。
>>810 DLL側のソースでその2つの関数がどう定義されているかもチェック
うまくいかないのと直接の関連はないが、 一々LeadLibraryするな。 1回ロードしたら、そのハンドルを使いまわせ。
LeadLibrary
一度だけLoadLibraryして、そのハンドルを保持して使うってのもそうだけど GetProcAddressに直接ぶち込むのもどうかと 誤動作の原因になる可能性は充分にあるかと
誤動作するとは思えないが、直接GetProcAddressに渡していたら、 FreeLibraryするのに不便だろう。 GetModuleHandleで後から解放用にハンドルを得るなんて無茶も甚だしい。
誤動作するとは思えないって思うのが危ないな 常に誤動作するかも知れないと思ってコーディングすべし
>>787 UNICODE_STRINGの構造上の問題だな
同様の理由でNT系はコマンドラインの長さにも32767文字(UTF-16符号単位)制限がある
驚くべきことにWin9xだとコマンドライン長が1MB超えても大丈夫。
822 :
800 :2007/04/14(土) 09:09:21
>>814-819 レスありがとうございます。
DLLの関数を
#define EXPORT __declspec (dllexport)
EXPORT HHOOK WINAPI SetHook(const HWND hCaller);
EXPORT void WINAPI ResetHook(void);
とし、関数を呼び出すプログラムで
typedef HHOOK WINAPI (*SETHOOK)(const HWND hCaller);
typedef void WINAPI (*RESETHOOK)(void);
SETHOOK SetHook;
RESETHOOK ResetHook;
HMODULE hook_lib;
hook_lib = LoadLibrary("hook.dll");
SetHook = GetProcAddress(hook_lib,"SetHook");
ResetHook = GetProcAddress(hook_lib,"ResetHook");
として関数を呼び出したのですが、やはり駄目です。GetProcAddressの戻り値を
再度確認したのですが、0ではありませんでした。
32767文字を超えるコマンドライン自体普通無いだろ・・・
typedefのWINAPI要らなくね?
>>822 あんまり関係ないけどGetProcAddressの戻り値ってキャストしなくてもコンパイル通るのか?
関数ポインタの宣言なんだが・・・
typedef HHOOK (WINAPI *SETHOOK)(const HWND);
typedef void (WINAPI *RESETHOOK)(void);
じゃねーの?WINAPIの位置が違うとか。
>>825 警告が出るだけだったような。
呼び出し規約の記述位置は括弧の中だね。 戻り値に付属なわけじゃなくて、 関数に付属する情報だからなんだろうけど、 最初は戸惑うよね。
Borlandの昔のコンパイラだと微妙に仕様が違ったり 標準キーワードじゃないから仕方ないけど
なんでだろうね? 間違って古いDLLが残っているとか。
DLL側と呼び出し側のソースをまとめてうpってもらった方が話が早くていいかもしらんな
VCの場合、 #define EXPORT __declspec(dllexport) EXPORT HHOOK WINAPI __stdcall SetHook(const HWND hCaller); EXPORT void WINAPI __stdcall ResetHook(void); こうじゃないかな。__stdcallはなくても動きそうな気がするけれど
>>831 WINAPIは
#define WINAPI __stdcall
とかされてるだけだから、どっちかだけで十分
833 :
800 :2007/04/14(土) 10:33:36
>>824-832 レスありがとうございます。
typedef HHOOK (WINAPI *SETHOOK)(const HWND hCaller);
typedef void (WINAPI *RESETHOOK)(void);
SETHOOK SetHook;
RESETHOOK ResetHook;
HMODULE hook_lib;
hook_lib = LoadLibrary("hook.dll");
SetHook = (SETHOOK)GetProcAddress(hook_lib,"SetHook");
ResetHook = (RESETHOOK)GetProcAddress(hook_lib,"ResetHook");
としたのですが駄目でした。VCのExpress Editionで上手くいくかどうか試してみます。
>typedef HHOOK (WINAPI *SETHOOK)(const HWND hCaller); 今思った 引数は型だけで名前はイラネ
>>800 Borlandデバッグ環境は知らんが、DLL側のSetHook()の入り口にブレークポイント仕掛けるなり、MessageBox()
出すなりして、そこまで来ているか(強制終了がどの段階で起きているか)確認しろ。
関数名から何がやりたいか想像はつくが、もう少し経験をつんでからやることを強く勧める。
つーか無理にLoadLibraryでやらんでもいいことだけどな
837 :
デフォルトの名無しさん :2007/04/14(土) 10:47:16
そりゃまあごもっともです
>>800 >>インポートライブラリを通しての呼び出しには成功したのですが。
が本当なら、そのヘッダーファイルでの関数プロトタイプ宣言(は正しいはずだからこれ)にあわせろ。
おれもお前には、Hookは10年早いと思う。
839 :
800 :2007/04/14(土) 12:15:58
>>834-838 レスありがとうございます。
マウスフックを使ったプログラムを作成しています。システムフックにより
他のウィンドウのタイトルを変更することには成功しました。そのため、
フックの処理自体には問題が無いと考えているのですが。
VCで実行してみたのですが、SetHook内で処理が中断しました。
インポートライブラリを使用した場合、何も問題は起きなかったのですが。(?_?)
SetWindowTextでタイトルが変わらないとか騒いでた奴か。 やっぱりおまえには早いと思うぞ
DLL や EXE に含まれているリソースの番号だけって取得できますか? たとえばこの DLL の STRINGTABLE には、1000番 1001番の STRING が含まれています、という感じの API です。
FindResoource?
EnumResourceNames()
「普通ないだろ」が生む○○問題
>>825 Cだとコンパイルできる
C++だとコンパイルできない
846 :
デフォルトの名無しさん :2007/04/14(土) 18:26:15
なんで最近そんなことになってんだろうね C言語でコンパイルできたソースが普通にC++で通らん
[アニメ DVD] ヤミと帽子と本の旅人 第04話 「マリエル」 (640x480 DivX511).avi
>>846 C++は、例えCとの互換性を失ってでも危険な香りがする暗黙の型変換を禁止した。
これだけは譲れないというやつ。
思いややりが無い朝鮮人的な思考だ
つーか、すっぱりと別言語にしちゃえば良かったのに 中途半端に互換性を持ってるからすごいカオスに
851 :
デフォルトの名無しさん :2007/04/14(土) 18:52:09
unsigned char*とchar*の代入なんてエラーにするほど危険かなぁ なんか言語潔癖症的変な奴いるじゃないかなぁ おかげで意味のないキャストをプチプチ入れてく無駄作業 こんなとこ明示的にキャストしたところでどうだというのか・・・
C++って型キャストが必須なんだっけか 俺Cメインだからうろ覚えだぜ
>>851 reinterpret_castが必要な場面ってそんなにある?
やっぱCがいいな。
C++で生のWin32 APIを使うとreinterpret_castだらけ。
Win32 APIは所詮Cを念頭において作ったという感じ。
>>849-851 それはC++作ったBjarneに言ってやれ。
静的型付けで強い型安全性でプログラマを守るというのがC++。
>>850 今までに何千人のプログラマが同じことを思っただろうな…
すべてが今更の話だが…
>>857 ビル・ゲイツの出した解がC#では?
いやビルが実際作ったわけではないけどさ。
C#もヤバい方向にいってると思うけどな varってJavaScriptみたい
ヴァー
そうか? 型推論や関数型プログラミング的な機能を取り入れるのは最近の流行だよ。
862 :
デフォルトの名無しさん :2007/04/14(土) 21:29:34
所詮学者の独りよがりだよな 明らかになにも作ったことがないグズが言語仕様を決めてる気がする
おまえに32ビットの羅列ほいと渡して何型の変数か分かるのか?
型推論はソースの冗長性を削る意味で有用だろうが。
>>862 みたいにブツクサ独りよがりで文句を言うだけで、
かといって別に妙案も何にも持っていない奴を色んなところでよく見かける。
つーか、議論したけりゃ他所でやれ。
varをVariant型とかObject型と勘違いして拒否反応示している奴が結構いるみたいだな。 あとC++のテンプレート関数が型推論やってくれてるの知らない奴も多杉。
>>851 signed char が-128〜127の整数の集合
unsigned char が0〜255の整数の集合
例えば前者の変数を作成して
「リンゴをA店で100個、B店で155個買いました。
全部で何個でしょう」
という問題を解いて、答えが-1個だったらおかしいでしょう。
あまり問題だと思わないのは、先に16進ありき、だからじゃないかな。
もう止めようぜ お前らこそ冗長にもほどがある
Dのautoキーワードの場合で書くと、 HogeClass obj = new HogeClass(); を auto obj = new HogeClass(); みたいに書ける ジェネリックプログラミングとかで 型がよく分からない時なんか更に便利 多分C#も同じ感じかと
ザ・スレチガイ
(´ω`)
SuspendThread(this);
解決方法がわからないので教えてください。 MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _memmove はすでに LIBCMTD.lib(memmove.obj) で定義されています というエラーが15個出ます(まったく同じlib同士なので制限の関係で割愛します) どちらかをunloadすればいいかとおもってプロジェクトの設定からやってみたんですが、どちらを行った場合でも、Libファイルがないためのエラーが出ます。 どうかおねがいします。
どちらかをunload→どちらか一方とリンクする という意味じゃないのか? プロジェクトの中に、誰かが作ったライブラリ(スタティックリンクしちゃったやつ)が混じっているんじゃないか? 1.プロジェクトの設定−一般−MFCのスタティックライブラリを使用 2.プロジェクトの設定−C/C++−[カテゴリ]コード生成−[使用するランタイムライブラリ]マルチスレッド (デバッグ) に設定したらビルドできるか?(EXEでなくてDLLを作る場合は マルチスレッド (DLL、デバッグ)) あと、↑の例はVS6だが、環境も知らせておくように。
879 :
デフォルトの名無しさん :2007/04/15(日) 00:29:00
GDI+のファイルの書き出しについて保存です。 読み込み、書き出しそのもの情報はあるのですが、Graphics→Imageにする方法がわかりません。 Imageにファイルを読み込んで、別の形式で保存するというのはあるのですが。 猫でもわかる〜を見ても読み込みまでしかかかれていないもので・・・ Graphics graphics(hdc); //描画処理 このGraphicsをImageに変換するにはどうしたらいいのでしょうか?
>>879 GDI+の扱いは分からんのだけども
GraphicsからBMPオブジェクト作ってImage.FromBitmapじゃ駄目?
882 :
881 :2007/04/15(日) 00:51:32
不安になってMSDN見てみたらそんなメンバ無かったw 忘れてくれ
>>881 わざわざ調べていただいてありがとうございます。こちらでも確認したのですが、
Graphicの方にしかありませんでした。
間違ってました。Graphicsの方にもなかったです(汗 あるのはGraphics::FromImageですね。
それ何語?
エスペラント語でないことだけは確かだ
謎語を適当に喋ってみるテスト Bitmapを作ってそこからGraphics:FromImage(bmp)で作ったGraphicsに hdcをソースにして描画すればいいんじゃね このスレ的にはhdcからBitBltするのかな?
>>887 ありがとうございます。その方法でいけました。
BitmapがImageと同じように使えるんですね。
889 :
デフォルトの名無しさん :2007/04/15(日) 02:40:09
ハンドル(CreateFileが返す値)から、元のファイルのフルパスを取得することができるAPIってありますか。
CreateFileで開いてフルパスじゃ無いって事は カレントディレクトリパス+CreateFileに渡したパスで良いと思うけどどうかね?
891 :
デフォルトの名無しさん :2007/04/15(日) 04:52:59
他のアプリのフォーカスがあるコントロールへデータを送りたいのですが 以下の様なコードだと、アプリによっては正しくデータが送れません。 またブラウザで表示された、HTML領域のコントロールへも データが送れたらなと思うのですが、どういう方法がありますでしょうか? DWORD myid = ::GetWindowThreadProcessId(m_hWnd, NULL); DWORD toid = ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL); ::AttachThreadInput(myid, toid, TRUE); //::SendMessage(::GetFocus(), WM_PASTE, 0, 0); //←貼り付けの場合は当り前だけど全て無問題 ::SendMessage(::GetFocus(), WM_SETTEXT, 0, (long)"TEST STRINGS!!!"); ::AttachThreadInput(myid, toid, FALSE);
HANDLE からもとのファイル名が知りたいって事じゃね? 俺はそんなAPI知らないけど。
送り先が間違っているんだろ
俺も送り先が間違っているに一票 他にもたまにウィンドウがフォーカス持ってないように見えてフォーカス持ってたり フォーカス持ってるようしか見えないのにフォーカス持ってなかったりする場合がある フック使ってフォーカスの移動でも見てみればいい
896 :
デフォルトの名無しさん :2007/04/15(日) 05:59:00
>>893-894 アプリの種類によっては、エディットではなく
タイトルバーの文字列が設定されてしまう場合とかあるんですよね。。
完全にエディットにフォーカスがあるのを確認して、SendMessage()しているのですが…
もう少し試行錯誤してみます。
>>895 やっぱりフォームのコントロールへのデータ送信は
ちょっとややこしそうですね。
また自分でも色々と調べてみますね。
解決したらご報告致します。
898 :
896 :2007/04/15(日) 06:13:25
具体的にいうとこんな感じなんですけどね。。 メモ帳のエディット部に送信 → 無事設定される サクラエディタのエディット部に送信 → タイトルバーに設定される Firefoxのアドレスバーに送信 → 無反応。。 やっぱり見た目にフォーカスがあっても 内部ではフォーカスが無い場合ってのがあるんでしょうね。
899 :
896 :2007/04/15(日) 06:15:07
IEのアドレスバーには問題なく設定できるようです。 とりあえずどうしようもないので調べます。
あ、Fileextd.libはスタティックだからインストールが必要なのは開発者のほうだけね
>>898 Windows標準のエディットコントロールはWM_SETTEXTを独自に処理してるので
エディット部に設定される
それ以外のほとんどのウィンドウはWM_SETTEXTを処理しないのでデフォルト処理で
タイトルバーへの設定が行われる
子ウィンドウでタイトルバーが表示されていなければ無反応に見える
エディットコントロール(のように見えるもの)にテキストを設定する汎用的な方法は
存在しない
902 :
896 :2007/04/15(日) 06:40:29
>>901 なるほど〜
確かにWM_SETTEXTで設定出来るのは
どれもオーソドックスなエディットだけですね。
う〜ん、困ったなぁ。。。
そもそも WM_SETTEXT は外から使うことを考慮していない。使えるように実装されているだけ。 文字を送るだけなら他の方法がある。
でも使えるように実装するのが普通だよな 今FireFox見てみたけどおかしな作りだな
905 :
896 :2007/04/15(日) 07:25:30
別アプリのWebFormのコントロールに データを設定する事なんて果たして可能なのかなぁ。。
IWebBrowser2で検索すると参考になりそうなサイトは沢山ある が、理解できるかは知らんよ
907 :
896 :2007/04/15(日) 07:50:37
>>906 情報ありがとうございます。
頑張って調べるしかないですね。
IEなんかは一見標準コントロールを使っているように見えるが あれは全て自前描画のフルスクラッチだから、普通の コントロールのように扱うのは無理だよ。
909 :
896 :2007/04/15(日) 08:09:08
>>908 MSのアプリってそういうの多いみたいですね。。
あとAdobeのものとかも自作コンポーネントとかが沢山で。
ウェブフォームの方は、情報が色々と出てきて
どうにかなりそうな気がしてきました。
助言を下さったみなさま、ありがとうございました。
Windows Presentation Frameworkのコントロールも全部(API的には)自前描画だな アンマネージなアプリから設定するのは結構骨が折れる
Windows Presentation Foundationだった .NET Frameworkと微妙に混ざった あとJavaのSwingアプリとか(AWTやSWTはプラットフォームのコントロールを使ってる)
912 :
889 :2007/04/15(日) 10:35:31
>>897 ありがとう。
GetFileInformationByHandleEx の FileNameInfo で99%できた。
しかし、ドライブレターが無いのだ。
つまり、L"\\Windows\\System32\\ntdll.dll" みたいなのが返ってくる。
C: の部分はどうやったら良いかもお願いします。
>>912 VistaならGetVolumeInformationByHandleW
2000/XPだとGetFileInformationByHandle(Exじゃないほう)と
FindFirstVolume/FindNextVolume/FindVolumeClose/GetVolumeInformationの
ボリュームシリアル番号を付き合わせる、くらいしか思いつかない。
おにいさま…涙が…止まりません
辛子明太子を食べろ
エディットボックスで英数字だけ使うのってできないんだっけ
エディットボックスでWM_CHAR引っ掛ければ余裕
クリップボード経由でペーストされたら?
WM_PASTE見張ってれば良いじゃん 頭使ってる?
WM_SETTEXTとかEM_REPLACESELとかも見張る必要あるだろ
見張ればいいじゃん。 労力使ってる?
他にもワナがありそうだな。 EditBoxのあるダイアログのOKボタンが押されたときにでも、 データが適切であるかを確認する方がよほど楽だろうな。
頭も使う労力も無い人に金言を授けよう 駄 目 な 奴 は 何 を や っ て も 駄 目
本人から言われると重みがあるな
あれ、英数字ってなかったっけ? 俺の気のせいか
数字だけならあったけどな
>>925 MFCのDDXならデジットチェックあるんだよ。
だけどここはWin32APIだから。
DDXも入力はできちゃう
って EM_CHANGE / EM_UPDATE じゃいかんのけ?
931 :
912=889 :2007/04/16(月) 00:58:15
>>913 OSはXPです。
FindFirstVolume/FindNextVolume/FindVolumeClose だと "\\?\Volume{GUIDっぽい文字列}\" みたいな文字列で、どう扱ってよいか分からず断念。
ドライブレターありきで、割り切ることにしました。
マウントでも破綻するかもしれないですが、これも割り切り。
(1) ファイルのハンドルを GetFileInformationByHandle に渡して、ファイルのボリュームシリアル番号を得て、
(2)GetLogicalDriveStrings の結果を GetVolumeInformation に渡して、各ドライブのボリュームシリアル番号を得て、
(3)上記(2)のボリュームシリアル番号のうち、(1)のボリュームシリアル番号に一致するのがファイルが居るドライブと判定。
という方法でとりあえずやりたいことはできるようになりました。
御礼を兼ねて報告。
あーどっちにしろ"\\?\Volume{GUIDっぽい文字列}\"からドライブ名への変換は 必要か。じゃあGetLogicalDriveStringsからたどるのが一番簡単だな
どうでもいいけど、>890の方法はダメだな。 カレントディレクトリパスなんてファイルダイアログを開くだけで変わってしまう。 APIを駆使する方法以外では、素直にCreateFile時にフルパスを保存しておくしかないね。
935 :
デフォルトの名無しさん :2007/04/16(月) 14:28:11
wParamとlParamについてどなたか やさしく教えてください。
>>935 最早その名前に何の意義も無いので、適当に使い分けましょう。
メッセージに追加の情報を付加するためのもので、メッセージ毎に意味が違う。 個々のメッセージ毎にどういう意味を持つかはMSDN Libraryに書いてある。
イベントが呼ばれたときに設定される変数で 意味はそのイベントによって異なる。
>>936 使い分けだったら、ポインタはlParam、ハンドルはwParamに入れられる傾向にある。
Win16で、ハンドルとwParamが16ビット、FarポインタとlParamが32ビットだった名残だが。
lParamのlってlongのこと? じゃあwはword?
l w
>>940 そうだよ。Win16では当初ウィンドウプロシージャもこういう宣言だった。
LONG FAR PASCAL WindowProc(HWND, unsigned, WORD, LONG);
Win16後期になってくると、LRESULT/UINT/WPARAM/LPARAMが出てきて、
現在のWin32でも通用する形になった。
LRESULT FAR PASCAL WindowProc(HWND, UINT, WPARAM, LPARAM);
リソースの STRINGTABLE の最大文字列長は何バイトですか?
>>943 ちょっと的を得てなくて申し訳ないんだが、
リソースも所詮ファイルなので、リソース全体ではNTFSの2TB弱が限界だろうか。
この辺ウラとってなくて申し訳ない。
Win32APIだとLoadString関数を使う事になるが、これは文字数にintを使ってる。
さらに、32bitのWindows2000系でのユーザーメモリ空間は2GBなので、
VC/VC++6.0では1回で使える文字列は2GB弱が限界だと思われる。
#VB6.0のString型はUNICODEで32766文字。
>>944 >VB6.0のString型はUNICODEで32766文字。
便乗でスマソ
BSTR型は、ポインタの一つ前に文字長が入っているんだっけ?
>>943 WCHAR形式で格納されていて、最大0xFFFF文字(NULL文字を含まない)
RASCALってなんですか?
アライグマ
Helphiじゃないの
RASICかもしれん
952 :
944 :2007/04/16(月) 20:54:53
>>943 さっきは適当な事を言ってすみません。
ttp://blogs.msdn.com/michkap/archive/2007/01/15/1466291.aspx この、(2007年1月頃の)ページでは、「ヘルプで明文化されている最大値の最低限は4097バイトである」
(つまり、デフォルトで4097バイトまでは問題ない)
「しかも、他の地域版のMSDNヘルプでは限界すら書いてない。本当の限界を調べてみないか?」とあるが、
レスは「そんな意味の無い事を・・・」とにべもない。
フォーマット的には
>>946 でしょうが、このアーティクルが本当なら
サードパーティツールを考慮して4097バイト(2047文字)に抑えた方が良さそうです。
#VB6のString型は、最大32767文字なのですが、最大まで使ってしまうと
#ヌルターミネータ(文字列最後の0)が入らないまま保存されます。
#VC/VC++6.0では、最も重要なCComBSTRですら文字列長プレフィックスを考えてません。
#だから、安全にプログラムするなら32766文字が良いです。
Acronis True Imageのtibのマウントみたいな仮想的な ドライブを作りたいのですが、DDKが必要なんでしょうか?
たたき台になるサンプルがあれば良いのですが…
ここで質問する程度の人はそんなものに手を出さないでくださいお願いします
仮想フォルダレベルで良いならcabviewのソースがサンプルにある DDKやIFSならスレ違い
COMスレかDDKスレでどうぞ
>>948 AppleのMacintoshが出た当時に結構出回ってた開発言語。
ってこれはWin32APIは関係ないね
Win2k以降でネットワークアダプタの現在のリンク速度とDuplexを取得する汎用的な方法ってあるんでしょうか?
WMIで取れたっけ?
CIM_NetworkAdapter, Win32_NetworkAdapterあたり? 全二重とかはソック叩くんだっけ?
DDK
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
WORD wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww; do{ wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww = GetAsyncKeyState( VK_SPACE ); }while( !wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww );
/: : : : : : : : : : : : : : : : : `丶、 / : : : : : : : : ‐- : :、: : : : :ヽ: : : : \ {  ̄: : : : : : : : : : : : : : :ヽ、: : : ヘ: : : : : ヽ ,.ヘ: : : : : : : `丶 : : : : : : : : `く/ ヘ: : : : : :', /: : ヽ: : \: : : : : \: : -―: : : :`く: : '.,: : : : :l ,': {: : : \: : :ヽ、: : : : :\ー‐、: : : :ヽ:\: ヽ : : :| l: :l : : : l \: : : \‐=V弋芝圷\: \l\l : : :| |: :l: :: : {xく´_\`ヽ:ヽ Vヘソ |: : |: : }: :./i l: :l:ヽ : ヽ仗圦 \ ゞ''´ ノ: /l: :ハ/ 、ノN ヽヘ: :\ ヽVヘ:} // j/-j/ 乂 ノ: :j 丶\: ヽ: ゞ'' 、 ハ! : : :ヽj、_,ヘヘi彡' `ヘ> - ' / V廴V-へ∠`´__ ヽ、_ / ヽ/ ̄/ '⌒ヽ `丶 \ミ、ー:- -イ / / / ヽ \ ヽ:八{\少} / / / ∨ \ '′_>' /’ __,/ / / | \ ,イ /、 ´/ /´ | \ /l│ / __/ / / | / /│| /V / / / | _/ ││{ / /V / r'´ ノ¨ ̄´ | ヘ ∨ ∨ ̄ ̄/ } /
┌─‐「][] _,ィ ´ ̄`ヽ、  ̄ ̄} | _ /:.ゝ-─‐<> r─' ノ 「Y {´ ̄`ン':.:.:.:.:.:.:.:.:.:.:.:.:}{  ̄ Lハj_, ィ'´⌒⌒ヽ、:.:.:.ィ、ハ [[] 「} _/∠二ニニニ¬、_ハ:.:.:.ヽヽ', rー'_ノ //´ 了~~~⌒~`ヽ.弋゙Tl:.:.:.:_j」 l { { { j} }士ぅ'´:.:_〉| い、__ >、___ __, ィ人 ヽく_:./:.〉ゝ ィ ⌒ >'/ い 〉~~〉T~~T< ヽハ 〈_:.く ( _ イ `7 ハ⊥__j_i___〉 ,}イ 〈_/ ( _) ハ__厶>ー‐一_7 /´ ゝ ___,ノ /ーY):::ノ ` ̄´厶.、/_ {::::::::/ /⌒ー'::::::}  ̄´ {:::::::::;: ィ
ちょっと早いけど、埋めモードに入ってるっぽいんで新スレ立てておくよ
970前から埋めは気が早すぎないかw
974 :
デフォルトの名無しさん :2007/04/18(水) 02:53:30
〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜
975 :
デフォルトの名無しさん :2007/04/18(水) 02:54:00
〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜 〜(^o^)〜
ume
埋め埋め ところで、国内の治安も悪くなったねー
978 :
960 :2007/04/18(水) 09:08:30
>961 WMIだと未実装らしくてNULLが入ってますorz
979 :
960 :2007/04/18(水) 09:17:31
>967 MIB_IFROW.dwSpeedで速度は取れるようですが、Duplexは無いようです。 このあたりはメーカー独自のレジストリ構造だし、泥臭くいくしかないのか・・・ 最終的には設定までやりたいんですが、 手持ちのNIC調べただけでもメーカーごとに全部違うようで SpeedDuplex/ConnectionType/ConnectionType_A
ume
膿め
982 :
デフォルトの名無しさん :2007/04/18(水) 13:51:52
俺様は産む機械ィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィ!!!11!!
梅
だからドライバから取れって
985 :
デフォルトの名無しさん :2007/04/18(水) 16:57:05
マイナスですかプラスですか?
生め
マイナスでもプラスでもありません
運転手だよね
IEやエクスプローラと同一の履歴の取得ってどうやるのでしょうか?
ume
ここまでテンプレ
// ここから怒涛のテンプレ
993なら長門は俺の嫁
994だったら1000まで行かずにdat落ち
>>989 shell:history
のことか?
>>995 いえ、アドレスバーの履歴です。
デスクトップやブックマークも補完されると思うのですが、あれと同じものを作りたいのです
ゆのっちって何でこんなにかわいいんだろ
>>989 IUrlHistoryStg2とIEnumSTATURLで検索すれば幸せになれると思う。
つーか、これURLどころか最近使ったファイルも全部ひっかかるんだけど・・
>>996 まったく同じモノでいいのか?
だったら、[ SHAutoComplete ]を調べてみろ
ちなみにShellのバージョン5.0以上な
30秒程度の差で先を越された俺が埋め
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。