刀、 , ヘ
/´ ̄`ヽ /: : : \_____/: : : : ヽ、
,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
/: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
/: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/
 ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/
/: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、
. /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\
/: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \
/ / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ
l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :}
l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : /
|: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ
!: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
V ヽ| }/// r‐'⌒ヽ イ〉、
ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは
>>1 乙じゃなくて
ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから
r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
/: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
また世話になるぜお前ら
どこで聞いたらいいのか分からないので、ここで聞いてみます。 .NET Frameworkは、C#などをコンパイルして、 共通中間言語(CIL)になり、JITでネイティブコードにしながら 実行されるということですが、これには Win32APIは全く 使用されていないってことでいいですか?
少なくともHeapやFile I/Oは使っていると思うぞ。
間違いです
間違ってないだろ
DragDetectって、右ドラッグ判定には使えないのでしょうか? WM_RBUTTONDOWNのハンドラの中で CPoint pt; GetCursorPos(&pt); if (::DragDetect(m_hWnd, pt)) { AfxMessageBox(_T("★")); } という判定を入れても、すぐにFALSEになってしまうのです。 たしかにMSDNのDragDetectの説明には「左ボタン」という表記があるのですが、 同じように右ボタンのドラッグ開始判定をしようと思ったら、 結局は自分でタイマを使ったり距離を調べたりといった判定を 入れなければいけなくなるものなのでしょうか?
右ドラッグなんて迷惑な使い方させsるなら、そのくらいやってくれよ。
MFCwwwwwwwwwwwwwwwwwwwwwwwwwww
motherfucker's classか
20 :
デフォルトの名無しさん :2008/07/08(火) 21:37:27
エディットボックスをSetWindowTextで更新すると勝手に一番上にスクロールされちゃうので 元の位置に戻したいと思ってます。 EM_LINESCROLLをSendMessageするときに GetScrollPosで垂直と水平の位置を取得すると水平の位置だけなんかおかしいのですが 水平位置の取得ってどうやるんでしょうか? EM_GETTHUMBは垂直位置のようですし・・・
WinXPとかの話なのですが、OS付属の「タスク」機能を使うと スリープモード状態から指定した時刻にスリープを解除することができます。 これと同じことを自作のアプリから行うにはどのようにしたらよいのでしょうか? APIなどを探したのですが見あたりませんでした。 もしかしたらOS標準の「タスク」にしか実現できない処理なのでしょうか?
VC++6.0を使っているものです ダイアログボックスのエディタボックスにファイルをD&Dしたら そのファイルを読んでエディタボックス内に表示させてたいのですが 方法がどうもわかりません MFCなら"DragAcceptFiles"ってのを使えばいいっぽいのですが MFCを使ってないもので・・・ どなたかご教授いただけないでしょうか。
MFCを使って無くても"DragAcceptFiles"だろ 少しはググれカス
VC2008EEでプログラミング始めた者です とかなら分からないでもないが、10年ぐらい前のVC6を今でも使ってる奴が なぜそんな基本的な事も知らないのかねぇ 前世紀からタイムスリップしてきたのか?
IShellTaskScheduler
なんでこうもVC6使ってる奴が、後から後から発生してくるのかさっぱり判らん。 STLは腐ってるし、古いリンカのせいでSDKの対応は2003位で頭打ちだし。
>>26 新しいものを拒絶して、いつまでも過去にすがりつこうとする人っているじゃん。
そういう人なんだよ。
WaitableTimerの解説に、APMから起きてこれるフラグ、みたいなのがあったような
俺普通にVC6使ってるが?w 結構使ってる奴いるんじゃね?
VB6も使う必要があるとか2002以降.NETで重くなったのにマシン買い換えてないとか、そもそもOSが(ryとか
俺もVC6使ってるなぁ だって2002以降は.NETなんていらねーのに統合されてるのがむかつくし ってか、VC6使いなんて発売時期考えてもプログラミング暦5年は超えてないとおかしくないか? なぜDragAcceptFilesすら知らないのか理解できないのだが
32 :
デフォルトの名無しさん :2008/07/09(水) 03:58:09
質問スレにまできてなんで雑談してんだ。
客の指定がVC6だったりしてw というか実際にあったし…(´;ω;`)ウッウッウッ・・・
forで宣言した変数がループ外まで有効なのってVC6までだっけ?
まあおかしいのは知らない事じゃなくて 調べる手段をまともに持ってない事だな
>>34 設定で変えられるけど
2003もデフォルトでそう
2005から変わった
37 :
デフォルトの名無しさん :2008/07/09(水) 11:40:10
テキストエディタを作っているのですが、IMEをONにして何か文字を入力すると、キャレットのあった位置にすでに文字が入力されていた場合、その文字のフォントでIMEに入力されてしまうようなのです。 例えば、キャレットの位置にあった文字が太文字だった場合、IMEへ入力される文字も太文字になってしまいます。 これを、常に一定のフォントでIMEに入力されるようにしたいのですが、どうすればよいでしょうか?
>>37 元windowはリッチエディット?
EN_IMECHANGE 捕まえて ImmGetContext() 〜 ImmSetCompositionFont()
でなんとかならんかね?
今時richeditでエディタ作る奴なんているのか?
部分的に色変えたい場合時にリッチエディット以外に選択肢ってあるんですか?
41 :
デフォルトの名無しさん :2008/07/09(水) 13:20:55
さーせん
>>20 がVC6の話題に埋もれてしまったので
もしわかる方いたらお願いします・・・
>>41 スクロール位置なの?
キャレット位置戻すだけじゃ駄目?
43 :
デフォルトの名無しさん :2008/07/09(水) 13:45:19
>>42 キャレットって言葉知りませんでした。調べてみます。
スクロール位置というか更新後も同じ表示に戻したいということなんです。
キャレット位置戻すというのはそういうことなんですか?
44 :
デフォルトの名無しさん :2008/07/09(水) 13:49:43
キャレット調べてみました。 エディットボックスといってもReadOnlyで入力するわけではないので、 キャレット位置に戻すってのは違うみたいです。
まあやってりゃキャレット戻すのも必要になるだろうけど、 EM_LINESCROLLで駄目なのはなんで? 普通にうまくいくけどな。
47 :
デフォルトの名無しさん :2008/07/09(水) 14:19:32
int h = GetScrollPos(GetDlgItem(hWnd,IDC_LOG),SB_HORZ); int v = GetScrollPos(GetDlgItem(hWnd,IDC_LOG),SB_VERT); SetWindowTextA(GetDlgItem(hWnd,IDC_LOG),buffer.c_str()); SendMessage(GetDlgItem(hWnd,IDC_LOG),EM_LINESCROLL,h,v); このようにやったのですが、 垂直スクロールは元の位置に戻るんですが、 水平スクロールが左端以外の時だと、一気に右端まで移動しちゃいます。 hの値を見てみると、 更新前49 更新後230になってました。
そりゃ取得はピクセル数なのに設定は文字数だからな
49 :
デフォルトの名無しさん :2008/07/09(水) 14:47:13
そこでEM_GETTHUMBで位置を取得するのかな?と思ったんですが これが垂直スクロールしか取得できないみたいなんですが、 水平の文字数ってどうやって習得するんでしょうか? あと取得はピクセルとのことですがvの方はうまいこと同じ位置に戻るんですが、 たまたまってことですか?
Vはライン数 プロポーショナルフォントというものがあって
WS_EX_TRANSPARENT でウィンドウを半透明にしたんですが、動かしたり他のウィンドウが 重なったりすると一部しか描画されなかったり消えます。 case WM_MOUSEMOVE: InvalidateRect(hwnd,NULL,TRUE); を入れてみましたが、うまく描画されません。どうすればいいでしょうか?
>>51 多分おまいさんが使いたいのはWS_EX_LAYEREDのほう。
53 :
デフォルトの名無しさん :2008/07/09(水) 16:33:59
>>46 全部自分で(´・ω・`)
頭いい人達一杯いるはずなのにデフォで便利なの用意してくれないんですねMSは・・・
WindowsAPIというこのスレ的に一番便利なものを用意してくれているではないか
つーかログ表示とか、メインじゃないものに色つけたいときはリtッチは手軽でいいじゃん
でもリッチクソ重いよ
IEコンポーネントもあるぞ。もっと重いか
IE7は史上稀に見るクソブラウザだな クソ重い上にエラー吐きまくりやがる
DFAが分かればエディタの構文ハイライトぐらいすぐに作れるだろ
Cの入門本数冊やったんですがWinAPIって簡単に言うと何なんですか?ソフト開発向けの関数の集合?
Win Windows用の A アホ専用 P プログラム I インターフェイス
>>60 OSが提供する機能。unixだとシステムコールという。
近代のOSは、アプリケーションプログラムが直接I/Oポートをいじることを許さないのよ。
複数アプリ間で衝突したりするから。
で、I/Oを直接管理するのはOSで、アプリはOSが提供する機能を呼ぶことでI/Oしろということになった。
Windowsの中の人(OSたん)に、「こういう処理をしてね!」と言うと、OSたんが何かやってくれて、 その結果いろんなことが起こる。このように、OSたんにえちーなことをさせるのがAPI。
例えば、一つのファイルを監視するにあたって そのファイルが更新(データ追加)された時点で制御返す APIとかって知りませんか? データサイズとタイムスタンプで何かで判断する以外のやり方が あればそれでいきたいと思っているので。
APIフック
66 :
64 :2008/07/09(水) 19:52:46
>>65 あー、CreateFileかWriteFileにAPIフックかけるのか。
でもそれは全プロセスに対して干渉する事になるから
微妙だなぁw
ものすごく薄い記憶だけどフォルダ監視に関しては
フォルダ内が更新された時点で制御返してくれるAPIが
あったと記憶してるんだが、ファイル単体に関しては
似た機能のAPIは提供されてないのかなやっぱり。
子スレッド内でSleepでもしながら一定間隔での
監視にするかなぁ。。。
デバドラ (例:Filemon)
68 :
64 :2008/07/09(水) 19:56:27
こいつだ FindFirstChangeNotification
69 :
64 :2008/07/09(水) 19:59:26
すまん
FindFirstChangeNotification
↑で事足りるかもしれないのでこれでやってみる
>>65 ありがとう
>>62 いや、Win32APIはLinuxで言うところのglibcとかだぞ。
システムコールとアプリケーションの間にあるライブラリ群
↑話を理解してない馬鹿
70は正しい たとえばCopyMemory
CopyMemoryはmemcpyの#defineだが 本当に話を理解してない馬鹿なんだね
Win32APIの場合、基本はインポートライブラリでOSのDLLに直結だからな。 libcは、Win32APIとCランタイムの中間辺りに位置している感じか?
もう、WindowsXPのXPビジュアルスタイルの ツールバーのバグって治らんのかな・・ ツールバーのボタンを押しながらマウスの右ボタン押すと、 2回目に、別のウィンドウにフォーカス移すまで、 操作不能になるって奴。 WM_CONTEXTMENUを処理して右クリックメニュー出すと、 フォーカス外れる為か、操作不能にはならないけど、 以降、ボタン押したままカーソルを外すと、押されたまま戻らないようになる。 (IEやエクスプローラーのツールバーでも確認出来る) こっちは実害は無いけど、プログラミングスキルが低く見えて格好悪いよw なんでMSはこんなみっともないバグ、治さないんだろな。
アイコン潰れてるのも直ってないだろ
>>73 はなぜCopyMemoryが存在するのかを理解できてないようだ。
↑話を理解してない馬鹿
CopyOnWriteなページをしてくれるものと期待していたのに 使い分ける意味がない糞実装にがっかりだ
80 :
デフォルトの名無しさん :2008/07/10(木) 10:13:36
いきなりですみません。ご質問させて下さい。 HTMLでいうMARQUEEのような感じで、 Windowsアプリ上にて、ビットマップや文字列をスクロールさせたいと考えています。 そこで私は、以下の手順で、ビットマップをスクロールさせようと試みました。 @x座標を表す変数に、初期値設定 AメモリDCを作成 BInvalidateRectで、直前のビットマップ表示領域を無効化 C(x座標を表す変数)++ Dx座標を表す変数を使い、メモリDCから画面DCにBitBltでビットマップコピー EUpdateWindow 以下、@〜Eの繰り返し しかし、この方法ですと、スクロールが滑らかではなく、 非常にカクカクしてしまいます。 開発環境はVisualStdio2005で、OSはWinXPProです。 マシンスペックは、特に古い機種ではないはずですので問題はないと思います。 WindowsAPIを使って、画像・文字列等を滑らかにスクロールさせる方法をご存知の方、 ぜひともご教授お願い致します。
ScrollWindowEx
ScrollWindowEx 使うと、無効領域はスクロールして新たに出てきた部分だけになるから そのままUpdateWindowすれば軽いよ
元質問者だと、あの答えじゃそのままInvaridateしそうだからさ。
>>84 そういう事ね
てかSW_ERASEやSW_INVALIDATEで良くね?
ちなみに常にウィンドウ全体にBitBltするようなウィンドウではWM_ERASEBKGNDを潰しておくとちらつかなくていい、というのも覚えておこう
WM_ERASEBKGNDを潰すのと、WNDCLASS(EX)::hbrBackgroundにNULLするのって同じ?
hbrBackgroundがNULLならDefWindowProcが何もしないので結果的にはそうなる
91 :
80 :2008/07/10(木) 14:48:01
皆さんありがとうございます!! 非常に為になりました^^;) いや〜〜、もっと勉強して、 皆さんの様な凄腕プログラマーにならなくてはと 思い知らされましたよ・・・。
92 :
デフォルトの名無しさん :2008/07/10(木) 18:30:22
自作でエディターを作ろうと思っているのですが、 IMEの使い方がよくわからず困っています。 WM_IME系メッセージやImm系関数は調べてみたのですが、 そもそもWM_IME系のメッセージを受け取ることができません。 (EDITコントロールをサブクラス化すれば可能なようですが、あまりそうはしたくないです。) どうしたらいいでしょうか...ご教授お願いします。
93 :
92 :2008/07/10(木) 18:31:30
すみませんsage忘れました...
最近、EditやRichEditを貼っただけのエディタ作るのが流行ってるのか?
>>92 ソースコード公開してるエディタのソースを読む。
MSDNの関連する項目をちゃんと読む。
作るのをやめる。
Win
Http::IWinHttpRequestPtr の Send なんだけどさ。
Send(_variant_t body);
なんだけどさ。
これでバイト列を送りたいんだよね。
BYTE* byte に先頭アドレス、
int length に長さが入ってるとして、
これを_variant_tにする方法を誰か教えてください。
ちゅっと聞きたいんだけど、ユニコードとマルティバイトをシィムレスに入れ替えるための Tってあるじゃん。 _T(”パンツはいてない”) こんな感じのヤツ。 あれって、_T、__T、_TEXT、__TEXT、TEXT、って、一杯種類有るけど、誰の仕業? 単に互換性の問題なので? どれを使うのが正しいの?
OpenFileMappingなどで開かれたファイルマッピングオブジェクトのハンドルから、そのオブジェクトのサイズを取得する方法は無いのでしょうか。
>>96 VT_UI1型のSAFEARRAYを作ることになるな。
それなら_variant_tよりも、ATLのCComSafeArrayとCComVariantがお勧め。
このスレ的には、SafeArrayCreateVectorから始めるべきかもしれないが。
頑張って作って呼び出した結果がE_INVALIDARG、ってオチになるような気もするが。
>>97 winnt.h : __TEXT -> TEXT
tchar.h : __T -> _TEXT, _T
宣言としてはこういう風になってるな。
他のコンパイラを意識するならTEXT、気にしないなら_Tってところじゃね?
何故色々なパターンがあるのかは知らん。
TEXTも_TもVC4.0の頃から既にあったとは思うのだけど。
多分当初はWin32APIのUNICODEとCランタイムの_UNICODEで独立して切り替える事を考えていたと思われる
つまり俺は最強だったという事だな?
いや最強なのは俺に決まってるだろ?
いや俺だ!
105 :
デフォルトの名無しさん :2008/07/11(金) 05:35:08
教えてください アクティブウィンドウの画面をコピー(Alt+Screen)して Bitmap等にしてファイルにするようなAPI関数みたいなものはありませんでしょうか?
はい
Alt+Screen???
Alt+PrintScreenのことだろ アクティブなウィンドウのハンドルを取得して そのDCを取ってきて メモリDCにコピーして それを好きな形式でファイルに書けばいい
>>108 そんな事は聞いていない
>>105 はAPIが「ある」か「ない」かを聞いているだけだろ
日本語読めないのかね?
だからあるって言ってるだろ 日本語読めても理解できなきゃ 意味がないんだよキミ
アクティブウィンドウの画面を(指定されたファイル名で)Bitmap形式にて保存する という動作のAPI は無い
ないってば
GetDCしてBitBltすればいいじゃん
荒らしてるだけのやつは消えろ
質問者が聞いていない事まで答えるから荒れるのだろ 俺ってこんな事まで知ってるぞとか自慢してるみたいでキモイだけだから自重しろ
質問者の揚げ足取ってるだけのやつこそ何の役にも立ってないだろ。 自分のストレス解消のためにこのスレ使うのはやめてくれないか。
>>119 荒らしてストレス解消するのはもちろん迷惑だが、
知識をひけらかしただけの回答で自己陶酔してストレス解消するのは迷惑じゃないのか。
両者そこまでにしような。 言いたいことは一通り言ったろう?
〜結論〜 アクティブウィンドウの画面をBMP形式で保存するという動作のAPIは無い が、 複数のAPIを組み合わせば可能。(google: GetDC BitBlt) BMPを書き出すのが面倒なんだけどね。まあGDI+でも使えば比較的簡単か。
質問者の投稿に問題があると思うなら具体的に指摘した方がいい それが面倒なら単にスルーするべき 単に煽っても何も伝わらなくて同じことを繰り返すだけだから 代替案を提示するのは資料的に価値があるのでありがたい
CreateDIBSection OleCreatePictureIndirect SHCreateStreamOnFile IPicture::SaveAsFile たしかこの組み合わせでやれば、フォーマットを意識せずに保存できたと思う。 素直にBITMAPFILEHEADER書き出し方が早い気もするけど。
> CreateDIBSection こいつの段階でBITMAPINFOを用意するのだから > 素直にBITMAPFILEHEADER書き出し方が早い気もするけど。 ということになるのでは? それにOle系はOleInitializeやCoInitializeの初期化がめんどい。
技術者は揚げ足取るの大好きだからなw 仕事場での話しなんだけど他人が作ったモジュールの テストとかでバグみつけたら 「バグだ酷い作りだ。バグだ酷い作りだ」 と喚き散らす奴とかよく見かけるけど、 そういうの見ると「こいつテストの意味わかってんの?」とよく思うw だから揚げ足なんて気にせず的外れで馬鹿な質問を どんどんすればいい。謙虚で低姿勢にしてれば小馬鹿に しながらでも住人が必ず答えてくれる。 揚げ足さえ気にしなければ比較的良スレだよここは
あとはシナチョンが全滅すれば、さらに良スレになること請け合い。
>技術者は揚げ足取るの大好きだからなw ほんと全てのジャンルの質問スレで総じて質問に対する揚げ足取る奴おおいよねぇ 性格悪いって思うよ 常にエスパーしろとは言わないけど黙ってればいいといつも思う
揚げ足取られてるのは質問者じゃなくて馬鹿な回答者じゃないの?
GetPrivateProfileStringって [HOGE] PIYO="""" こういうの読めないのね
場合によると思うよ
誘導されてこちらまで来ました。 現在テンプレートマッチングのプログラムを作っているのですが、 テンプレートマッチングでマッチングした部分の色を変えられず苦労しています。。 画像のある特定の範囲だけの色を変えるのってどうすればいいのでしょうか?
画素にアクセスして数値をいじればいいよ
背景をうまく透過するにはどうすればいいでしょうか? バックグラウンドとWM_PAINT処理時にNULL_BURSHを使ってできそうなのですが ウィンドウを動かすときにクライアント領域の下に隠れてるアプリが再描画してくれません
リージョン レイヤードウィンドウ
どうもです
inlineinputってどうやるの?
ビールスの作り方おしえて
てえしお方り作のスルービ
waveOutGetPosition以外に再生位置を取得できる関数ってありますか?
waveOutGetPositionと同じことをする関数がたくさんあっても単なる無駄じゃないかと思うんだが、なぜそんなものを必要とする?
いやちょっと気になっただけです
if(!(GetVersion() & 0x80000000)) return; 古いコードの中でGetVersion関数を使った↑のコードがあるのですが このでGetVersion関数の戻り値をまとめたところが無いため意図がわからず困っています これは 9x系ではないなら return; という機能になるのでしょうか? 教えていただけると助かります
気にならないでください
自己解決しました ありがとうございました
>>147 いつの間にかAPIの説明からこれが消えてるなー
Platform High order bit Low order byte (major version number)
Windows NT zero 3 or 4
Windows 95 1 4
Win32s with Windows 3.1 1 3
For Windows NT and Win32s, the remaining bits in the high order word specify the build number.
For Windows 95 the remaining bits of the high order word are reserved.
>>150 即レス感謝です 助かります
なんとわかりづらい関数……
コモンダイアログから開いたwaveファイルを再生し、 任意のキーが押されたときの,wavの再生時刻をメッセージBOXなどに出すにはどうしたらいいでしょうか?
バージョン判定なんて不要だろ 最も普及しているバージョンのWindowsだけ対応してりゃいいじゃない
環境:Windows XP Home, Visual Studio 2005 Academic Editionで、 WIN32APIとC++を使った、ダイアログをメインウインドウのような用途で動かしているアプリケーションを作成しています。 コンボボックスの選択されている項目が変更された瞬間をつかまえて、 他のコンボボックスの内容を書き換えたいのですが、 どんなメッセージを指定すれば、コンボボックスの項目変更を捕まえることができるでしょうか? …質問の情報不足があれば、またおっしゃってください。 よろしくお願いいたします
156 :
デフォルトの名無しさん :2008/07/12(土) 23:16:58
しまった、新規の質問ですので、ageさせてください
情報不足を心配する前に検索不足を自覚しよう
158 :
デフォルトの名無しさん :2008/07/12(土) 23:53:02
>>157 検索は・・・かれこれ1時間弱ほど
検索したキーワードはグーグルでコンボボックス コントロール メッセージ 変更 イベント win32API ダイアログなど
MSDNでのMessage ComboBoxで検索など
ちょっと、キーワードのネタ切れもしてきて、直接こちらでお聞きするという選択を最終手段としてとってしまいました
何か、ヒントやウェブページのリンクだけでもかまいませんので、お教え願えませんか?
俺は3分で見つけたけどなぁ。 CBN_EDITCHANGE, CBN_EDITUPDATE, CBN_SELCHANGEこの辺じゃないか?
>>159 まだ未確認ですが、ありがとうございます!
普通見つかるもんでは
普通見つからないよ
なんでWinAPIはC言語なの?
早い
VS2008です。 プロシージャの中で case MM_WON_DONE でwaveファイルの再生が終わったときに処理を書きたいんですが、 コンパイルするとMM_WON_DONEが定義されてないって出るんですが・・・ 使い方間違ってます?
WOMでしたね・・・すいません
167 :
37 :2008/07/13(日) 02:07:12
>>38 ありがとうございます!リッチエディットです。
>> EN_IMECHANGE 捕まえて ImmGetContext() 〜 ImmSetCompositionFont()
これ参考にさせて頂いて以下のようなコードを書いてみたのですが、
--------------------------------------------
LPCWSTR window_class = _T("SampleClass");
LPCWSTR window_title = _T("title");
LWND hWND = FindWindowW(window_class, window_title);
HIMC hIMC = ImmGetContext(hWND);
---------------------------------
みたいなコードを書いてみたのですが、
HIMC hIMC = ImmGetContext(hWND);
のところで
undefined reference to `ImmGetContext@4'
のようなエラーが出ます。
これは該当のウィンドウが見つからなかった、ということなのでしょうか・・
アプリケーションのウィンドウを生成する時に使うクラス名と、生成したウィンドウのタイトルを引数にすればよいのですよね・・?
どなたかアドバイス頂けると幸いです。
>>167 1.まずヘルプでImmGetContextの説明を開く
2.必要なライブラリを調べる
3.リンクする
LPCWSTR window_class = _T("SampleClass"); LPCWSTR window_title = _T("title"); こんなの書いてる時点でWin32の基礎も分かって無さそうだなあ てか変数に代入する必要あるか?
170 :
37 :2008/07/13(日) 03:09:07
レスありがとうございます。
>> 169
HWND hWND = FindWindowW(_T("SampleClasss"), _T("title"));
これでよかったですね。。
Win32apiもここ2〜3日で触り始めたばっかりですがC++も初心者です(^^);
>> こんなの書いてる時点でWin32の基礎も分かって無さそうだなあ
どこがマズいのでしょうか??
>>168 imm.hだけではだめだったんですね・・
libimm32.aをリンクしたらエラー出ずにビルドできました。(MinGWです。)ありがとうございますm(_ _)m
ただビルドは出来たのですが、ちゃんとIMEとやりとりできていないようです・・
ImmGetOpenStatus() も試してみましたがIMEのON状態が検地できません。
FindWindowW() で正しいウィンドウハンドルを取得できていないってことでしょうか。
>>170 >> どこがマズいのでしょうか??
何のために_Tを使ってるのかよく考えろ。
HWND hWND = FindWindowW(_T("SampleClasss"), _T("title"));
これもおかしいだろ。
>>170 A版関数とW版関数の違いはWin32apiで必須の知識なんで注意
ここであれこれ聞く前に基礎を勉強した方がいいと思うよ
C#とか使わずにAPI直叩きするメリットってなに?
・速い ・かゆいところに手が届く ・C#の裏で行われていることについて理解が深まる 当てはまらなければC#使ってなさい。
まぁ結局面倒だからC#に行くんだけどな
C#はCERとかすごく面倒だった気が
Constrained Execution Region? C#でなきゃ楽になるって話でもないような……
結論:C#は神 Win32はうんこ
C#じゃやりたいことがちっともできん お遊び用の言語だな
みんな何かしらの言語を使ってて、必要に応じてAPIを使ってるんで、比べるもんじゃないだろ。
>>181 やりたい事ができないのは言語のせいじゃなくてお前の能力のせい
はいはい
はいはい
うんうん
わんわん
にゃーにゃー
特定のエディットボックスで入力された キャラクターコード(WM_CHARのwParam))を取得したい場合 対象エディットボックスをサブクラス化させないとできないのでしょうか?
ボタンって子ウィンドウを使ってそれっぽく見せてるの?
うん
そうか、おれがんばるよ
>>189 EN_UPDATEとかそういうNotificationに乗ってやってくるかどうか。
来るならそれ使えばいいし、来ないならサブクラス化。
EN_UPDATEやそれ系の通知でそんな情報は貰えねーよ つうか、調べもしないで的外れな回答する奴って何考えてるのかね? 余所の掲示板ならポイント稼ぎの為にそういう事してる馬鹿がいるが2ちゃんじゃそんなの無意味だろうに
>>196 まったくだ。
回答するなら調べてテストコード書いて確認してからにするよなJK
で、テストコード書いて確認したにもかかわらず、 質問者からの返事は一言、「だめでした」
199 :
193 :2008/07/14(月) 10:05:31
>>196 的外れじゃないよ?
回答のとおりに調べれば正解にたどり着くもの。
質問者にとって役に立つでしょう。
役に立つのに何で怒ってんの?
キチガイの相手するな馬鹿。しかもわざわざageて
201 :
デフォルトの名無しさん :2008/07/14(月) 12:01:16
適当にいい加減なレスして指摘されたら逆ギレする奴、価格COMとかでよく見かけたなあw 中の人は多分、プライドだけは人一倍高いオッサンだと思うけど
唐突に価格COMで見かけたとか、何言っちゃってんの
204 :
デフォルトの名無しさん :2008/07/14(月) 12:51:01
いろいろと暑いよ
プライドが高いだけのオッサンは何処にでもいるという事だろう
・知識をひけらかして悦に浸る ・人の揚げ足取ったり見下すのが大好き ・基本的に性格が悪い ・プライドが異様に高い ・自分の主張は絶対に譲らない頑固者 1 つでも該当する技術者は周囲から嫌われやすいので注意しましょう。
人類の7割が最低でも1つ当てはまる気がする
悦に入るもの浸るのは優越感
啓蒙主義なんだよ
まあこのスレは嫌われ者の巣窟だろ
夕べの4チャンネルの「深イイ話」だったか、いじめの話題で、さかなクン の話の紹介があって、海では争いなく泳ぐのに水槽に入れるといじめが始ま るといっていた。関心が内向きになるとそういう性向になるんだろう。 だからと言ってはナンだが、よその国では敵を海外に作って、国民の目を そっちへ向けさせ、国内の矛盾への関心を希薄にする手も取られる。
日本も似たような物だろ 毒入り餃子だ何だってマスゴミに洗脳されてる
>>209 こういう開き直りは嫌われる条件には入っていないのかな?
>>214 こういうしつこい性格は嫌われる条件には入っていないのかな?
*'``・* 。 | `*。 ,。∩ * 糞スレストッパ〜 + (^ω^) *。+゚ `*。 ヽ、 つ *゚* `・+。*・' ゚⊃ +゚ ☆ ∪~ 。*゚ `・+。*・ ゚
いや、つまんないから
>>208 は揚げ足取りじゃないだろう。
自分だったら間違いを直してくれて感謝するだろうな。
またまた〜
すっかり雑談スレですね。
すっかりってずっと前からじゃん
子ウィンドウ(CreateWindowでWS_CHILDしたもの)のウィンドウメッセージを親ウィンドウが拾うにはどうすれば良いですか?
サブクラス化するかスーパークラス化するかフックする
すみませんが、そのサブクラス化あるいはスーパークラス化というのはどうすれば良いんでしょうか?
>>225 どうして調べもしないで質問するのかね?
親子関係だと、何がしたいかによっては子への通知が親に行くように用意されてるものもある。 サブクラス化は親子じゃなくても、自前のプロシージャを通過するようにできる。
だから、何がしたいのか聞いてるんだよ
>>226 調べたら解決しました。不快なおもいをさせてしまいすみません。
>>227 関係ないです。ありがとうございました。
親子関係じゃないということか、spyみたいなのを作りたいのかな。
一人で24時間レスしてるのか。頑張ってるなぁ。 んな訳ねーだろ
\_____ ___________________________/ ∨ ___ _ / ____ヽ /  ̄  ̄ \ | | /, −、, -、l /、 ヽ きみ頭だいじょうぶ? | _| -|○ | ○|| |・ |―-、 | , ―-、 (6 _ー っ-´、} q -´ 二 ヽ | | -⊂) \ ヽ_  ̄ ̄ノノ ノ_ ー | | | ̄ ̄|/ (_ ∪ ̄ / 、 \ \. ̄` | / ヽ ` ,.|  ̄ | | O===== | `− ´ | | _| / |
SHGetFileInfoを使ったら解放しないとメモリリークするって 記述を見つけたんだけど何を解放してあげればいいの? 定義がDWORD_PTR *SHGetFileInfo ってなってるから DWORD *pRet = SHGetFileInfo() delete pRet とかってやればいいの?
ImageList_Destroy((HIMAGELIST)SHGetFileInfo( ... ));
>>238 MSDN嫁
アイコンハンドルのことだ。
>If SHGetFileInfo returns an icon handle in the hIcon member of the SHFILEINFO structure pointed to by psfi,
>you are responsible for freeing it with DestroyIcon when you no longer need it.
すみません。 サウンド、プログラムの起動で音がなる設定をしている環境で、 CreateProcessを使ってバックグラウンドでexeを動かした時も音が鳴ってしまいますが これをプログラムのコードで抑止する方法がありますか?
またウイルス作成者か
一時的にミュートする
244 :
241 :2008/07/16(水) 00:47:17
>>243 やっぱそれしかないですかね…
ありがとう御座いました。
コンソールプログラムで コマンドライン引数処理したいのですが パースしてくれるような関数ってありますかね?
>>245 コンソールならエントリポイントを
int main(int argc, char *argv[])
にしてみては?
for(int i=0;i<argc;i++) printf("%s\n", argv[i]);
でどんなものが渡されるか確認できる
CommandLineToArgvW
>>247 A版とペアになってないしargv[argc]がNULLでなかったりするから却下
何でもかんでもNULL終端に頼るな。
>>249 ばーか
argv[argc]はNULLでないといけないんだよ
気になるなら wrap しろよ
argv[argc]=NULLも知らないC言語初心者は来なくていいよ
教えてよ
早く教えてよ
何を?
知らないならレスしないでください
じゃ早く教えてよ
早く教えなさい
>>245 質問がよく分からないけど、
getoptみたいなのがほしいってこと?
8ビットの時代から getarg() ってを使っているが、標準じゃないのか。
8ビット……ファミコンですね、分かります
CP/Mも8bit
教えてよ
早 く 教 え れ
何を?
知らないならレスしないでください
じゃ早く教えてよ
何を?
質問です。 キーコードをVK_0のようなバーチャルキーの文字列に変換したいのですが、256個の配列をもつくらいしか手段はないのでしょうか? VirtualKeyToString(int vkey); みたいなものがあればと思うのですが・・・
ない
272 :
デフォルトの名無しさん :2008/07/16(水) 15:57:02
256個ぐらい作ればいいだろ
256個くらい手動でつくればいいだなんていう、まともなプログラマがいるだろうか?
お前の常識で考えている内は答えは出ない お前が自分で考えてるもの以外答えと認めないだろうから 黙って書け
手動で作れば良いんだ、っていうのはまさか buff_0 = ... buff_1 = ... : : buff_255 = ... っていうのを言ってるんじゃなかろうな。
久々にまともな質問がきたと思ったら、一瞬にして荒らしに食われたな そろそろ通報レベルなんだろうか?
VK のうち a-z 0-9 はそのままアスキーコードでなかったっけ? ↑は たまたまで、それを期待して実装はマズイん?
>>270 VK_0とかって独自の定義じゃなくてどこかで定義されてたっけ?
MapVirtualKeyとかGetKeyNameTextとかでテキトーにいじればいいんでない?
>>278 マクロ自体は WinUser.h にある
"VK_0" のような文字列化を望んでいるらしいので どうしようね? って話
>>280 C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\WinUser.h
を見てみたんだけどVK_0の付近はこんなになってた
#define VK_INSERT 0x2D
#define VK_DELETE 0x2E
#define VK_HELP 0x2F
/*
* VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
* 0x40 : unassigned
* VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
*/
#define VK_LWIN 0x5B
#define VK_RWIN 0x5C
#define VK_APPS 0x5D
282 :
280 :2008/07/16(水) 17:34:09
>>281 あ 0-9 A-Z に限り
VK_xx ってマクロ定義そのものは居なくて ASCII で比較せいや ってことか
自分なら配列作る。
この辺が興味深い /* * NEC PC-9800 kbd definitions */ #define VK_OEM_NEC_EQUAL 0x92 // '=' key on numpad /* * Fujitsu/OASYS kbd definitions */ #define VK_OEM_FJ_JISHO 0x92 // 'Dictionary' key #define VK_OEM_FJ_MASSHOU 0x93 // 'Unregister word' key #define VK_OEM_FJ_TOUROKU 0x94 // 'Register word' key #define VK_OEM_FJ_LOYA 0x95 // 'Left OYAYUBI' key #define VK_OEM_FJ_ROYA 0x96 // 'Right OYAYUBI' key
こんなのでいいだろ VK_0 - VK_9、VK_A - VK_Zは自分で何とか汁 struct keypair { UINT code; LPCSTR name; }; #define def_map(c) { c, #c } static const struct keypair kmap[] = { def_map(VK_F1), def_map(VK_F2), // ここに全部定義する { 0, 0 }, }; LPCSTR getname(UINT code) { const struct keypair* p = kmap; for ( ; p->code && p->code != code ; p++); return p->code ? p->name : "ねーよ"; } int main() { puts(getname(VK_F2)); return 0; }
BOOST_PP_STRINGIZEを使ってマクロで展開するのも面白そう
conimeよりimejpmgrのリーク?が気になる USBメモリなんかの取り外しでエラー出ると大抵こいつが原因だし
>>270 みんな意地悪しているのか、本気で知らないのか分からんが
そのままのAPIあるよ。つGetKeyNameText
自分が必要なAPIがあるのかどうか探すのってけっこう骨が折れるよね
>>291 俺の場合。
○○(ソフト)の××(機能)ってどんなAPIで実現しているのだろう・・・
→即OllyDbg
→こんなAPIあったのか・・・
→Google検索
Windowsの××(機能)ってどんなAPIで実現しているのだろう・・・
→即OllyDbg
→非公開APIかよ・・・
→構わず使っちゃえ!
>>293 どうぞ
int getopt(int argc, char *const argv[], const char *optstring)
{
どっかのサイトにfree getoptってソースが落ちてたよ。
}
www.hogehoge.comというURLを、 デフォルトのブラウザで開くにはどうしたら良いでしょうか?? ググッても良く分からなかったので、 よろしくお願い致します。
ShellExecuteでいいんじゃね?
>>297 inline void browseURL(HWND window, const std::wstring& url)
{ ShellExecute(window, 0, L"rundll32.exe", (L"url.dll,FileProtocolHandler " + url).c_str(), 0, SW_SHOWNORMAL); }
全くだ 知らんならレスすんなやクズども
>>300 GetKeyNameTextで"VK_0"という文字列は得られないだろ
本気で知らない奴が、えらそうに講釈たれないでほしいわな
>>300-301 とか最悪すぎるわ
全くだ 知らんならレスすんなやクズども
面白くないよ
全くだ 知らんならレスすんなやクズども
ここの連中は性格が悪すぎる 会社でもこうなのか 2ちゃん弁慶なのか
当然2ちゃん弁慶に決まってるだろうがwwwwwwwwwwww 俺もそうだwwwwwwwwwwwww
俺はム板弁慶だっつーの
他の板に行ったらしおらしくなるのか。
もっとひどくなるよ 大丈夫 ム板の評判を貶めるようなことだけはしないと約束する
他の板じゃ俺なんかかすんでしまうだけ
俺たち臆病だよなwwwwwwwwwwwwwwwwwwwwwwwww
というのもうそ
うそをうそと(略)難しい
うそをうそとうそで(略)難しい
こんにちは。ご質問させて下さい。 OSが自動でスタンバイ状態に入ったり、電源OFFになる事を、 プログラムから防止する方法ってありますか?? ex)長時間の動画を見ている際の、WindowsMediaPlayer等 ご存知の方は、ご教授の程、よろしくお願い致します。
> ご質問させて下さい 自分に対して尊敬語使うなよ。何様のつもりだ
>>322 トップレベルウインドウが存在しメッセージキューが動いているという極めて限定的な状況であれば
WM_SYSCOMMANDやWM_POWER〜への応答で可能
>>322 SetThreadExecutionState
CSplitterWnd?
スプリッタウィンドウ、かな?たぶん。 ちなみにコントロールでも何でもなく、自前で実装するものだ。 MFCのCSplitterWndや、.NETのSystem.Windows.Forms.SplitContainerは 独自にインプリメントしているにすぎない。
Vistaで画像にタグとか付ける関数ってなんなんだろう
>>327 スクショ見た感じだとブビ厨か?
だったらSystem.Windows.Forms.SplitContainerが使えるだろ
個人的にはSystem.Windows.Forms.Splitter + Dockプロパティで作る方がいいけど
ゲームパッドに対応したゲームを作成したいのですが、 入力したキーやボタンを取得して対応した処理に分岐するメッセージディスパッチの基本的コーディング方法を分かり易く解説した おすすめのホームページを教えてください。SDK,MFCのどちらかでお願いします。
話題に上げてもらえないXInputかわいそす
joyGet〜系は?
337 :
332 :2008/07/18(金) 22:56:50
>333 >334 ありがとう。勉強してみるよ。
Windows Mediaサーバからストリーミング配信されたものを 再生する動画プレイヤーを作成しています。 受信したストリームをStretchDIBits()で表示していますが 拡大表示すると画像に格子上の細かい線が入ってしまいます。 ブロックノイズのように見えているのでなんとか回避したいんですけど StretchDIBits()以外の表示方法とかあるでしょうか。
つ SetStretchBltMode
ありがとうございます! こんなに簡単に解決できるとは思ってなかった(´;ω;`)
教えてください。 指定プロセスのウィンドウハンドルを所持していると言う条件で その指定プロセスが終了した場合、前述のウィンドウハンドルは 無効になると思うのですが、そのウィンドウハンドルを取っ掛かりとして 紐付くプロセスが破棄(終了)されているかどうかを調べるには IsEnabledWindowを使ったほうがいいのでしょうか? それとも別APIにウィンドウハンドルを元にプロセスの生き死にを 判定するものが提供されているのでしょうか? お願いします。
ウィンドウが有効なうちにプロセスを特定しておかないといけない。
>>341 ウィンドウが存在してるかどうか調べるのは
IsWindowEnabledじゃなくてIsWindow。
ただし、IsWindowでFALSEが帰ってきても、
ウィンドウが破棄されただけなのか、
プロセスも終了してるのか見分けつかない。
結論としては、一般的にウィンドウハンドルからプロセスの生死を
判定することはできない。
ウィンドウの領域外をヒットテストするにはどうするのが一番効率がいい?
345 :
341 :2008/07/19(土) 01:10:05
>>342 ,342
ありがとうございます。
プロセスID、プロセスハンドルから
GetExitCodeProcessの終了ステータスで判断する事にします。
>>344 ChildWindowFromPointとかWM_NCHITTESTとかGetWindowRectしてPtInRectとか
やり方は色々ありそうだが効率なんて知らん。それぞれ測ってここで報告してくれ
347 :
デフォルトの名無しさん :2008/07/19(土) 09:09:52
レイヤードウィンドウについて質問させて下さい。 開発環境は VC++ 6.0、MFCは使っていません。 800 * 600 ピクセルのメインウィンドウを WS_EX_LAYERED にして、UpdateLayeredWindow() で更新を掛けています。 サーフェスの一部(第5引数に指定する32bitのDIBセクション)の一部だけを転送するような方法が見つからないので、画面を更新する必要がある場合は、800 * 600 ピクセル全体を転送しています。 ウィンドウがドラッグされたり、マウスが押された離された、あるいはマウスが動いた(これは毎回ではないですが)、タイマイベントが来た、という時に再描画が必要です。 会社の Core2 Duo 搭載マシン(3GHzのCPUが2個あるように見える)ではサクサク動くのですが、自宅の CeleronD 2.53GHz のマシンでは、ガクガク・チラチラです。OSは、前者は WndowsXP Pro SP2、後者は WindowsXP Home SP1 です。 具体的にどこが違うか調べてみると、やはり UpdateLayeredWindow() の呼び出しにかかる時間が、前者は 0〜16ms なのに対して、後者は 200〜250ms と大きな開きがありました。(時間計測は timeGetTime() で行いました。) UpdateLayeredWindow() は比較的高速、と聞いていたのですが、やはりこの位は掛かってしまうものなのでしょうか? それともこんな大きいウィンドウをレイヤードにする事自体が間違っているのでしょうか? 関数の呼び出し方はこうです。 -------------------------------------------------------------- static POINT ptSrc = {0, 0}; static SIZE sz = {800, 600}; static BLENDFUNCTION bf = {AC_SRC_OVER, 0, 0xff, AC_SRC_ALPHA}; HDC hdc_dst = GetDC(NULL); HDC hdc_src = CreateCompatibleDC(hdc_dst); SelectObject(hdc_src, hBitmap); // hBitmap は裏画面のハンドル(32bitDIBセクション) UpdateLayeredWindow(g_hWnd, hdc_dst, &g_ptWnd, &sz, hdc_src, &ptSrc, 0, &bf, ULW_ALPHA); // g_ptWnd はグローバル DeleteDC(hdc_src); ReleaseDC(NULL, hdc_dst); -------------------------------------------------------------- どなたか、御助言をよろしくお願いします。
SetLayeredWindowAttributesの使用も検討してみては? 差分更新範囲が狭いなら、こっちの方が速いかもしれない。
349 :
デフォルトの名無しさん :2008/07/19(土) 12:06:33
IWebBrowser2を使っているんですが IE内でTABキー押しても他のアイテムにフォーカスが行ってしまい IE内のリンクの移動がTABで出来ません 解決法お願いします!
350 :
349 :2008/07/19(土) 12:09:43
というかエンターキーなどの他のキーも効きませんでした IE内でキー入力を有効にするにはどうしたら良いですか
ダブルバッファリングとやらをやっても少しちらつくお・・・
>>350 メッセージループがどうなってるか晒してみ
IOleInPlaceActiveObjectでググるとそれに関係しそうな話がいくつか見つかる。
>>347 レイヤードウィンドウってハードウェア処理が出来ないと死ぬほど重くなった気がする
具体的には、オンボードVGAとか、VRAMが少ないとか
>>354 だな。
レイヤードウィンドウが確実にハードウェア処理されるようになったのはVistaのDWMが最初。
それまではかなり運任せなので無茶しない方がいい。
俺ってばアンカーを読み間違えたんだ
358 :
349 :2008/07/19(土) 14:59:03
>>352 MSG Msg;
while(GetMessageW(&Msg, NULL, 0, 0))
{
if(!IsDialogMessageW(Wnd,&Msg))
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
}
です。
>>353 探してみます
GetMessageの戻り値チェックなくね?
IsDialogMessage(コントロールのタブ機能の為)と TranslateAccelerator(アクセラレータ機能の為)を どちらも機能させるようにしたいのですが、 うまくいきません。 ↓行っている処理 if(IsDialogMessage(hWnd, &msg) == FALSE && TranslateAccelerator(hWnd, hAccel, &msg) == FALSE) { TranslateMessage(&msg); DispatchMessage(&msg); } ↑では駄目なのでしょうか?
>>360 順序を入れ替える(TranslateAcceleratorを先にする)
362 :
360 :2008/07/19(土) 20:09:23
>>361 なんという・・・('A`)
ありがとうございます
363 :
デフォルトの名無しさん :2008/07/19(土) 20:44:35
>>348 ピクセルごとのアルファを指定したいので、
SetLayeredWindowAttributesでは無理なのです。
>>354 ,
>>355 確かに自宅PCのビデオはオンボードです。
会社PCには確かそれなりのカードが載っていたかも知れません。
DirectXの2Dゲームでは大差は無かったのですが…。
後になって気付いたのですが、状況によっては自宅PCでも割と高速に動く
(UpdateLayerdWindowが40msくらい)時があるようです。
もちろん自プロセス以外のCPU使用率はほぼ0%にしてテストしているのですが。
何が違うのか分かったらまた書き込みます。
364 :
デフォルトの名無しさん :2008/07/19(土) 22:37:39
別のWindowsアプリケーションのインプットボックスとチェックボックスの値を 取得したり設定したりしようと思い、色々調べたのですが GetWindowTextA(whnd) では "" しか取れず、 GetWindowLong(whnd, GWL_USERDATA); では0しか取れませんでした。 インプットボックスやチェックボックスには何か別の方法があるのだと 思うのですが、分からないので教えてください。お願いします。
365 :
デフォルトの名無しさん :2008/07/19(土) 22:44:53
>>365 そちらに変えてやってみましたが、やっぱり取れません・・・。
数字が入ってるはずなのですが、SPYXX.EXEでも空白にしか見えないです・・・。
ウィンドウのキャプションとして取れない場合、
フォーカス当ててコピーするとかそういう方法しか無いですか?
>>366 IEはhtmlによるボタン等でウインドウを個別に作らずに自前で描画しているそうです
対象のアプリケーションが同様の方法をとっている可能性はありませんか?
市販ソフトとか、最近は独自コントロールの物が多いしねぇ
WPFなんか使い始めると、もはやウィンドウハンドルすらないからなw 従来の方法はどんどん使えなくなる。
>>367 ソフトはIEではないですが、もしかすると見た目が似ているだけで
サブクラス化した独自コンポーネントなのかもしれません。
とりあえず取れればなんでもいいので、クリップボード経由で
取れないかを試してみます・・・。
まともな作りなら、オートメーションとかActive Accessibility対応とかで アプリケーションプログラム用のインタフェースを備えているんだが、期待しないほうがいいかも。
そこでOCRですよ
373 :
デフォルトの名無しさん :2008/07/20(日) 12:16:14
vc6で、typeidを使った箇所より下のソースでパラメータヒントが出ません。 そこより上では普通に出ます。ncbを削除してもダメです。 出させる方法ありませんか?
環境の問題なんだからvc6のスレで聞こうぜ…
うるせーぼけ
プログラムが間違えてると、それ以降は表示されない場合が多い。
377 :
365 :2008/07/20(日) 14:52:00
PostMassage使ったらいけました!
そこはPost使うなSendしろ。
ねえ どうして僕はハッカーなの?
馬ッ鹿ー
馬ッ鹿ー
いやつまんないから
SendMessageTimeout使おう
IsHungup
388 :
デフォルトの名無しさん :2008/07/20(日) 18:12:32
>>376 コンパイルは通ります。
が、VCのエディタがtypeidを識別子として認識してないんでしょう。
vc6を諦めるかtypeidを諦めれ
皆僕のためにありがとう
一時メモリーの取得解放に GlobalAlloc() - GlobarFree() を使っています。 最近 80MB 級の DIB の消去に時間がかかるらしく、次の操作で「応答なし」 になることがあります。VirtualAlloc() - VirturalFree() に替えると、この 現象は出難くなる可能性はありますか。 尚、OS は Vista で 2 GB RAM, AMD Athlon64 X2 デュアルコアで GHz は 定かでありませんが、そんなに遅い CPU ではないだろうと想像します。
その可能性はあるかもしれないと俺も思うから、 人の答えを待っている間、それくらい試しにやってみな。
そもそもGlobalAllocは後方互換で残ってるような物だからクリップボードとOLEドラッグドロップぐらい以外で使うなよ
> ウィンドウズ環境でメモリを動的に確保するには通常GlobalAllocを使います。 こんな出鱈目書いてる糞サイトが原因だろうなあ・・・
でたらめはかわいそうだ。Win16の昔なら間違っていなかったのだから。 実際Win16プログラミングなんてやったことない俺には、 それよりもLocalAllocのほうがよく使われそうな気がするんだけどどうなんだろ。
> Win16の昔なら間違っていなかったのだから。 間違ってるのだが。
なんで?
知らないならレスしないでください
皆HeapAlloc使おうね!!! HANDLE hHeap = GetProcessHeap(); LPVOID lpvData = (LPVOID)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 1); HeapFree(hHeap, 0, lpvData);
ハーイ
いやmalloc使えよ 処理系によっては効率のいいメモリ管理してくれたりデバッグビルドでメモリチェックしてくれたりするし
>>404 ここここここはWin32APIスレなんだよおおおおおおおおおお
それにその手の話はループするから
mallocとかHeapAllocとかは終わりにしようぜ
Win32APIスレだからWin32API以外使うなってか さすが馬ッ鹿ーだな
釣られて俺を相手にするのはそろそろやめようぜwwwwwwww
偽者うざい。消えろ
>>ハッカーの神様 お前ある意味つわもの馬鹿だなw
マジレスするとWindowsのmallocは糞実装だから要注意。 まぁWindows自身も糞だけど。
Windowsにはmallocはないよ Delphiにもない
「msvcrt.dllはもうWindowsの一部だろ」 って話が一昔前、このスレで話題になってたっけ
だがしかし、その中身は周知でも扱いは非公開同然。
↑話を理解してない馬鹿
訳:かまってほしいな
それぐらい察してほしかったってのが本音
訳:かまってほしいな
422 :
393 :2008/07/21(月) 07:57:22
みなさん、どうもありがとう。
>>396 氏の指摘は図星だんだけど、他ではお世話になってますからねえ。
98時代は、relocatable なメモリは効率がいいかなと思ったりして、
ついハマッてしまった。
その後、XP 機、Vista 機も CPU は速いから凌げるかなと思ったけど限界
ですかね。#ifdef - #else - #endif の組を何百と組み入れるハメになる。
Windows3.1以前にも対応するなら、頑張れば良いんじゃね?
9xのWin32cでもGlobalAllocって再配置やらないと思っていたんだが。
>>423 Win16で80MBのメモリ確保とか無理だろ。
>>422 だから、Win32以上を相手にする限りVirtualAllocに統一すればいいと思う。
そもそも9xのGlobalAllocは数MB以上確保するなって書いてあった気がするが。
まじかよ。何そのウンコ仕様。ナメてんの?
後方互換APIに何言ってんだか
300、400マン画素の写真の時代はよかったけど、600マン画素に なって、98は GDI リソースがネック。XP になって、1200マン画素 高細の写真でも凌げた。デジカメ板の質問スレに乗っているエロ写真は 2660マンだ。エロもさることながら、自作のアプリがガタつくのは シャクの種。
シャクの種。
430 :
デフォルトの名無しさん :2008/07/21(月) 21:33:23
押せないボタンを押せるようにしたいんですが、コントロールを可能にするAPIってありますか?
僕が答えてあげるよ!!!! 対象コントロールをサブクラス化するか 単純にボタンがDisabledならEnableWindowでいいんじゃないかな!!!!
432 :
デフォルトの名無しさん :2008/07/21(月) 21:45:20
>>431 どうもありがとうございます。
EnableWindowってそのまんまなAPIがあったのですね、助かりました。
質問があるんだが聞いてくれ Win32API板のIRCって無いんだっけ?
ハッキングして探してください
>>434 ちょwwwwwww
いや、まじめな話IRC立てたら面白いかなとか思ったんだけどどうよ
つーかミスったな名無しで発言するつもりだったのに
コテハン記憶してた/(^o^)\
>>435 IRCよりは掲示板のほうがいい
同時刻にログインするのは非現実的だし
入りっぱなしにしておくメリットもなさそうだから
>>437 うにっくす とは言わないが20人程度常駐しているようなチャンネルなら有益かもしれない
他の人の話を聞くだけでも参考になるから
IRCは匿名サーバもあったと思う
そこなら気に入らなかったらハンドル変えればいいだけ
irc.scenecritique.com 6667 #Win32API IRC超初心者だが匿名で作ったつもり
ちょっと誰か入ってみてくれないか
一人しかこなかったけど中々面白かったよ 後、匿名だと言うことを確認できた
寝ろよ!
夏だな
ここでもこれだけ過疎っているのに IRCなんか人が集まるわけないだろ・・・
お前ら知らないと思うけどIRCの原作者は韓国人なんだぜ
フィンランド人だよ
それはあってもいるし間違ってもいる。
もう俺でいいよ。俺だよ俺
作ったのはドイツ人。上手く回るように改良したのはイギリス人で、 大量に使ったのはアメリカ。軽量化したのは日本人で、中国人は鯖とかコピって広めた。 最終的に姦国が起源を主張する。
ワラジムシだよ
irc.scenecritique.com 6667 #Win32API 誰かこないか 多分俺は夜にならないといないけどな 誰が入ってるとか発言したとかは見えない(anonymousになる)から 存分に馬鹿な質問するといい。
ここでいいよ
馴れ合いたい奴はむしろそっちへ行ってくれ そして帰ってくんな
ここでいいよ
455 :
デフォルトの名無しさん :2008/07/22(火) 10:22:01
CreateToolBarExで使うツールバーのビットマップは、 透明色を何色にすればいいんでしょうか?
GetWindowPlacement()で取得したWINDOWPLACEMENTの情報だけで 「最大化されている」と「最小化されている」の他に 「最大化したまま最小化されている」という状態は取れるのでしょうか? showCmdメンバがSW_SHOWMAXIMIZEDかどうかを見て状態を保存していたのですが、 上記の3番目の状態だとshowCmdがSW_SHOWMAXIMIZEDにならず、 次回起動時に通常状態で表示されてしまいました。
顔うpスレから画像を回収するソフトを作りたいんだが、初心者で初なので何していいかわからん。ネット上にどうプログラムでつないでいくの?わかるサイトあったら教えてください。
>>457 顔うpスレってVIPのだよな
俺昔そのプログラム作ったぜ
>>459 まず何をしたらいいの?まさか自動でwindowsキー押して、何押して、何押してってやってくんじゃないでしょ。どうすりゃいいの?
>>460 まずプログラミング言語を勉強しような。
C/C++でもC#でもDelphiでもVBでもいいから。
>>461 Cの基礎だけじゃ足りないの?ネットとどうリンクさせるかが知りたいんだけど・。
>>462 WinSockを検索して、入門サイトを勉強するよろし
>>462 CならWinsockでググれば解説もサンプルもいっぱい見つかるよ。
>>456 flagsのWPF_RESTORETOMAXIMIZEDは駄目?
>>466 showCmd == SW_SHOWMINIMIZED かつ flags & WPF_RESTORETOMAXIMIZED のときは、
showCmd == SW_SHOWMAXIMIZED のときと同様に次回起動時は最大化
とやってしまえばよさそうです。
ありがとうございます。
GetDlgItemってWM_CREATEで使用すると NULLしか返って来なかったりしますか?
>>469 もちろん試して出来なかったから聞いてるってw
検索の綴り間違えて引っかからなかっただけでした
すみません、どうやら出来ないみたいなので呼び出し元で初期化する事にします。
WM_INITDIALOGが駄目な深い理由があるんだろうなあ。
472 :
470 :2008/07/22(火) 19:50:13
winmainからDLGWINDOWEXTRA指定してCreateDialogすると WM_INITDIALOGは呼ばれないみたいです?たぶん・・・ WM_CREATEは呼ばれるんですが
ぼぼぼぼくは無事帰還しました!!!!!!!!
そういえば「馴れ合いは嫌だ」とかいうレスがあったけど 俺はただ何の前触れも無く誰かが 「○○ってどうやるの?」 という屑な質問を発言し 「○○使えよチンカスが!」 と誰かが受け応えする殺伐とした状況を想像して IRCを立てたから馴れ合うつもりは到底ない それにあやしい系のIRCもそうだけど 匿名IRCは到底馴れ合うような場所・状況じゃないと言っておこう
いちいちマジレスしなくても誰も馴れ合う事になるだろうとは思ってないよ 馬鹿を除いて
いやつまんないから
訳:かまってほしいな
483 :
デフォルトの名無しさん :2008/07/23(水) 15:32:23
質問です。 2chブラウザやIEのフレームなど、マウスで移動できるウィンドウ (境界に来るとマウスの形が「←||→」みたいになる奴) はどのように作ればいいのですか? 検索キーワードだけでもいいから教えてください
スプリッタウィンドウのことか? 1からAPIで書きたいのか、どっかのライブラリ利用したいのかで変わってくるが。
486 :
デフォルトの名無しさん :2008/07/23(水) 16:18:41
bccでウィンドウを表示するだけのプログラムを作ったのですが、 タスクマネージャーで見るとメモリ使用量が4MB、 仮想メモリサイズが1.7MBになっていました。 ソフトを作る場合、大体これが最小のメモリ消費量でしょうか?
いいえ
マジレスすると最小のメモリ消費量 = 0KB
489 :
デフォルトの名無しさん :2008/07/23(水) 17:33:04
レスさんくす メッセージウィンドウやコンソールウィンドウではなく CreateWindowとWS_OVERLAPPEDWINDOW | WS_VISIBLEで ウィンドウを表示するタイプの場合のメモリ使用量でも最小ではないでしょうか もしならないならもう少し詳しくご教授ください
490 :
デフォルトの名無しさん :2008/07/23(水) 17:40:30
自作PC作る予定なんだけど、winXPって何GBのメモリ認識できる? 3GBと言う人がいれば、4Gと言う人もいる。どっち?
>>490 悩むくらいなら4G積めばいい
3G だとデュアルチャネル使うために 512Mx2 とか妙なものを手に入れないといけない
32bitの場合メモリ空間そのものは4GB いくつまで認識できるかはチップセットやマザーボード、拡張ボード次第。 4GBと言ってるのは、最近のサービスパックで積んだだけ表示するようになったからじゃないかな。 ってスレ違いじゃ
>>489 ProcessWalkerかなんか使って、実際何にどれだけメモリ使われてるか調べてみれば
bcc のスタートアップコードでなんかしてるんじゃない? 標準ランタイムの初期化とかでさ crt0.c とかそういうのがソースについてれば追えるかもね
495 :
デフォルトの名無しさん :2008/07/23(水) 18:07:01
>>493 ググってみます。ありがとう
>>494 どうもです。ということはやはり使用量が多いのでしょうか。調べてみます
>>495 プロセスヒープ or デフォルトヒープで調べると幸せになれるかも知れない
497 :
デフォルトの名無しさん :2008/07/23(水) 18:54:12
>>496 ありがとん。ちょっと難解ですが、がんばってみます。どうもでした
やあ!!奇跡でIRCに3人も人がいるんだ!! irc.scenecritique.com 6667 #Win32API 以下は別件。 教えてください。 FindFirstChangeNotification使って特定のフォルダ内の テキストデータなどを監視する処理を実装していたのですが、 監視対象が更新され監視ハンドルがシグナル状態になった後 FindNextChangeNotificationを呼び出しても非シグナル状態になりません。 逆にFindNextChangeNotificationを呼び出した後 パラメータに使用した監視ハンドルでWaitForSingleObjectを 2度呼び出すと非シグナル状態になってくれるんですが これはFindNextChangeNotificationの仕様なのでしょうか?
因みにフラグはFILE_NOTIFY_CHANGE_LAST_WRITEです。
おいらはReadDirectoryChangesWしか使ったこと無いからわからない
fopen "w" で一回と fclose で一回の計二回更新が来るって事を
IRCの誰かが教えてくれた
実験というかテストはエディタでしかやってないから多分
エディタのその辺じゃないかと思われ。
因みにエディタは秀丸
>>500 その関数は知らなかった
ファイル監視に関しては地味に高機能だなw
そういう意味で俺も別のAPI探すべきだったか
NG推奨:ハッカーの神様
504 :
デフォルトの名無しさん :2008/07/24(木) 11:30:30
指定フォルダにサブフォルダがあるかどうかを調べるAPIを教えてくださいよ
HasFolderW()
506 :
デフォルトの名無しさん :2008/07/24(木) 11:59:38
いやそんなのないからwwwwwwwwwwwwwwwwwwwwww
BOOL FolderHaArimasukaW()
508 :
デフォルトの名無しさん :2008/07/24(木) 12:01:58
FindFirstで引っ掛けてGetAttributeなのか、やっぱり。
お前ら俺の昼飯前の集中を返せwww
>>509 FindFirstFileしてるのにわざわざGetAttributesしなおすのか?
512 :
デフォルトの名無しさん :2008/07/24(木) 12:10:24
>>511 属性みないとフォルダかどうかわからんってことだろ馬鹿
513 :
デフォルトの名無しさん :2008/07/24(木) 12:11:05
もちろんFindFirstFileで属性もゲットしてるからGetAttributeは必要ないけどな
GetAttributeって何だよ GetFileAttributesだろバカ共
515 :
デフォルトの名無しさん :2008/07/24(木) 12:19:29
それくらい脳内変換してやるくらいの柔軟な脳を持てってことだクズ
516 :
デフォルトの名無しさん :2008/07/24(木) 12:21:05
この時間に質問しても無駄だぜ? 今は夏休み。これ以上いわなくてもわかるよな?
脳内変換しないと読めない文章書くなってことだクズ
自己解決しました!
事故解決するくらいなら最初から質問するなってことだクズ
520 :
デフォルトの名無しさん :2008/07/24(木) 12:26:39
sage厨はクズだな
やっぱりわかりません!
やっぱり自己解決しました!
523 :
デフォルトの名無しさん :2008/07/24(木) 12:30:05
>>516 夏休みとか関係ねーよ
お前ら年中休みだろうが
質問者になりかわって自己解決した旨と感謝の言葉の書き込みをする 誰にでも出来る簡単なボランティアです
525 :
デフォルトの名無しさん :2008/07/24(木) 13:38:05
夏だねぇ
夏だな厨 【なつだなちゅう】 夏に暴れる人を放置ができず、とにかく「夏だな」と言い出し、 それによってなぜか相手より優位に立ってると思い、 荒れの元となりスレ住民全体に迷惑をかける存在。 【特徴】 ・とにかく文中に「夏だな」を入れないと気がすまない ・スレの流れや空気を読めず、反応してしまう ・普通のスレ住人は夏厨を放置しているのに自分だけが過剰に反応してしまう ・夏厨に反応している時点で夏厨と同類であることに気づいていない
ありがとうございました!
夏だな
あぁ、夏だ
夏だしな
夏ですね! ありがとうございました!
今から夏を試してみます!
夏己解決しました!
夏だな厨厨
夏だな厨厨トレイン
537 :
533 :2008/07/24(木) 16:26:53
夏を試してみましたが、できませんでした! ひきつづきアドバイスお願いします!
あきらめろ。 波 音 が響けば 雨雲ぉが近ぁづくぅ
いじわるしないで教えてください!
それくらい察して欲しかったって言うのが本音
541 :
デフォルトの名無しさん :2008/07/24(木) 16:45:53
それぐらい察することが出来ない人はレスしないでください
542 :
デフォルトの名無しさん :2008/07/24(木) 16:51:44
知らないならレスするなクズ
それなら知らない人には見えないところに書いてくださいね。
IWebBrowser2::get_LocationName(BSTR); で、何故かHPのタイトルじゃなくてHPのURLが取れてしまうんだけど、、、 本当はHPのタイトルを取得したいのに、、、解決法 教えてください
IHTMLDocument2::get_title(BSTR *p);
IHTMLDocument2::get_title(BSTR *p);
IHTMLDocument2::get_title(BSTR *p);
あれ?俺が居ないのに荒れてたのか。
プログラマ=馬鹿ばっか
550 :
544 :2008/07/24(木) 19:35:05
みんな、ありがと〜 できたよ!!
どういたしまして^^
ご丁寧にどうも^^
これからもがんばってね^^
554 :
デフォルトの名無しさん :2008/07/24(木) 21:36:03
質問があるのですが、googleの検索とかである絞込検索?みたいなやつのことなのですが、 たとえば、(hoge プログラム)でhogeとプログラムでマッチするサイトが検索できたりするのを Cとwin32apiで実現させたいと思ってます。アルゴリズムまたは作成方法を提示できる方いますか? ネットで使うわけではありません。検索アルゴリズムが知りたいです。
>>554 検索アルゴリズムを知る前にGoogle検索して調べる事を学びましょう
自己解決しました ありがとうございました
どういたしまして^^
558 :
デフォルトの名無しさん :2008/07/24(木) 22:16:20
IDでないから言いたい砲台
559 :
デフォルトの名無しさん :2008/07/24(木) 22:22:34
IDでても言いたい砲台
560 :
554 :2008/07/24(木) 23:03:59
分かる人はいないってことでしょうか?
クローラーでググれ
562 :
デフォルトの名無しさん :2008/07/24(木) 23:07:20
>>554 1:クロールする。
検索対象ドキュメントを集めてくる。
2:インデックスを作る
ドキュメントを単語に分割して、ドキュメントに対応する単語群を特定し、結果を貯めておく。
3:倒置インデックスを作る
インデックスを元に、単語に対応するドキュメント群を特定し、結果を貯めておく。
4:検索する
倒置インデックスから、単語をキーに対応するドキュメント群を特定し、要求元に結果を返す。
LPWIN32_GGL_DATA HTTPGetClawledDocument(LPTSTR lpszCondition) でOK
windowsのイベントログを取るAPIってありますか?
ありますよ
>>563 ポインタを返すAPIなんてほとんどねーよバーカ
けっこうあるよ。
ポインタよりハンドルがいいって言いたいんじゃない?
>>565 6006と6009を取れるやつ教えてくれー
HANDLE HttpFindFirstClawledDocument(LPTSTR lpszCondition, LPWIN32_GGL_DATA lpGglData) BOOL HttpFindNextClawledDocument(HANDLE hFind, LPWIN32_GGL_DATA lpGglData) 実在するとしたらせいぜいこんな感じだろ 嘘臭い釣りは面白くないよ
6006と6009ってロガーの開始と終了だったような .NETでなら最近見た
572 :
デフォルトの名無しさん :2008/07/25(金) 02:07:27
ファイル名(○○.cpp)から拡張子(cpp)だけを得るAPIありますか?
ある
ググレカス
お前がググレカス
ヤフーでググれ
自プロセスに読み込んだDLLを実行しつつ監視して、 セキュリティー保護のためにネットワーク/ファイルアクセスをチャックして 接続先アドレスがホワイトリストにない場合など DLLの実行を停止させたり、ユーザーに「○○へ接続してよいですか?」などの ダイアログを表示させるには、どういったAPIを使えばよいでしょうか?
チャックして チャックして チャックして
相変わらずこのスレ病んでるなww ストレスが溜まる原因は 自分自身にあると考えて改善してみよう。 もしくは、体壊すか事件起こす前に仕事やめなさい。
働いてませんが何か?
581 :
デフォルトの名無しさん :2008/07/25(金) 09:53:58
ヒント:夏休み
ヒント:海水浴
ヒント:バーベキュー
>>577 あるDLLが存在し、仮に名前をXとする
Xの機能を利用したいが、Xは(2chやアングラサイトで拾ったものなので)信頼できない
Xにアクセス制限を課して悪さができないようにしたい
どのような方法がありますか?
ってことか
ネットワークの接続やファイル操作に使うAPIを全部フックする、とかかなぁ
.NETのコードアクセスセキュリティ的な
昔はまんまPacket Filtering APIってあったんだけど Windows Filtering Platformに統合されちゃったんだよね
それはつまりWindows Filtering Platformを使えばいいってことじゃないの
VMで動かせば
普通はセキュリティソフトぐらい入れてるからその程度のセキュリティならソフトに任せばいい 何も入れずにネット繋いでる馬鹿は今すぐ回線切っとけ
592 :
デフォルトの名無しさん :2008/07/25(金) 13:16:23
TBBUTTONINFO info; SendMessage(TB_GETBUTTONINFO, 3, (LPARAM)&info); これでツールバーの3番目のボタン情報がとれないんですが助けてお願いします
593 :
デフォルトの名無しさん :2008/07/25(金) 13:18:34
まちがえた。hwndはツールバーのハンドルです。 TBBUTTONINFO info; SendMessage(hwnd, TB_GETBUTTONINFO, 3, (LPARAM)&info); これでツールバーの3番目のボタン情報がとれないんですが助けてお願いします
同じプロセス? SendMessageの前に ZeroMemory(&info , sizeof(TBBUTTONINFO)); info.cbSize = sizeof(info); info.dwMask = TBIF_XXXX;
> ZeroMemory(&info , sizeof(TBBUTTONINFO)); > info.cbSize = sizeof(info); 今時こんな書き方する人いるんだ・・・ TBBUTTONINFO info = { sizeof(TBBUTTONINFO) }; でいいのに
596 :
デフォルトの名無しさん :2008/07/25(金) 15:21:14
>>595 それがカッコいいと思ってる馬鹿を晒し上げwwwwwwwwwwwwwwww
外が暑いな
あぁ、ぬるいな
599 :
デフォルトの名無しさん :2008/07/25(金) 15:39:30
600 :
デフォルトの名無しさん :2008/07/25(金) 15:42:14
>>596 カッコいいとかじゃなくて常識だよ
C言語の初歩から勉強しなおそうね。
言語なんて道具なんだからそんな初期化方法はどうでもいい。
>>601 初歩的な事も分かってない奴に何が出来るんだよ
603 :
デフォルトの名無しさん :2008/07/25(金) 15:45:34
604 :
デフォルトの名無しさん :2008/07/25(金) 15:47:34
>>600 >今時こんな書き方する人いるんだ・・・
^^^^^^
>C言語の初歩から勉強しなおそうね
^^^^^
だれかこの馬鹿の矛盾を教えてあげてよw
>>595 #include <stdio.h>
main()
{
static int a;
a = 1;
static int b;
*(char*)&b = 1;
printf("a=%d, b=%d\n", a, b);
}
結果的には同じ答えが出るが、
お作法としては最悪。子供の教育には良くない。
607 :
デフォルトの名無しさん :2008/07/25(金) 15:49:52
↑話を理解してない馬鹿
↑ 反論できなくなると人格攻撃をするしかなくなるヤツ
609 :
デフォルトの名無しさん :2008/07/25(金) 15:52:04
>>605 ANSI Cに準拠していない古いコンパイラなら
>>594 の書き方をする必要があるが
今時のコンパイラなら
>>595 で問題無いのでわざわざ手間のかかる書き方するのは馬鹿
給食費は払わなくても、ちゃんと給食が出るから問題ないよ、か?
手間のかかる書き方をするとバグの元になりかねないので 出来る限り完結に書く方が良いのはコーディングの基本
少なくとも、構造体の先頭にcbSizeがあるという仮定のコードは書きたくないわな。
614 :
デフォルトの名無しさん :2008/07/25(金) 15:59:34
>>610 その前にお前は国語の勉強をしたほうがいいよ?w
>>613 その場合でも = {};か = {0};で初期化することはできるな。わざわざZeroMemoryなんぞ使わんでも。
>>613 サイズを格納するメンバのある構造体は Win32 で定義されている物なら必ず先頭にある
むしろ cbSize とは限らない (MEMORYSTATUS や WINDOWPLACEMENT など) ので
Win32 プログラマなら
>>595 の書き方をする癖をつけておいた方が無難だし
実際 WTL などはこの書き方で統一されている
>>615 元の質問者のコードに手をつけない形で答えたんだがな。
大体、質問の答えとして何が足りないかをわかりやすく答えてるのに、 余計なあやつけるヒマなやろうは出てくるとは思ったけどな。
>>620 最近覚えた知識を披露したくてうずうずしてたんだろうな。
そもそも、
>>593 の1行目を
TBBUTTONINFO info = { sizeof(TBBUTTONINFO), TBIF_XXXX };
にすればいい
とレスしておけば荒れずに済んだ訳だが。
なんで毎日毎日こんな阿呆な流れになるの? 暑さで脳溶けてるの?
夏休みだからに決まってるじゃん? どうせ宿題なんてしないから暇だし
給食費くらい払えよ
暑いですね^^ ありがとうございます^^
628 :
デフォルトの名無しさん :2008/07/25(金) 16:12:41
質問です! IDocHostUIHandlerを使ってIWebBrowser2の右クリックメニューを独自の物にしたいんですが IDocHostUIHandlerの実装の方法がわかりません! だれか教えてくださいm(_ _)m 調べてみたけど具体的な実装方法が見つからなかった・・・
夏休みだから
>>621 みたいな奴が沸くんですね。わかります。
丸投げすんなよ。ほんとに調べたのか?
いつもの荒れとちょっと違う感じ。c関連スレおなじみのキチガイっぽい感じ。
633 :
デフォルトの名無しさん :2008/07/25(金) 16:17:01
荒れた原因は知ったかぶりして余計なレスをした
>>595 だな。
とりあえずこいつは質問に答えてないから消えてよし。
ウザいコテが消えたと思ったら今度はキチガイか どうしてこうも連日変な奴が来るのかね・・・ .NET信者がスレを潰そうとでもしているのか?
>>634 お前のそのレスが基地外を呼び込んでるのがわからんのか?
つーか、荒らしてるのお前じゃねえの?
636 :
634 :2008/07/25(金) 16:21:27
ごめんなさい
637 :
577 :2008/07/25(金) 16:27:29
638 :
628 :2008/07/25(金) 16:31:24
調べたけど英語のサイトしかなかったからわからないです
>>637 そういうのって最近のファイアウォールのアウトバウンド防御でちゃんとチェックしてくれると思うが。
他のプロセスにDLLインジェクションしてネットワークアクセスするようなのもチェック入るし。
てか、そういうセキュリティ対策ソフトを作りたいのか?
640 :
デフォルトの名無しさん :2008/07/25(金) 16:35:18
夏だな
644 :
577 :2008/07/25(金) 16:56:44
>>639 セキュリティソフトのレベルまで作ろうとは思ってないですが、
お勉強の意味も兼ねて、自分でも実装したいと思っています。
>>644 その手のソフトは大抵ドライバ組み込んでカーネルモードでゴニョゴニョしてるだろうから
Win32の範囲外だと思う・・・
今後? どう読んでも次のWindowsからだろ。
マインスイーパー に和んだ
些細なことだけど、慣れ親しんだものを変えられるとやっぱり気持ち悪いな。
そういえば、これまでも「サウンド レコーダー」だったよね。 なんでだろう。
JIS涙目wwwwwwwwwwwww
またしても日本勢は敗北するのか
俺伸ばすほうが好きだった もちろんJISは知ってた
アセンブラー コンパイラー デザイナー デバッガー エディター 並べて書くと間が抜けてて嫌だ。 断固拒否するぞ
そこがいい
>>652 MSは日本なんてもうほとんど眼中に無いだろ
MSKBは機械翻訳だらけだしIMEは中国製だしDreamSparkとか日本は後回しにされてたし
マネージャーのコンストラクターでフォルダー名を指すポインターを受け取ってメンバー変数に保存します こんな感じですか
これは無駄にウザい文章が書けそうだ
659 :
628 :2008/07/25(金) 19:46:37
>>657 メェニヂャーのケンストラクターでフォウルダー名を指すポインターを受け取ってメンバー変数に保存します
実際の発音に表記を合わせるならこうしろよなー
>>661 ǽだからマェニヂャーの方が近いのかな?
maryがメリーかメアリーかマリーか、みたいな話だな
×コピペ ○コピーペー ってことですね
コピーアンドペーストだろ馬鹿
フルスペルにしただけだろ馬鹿
だから何だよ馬鹿
アセンブラァ レコォダァ マインスイィパァ プリンタァ バッファァ インストォラァッー スクリィンセィヴァァ
> レコォダァ 英語出来ないのがバレバレだな
サウンドゥ リコォダァ
取説に書いてあったら嫌だな
レコォダァ(笑) バッファァ(笑) こんな英語力じゃこの国の将来は暗いな
えっと…
バイオリンがヴァイオリンになったのはつい最近
僕、アルバイトォォ
もうさー、カタカナ語なんて廃止して中国みたいに自国語に置き換えちゃえばいいんじゃねーの? "工具棒"とか噴いた事あるけどw
原表記そのままでいいよ。 computer, printer, etc...
>>676 禿同
「ようこそ」とかナメてんのかって思うよ、ほんと
表記が変わるのはあくまで一般向けだろ
エンジニアが
>>657 こんなうざい文章を受け入れるとは思えん
そんな適応能力の低いエンジニアは不要です
>>678 どうせVisual Studioの表記も変わるだろ。
.NETじゃないVC++なんてどこがVisualなんだろうね
不自然な分かち書きを何とかしてほしい
そうそう、あの不自然なスペースの挿入こそ先に直してほしいもんだ。
だからそのルールが変だって話。俺様ルールの妙な日本語表記やめれ。
>>685 変かどうかなんてお前の主観だろ
何らかのルールを設けて統一性を図る方が大事だと思うよ
そのルールを今になって変えようとしているのが理解できんが
今までので慣れちゃったから別に変えなくても
デスクトップアイコンより後ろにウィンドウを表示させる方法ってありますか? WINDOWSの仕様上、やっぱ無理?
「Program Manager」というウィンドウが最背面の表示を担当していて、 背景&壁紙-デスクトップアイコンと、親子ウィンドウで構成されている。 少なくとも、オーバーラップウィンドウとかは無理なんじゃないかな。
2つウィンドウを作って片方にデスクトップアイコンを描画する
そこでActiveDesktopですよ
692 :
デフォルトの名無しさん :2008/07/26(土) 12:15:44
普通のボタンとかエディットとか配置したウィンドウで、 その親ウィンドウをDestoryWindowしたら子ウィンドウのボタンとかは DestroyWindowしなくても問題なし? こんなの↓ DestoryWindow(hButton); DestoryWindow(hEdit); ・・・ 最後に DestoryWindow(hDialog);
XPのタスクバーをホバー表示にしたいんだけどどうすればいい?
解脱すればおk
>>694 ティティピィ://エムエスディエヌ.マイクロソフト.コム/エン―ユーエス/ライブラリ/エムエスロクサンニロクハチニ.エーエスピーエックス
>イフザスペシファイドウィンドウイズアペアレントオアオーナーウィンドウ,デストロイウィンドウオートマティカリーデストロイズジアソシエイテッドチャイルドオアオウンドウィンドウズ
>ホェンイットデストロイズザペアレントオアオーナーウィンドウ.
その愚直さには価値がある。 力の使いどころを間違えなければきっと成長できるはず。
ありがとうございます^^
701 :
692 :2008/07/26(土) 14:35:57
DestroyWindow機能は指定された窓を破壊します。 >機能は、それからそれを非活性化して、キーボード焦点を取り除くために >WM_DESTROYとWM_NCDESTROYに窓へのメッセージを送ります。 機能は、 >また、窓のメニューを無効にして、糸のメッセージキューを洗い流して、タイマを破壊して、 >クリップボード所有権を取り除いて、クリップボードビューアーチェーンを壊します >(窓がビューアーチェーンの先端にあるなら)。 > >親か所有者の窓を滅ぼすとき、指定された窓が親か所有者の窓であるなら、 >DestroyWindowは自動的に関連子供か所有されている窓を滅ぼします。 >機能は最初に子供か所有されている窓を滅ぼします、そして、次に、 >それは親か所有者の窓を滅ぼします。 > >また、DestroyWindowはCreateDialog機能によって作成された >modelessダイアログボックスを破壊します。 つまり、親ウィンドウを一発DestoryWindowしておけば大丈夫ってこと?
マウスカーソルがクライアントウィンドウから出た時にでるウィンドウメッセージ ってありますか?
TrackMouseEvent で WM_MOUSELEAVE
705 :
デフォルトの名無しさん :2008/07/26(土) 18:37:20
VC2005〜2008によるWindowsプログラミング入門でお勧めの書籍ってどんなのがありますか? 『WinAPIリファレンス』(最新版じゃなきゃ駄目?) 『猫でも分かるWindows〜』 を購入しようと思っているのですが。
ぺぞるどぼんだけかっとけ
猫でもかっときゃ間違いは無い Windowsとゲームぷpr はかぶってる内容が多かった あとは赤坂れおん著くらいのしか知らないなぁ 一冊読んでだいたい理解したらあとは、ぐぐってぐぐってぐぐるんだ
高いけどpetzold本(プログラミングWindows)
意外にも、Windowsプログラミング全般のスレって無いんですね。
Officeとかの単独のアプリケーションのものでない限り、 MS製で32/64ビットWindowsで使えるAPIなら なんでも広義のWin32 APIだと思っている俺。
何故か急に自己紹介が
713 :
デフォルトの名無しさん :2008/07/27(日) 01:24:59
InternetSetOption で認証をクリアした後、XML系のAPIで認証が必要なURLにアクセス出来るけど あれってどうやって認証を引き継いでるの?socketで同じように認証を引き継ぎたいんだけど そもそも、HTTPで認証を複数回に渡って引き継げるの? 毎回認証情報をサーバーに渡さないとダメなんじゃないの?
おそらく、これが浸透してしまうとJIS規格も変えざる終えないだろう。 アメリカの一民間企業が、日本の工業規格を変えようとしてんだぞ。 アメリカの一民間企業が、日本人の生活習慣を変えようとしてんだぞ。 いいのか?これで!
いいよ つーか終わった話題持ち出すなよ
>>713 Wininetの認証情報をsocketが知ってるわけないだろ。
何もせずに認証引き継ぎたいならWininet使え。
socket使うんだったら当然httpヘッダも全部自前で書くだろ。
認証情報はhttpヘッダに乗って渡される。
717 :
デフォルトの名無しさん :2008/07/27(日) 12:20:47
CS_OWNDCを追加するとウィンドウ毎にメモリをいつもより多く消費するらしいんですが どれくらい消費するのですか?
自分で計測しろよ つかvistaから無意味になっている気がせんでもない
>>718 タスクマネージャで見たところ変化なかったつまり気にすんなということですね、
わかりました。
720 :
デフォルトの名無しさん :2008/07/27(日) 13:30:20
>>720 何もしてない癖に「気がする」とか言ってんじゃねーよ
722 :
デフォルトの名無しさん :2008/07/27(日) 14:32:41
知らないならレスしないでください
otitsuke
pettan
DLL Injectionしてボタンの位置を変えたり、WindowProcを横取りしたりしたいんですけど参考になるページなど教えていただければ幸いです。
wizard bibleでも読めばたぶん書いてあるだろ
またフック厨か。夏だなぁ。
728 :
デフォルトの名無しさん :2008/07/27(日) 18:59:07
来ちゃった・・・///
730 :
デフォルトの名無しさん :2008/07/27(日) 19:02:32
どこに?
フックならジェイソン尾妻に聞くといいよ
なにこの糞スレ
Win32APIが糞なのだからWin32APIスレが糞なのも当然じゃないか。
なにこの天才
なにこの鬼才
737 :
デフォルトの名無しさん :2008/07/28(月) 02:33:19
誘導されてきました。 メッセージプロシジャでWM_CHARが送られてきた時、 OnKeyDownという関数にwpとlpをそのまま渡しています。 そして、押されたキーが"v"だった時だけ処理をしたいのでstrcmpを使ってみたのですが そこで強制終了してしまいます。正しくはどう書いたらよいのでしょうか? 教えてください。お願いします。 OnKeyDown(WPARAM wp, LPARAM lp) { switch(wp) { case VK_RETURN: break; 〜 略 〜 default: if(strcmp((char*)wp,"v") == 0) { //キーがvだった時の処理 } } strcmpの前にメッセージボックスでwpの中身を確認しようとしたのですが、 同じように落ちました。どうもwpをchar*にキャストしようとすると落ちるみたいなのですが・・・
これはひどい
そりゃwpに入っているのは文字列へのポインタじゃないからな。
741 :
デフォルトの名無しさん :2008/07/28(月) 02:57:05
要するにどう書いたらよいのでしょうかw
なんで笑ってんの?
だってもうおかしくてw ヒィーヒッヒッヒ
wp == 'v'でいいんじゃね しらねーけど
うーん、APIとかのプログラムはまったくやったことないが
>>740 のヒントで
>>739 をみるとこれが参考になるんじゃないかと・・・
> if(msg->message==WM_CHAR && msg->wParam=='\t') return 0;
747 :
737 :2008/07/28(月) 03:41:47
レスありがとうございます。
vキーの検出は
>>744 の書き方でうまく取れました。
取れたのですが、、すいません。
実際やりたいのはCtrl+vの検出でした・・・
WM_KEYDOWNでVK_CONTROLを拾ってm_bCtrlとかいうメンバ変数にフラグを立てつつ、
WM_CHARで"v"を拾えればCtrl+vを調べられる、
と思い、"v"の拾い方を質問したわけなのです。
結果としてv単独ではうまく拾えたのですが
本来の目的であるCtrlとの同時押しだと引っかかりませんでした。
(WM_CHARにはv単独押しのときとは違うコードが送られてくるらしく。)
なのですいませんが質問を変更させてください。
Ctrl+vの検出はどうしたらいいんでしょうか?
あ、GetKeyState()と同時に使えばいいんですね。 解決しました。 お騒がせしました。ありがとうございました。
750 :
725 :2008/07/28(月) 05:49:43
すいません、何故誰も教えてくださらないのでしょうか?
以前、80MB級の画像のためのメモリ確保で質問したものですが、 HeapCreate(), HeapAlloc() 系がいいかなと既存の GlobalAlloc() から変更を進めていますが、GetProcessHeap 以外に Heap を確保 する、特に複数確保すると HeapAlloc() - HeapFree() の度にどの HANDLE のものか憶えて置かないといけない。 とすると、メモリ表を持って、確保ー解放の度にそれを見に行くこと になる。そんなことを皆さんしているのですか。それとも Heap は 1つで済ませているのですか。 複数の Heap は面倒だから、VirtualAlloc() かとも思うと、これは 小さいメモリには不向きという。ウーン悩ましい。アドバイスを。 (2GB RAM があって、一時メモリはたかだか 100MB しか使わないの に、なんでこんなに悩まないといけないか、不思議。)
64KB以上確保するなら全部VirtualAllocで良いです それ以下でも別に良いけどね 今の時代メモリなんて腐るほど積んであるから
教えてください。 今Imeの登録および消去できるプログラムをCで作成中です。 やりたいことは現在ユーザー登録している単語を全て消去です。 ImmEnumRegisterWordで登録してある単語を全て列挙して、 そのコールバック関数の先で、 見つかった登録情報をImmUnregisterWordに渡してそのまま消そうとしてます。 現状このロジックだとImmUnregisterWordの関数自体は成功しているのに、 消し漏れがあります。量的には約300語消すと5個ぐらい消し漏れが常にあります。 何か原因とかありますか? もし今消してもOKとか、今消したらダメとか、ステータスが拾える関数とかあれば、いいのですが・・・
755 :
デフォルトの名無しさん :2008/07/28(月) 11:43:50
他アプリのコントロールのハンドルから そのコントロールの種類(エディットボックス、コンボボックスとか) がわかるAPIかあれば教えていただけないでしょうか? 文字を入力できるコントロールかだけでもわかるとよいのですが
列挙の最中に要素を削除しちゃって大丈夫なんか? 俺ならリストに記録しておいて、列挙が終わってから削除するけど。
GetClassNameでクラス名で判別するとか
>>757 開発言語によってはTEditとかThunderRT6TextBoxみたいな名前だからそれでは無理だろう
759 :
755 :2008/07/28(月) 12:24:35
>>757 レスありがとうございます
なるほど、作られた言語によっていろんなクラス名がありそうですが
いろんなソフトのコントロールのクラス名を今からちょっと調べてみます
760 :
752 :2008/07/28(月) 12:32:00
>>759 つーかクラス名なんて開発者が好きな名前で付けれるし
テキストエディタでよくある自作Editコントロールだとどんな名前付いてるか分からんし
Afx:xxxx〜とかATL:xxxx〜みたいなライブラリが勝手につけた汎用的な名前だと
クラス名だけで判別するなんて無理
762 :
766 :2008/07/28(月) 12:57:33
>>761 ですね
数点調べてみたんですが無理そうです
IEのアドレスボックス=Edit
メモ帳=Edit
EmEditorエディター部=EmEditorView
ワードパッド=RichEdit20W
Outlookメール本文入力欄、google検索ボックス=Internet Explorer_Server
Beckyメール本文入力欄=DanaEditWindowClass
Jane Doeレス入力欄=TTntMemo.UnicodeClass
Delphi製
デフォでTEdit,TComboBox,TMemoとか
763 :
755 :2008/07/28(月) 12:59:04
↑すいません755です
ウィンドウの挙動なんて好きに実装できるんだから、 それをハンドルから判別できる方法なんてあるわけない
765 :
755 :2008/07/28(月) 13:32:16
ソフトを作る人のさじ加減一つで入力できるコントロールも できないようにできますもんね… できないとわかるだけでも助かりました。ありがとうございます!
>>765 入力を受け付けるか調べるだけならWM_GETDLGCODEで何とかならんか?
もちろんコントロールがこのメッセージを正しく処理していればの話だが。
質問です。 システムフックで任意のウィンドウを操作するプログラムを作成しているのですが、 奇妙な問題に直面しています。プログラムのリストビューにフォーカスした瞬間 プログラムが応答しなくなり、システムダウンしてしまいます。WM_COPYDATAメッセージの 送信がこの現象のトリガーになっているようですが、原因が分からず対応に苦慮しています。 WM_COPYDATAメッセージの情報は正しく受け渡され、フックの処理には成功しています。 開発環境はVC++ 2008 Express Editionです。WindowsXP SP3で動作確認しています。
チート対策だろ
WS_POPUPで作ったウィンドウでWM_MOUSELEAVE相当の処理をしたいんですけど、 何か良い方法はありませんか? WM_SETCURSORやTrackMouseEventを使ってみたのですが、クライアント領域から 抜けた事を正しく検知できませんでした。
WM_TIMER + GetCursorPosだろjk
SetCaptureとWindowFromPointとScreenToClient
772 :
754 :2008/07/28(月) 17:06:29
>>756 レスありがとうございます。
確かに列挙中に消すのは不安だったので、
早速「列挙→メモリ内に展開→展開したものを元に削除」
に作り変えてみました。
・・・結果同じでしたorz。
773 :
769 :2008/07/28(月) 17:07:04
すんません。 自己解決しました。 結果的にTrackMouseEventで処理できました。
>>772 外したか。失礼。これこそ「知らないならレスするな」だったな。
>>772 列挙に漏れはなく、削除に失敗するということですね
>>772 どうせ「メモリ内に展開」の部分でバグってるだけだろ
同じものが毎回失敗するのか、とか条件洗い出してみては。 失敗しない気がするのは止めながらやってるからかなー
778 :
デフォルトの名無しさん :2008/07/28(月) 17:54:05
知らないならレスしないで下さい
実際にコード書いて試してるのに、知らないならレスするなとは オマエ何者だ?
人読んで名無しと申す!
訳:かまってほしいな
訳:かまってほしいな
>>752 HeapCreateで複数のハンドルを使うときは、
HeapDestroyでまとめて解放したり、
スレッドや処理・用途ごとにヒープを使い分けたりとか、
どのハンドルで解放すべきかがコードを見れば自ずと分かる使い方をすることが多いと思う。
そういうメモリ表は聞いたことがないな。
>>752 こういう理屈ばかりこねてる頭の固い人ってプログラマに向いてないと思うよ
ていうかその程度のメモリ管理で悩むぐらいならJavaや.NETで作れば?
というかmallocはその辺を意識しないですむ様につくられてんじゃん
あ〜あ言っちゃった
何か?
VB6.0で、CreateDCを使おうとしているんだけど、 CreateDC("winspool",PRINTER_NAME,0,0) とやるとVBが落ちるんだけど、どうすればいいの? 環境はWINXP SP3です。
APIの宣言が間違ってるとかだろ .netじゃないVBって落ちすぎなんだよなー サブクラス中にブレークポイントで止まると開発環境が固まるとかマジ有り得ん
リストビューコントロールで,リストアイテムの行をドラッグしてアイテム位置を入れ替えたいと思っています. LVN_BEGINDRAG でドラッグの開始を検知して,ドラッグ終了時の行位置に挿入しようと考えていたんですが, ドラッグの終了はどうやって検知すればいいんでしょうか? LVN_ENDDRAG は windows mobile/CE だけにしか無いようですし,マウスのボタンが離されたメッセージが 送られてくる様子もないです. Timer をつかってマウスボタンを常時監視する方法も考えたんですが,どうもスマートじゃないですよね. 何か定法があるんでしょうか?
OLE ドラッグドロップを実装すれば,出来ますよ.
スレッド関数を関数ポインタに入れることってできないんですか? こんな感じで入れたいのですが、_stdcallのせいかエラーになってしまいます。 DWORD WINAPI (*p)(LPVOID) = ThreadFunc;
DWORD (WINAPI *p)(LPVOID) = ThreadFunc; 或いは DWORD (WINAPI *p)(LPVOID); *((void**)&p) = (void*)ThreadFunc;
797 :
754 :2008/07/29(火) 09:13:16
遅レスですいません。
>>774 いえいえ。マジレスをいただけただけでありがたいです。
助かりました。
>>775 そうです。一応展開部と削除部でログ出力して同じものが
出力されているのは確認しています。
そして実行後にIMEに残っている登録もそのログに出力されていました。
>>776 同上。
>>777 毎回違うものが残ります。残る数は同じ。
なんとなくですが残る法則として読みの順番を並べて同じ塊が連続で残り、
実行するたびそれが徐々にずれる感じです。
>>795 LPTHREAD_START_ROUTINE p = ThreadFunc;
でいいじゃん
馬鹿?
>>794 に合わせて回答したからだろ
厳密には関数ポインタはvoid*に入れちゃいけないんだけどな
互換性ないから
800 :
デフォルトの名無しさん :2008/07/29(火) 12:21:49
↑話を理解してない馬鹿
801 :
799 :2008/07/29(火) 12:27:21
あぁ一行目と二行目以降内容は別の話しなので
LPTHREAD_START_ROUTINE は関数ポインタ型の typedef にすぎないのだから
そもそも
>>794 の書き方が間違ってるのにわざわざ変なキャストしてまでそれに合わせる必要なんて無いし
変な書き方を教えると碌な事にならないだろう
質問者にどこがおかしいのかを指摘するほうが親切だと思うがな。 そのものずばり答えるよりは。
Advanced Windows買おうと思うんだけど 5版はもうすぐでそう?
これ以上改定を続けて意味があるのか微妙な気がする
>>806 値段がいきなり変わったなー
できれば日本語版がほしいから、翻訳されるの待つか
何時になったら出るんだよっていらいらがつのり、我慢が出来ずに買ってしまった頃に邦訳発刊の報せ
>>785-787 普通はお説の通り。
こちらの事情を晒しても意味はないけど、このソフト LSI86-C 以来のもので
18年。ソース追加追加で15万行。FM がルーツ。
画像をウインドウに表示するのに、MDI で新規に開いて window long にその
ポインタなどを渡している。ウインドウを閉じるときそのデータは捨てるのだが
あれこれで Alloc しているとどれで取ったものか分からない。1つに絞ると
HeapReAlloc() が捨てがたい。しかし画像はデカイのがある。てな訳。
メモリ表って言ったのは、jpeg ソースが似たことをやっていた。そのパクリ。
1x1の画像からVirtulAlloc使えばいいじゃない。
811 :
デフォルトの名無しさん :2008/07/29(火) 14:42:24
そんな馬鹿な
C++ ならサイズによって取得方法を内部的に変更して 外からはそれを意識せず使えるようにするって感じにするね。 C でも似たようにはできるはず。
五月蝿いから全部mallocにしとけよ
ご・・・五月蝿い!
callocにします
>>809 根本的に手を入れないなら触らずにそっとしとけよ・・・
お前らクズの意見は絶対に参考にはならないとおもってたけでやっぱりならなかった。 まあ、夏休みだしな。
結局のところ自分の考えに同調が欲しいだけだろクズ 同意が欲しけりゃ質問するな
自己解決しましたぁん^^
>>818 知らないならレスしないで下さい。ウザイです。
訳:かまってほしいな
>>806 第6部が丸々無くなってしまったのね。
新しくできたError Reporting and Application Recoveryは読みたいけど、
Advanced〜を持っていたらわざわざ買うほどでもないかな。
質問してもいい空気ですか?
別にいつでもいいよ。 たまに埋もれて忘れられるけどなw
お前には無理そうだからやめておきます。
あんた最低だな
ご、ごめん・・・
ごめんじゃすまされないぞ!
すいません
吸いませんじゃなくてすみませんだろ?
ボクのでよかったら吸ってください
吸うよりしゃぶるほうがすきです
しゃぶみませんでした
あわせるなwwwwwwwwwwww
VirtualAllocの最小単位は普通4KBなんだから、十分ありだと思うけどなあ。
頭の固いオッサンプログラマに何を言っても無駄
>>830-
>>833 マジできもい
絶望的にもてないだろお前らww
>>835 そうも思うよ。けど適当にからかい材料で楽しまれている見たいだし・・・。
>>818 同意というより、相場の感触だな。大体分かってきた。今、HGLOBAL という
用語をいくつかの用途に分けて、いくつかの別の名前に置換している。
今のところ、全部 #define chomechome HGLOBAL だけどね。そのうち #ifdef
で一斉に切り替える。
>>812 その準備はマある。GlobalAlloc() を直接使っているのは数箇所のみ。
以前のコードを生かすため myMalloc(), myNewHandle(), myNewPtr() など
の中から呼んでいるから。しかしここ10年つい HGLOBAL の型名を直接
移動可能変数に使ったのが最大の敗因ね。
他のレスをくれた方、いろいろ有難う。
NewHandleやNewPtrとか書くところを見るに、もしやマカーか?
ウィンドウプロシージャで, 自分で処理したメッセージも DefWindowProc() に回すのは 何か意図があるのでしょうか? 通常は自分で処理したメッセージは0を返すと思うのですが, 何か意図があるかもしれないので修正するべきか迷っています. LONG __stdcall WndProc(UINT uMsg, UINT wp, LONG lp) { switch (uMsg) { case WM_PAINT: OnPaint(wp, lp); break; // return 0L; } return (DefWindowProc(hWnd, uMsg, wp, lp)); }
意図があることもあるし、ないこともある WM_PAINTはBeginPaint/EndPaintをちゃんと呼んでるなら回さないでいい
なるほど,後処理をDefWindowProcに回すということですね. 以前,サブクラス化したプロシージャで全てのメッセージを CallWindowProc(DefWndProc, hWnd, uMsg, wp, lp); に回しているためにフォーカスが返ってこないというバグを修正した 事があったので気になりました. メインのウィンドウプロシージャだと動き自体はおかしくならないようですが, 気になるのでOnPaintの中を見直して修正します. ありがとうございました.
#define chomechome HGLOBAL こういうの、普通typedefで書くだろ・・・ なんだか > こちらの事情を晒しても意味はないけど、このソフト LSI86-C 以来のもので > 18年。ソース追加追加で15万行。FM がルーツ。 がネタに思えてきた
typedefでなく#defineなのは、昔風といえなくもないな。 ただ、今頃になってGlobalAllocがどうとか言い出すのは妙な気がする。 10年くらいほったらかしだったんじゃね?
10年くらい冬眠していた人なんでしょうね、分かります
847 :
デフォルトの名無しさん :2008/07/30(水) 03:38:45
ツリービューを使ったプログラムで ノード数が200ほどあるツリービューのアイテムを再構築する際に TreeView_DeleteAllItems で一度全削除してから、再度ツリービューを再構築しています ツリービューのアイテム構築はサクサク動くのですが 意外に全削除の動作が遅いです(1秒ぐらいかかる) ツリービューのリフレッシュ目的で TreeView_DeleteAllItems を読んだのですが もっと高速なツリービュー初期化ってあるのでしょうか? よろしくお願いします
TreeViewの削除が糞重いのは割と有名 CodeProjectかどこかに強引に改善するソースが落ちてた気がする
849 :
デフォルトの名無しさん :2008/07/30(水) 04:00:30
>>848 有名な話だったんですかー、今回で初めて知りました
色々と検索してみましたが
仮想リストビュー辺りが参考になりそうな予感がします
ありがとうございました
>>845 >>393 に最初に書き込んだように、これまで気にもしなかった。
「応答なし」頻発で腰を上げたところ。「応答なし」でぐぐると Vista では
他のアプリでも出るらしい。Xp でも出てたらしいけど。探っていたら
GlobalFree() が時間がかかるらしいって分かったから、なんとかしようと
思い始めた。この暑い中、後ろ向きの作業だ。
>>850 しつこいんだよ
自分で効率のいいメモリ管理が出来ない奴は.netに移植してろ
.netってどうなのよ?
.netよ
初回起動おせー
初回起動ぐらい我慢しとけ
流石に最近は気にならない程度にCPUが早くなってきたよw
#define chomechome HGLOBAL ↑こんな書き方してる時代遅れプログラマ(実は初心者か?)なら 今からC#でも勉強して.netに移植した方が幸せになると思うがね どうせGlobalAlloc以外にも問題山積だろ
>>422 によると猫プログラミング見てるみたいだから初心者だな
中級者以上になるとあんな糞コード見てられない
玄人ぶろうと必死でググって書いた文章がこれか
> こちらの事情を晒しても意味はないけど、このソフト LSI86-C 以来のもので
> 18年。ソース追加追加で15万行。FM がルーツ。
大体LSI86-Cって何だよ。お前が作ったコンパイラか?w
> LSI86-C に一致する日本語のページ 1 件中 1 - 1 件目 (0.02 秒)
もういいから
夏休みになると変な奴が湧いてくるな・・・
>>850 もう来ないでね
861 :
デフォルトの名無しさん :2008/07/30(水) 11:38:30
すいません、誰か教えてください。 ウィンドウメッセージの送信元のウインドウハンドルを取得したいんですが、 どうすれば良いんでしょうか? 送信元のアプリは自分で作る訳ではないので、ウインドウメッセージ内にハンドルを格納する、というのは無理です。 自アプリに対して、誰がどのようなメッセージを送信してきているのかを把握したいんです。 Spy++等で受信しているメッセージは見れるんですが、送信元が分からないもんで・・・。 よろしくお願いいたします。
そもそもウィンドウメッセージの送信元はウィンドウとは限らないし
知らないならレスしないで下さいよ。
865 :
デフォルトの名無しさん :2008/07/30(水) 12:18:03
知らないならレスしないでください
>>858 LSI C-86だって察してあげようよ、初心者なんだから。
それぐらい察してほしかったってのが本音
ようするに知らないならレスするなくずってことですよね
最近のHeapAllocはあまりにでかい容量を指定されると VirtualAlloc丸投げ(それでも解放はHeapFreeで)って話なかったっけ? それだったら、全部HeapAllocでいいじゃない。 そもそもmallocとかvectorとか言語固有の方法使えばいいって前にも言っている奴いたよな。
仮にそういう話があったとしても、仕様書に明記されてないんじゃマトモに使えないだろう だいたい最近ってどういう定義だ
>>870 もういいって
人の話を聞かない馬鹿はほっとけよ
LSI86-C すら知らない糞餓鬼はレスしなくていい 正直ウザイだけ
訳:かまってほしいな
それぐらいかまってほしかったってのが本音
かまってください^^
>>875 間違っています。
以上。
はい次の方。
夏だな 夏だな厨って言う馬鹿 ↓
馬鹿でーす
↑ ただの馬鹿
だからLSI86-Cを知らないゆとり世代は黙ってろよ
訳:かまってほしいな
それぐらいかまってほしかったってのが本音
かまってほしくない人はレスしないでください
うんこしてくる
887 :
デフォルトの名無しさん :2008/07/30(水) 15:07:39
うんこおわりました
まだ残ってるぞ
残りもだしてきました
拭き忘れてるぞ
あっ><
へーきだよ、どうせまたうんこするんだし
893 :
デフォルトの名無しさん :2008/07/30(水) 15:32:47
ちょっとお聞きしたいのですが EN_IMECHANGE マスクは、IMEの変換待ち文字列が、キータイプなどで変更した時(例えば、「あいう」が「あいうえ」になった時)に勝手に送出されるメッセージ、という理解で大丈夫でしょうか?? また、EN_IMECHANGEが「通知される」とは、どこに向かって通知されるのでしょうか?メッセージの向かい先がよく分かっていません。どなたかご教示頂けると幸いです。
舐めました
質問です。 SendInputを使うために、 #include <windows.h> をする前に #define _WIN32_WINNT 0x0500 としているのですが、 エラー 16 error C3861: 'SendInput': 識別子が見つかりませんでした となってしまい、ビルドできません。 OSはWindows XP SP3です。 どうしたらいいかお分かりになる方、よろしくお願いします。
リビルドしてもだめ? include文からSendInputの記述までたどれる?
僕はリビングデッドです。
898 :
895 :2008/07/30(水) 17:12:53
>>896 リビルドしてもだめでした
>include文からSendInputの記述までたどれる?
これはwinuser.hの5106行にある
#if (_WIN32_WINNT > 0x0400)から#endif
までのことでいいのでしょうか?
他の場所で既に#include <windows.h>してるとかだったらシバく
3日前にしてました><
まあ#include "stdafx.h" だろうなw
902 :
895 :2008/07/30(水) 17:24:48
>>899 #define _WIN32_WINNT 0x0500
#include <windows.h>
以下他に必要なものをインクルードして、WinMain関数になってます。
WinMain関数があるファイルが一番最初にコンパイルされると思ってたんですが、もしかして違うんでしょうか。
あと、#define _WIN32_WINNT 0x0500をしていると、SendInputを使おうとしなくても
atlcom.h(147) : error C2065: 'COINIT_MULTITHREADED' : 定義されていない識別子です。
が出てしまいます。
情報小出しするなよ そもそもATL使ってるなら#include <windows.h>なんて必要ない (ATLが内部でincludeする)
void MyWindow::setTransparent(int rate,int key){
LONG pre = ::GetWindowLong( hWnd, GWL_EXSTYLE );
if(rate == 255){
pre &= ~WS_EX_LAYERED;
}else
if(rate>=0 && rate<255){
pre |= WS_EX_LAYERED;
}
::SetWindowLong( hWnd, GWL_EXSTYLE, pre );
::SetLayeredWindowAttributes(hWnd,
((key&255)<<16)|(key&0xff00)|((key
>>16 )&255) ,
static_cast<BYTE>(rate) , key != -1 );
}
現在こんな感じで半透明ウィンドウを実現しようとしているのですが、うまくいきません。
具体的にはウィンドウが画面の外にはみ出している時でないと後ろの画面に描画内容が
焼きついてしまったり、半透明になる値を設定しても透明にしかならなかったりするのです。
OSはXPでコンパイラはBCCです。よろしくお願いします
MSDNでSetLayeredWindowAttributes引いてから自分が何をしたいのかちゃんと説明しろ。 むちゃくちゃすぎる
知らないならレスしないでください
最小化ボタンを押したのを知るにはどうしたらいいですか?
>>907 すみません、WM_SIZEから出来ました、
>>905 どこがむちゃくちゃすぎるんだよ ソースが読みにくいだけだろ
適当な事言うなクズ
910 :
904 :2008/07/30(水) 22:35:06
>>905 変なとこ直したんですが、やはりクライアント領域が一部でも画面外に出てないと
裏の画面に写ってしまいます。何か足りないんでしょうか?
void GameWindow::setTransparent(int key,unsigned char rate,int flag){
if((flag | LWA_ALPHA | LWA_COLORKEY)==0)return;
LONG pre = ::GetWindowLong( hWnd, GWL_EXSTYLE ),tmp=pre;
if(flag | LWA_ALPHA){
if(rate == 255)pre &= ~WS_EX_LAYERED;
else pre |= WS_EX_LAYERED;
}
if(tmp != pre)::SetWindowLong( hWnd, GWL_EXSTYLE, pre );
::SetLayeredWindowAttributes(hWnd , RGB(key
>>16 ,key
>>8 ,key) , static_cast<BYTE>(rate) , flag );
}
描画はDirectXを使ってます。
DirectXとレイヤードウィンドウの相性は悪い
肝心なことは最初に言えよ。
>>910 その問題とは関係ないけど、if文の中身が常に偽だったり、常に真だったりしてるから、見直したほうがいい。
>>913 そんなのコンパイラの最適化で消えるから気にしなくていいだろ
そこまで賢いコンパイラは少ない
>>915 if((flag | LWA_ALPHA | LWA_COLORKEY)==0)return;
if(flag | LWA_ALPHA){
この程度なら最適化されるだろ
意図した動作をしないのに、最適化で消えるからいいとか、何を言っとるのかね
DialogBox()で入力したデータをダイアログのプロシージャでnewした構造体に入れて、 EndDialog()の際にその構造体のポインタ値を返し、 ダイアログ呼び出し側で使って開放、 なんて事やってるんですが、なんか他にいい方法ってないもんですかね
> EndDialog()の際にその構造体のポインタ値を返し これっていいのか?と思ってヘッダ見たら EndDialogの第2引数ってintじゃなくてINT_PTRなのかw
>>919 MFCのCDialogクラスみたいな奴を作ればいいんじゃねーの
922 :
デフォルトの名無しさん :2008/07/31(木) 00:59:38
>>893 どなたかよろしくお願いしますーm(_ _)m
昨日は一日出かけてここを見てなかったけど、いろいろレスを有難う。
>>925 当たっています。
以上。
はい次の方。
ほんとは当り
と思ったらやっぱりはずれ
↑つまんないから
↓おもろいのを期待
ふとんが
面白いことマダー?
多分この先ずっとないと思う。
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
僕はうんこを漏らしました
面白いことマダー?
CreateWindowで作ったボタンの、 表示文字のサイズを変更する方法、 知ってる人いたら、教えてください。 ボタンのウィンドウプロシージャを、 SetWindowLongPtr使って自前の物にして、 WM_PAINTメッセージを処理したら、 背景色が表示されなくなりました・・・。
WM_GETFONT GetObject CreateFontIndirect WM_SETFONT
テキストエディタ作ってるんだけど、テキストをプリンタ出力する時ってTextOut系の関数で直に描画するのと一旦ビットマップに描画→BitBltでは 何か違いあります?プリンタドライバによってはTextOutはまずいとか
941 :
デフォルトの名無しさん :2008/07/31(木) 19:46:43
ビットマップはかじつがわるくなる
942 :
938 :2008/07/31(木) 20:00:07
>>941 フォントを使った出力の方がいいという事か( ´ω`) サンクス
944 :
デフォルトの名無しさん :2008/07/31(木) 23:43:25
CreateProcessを使ってIEを起動して、 そのIEの状態をWaitForSingleObjectで監視するPGMを作ってみたのですが、 XPではちゃんと動くもののVistaだとまだシグナル状態になっていないのに 制御が戻ってきてしまいます。 どうもUACの所為っぽいのですが、UACを無効にする以外で期待する動作を させる方法ってありますでしょうか??
すみません読み方なんですが ヴィン32アピーで合ってますかね? 後輩からも質問がされました
俺はAPIをエーピーアイと読む派だな。 Windowsをヴィンドウズと呼んでいるなら後は何も言うまい。
不倫32歳って読むんだよ
#include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { return 0; } CとC++の基本を勉強し終えたので今日からin32APIを勉強しようと思い、Windowsゲームプログラミングという本を買いました。 次のコードをビルドしようとしたら終わるまで1.2分かかりました。 #include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { return 0; } 普通このくらいかかるもんなんですか? 使用ソフトVS2008 OS:WINXP32bit メモリ4G CPU:IntelCore2DUo E8500 3GHz
掛かりませんよ
すいません同じコード2個も書き込んじゃいました;
普通は数秒以内
Win32APIは初めてなので最初の設定が違うのでしょうか? 新規作成→プロジェクト→Win32プロジェクト(空のプロジェクト)→ソースファイルを.cppで作成してビルドしています。 解決策がわかる人がいたらアドバイスよろしくお願いします。
すいません、自己解決しました。 理由は、プロジェクトをUSBメモリーに作っていたからです。 Cドライブ上にプロジェクトを作成してビルドしたら数秒で完了しました。 ご迷惑おかけしました。
さいあく
mciSendCommand の MCI_OPEN は非同期不可なんでしょうか?
そんな難しいこと ここの連中にわかるわけないだろ
>>956 そうなんですか…。
他の方法を模索してみます。
御回答ありがとうございました。
わかるけどあなた方の態度が気に入らないので教えてあげません
>>958 せめて取っ掛かりになるようなヒントをいただけませんか?
#include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { BYTE * bytes = "BYTE *"; PBYTE pByte = "PBYTE"; LPBYTE lpByte = "LPBYTE"; MessageBox(NULL , bytes , NULL , MB_OK); MessageBox(NULL , pByte , NULL , MB_OK); MessageBox(NULL , lpByte , NULL , MB_OK); return 0; } これをビルドしようとしたら error C2440: '初期化中' : 'const char [7]' から 'BYTE *' に変換できません。 こんなようなエラーが出ます。 どうすればいいのでしょうか? 治し方がわかりません;;
>>961 アドバイスありがとうございます。
キャストが分からないので調べてきます。
ソースファイルの拡張子をcppじゃなくてcに変えたらできました。 ありがとうございました
ちょw
API扱いか分からないけどメニューバーのPOPUPの項目を、プラグインを追加するみたいに増やすのってどうやりますか?
InsertMenuItem
967 :
965 :2008/08/01(金) 12:25:32
失礼します。初めて質問させていただきます。 joyGetDevCaps関数でJOYCAPS 構造体の情報を取得し、ジョイスティックの製品名を 取得したのですが、OSによって結果が異なってしまいます。 Win2kではコントロールパネルのゲーム オプションと同じ表示になるのですが、 Vistaではコントロールパネルのゲームコントローラの表示にかかわらず、 「Microsoft PC ジョイスティック ド」となってしまいます。 Vistaでもコントロールパネルのゲームコントローラの表示と同じ結果を取得するには どのようにすればよいのでしょうか?
おじゃましまぁす エクセルで開いてるファイルをCreateFileで 開きたいのですが、どの設定にしても開けません 読み取り専用でも良いので開く方法を教えてはいただけませんか お願いしますm(_ _)m
エクセル側が開けないようにしてたらどうやっても無理
エクセルをAPIフックしてCreateFileの共有モードフラグを弄る
972 :
デフォルトの名無しさん :2008/08/02(土) 17:23:25
VSのコードエディタ等は一からコントロールが作られているのですか?
そうです
一から作るのはどれぐらい大変ですか?
975 :
デフォルトの名無しさん :2008/08/02(土) 17:55:49
すみません! APIで「通常使うブラウザ」を変更したいです! 知ってる人居たら教えてくださいm(_ _)m
Reg系関数
なぜWin32 APIのリファレンス系書籍って、めっちゃ高くて分冊で 古いとかそんなんばっかりなんでしょうか。安くて完璧なリファレンス本 ないんですかね。 あとプログラミングWindows系の書籍も、古いし。
最初にMediaPlayerを起動して、 次に.mp3ファイルをダブルクリックすると、 新しくMediaPlayerが起動せずに、 最初に起動した奴から再生されます。 このとき最初に起動した奴にはどういうメッセージが送られてきたのですか。
ダイアログベースのプログラムで、ダイアログの中に窪んだ矩形領域を作ってその中にマウスでお絵かき出来るアプリを作りたいと考えています。 これは、ダイアログの中に(矩形領域のための)別のウインドウを作って、専用のプロシージャで処理してやればいいのかなーと考えましたが上手くいかないです。 ご存じの方がいらっしゃいましたら、ヒントだけでも教えていただけると幸いです。それではよろしくお願いします。
>>979 ヒント:ペイントをSpy++で突っついてみる
>>979 それで上手くいかない理由が分からん。普通に作ればできるだろう。
俺ならウインドウ作るの面倒だから、スタティックコントロールを配置して
サブクラス化して使うけど。
>>977 Javaや.NETの時代だから今更Win32APIの本なんてあまり売れないからに決まってるでしょ
985 :
968 :2008/08/02(土) 21:14:04
>>968 です。
ここではJOYCAPS構造体関係の質問は回答得にくいでしょうか?
なんとなくそんな気がしてきました…ハード無いと確認も出来ませんし。
どこか掲示板に限らず回答得られそうな場所はご存じないでしょうか?
だってそんなレガシーAPI使わないし
XPからサイズ変わったとかW版使ってないとかその辺かな
>>977 Win32API自体古いけどよく言えば枯れている。書籍もまた然り。
でも、完璧なリファレンスってのは絶対無理だな。
Vistaで増えたものだけで1冊書ける分量がある。それが新しいバージョンが出る度だ。
今更そんなの書いても誰が買うんだよ
990 :
969 :2008/08/02(土) 21:43:18
>>970 さん
>>971 さん、レスありがとうございます
対処してるアプリだと、リードオンリーで開きますか?とか
聞いてくるので簡単にできるのかと思ったのですが・・・
諦めるとします、ありがとうございました
こういう質問って「最終的にどんな事がしたいのか?」 を書くと案外別の方法が見つかったりするよね
すみません。 void BeginDownloadThread ・・・ { ・・・ hThread=CreateThread(NULL, 0, myThread, this, 0, &ThreadID); ・・・ } このようなコードで、BeginDownloadThreadを何度も呼び出して myThreadを幾つも動かしています。(ダウンローダっぽいものを作っています) このときhThreadが沢山できますが上手く全てをCloseHandleする方法教えてください。
>>993 Windowsが自動で解放してくれるからそのままでおk
CreateThreadから帰ってきてエラーチェックした途端にCloseHandleしたらだめなの?
普通WaitForマルチプルほにゃらら使うんじゃね
>>993 CloseHandle(CreateThread( ... ));
でいいと思うよ
スレッドが生成できたかどうかはコールバックからEventやSendMessage投げればおk
MSDNより C のランタイムライブラリに記録されている関数を使うスレッドは、 CreateThread 関数と ExitThread 関数ではなく、 C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。 この方法に従わないと、ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。
CRT使わなければいいよ
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。