スレ立て乙・・・と思ったらウザスOmotiかよ。
6 :
デフォルトの名無しさん :2005/09/05(月) 01:12:20
0x22ってどういう意味なの?
Omotiの名前の由来は何ですか?
10 :
デフォルトの名無しさん :2005/09/05(月) 01:31:35
>>9 当時、W3CとかGNUとかの翻訳をやったり
ウルティマオンラインの外国サーバーで遊んだりとか
IRCでアメリカ人としゃべったりDiabloで外人と遊んだりとか
インターネット時間の95%を外人と過ごしていたので、彼らにも
覚えやすく、タイプしやすく、短めの名前で日本風のもの、ということで
つけました 昔はあんまりネットに日本人はいなかった 外人向けの名前ということです
MessageBox(NULL, TEXT("乙"), TEXT("
>>1 "), MB_OK);
12 :
デフォルトの名無しさん :2005/09/05(月) 02:04:29
なんでマイクロソフトはMSDNの日本語化を進めないんだ?
金かかるし誤訳多いし
せめて検索機能をONにしてください 誰かMSDN専用検索サイト立ち上げてよ
日本語版があるに越したことは無いが、MSDNの資料ぐらい英語のままでも問題ないだろ 下手に誤訳が有る上に更新の遅い資料読むぐらいなら、大元の資料読んだ方がいい
誤訳以前にサイト内検索にひっかからないのをどうにかしてほしい。 たどりつくのが大抵googleからとか、喪前らほんとにそれでいいのかと小一時間(ry
>>16 今みてみたら見当たらないが、この間は日本語版は検索できなくなってて
直してるから待てと告知されてたが
英語版は正常に機能してるし、問題ないだろ
なんで10年も前から存在するAPIすらまともに検索できないんだよ 英語版だと日本の単語で検索できないのが問題 英語が得意でも和英は答えが一つじゃない 対訳表もなしにやってられるか
>>17 2、3年前からひっかかってない気がするんだが、まだ直らないのか・・・・。
まあ本気で読みたければローカル版読めばいいから俺個人は別にいいんだが。
Omotiはそんな昔からPC触ってんのにいまだにそんなアホなんか
最新の日本語版の情報が無いのは良いとして、 Win95で実装されたAPIのドキュメントで英語版しか 無い物があるなんて… 「VisualStudio ver x.xx "日本語版"」って もう何年前のドキュメントだよ? Microsoft Japanは仕事する気あるのかなぁ??
22 :
デフォルトの名無しさん :2005/09/05(月) 05:38:41
前スレ1000が爆弾発言wwww >1000 :デフォルトの名無しさん [sage] :2005/09/05(月) 02:21:24 >0x3E8だったら秀丸超えるテキストエディタ作る
日本語ヘルプが更新されないことに加えて、MSDN ONLINEから Win32APIのカテゴリがごっそり抜け落ちてたり、メジャーなAPI関数 ですらサイトの検索でヒットしないところを見ると、これは日本法人の 意図が働いていると見るのが妥当だろう。 で、その意図が何かと読み解くと、日本の場合、Win32APIの日本語 ヘルプが充実してしまうと、Borland製品の売れ行きが良くなってしまう のでは?という仮説に行き着く。 かつて、その圧倒的な生産性の高さから、口コミなどもあって日本では Delphiの旋風が吹き荒れていた。その名残は数多くのフリーソフトが Delphi製という形で残ってはいるのだが、そのDelphiも2.0までだったかは Win32APIの日本語ヘルプが付いていた。
MSDN見てるとアンケートが出てくることあるでしょ? あれが出たら書いとこうな。 適当な英語でもきっと通じるから。 I want more documents translated into Japanese. とか。
>>25 コード出せや。エスパーに答えてもらいたいんか?
>>25 間違ってません。
return 0;でちゃんと作成されます
return -1;でちゃんと破棄されます
おかしいのはアンタのコード
>25 あなたのプログラムがおかしい可能性が非常に高いです。 CreateWindowに渡す引数等を見直してみてください。 コールバック関数はちゃんと__stdcallになってますか?
29 :
25 :2005/09/05(月) 09:49:02
あれ、普通に書いたらうまくいった。 なぜかメッセージクラッカーを使った場合だけ失敗する。 やはりどこかおかしかったみたいです。
前スレ990ですが、 メモリ上でビットマップを重ね合わせるような ことが可能なのですか?
>>29 おかしいのは藻前
メッセージクラッカーの定義を読め
>>23 BCB6でも付いてるぞ > Win32API日本語ヘルプ
33 :
25 :2005/09/05(月) 10:02:19
>>30 ていうか、メモリ上で処理できんかったら画像処理がなんもできん
ビットマップなんて所詮はただのRGB値の入ったメモリ配列じゃないか
そうとも限らないけど
38 :
30 :2005/09/05(月) 11:29:05
すみません。質問の仕方が遠まわしすぎました。 読み込んだビットマップをメモリDC上に 座標を指定して貼り付けることはできますか?
39 :
30 :2005/09/05(月) 11:30:33
スマソ追記 あるなら、その方法を教えてください。
BitBlt
41 :
30 :2005/09/05(月) 12:16:01
>>40 ありがとうございます。そうなんですが…。
BitBltの前にSelectObjectでビットマップを当てはめるDCを指定しなくちゃならないので
hBuf2 = CreateCompatibleDC(hdc);
SelectObject(hBuf2 , hBitmap);
BitBlt(hBuf , 0 , 0 , 400 , 200 , hBuf2 , 0 , 0 , SRCCOPY);
の様にhdcに互換するメモリDCを二種類用意しなくてはいけないと思うのですが、
これっていいんですか?
それでよし。
43 :
30 :2005/09/05(月) 12:33:17
フォルダの内容が変更されたことを検出するにはどうしたらよいのでしょうか?
FindFirstChangeNotification
WH_CBTタイプのローカルフックで質問です。 HCBT_CREATEWNDを調べてCreateWindow関数や DialogBoxParam関数で設定したアプリケーションデータを 取得したいのですが、ダイアログボックスの時だけ取得出来ません。 アプリケーションデータは CBT_CREATEWND→CREATESTRUCT→lpCreateParams に入ってる筈なのですが。 ちなみにウィンドウの時は取得できましたが、ダイアログボックスの時はNULLが入ってました。
>>46 DialogBoxParamのパラメータはWM_INITDIALOGで受け取るからそれでは無理なのでは?
48 :
46 :2005/09/05(月) 17:49:03
>>47 DialogBoxParam関数のヘルプを見るとCreateWindowEx関数を使って
ダイアログボックスを作ってると書いてあるんですよね。
つまり、ウィンドウで出来るなら、ダイアログボックスでも出来るんじゃないかと
思ってるんですが…。
SetWindowsHookExでは駄目なのか?
…間違ったorz WH_MSGFILTERでは駄目なのか?
>>48 > HCBT_CREATEWND
> 1 個のウィンドウが作成されようとしています。
> システムは、このウィンドウへ WM_CREATE または
> WM_NCCREATE メッセージを送信する前に、
> このフックプロシージャを呼び出します。
「DialogBoxParamはCreateWindowExを使ってるし、それならウィンドウでできるんだからダイアログでもできるハズ」
なんて身勝手な妄想する前にヘルプをちゃんと読め
HCBT_CREATEWNDでフックできるのはWM_CREATE or WM_NCCREATE
これらは普通のウィンドウへ送られるメッセージ
DialogBoxParamに限らず、ダイアログが作られるときに送られるのはWM_INITDIALOG
そもそもメッセージが違うのにフックできるわけが無い
52 :
46 :2005/09/05(月) 19:07:01
>>51 でも、HCBT_CREATEWNDでダイアログボックスが作成されたのを知る事ができ、
そのダイアログボックスのハンドルも取得できるんですよ。
それに、CREATESTRUCT構造体のlpCreateParams以外の値はちゃんと
入っていました。lpCreateParamsだけNULLなのが何故なのかなぁと思いまして。
53 :
デフォルトの名無しさん :2005/09/05(月) 19:36:12
OCXを作ってます。 ブラウザに貼り付けた時にMOUSEWHEELを感知できません。 どうやら、ブラウザ本体の方にメッセージが取られて OCXのプロシージャに到達していないようです。 ちなみに、ACCESSのフォームに貼ったら感知しました。 で、フックを使おうと思い、WH_MOUSEで待ってみると 0x20Aを探知できて、ホイールイベント自体は行えるようになったのですが ホイールの移動方向の情報が来ません。 しょうがないので、WH_GETMESSAGEで待ってみると0x20A自体が来ませんでした。 WH_MOUSE_LLを使うとDLLを作らないといけないらしいので躊躇しています。 ご存知の方いましたら、解決方法を教えてください。
>>51 ダイアログボックスはウィンドウクラス(WNDCLASS)がシステム定義のものってだけで
通常のウィンドウと何ら変わりない。
>>52 lpCreateParamsを使わずにパラメータ渡してるんだろ。
55 :
デフォルトの名無しさん :2005/09/05(月) 19:47:29
1000 デフォルトの名無しさん sage 2005/09/05(月) 02:21:24 0x3E8だったら秀丸超えるテキストエディタ作る よろ
半年待ってね :-) 必ず作ってこのハンドルで公開宣言します。
そう言って何人もが消えていったよ…。 ガンガレw
58 :
46 :2005/09/05(月) 20:01:41
>>54 >
>>52 > lpCreateParamsを使わずにパラメータ渡してるんだろ。
やっぱりそういう結論になりますよね。何でlpCreateParams使ってくれないんですかねぇ。
まぁそれはそれとして、どうも回答有難うございました。
59 :
99 :2005/09/05(月) 20:14:11
>>54 ,58
おまいらはWM_INITDIALOGをMSDNで調べたりしてないのか?
>>52 取得できてんのは内部的に呼び出されたCreateWindowExがダイアログを作成した時の
WM_INITDIALOGとDialogBoxParamに伴うlParamのデータはその後でDialogBoxParamから送られる
CREATESTRUCTの中に入ってるわけが無い
>>54 おいおい・・・
>>62 ちゃんと調べてたら、DialogBoxParamを使ってるのにCREATESTRUCTだの、
その中のlpCreateParamsだの見ても必要なデータが取得できないと分かるはずだからだろ
64 :
46 :2005/09/05(月) 20:58:35
>>61 つまり、DialogBoxParam関数に伴うlParamのデータは
WM_INITDIALOGメッセージの時に取得できるもの。
↓
HCBT_CREATEWNDではWM_CREATEやWM_NCCREATEをフックする。
↓
DialogBoxParamに伴うlParamのデータはWM_INITDIALOG時に取得
出来るものだから、WM_CREATEやWM_NCCREATEフック時には取得できない。
と、いうことですか?
>>64 そういうこと、あと渡される構造体データもまったく違う
66 :
46 :2005/09/05(月) 21:28:17
>>65 どうも有難うございました。理解できました。
>>56 どんな点で秀丸を超えるつもりなんだ?
値段か? アイコンのセンスか?
アイコンのセンスなら結構簡単そうだぞ。
ユーザー数とかなら不可能だ。
名前の駄目さとかでも至難の業だな。
値段も簡単じゃね? いっそフリーにしてしまえばいいし
値段で秀丸を超えるなら1本1万とかにしないと
有料の場合、最低1人は本当に払った価格でないと。 言うだけならタダだからナ
儲けるつもりは無いのでフリーで、ソースも公開しようと思います。
スレ違いだから新しくスレを立てれ。応援してやるよ
秀○ 伏せれてねぇー
いや、ダイレクトな字じゃないから一応伏字だw
AT○K
○157
WIND○WS
何で伏字スレになってるんだw しかもわかりやすーw
9xでも使えるText○utW。
82 :
デフォルトの名無しさん :2005/09/06(火) 02:07:11
DirectInputを使わずにゲームPADの入力を得たいのですが、 検索のためのキーワードとなる単語や関数名など教えて頂けませんか。
84 :
デフォルトの名無しさん :2005/09/06(火) 02:29:56
うお、素晴らしい!ありがとうございます。
85 :
デフォルトの名無しさん :2005/09/06(火) 11:08:41
3つのウィンドウから成るアプリケーションを作っています。 最小化ボタンなどを持つメインウィンドウが1つ、 残り2つはボタンを一切持たないタイトルバーだけのサブウィンドウという位置付けです。 メインとなるウィンドウ以外から終了させたくないので、 メインとなるウィンドウだけをタスクマネージャの アプリケーションタブに表示させるにはどうしたら良いのでしょうか? よろしければ、教えて下さい。
>>85 サブウィンドウをメインウィンドウの被所有ウィンドウにすればいいんでね?
88 :
デフォルトの名無しさん :2005/09/06(火) 11:35:04
>>86 被所有ウィンドウとは、サブウィンドウをメインウィンドウの
子ウィンドウとするという事でしょうか?
親子関係と所有被所有関係を混同してる人大杉
だって日本語訳みたらわかんないよ 「オーナーウィンドウ」と「親ウィンドウ」って同じような感じだし 親からみたら子は所有してるわけだし
オーナーと親の区別もつかんとは・・・
親は所有者を兼ねるというか、 所有者が親である可能性(複雑な家庭事情)もあるとか
そこで義母さん登場ですよ
■結論■
>>85 はDelphiかC++Builder使いなさい。
96 :
デフォルトの名無しさん :2005/09/06(火) 14:46:00
>>89 解決しました。
メインウィンドウを親にしてみたら、
サブウィンドウのZオーダーが上に来てしまったので、
ダミーの透明親ウィンドウを作って回避しました。
助言、どうもありがとうございました。
メモリの無駄だな
メモリはこれから1Gがデフォになるからモウマンタイ。
何もしない状況で指定した時間(たとえば30秒)が経過したら 自動バックアップを取るアプリを考えています。 が、MSDNによるとOnIdleはの第一引数lCountは アイドル状態になって呼ばれるごとに増えるカウンタですよね? このOnIdleが呼ばれる時間間隔はどのように取得できるのでしょうか? それとも他の方法を考える必要があるのでしょうか? ご助言頂けると幸いです。
タイマー使えよ
MFCスレ逝け
102 :
99 :2005/09/06(火) 15:28:46
スレ違い失礼しました。 逝ってきます。
今課題でチャットプログラム作っていて困っているんで教えてください。 メインとなるウインドウ(文字などが表示されるウインドウ)と チャットを打つためのウインドウで構成されているんですが チャットのほうがアクティブになるとメインウインドウのほうがアクティブではなくなってしまい こまっています。チャットウインドウがアクティブの時でもメインウインドウがアクティブになっていてほしいのです。 なんかわかりづらい文章ですいませんが、よろしければ教えてください。
両方アクティブってできんの? 常に前面に出すのじゃだめ? あと質問 AddIPAddressってのあるけどSetしたいときはどうすんの?
Releaseで実行ファイルを作って動作を確かめると プログラムが落ちてしまいます。 落ちるのは、リッチエディットを使った時なのですが、 Releaseするときは、使用しているライブラリriched32.dllなどは 用意しないといけないのでしょうか。
>>105 そんなことないから安心してデバッグしろ。
>>103 そのメインウィンドウが非アクティブで困る事って何?
自前のウインドウからコンソール画面を出さずにコンソールアプリを起動させて その出力結果などを自前のウインドウ内で表示(Visual Studioの下の方に出るみたいな形) させるには、どういうアプローチで取り組めば良いのでしょうか? 検索をするにも何がキーワードとなるのかが分かりません。
>>108 子プロセスの標準出力を横取りしたい場合
パイプ:CreatePipe()
子プロセスのコンソールアプリを、コンソールなしで実行したい。
CreateProcess()について調べる。
STARTUP構造体のwShowWindowあたりかな。
9x系サポートしないならdwCreationFlagsもありかと思うけど。
wShowWindowで消すと見えないコンソールウィンドウが残って どんどんリソースが減ってく危険がある
111 :
109 :2005/09/07(水) 06:34:55
それってコンソールアプリが終了しなかった場合? あと訂正 ×STARTUP構造体 ○STARTUPINFO構造体
コンソールを表示させないといえば、DETACHED_PROCESSだろ。 2k以上ならCREATE_NO_WINDOWもあるけどな。
113 :
105 :2005/09/07(水) 08:23:23
>>106 ありがとうございます。
解決しました。
Debugではエラーチェックを通過しているところがありました。
114 :
デフォルトの名無しさん :2005/09/07(水) 12:00:54
マウスカーソルの下にあるウィンドウの水平垂直スクロールバーのハンドルを取得したいですが、どのようなAPIを使えばよいでしょうか?
垂直スクロールバーにハンドルがあるとは限りません ハンドルがあったとしたら、逆に「どのウィンドウの」という結びつきはありません。
116 :
114 :2005/09/07(水) 12:10:38
>>115 なるほどそうなのですか。
やりたいことは、マウスカーソルの下にあるウィンドウのスクロールバーを動かしたいということだったのですが、
こういうケースではどのようにするものなのでしょうか?
118 :
114 :2005/09/07(水) 12:31:11
>>117 ウィンドウハンドルさえ取れればメッセージを送ってなんとかなるだろうと思っていたのですが、甘いようですね。
とても参考になります。ありがとうございます。
ただ大変恐縮なのですが、それ以前に「マウスカーソルの下にあるウィンドウを取得」する方法がわからないのです・・・
>>114 ChildWindowFromPoint
WindowFromPoint
120 :
114 :2005/09/07(水) 13:06:59
121 :
デフォルトの名無しさん :2005/09/07(水) 16:19:58
質問です。 自分のコンピューターが参加している ワークグループ名またはドメイン名を 取得したいのですが、そのような情報を 取得するAPIはありますか?
123 :
デフォルトの名無しさん :2005/09/07(水) 20:16:22
こんばんは、よろしくお願いいたします。 ListView を2つwindow に引っ付けているのですが、 どちらのListViewが、選択されているかを知りたいのですが、 どうすれば分かるのでしょうか・ ListView_GetItemState(HWND,item,LVIS_FOCUSED) でしらべても、両方のリストから、選択されてしまうのです。
GetFocus();
>>123 Form1.ActiveControl
スマン 激しくスレ勘違い。
>>123 どっちも選択されてない場合もあるかもよ
127 :
デフォルトの名無しさん :2005/09/07(水) 20:51:01
他は試す必要なし
GetFocusで十分
>>125 なんぞVB.NETじゃし
>>128 Form1って名前から察するにVCLのTCustomForm.ActiveControlじゃね?
じゃDelphiかよ。 Delphiスレに引きこもってろ。こっちにまで出てくんな
MS謹製の開発環境を使ってきた俺にしたら Form1って言われたら真っ先にVBが出てくら あの糞VB、新規プロジェクト作ったら問答無用でForm1とかダサい名前付けやがんの
よそでやれや
質問です。 LineToで線をメモリDCに書き込んで表示しようと思ったんですが、 表示できないみたいなんです。仕様ですか?
表示されないのなら、貴方のやり方が悪いだけです
137 :
134 :2005/09/07(水) 22:43:15
スマソ。説明不足でした。 hBitmap = CreateCompatibleBitmap(hdc , 400 , 500); hBuf = CreateCompatibleDC(hdc); SelectObject(hBuf , hBitmap); こんな感じでビットマップに描画してます。 なぜ描画されないんでしょうか?
/\___/ヽ / :::\ . | (○), 、(○)、 .:| | |_, .:::| . | r―-、 .:::::::| ・・・ \ `ニニ´ .:::::/ /`ー‐--‐‐―´\
139 :
134 :2005/09/07(水) 22:52:19
ああ。もういいわ。 自分でもよく分からん様なってきた。 逝ってきます。
(‥;)レスも読めんのか
LineToはどこへ消えた
>>111 9xでDOSプロセスを走らせたコンソール窓は
中のDOSプロセスが終了しててもキーを押すまで閉じなかったような。
もちろん隠してたら閉じられない
>>142 DOS窓上でEXEを指定して実行したならそうだが、
EXEをダブルクリックで開いたDOS窓なら勝手に消える
144 :
デフォルトの名無しさん :2005/09/07(水) 23:32:23
質問です。Windows XP で、IsWindowUnicode() で FALSE が返るような コモンコントロール(リストビュー等)を作成する方法がありましたら教えてください。 一般的には RegisterClassExA() と RegisterClassExW() のどちらで ウィンドウクラスを登録したかで決定されるということですが、システムが 用意しているウィンドウクラスについてはどのような扱いになっているのでしょう。 UNICODE が #define されていたら、自動的に CreateWindowExA() が呼ばれて、その結果 ANSI 版のコントロールが作成されると思っていたのですが、どうやらそうではないようで…。
>>143 いや、コマンドプロンプトに戻るのを言ってるんじゃなくて
「この窓を閉じるには何かキーを押してください…」とか何とか出て
止まった記憶があるんだが。
.pifファイルの設定によるんだっけ
>>144 無理なんじゃない?
NT系では全てUNICODEとして作られてると思うよ。
147 :
146 :2005/09/08(木) 00:07:54
やっぱ無理だわ。 comctl32.dllのインポートテーブル見てみたけどRegisterClassExA自体無かった。
148 :
144 :2005/09/08(木) 00:28:06
>>139 WM_PAINT で呼ばれたウインドウに対して、BeginPaint() を始めたとき
その HDC に、作っておいたビットマップの絵を移せばイイのでは。
BeginPaint() の度に LineTo() とかするのは鬱陶しいので、動画でない
なら予め絵を作っておいて、ウインドウの GWL_USERDATA に持たせておいて
WM_PAINT のときはその絵を取り出して移すと、作った絵であろうと読み込んだ
絵であろうと WM_PAINT の処理が簡単になる。
>>147 バカ?
RegisterClassExはuser32だ・・・
そんでもってWもAも両方とも有るわ・・・
>>148 UNICODEのCreateWindowやら使ってやればIsWindowUnicodeはTRUEを返す
ANSIの関数使って作ればIsWindowUnicodeはFalseを返す
152 :
デフォルトの名無しさん :2005/09/08(木) 11:17:45
Win32APIの日本語訳が充実すると一番うれしいのが ボーランドとすれば、ボーランドがカネをだして 日本語訳をすすめればいいんだ それくらいのカネはあるだろう
DrawTextやTextOutで表示する文の途中で色を変えたいのですが GetTextExtentPoint32を使って座標を調整しながら色ごとに分けた文を 順番に表示していくしかないですかね…? 例えば、"あいうえお"の"あい"を青、"う"を赤、"えお"を黒で表示したい時です。
それしかないです
そうですか。どうもありがとうございます。
157 :
デフォルトの名無しさん :2005/09/08(木) 16:20:17
あぁ〜。もういいわ。 自分でもよく分からん様なってきた。 逝ってきます。
>>157 COMインタフェイスの実装の仕方はわかる?
>>157 ・IBindStatusCallbackを実装する
・そいつのインスタンスをURLDownloadToFileの最後に引数に渡す
・ダウンロード経過に応じてIBindStatusCallback::OnProgressが呼ばれるので、そこで好きにする
161 :
157 :2005/09/08(木) 17:14:13
159さん 160さん レスありがとうございます。 >160 >・IBindStatusCallbackを実装する >・そいつのインスタンスをURLDownloadToFileの最後に引数に渡す >・ダウンロード経過に応じてIBindStatusCallback::OnProgressが呼ばれるので、そこで好きにする 「IBindStatusCallback」インスタンス化する方法がわかっていません。 とりあえず次のような感じで書いてみましたが・・・ #include <atlfile.h> class CURLDownloadCB : public CBindStatusCallback<CURLDownloadCB> { } compileしますと、次のようなエラー出てしまい先に進めずにいます。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlctl.h(3403) : error C2039: '_ThreadModel' : 'CURLDownloadCB' のメンバではありません。 c:\prj\test.h(121) : 'CURLDownloadCB' の宣言を確認してください。 c:\prj\test.h(122) : コンパイルされたクラスのテンプレートのインスタンス化 'ATL::CBindStatusCallback<T>' の参照を確認してください with [ T=CURLDownloadCB ] (このあとエラーが続きます) 恥ずかしながら、C++のテンプレートの理解が乏しく解決できずにいます。 参考になりそうなサンプルコードなどがどこかにありましたら紹介いただけないでしょうか。 よろしくお願いします。
SHGetFileInfoで取得したシステムイメージリストの中から、マイコンピュータやデスクトップなどのアイコンのインデックスを取得したいです。 マジックナンバー的な定数とかありますか? もし無い場合、取得する方法はありますか? よろしくお願いしますえろいお兄さん。
163 :
160 :2005/09/09(金) 19:07:28
SetWindowsHookExでコンソールアプリがフックできないんですけど???? 注意点とかあれば教えてください。
フックの仕方が悪いだけじゃろ
>>165 たしかスレッド単位でフックしたと思ったから理論上はコンソールアプリにでもフックできる…はずだが
キーボードとかマウスメッセージなんてのをフックしようとしてないだろうな
そもそも単なるコンソールアプリだけであればメッセージそのものが無関係というか…
あと、SetWindowsHookExするのはDLLですよってのは大丈夫だな、きっと。
>>167 もちろんDLLを作ってる。
コンソールアプリでなければフックできてる。
ウィンドウの外にマウスカーソルが出たとき、 ドラッグ中だったらそれを解除することがやりたいのですが なにかいい方法はありませんか。
170 :
165 :2005/09/10(土) 19:57:26
そーすうp
http://with2ch.net/up/data/1126349655.zip GetProcAddressをAPIフックします。
GetProcAddressが呼ばれたときにOutputDebugStringで出力するだけのものです。
実行すると、タスクトレイに入り、左クリックでメニューを出して終了するまで常駐し続けます。
しかし、コンソールアプリには効果がありません。
どうにかできませんかね。
>>168 user32.dllを使わないプロセスはSetWindowsHookExやAppInit_DLLsでは
フックできません。CreateRemoteThreadでどうぞ
>>169 ドラッグ開始時にSetCaptureすればその後のマウスメッセージはすべて
キャプチャしたウィンドウに来るのでWM_MOUSEMOVEでウィンドウ外に出たかどうか
判定できます。
173 :
165 :2005/09/11(日) 00:29:37
>>171 WindowsMEで使う予定です。
CreateRemoteThreadが使えません。
WriteProcessMemoryでターゲットを書き換えて、
LoadLibraryでuser32.dllをロードさせた後ならSetWindowsHookEx
でフックできるでしょうか。
>>173 > WindowsMEで使う予定です。
じゃああとはDebugActiveProcessくらいしかないなあ。
デバッガを切り離せないからDebugActiveProcessはダメなら
コンソールプログラムをフックできる移植性のある公開された方法はないと思う。
> LoadLibraryでuser32.dllをロードさせた後なら
どうやるつもりなのか知らんけどuser32.dllをロードさせられるんだったら
そこで直接ターゲットのDLLをロードしたほうが早いんじゃない?
質問です。 wavを鳴らそうと思ったのですが、再生した瞬間だけがくっと処理落ち(?)します。 mciSendCommand, WaveOut〜, PlaySoundをそれぞれ試してみたのですが、同じように処理落ちしました。 またマルチスレッドも使ってみましたが、やはり処理落ちしました。 試しにHSPで似たようなことをすると、ちゃんと処理落ちせずに再生できるようなので環境の問題ではないかと思うのですが、 具体的にどうしたら処理落ち回避できるのか見当もつかず途方にくれているしだいです。 処理落ちを回避するにはどうしたらいいでしょうか? よろしくお願いします。
>>172 >WM_MOUSEMOVEでウィンドウ外に出たかどうか 判定
SetCapture()の後、WM_MOUSEMOVE中にPtInRect()を使ったらできました。
ありがとうございます。
WM_MOUSEMOVEに色々処理を書くと動作が重くなったり
CPUの使用率が上がってしまうと思うんですが
これはしょうがないんでしょうか。
WM_MOUSEMOVEに書いたらとか関係無いから
>>175 SND_MEMORYフラグ立ててやれば処理落ちせんと思うが‥‥
179 :
178 :2005/09/11(日) 09:32:59
VCL混じりのコードでいえばこんな感じな void __fastcall TForm1::PlayResourceSound(const AnsiString& name) { //TODO: この下にコードを追加してください TResourceStream* resource = new TResourceStream(reinterpret_cast<int>(HInstance), name.c_str(), "WAVE"); sndPlaySound(reinterpret_cast<char*>(resource->Memory), SND_MEMORY | SND_SYNC); delete resource; }
>>179 あらかじめTMemoryStreamに読み込んでおいたらどうなるの?
GetWindowText()であるウィンドウの文字列を受け取ることができますが、 文字列を受け取らずに、文字の長さだけ受け取りたい場合のapiはありますか?
全然探してないだろ MSDNでその1つ2つ下にあるAPIが見えませんか?
>>180 TResourceStreamもTMemoryStreamもTCustomMemoryStreamの派生クラスだろうが。
MemoryプロパティはTCustomMemoryStreamのメンバだし。
184 :
175 :2005/09/11(日) 12:55:32
sndPlaySound(lpSound, SND_MEMORY | SND_ASYNC); SND_MEMORY | SND_SYNC SND_MEMORY | SND_ASYNC | SND_NOSTOP SND_MEMORY | SND_SYNC | SND_NOSTOP とか多少いじくってみましたが変化なしでした。 ただSND_MEMORY | SND_ASYNC | SND_LOOPで最初に一回だけ再生してやると でれれれれれれれって感じでスムーズに連続再生されます。 もしかしてPlaySoundの連続使用は拙かったでしょうか?
185 :
175 :2005/09/11(日) 13:30:26
VC6.0なのですがreleaseでF5キーでデバッグ実行をしていたのがまずかったようで、 ctrl+F5で普通に実行するとがくがくすることもなく綺麗に再生されました。 うーん。 大変お手数をかけて申し訳ありませんでしたorz ちなみにdebugモードで実行すると処理落ちどころか目も当てられな
_, ._ ( ゚ Д゚) ガシャ ( つ O. __ と_)_) (__()、;.o:。 ゚*・:.。
/つ_∧ /つ_,∧ 〈( ゚д゚) |( ゚д゚) ヽ ⊂ニ) こりゃひどい ヽ__と/ ̄ ̄ ̄/ |  ̄\/___/ ̄ ̄
システムで設定されている警告音を鳴らすAPIってあるんでしょうか? コントロールパネルのサウンドで設定している「メッセージ(警告)」とかのアレです。
MessageBeep
190 :
188 :2005/09/11(日) 17:05:37
VS.NET2003、リソース関係の質問なのですが、 IDR_IMAGE1 IMAGE "p1.pic" で組み込んだリソースにアクセスしようと思い FindResource(hInstance, TEXT("IDR_IMAGE1"), TEXT("IMAGE")); と書いたのですが NULL が返って来てしまいました その後、試行錯誤で 第1引数を hInstance -> NULL に 第2引数を TEXT("IDR_IMAGE1") -> MAKEINTRESOURCE(IDR_IMAGE1) 第3引数を TEXT("IMAGE") -> RT_RCDATA としたのですが、未だ有効なリソースハンドルを取得できないでいます 実行ファイルのサイズからは、p1.pic は組み込まれているとは思うのですが、何か他に必要な事柄があるのでしょうか? あと VS.NET2003 は jpg をリソースの中に入れようとすると強制的に 256 色 BMP に変換するのがウザイです
.picってなんだ?
193 :
191 :2005/09/11(日) 19:55:08
jpg で入れると 256 色 BMP に変換されてしまうんで、適当な拡張子に変えて回避したんです
TEXT()じゃなくて _TEXT() じゃなかったか?
195 :
191 :2005/09/11(日) 20:05:50
TEXT の筈。TEXTA(quote) が L##quote で TEXTW(quote) が quote に置換されるマクロ。 文字列直接入れてる解説サイトもあったんで、これが直接の原因ではないとは思うんですが…… ……ソース UP した方が良いですか?
IDR_IMAGE1がresource.hで#defineされてるんだろ
>>193 これじゃね?
拡張子変えてもファイルの内容が変わるわけじゃないのはわかってるよね?
199 :
191 :2005/09/11(日) 20:28:44
200 :
191 :2005/09/11(日) 20:35:14
>>195 ごめん。TEXTA と TEXW が逆だった……ってかもしかしたら直接 _TEXT を定義してたかも知んないけど
とりあえず、自身のリソース内にあるのなら、第一引数は自分のHINSTANCE FindResource(hInstance, TEXT("IDR_IMAGE1"), TEXT("IMAGE")); これを FindResource(hInstance, TEXT("IDR_IMAGE1"), RT_RCDATA); でやって見てくれる?
RT_BITMAPでもだめ?
複数のディレクトリを監視して、どちらかに指定のファイルが生成されたら・・・ってのをやりたいんですが、どうすればいいでしょうか。 ReadDirectoryChangesW, FindFirstChangeNotification + WaitForMultipleObjects など見てみましたが、どうも複数ディレクトリに指定したファイルを・・・には向かないような感じです。 FindFirstFile, FindNextFile をぐるんぐるんまわすのが楽そうなんですが、これだと処理的に無駄が増えてしまうんでしょうか? この場合、検索にワイルドカードは使用しません。
204 :
191 :2005/09/11(日) 21:18:50
>>203 >どうも複数ディレクトリに指定したファイルを・・・には向かないような感じです。
そう感じた理由は?
あ・・・すみません、シングルスレッドでやってるので、 ReadDirectoryChangesW の場合片方のディレクトリしか監視できず、 FindFirstChangeNotification の場合ファイルが見つかった後また別のファイルを監視したい時に間が生じるのではないかと。 できればスレッド一つで済ましたいんですが、スレッド増やしたほうが現実的でしょうか。
>>204 HRSRC hImgRc = FindResource(NULL, MAKEINTRESOURCE(IDR_IMAGE1), "IMAGE");
でやってみな?
>>208 thx。やっと有効なハンドルが取得できました m(_ _)m
"IDR_IMAGE1" じゃ駄目だったのか……
ちなみに "IMAGE" を RT_RCDATA や RT_BITMAP に変えたらアウトでした
相変わらず挙動が不明ですな orz
質問です。 VB6でメモリ上にテキストを描画してそれをフォーム上にコピーしてるんですが ビットマップ作成時のサイズを設定するためにGetTextExtentPoint32を行うと フォーム上に表示されたテキストにアンチエイリアスがかかりません。 GetTextExtentPoint32を行わないとアンチエイリアスがかかります。 なぜなんでしょうか? hMemDC = CreateCompatibleDC(Form1.hdc) SetBkMode hMemDC, OPAQUE SetBkColor hMemDC, RGB(255, 0, 0) SetTextColor hMemDC, RGB(255, 255, 0) hFont = CreateFont(48, 0, 0, 0, _ FW_NORMAL, 0, 0, 0, _ DEFAULT_CHARSET, _ OUT_DEFAULT_PRECIS, _ CLIP_DEFAULT_PRECIS, _ ANTIALIASED_QUALITY, _ DEFAULT_PITCH Or FF_DONTCARE, _ "MS Pゴシック") SelectObject hMemDC, hFont GetTextExtentPoint32 hMemDC, txt, LenB(txt), udtSIZE hBitmap = CreateCompatibleBitmap(Form1.hdc, udtSIZE.cz, udtSIZE.cy) SelectObject hMemDC, hBitmap TextOut hMemDC, 0, 0, txt, LenB(StrConv(txt, vbFromUnicode)) BitBlt Form1.hdc, 0, 0, udtSIZE.cx, udtSIZE.cy, hMemDC, 0, 0, SRCCOPY
211 :
デフォルトの名無しさん :2005/09/12(月) 02:56:05
textやRichEditに表示されている任意サイズのフォントの高さを得るにはどうすれば良いでしょうか?
GetTextMetrics
>>209 不明じゃないだろ
TYPE IMAGEのリソースとして取り込んでるんだから、
RCDATAやらBITMAPやら他のタイプ指定してもダメなんは当たり前だよ
ちゃんとIDR_IMAGE1で登録してるのに、名前指定で取れないのが不思議だが
まぁ、文字列での指定より整数識別子での指定を推奨してるし、いいんじゃね?
214 :
デフォルトの名無しさん :2005/09/12(月) 20:41:38
GetTextMetricsはフォントを変更するとデータが成城じゃなくなるからダメですた。 RichTextで行間変えるにはどーすればいいんですかね
PARAFORMAT2
>210 よくわからないが、GetTextExtentPoint32を無効にしたときの コードを出せ、といいたい。
>>216 無効にしたときのコードは、
GetTextExtentPoint32をコメントにして
CreateCompatibleBitmapの第2、3引数に
数値を直接入れてやりました。
拡張子に関連付けられたアイコンのファイル名とインデックスを取得するにはどうすればいいでしょうか?
219 :
デフォルトの名無しさん :2005/09/13(火) 04:44:06
・メモリ使用量 ・メモリ使用量デルタ ・最大メモリ使用量 ・ページフォルト ・ページフォルトデルタ ・仮想メモリサイズ ・ページプール ・非ページプール タスクマネージャにて見られる、これらの項目について解説してる文書などはありますか?
222 :
デフォルトの名無しさん :2005/09/13(火) 15:46:41
USB仮想COMポートをハブ経由でPCに接続して、CreateFileでOpenすると 8割方エラーになり、最悪ハング(フリーズ)します。 ハブ接続故にCOMポートからのレスポンスに遅れがある為?ではないかと 思うのですが、何か好い解決策はありませんか? ちなみに、ハブ無しでPCに直接接続した場合はエラーしません。 (あたりまえですが。。。)
ハブ入れても動くと思うけどなー ハブかそのデバイスがなんかおかしいのかね・・・ ハブを変えてみるとか、 バスパワーハブなら、セルフパワーにしてみるとかで、様子は変わらない?
224 :
218 :2005/09/13(火) 16:22:15
>>221 SHGetFileInfo('C:\Hoge.txt', 0, sfi, SizeOf(sfi), SHGFI_ICONLOCATION);
としても、sfi.szDisplayName は空(szDisplayName[0] が NULL) でした。
与えるパスがフォルダの場合は成功するのですが・・・
226 :
デフォルトの名無しさん :2005/09/13(火) 16:49:18
>>223 さん
>>225 さん
レス、ありがとうございますm(__)m
使っているハブはELECOM社のU2H-G4SSVと、LOAS社のUH-284Wで、
ELECOMの方が若干エラーする確率が低いような気がしますが、
どちらも基本的には同じ状況です。
また、どちらともセルフパワーで使用しており電流容量的には
問題無しです。
何か他に試してみることありますか?
OSが98/ME使ってるなら、2k/XPにしてみるとか メーカーのサイトに、新しいドライバないかとか テキトーなことしか言えないなー、スマソ
ListViewの拡張スタイルで表示した罫線の色は変えれませんか? ListView_SetExtendedListViewStyleで 拡張スタイルにLVS_EX_GRIDLINESです
BITMAPリソースを読み込むにはLoadBitmapがありますが JPGを読み込むにはどうすればよいでしょうか?
打つから間違うんだ。 コピーしろ。
caseのdefaultが抜けてる
>>229 OleLoadPictureとかGDI+とか
>>230 オリジナルとかなり違ってるな
メッセージループの間違いが致命的
>>229 TResourceStream* res = new TResourceStream(HInstance, "JpegImg1", "RT_RCDATA");
TJpegImage::LoadFromStream(res);
236 :
230 :2005/09/13(火) 19:36:09
かなり根本的なミスをしていました....。 DispatchMessageが抜けていました。 ありがとうございました。
日本語入力するときとかって、 最初にひらがながわらわら出てきて、 スペースを押して、変換を確定しますよね。 私が知りたいのは、その変換を確定したこ とを知らせるWM_XXXです。 MSDNで調べているのですが、なかなか知 りたい情報にたどり着けません。 なにか検索のヒントとなる単語を教えていただけませんか?
WM_IME_XXX
確定するとWM_CHARがわらわらとやってきます。
WM_IME_COMPOSITION WM_IME_NOTIFY WM_IME_ENDCOMPOSITION WM_IME_SETCONTEXT とりあえず、こんだけ見つけてきました。 これから調べてきます。 ヒントありがとうございました。
SetFilePointer( hFile, 0, NULL, FILE_END ) とやると、ファイルポインタはファイルの最後に 移動する、という理解でいいんだよね?(実際、やってみると、そうなっているようだし) いや、MSDNには >Note You can use SetFilePointer to determine the length of a file. To do this, >use FILE_END for dwMoveMethod and seek to location zero. とあって、「seek to location zero」(←先頭に移動???)ってのが気になって...
ちゃんと訳して理解しろ。
ちゃんと訳すと、どうなるん?
ちゃんと訳さないとこうなる。 MSDNの日本語訳 >SetFilePointer 関数を使って、ファイルの長さを判断することもできます。 >この場合、dwMoveMethod パラメータで FILE_END を指定し、 >位置 0(ファイルの先頭)への移動を行います。 FILE_ENDの0位置だから、ファイルの最後が正しいと思われ。
お前が見当違いな注釈に悩んでいるのがわかる。
修行が足りないな
うーむ、【ファイルの先頭】 の注釈は、どこから湧いてきたんだろ('A`)
日本語版でおかしな訳が乗るのは、もう変わることのない仕様です。 何を訳しているのか知らない人に外注出してんだろーねー
訳す人もある程度Win32知ってないとだめだね
昔はMSの新入社員に訳させていた。余りにも誤訳が多いので、外注するようになった。 根本的な解決になっていないらしい。
>>252 新入社員にやらせることじゃないだろ…
本国はMSDNを新人に書かせてたり社外に丸投げしてるのか? そんなわけないだろうに
スクロールバー、なんかもう、なんかもう、ああぁぁぁ......っ。 ごちゃごちゃごちゃっ............................................。
255 :
デフォルトの名無しさん :2005/09/14(水) 05:09:10
windowsにwinsockはありますか?
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
可哀相に、winsockが何かもわかって無いんだな
Windows Socket
windowsにマインスイーパはありますか?
windowsにWINAPIはありますか?
WindowsにC言語はありますか?
Windowsに真心はありますか?
Windowsにバグはありますか?
Windowsにバグはありません。すべて、仕様です
Windowsにマニフェストはありますか?
あるよ 今日からあなたもLUNAスタイル!! 月に代わっ(ry
270 :
デフォルトの名無しさん :2005/09/14(水) 14:19:54
ダイアログボックスから浮動小数を取得するにはどうすればよいのですか? 整数を取得するには GetDlgItemInt を使用すればいいのですが 浮動小数がわからなくて
>>270 APIは用意されてない
GetDlgItemTextで文字列として取得して変換
272 :
270 :2005/09/14(水) 15:25:58
>>271 答えてくれてありがとうございました。
>GetDlgItemTextで文字列として取得して変換
とあるのですが、C言語の atof のようなAPIはあるのでしょうか?
答えてもらって今までずっとググっていたんですが 見つけられなくて
273 :
デフォルトの名無しさん :2005/09/14(水) 15:27:20
>>218 ExtractAssociatedIcon()ってのがある。
バグ持ちなのか、期待通りの動作をしてくれないんで使えないけどな。
結局、同等の関数を自作して実装してるよ。
Cを使ってるとは限らないぞ
276 :
274 :2005/09/14(水) 16:20:02
>>275 それもそうだな
>>272 ともあれ、atofのようなAPIはないはずなんで、
何とか自分でがんがれ
277 :
デフォルトの名無しさん :2005/09/14(水) 16:27:41
Outlook Express のメールを総て.DBXから.emlに変換をするアプリを作りたいです。 アドレス帳も.wabファイルを読み込んで、アドレスだけテキストに変換したいのです。 こういうプログラムを作りたいのですが、どうやって良いのかさっぱり分かりません。 手動で出来るのは分かるのですが、プログラムだとどうやるのでしょう?
Cを使ってるとは限らないが、 相当するAPIなぞ無いのだから、 どのみちatofのような各言語に用意された型変換関数を使うしかあるまい
DBXやWABの構造をグーグルやら駆使して暴き出せ
280 :
270 :2005/09/14(水) 17:18:33
全部 masm で作ろうかなと思ってプログラミングしてたんですけど API には atof のようなものはないんですね・・・
masm使ってるとは思えないヘタレ発言
ReadProcessMemoryで数千byteの中身を4byteずつみていきたいんですが、 for(i=0;i<1000;i++){ ReadProcessMemory(hProcess, (LPVOID)dwPtr, &dwMl, 0x4, NULL); printf("%x\",dwMl); dwPtr = dwPtr + 0x4; } こんな感じにするとめちゃめちゃメモリにアクセスする回数増えるので ReadProcessMemory(hProcess, (LPVOID)dwPtr, &dwMl, 0xFA0, NULL); って感じに一気に読み込んでから4byteずつ見た方がいいかなーって思ってるんですが、 どうやって4byteずつ読み込んでいくかわかりません。 なんかうまいやり方ありませんか?
ポインタ知らない人かと思ったら ポインタ使ってるじゃないか
考えてみればDWORDじゃ0xFA0分の中身読み込めないから戻り値0になってましたorz char[4000]とかにして4文字ずつとってatoiすればいいのかな・・・
そーゆーのはもうWin32APIの質問じゃありませんから。
すんません。自分で何とかします。
cpuの温度を返す関数ってありますか?
GetTemp
ごめん低脳スレとまちがえた
WMIで出来ないかな?
291 :
218 :2005/09/15(木) 02:01:41
>>273 取得したいのはアイコンハンドルではなくて、アイコンのファイル名とインデックスです。
292 :
273 :2005/09/15(木) 03:25:15
>>291 おまいさんはMSDNに目を通したのかと小一時間(ry
If the icon is extracted from an associated executable file,
the function stores the full path and file name of the executable file in the string pointed to by lpIconPath,
and stores the icon's identifier in the WORD pointed to by lpiIcon.
って書いてあるだろ。
・・・まぁ、
>>273 の通りなんで、結局は役に立たないけどな。
293 :
287 :2005/09/15(木) 07:02:21
WMI・・面白いと思ったけど温度の関数ないなぁ・・もう少し調べてみます
>>287 それで何をしたいのか?
もし、CPUの温度を表示する様なツールを作りたい、と言う事なら、
電子温度計のセンサ部分を直接CPUに付けた方が便利だと(以下略
マウスホイールのチルトに対応するにはどのメッセージを捕まえればよいのでしょうか?
win98 での話で気が引けるが、StretchDIBits() で 2240x1488 から 73x49 に 縮めようとすると失敗する。(winXP ではOK) 拡大ではバグの資料が MSDN に見つかったが、縮小では見つからない。 どれくらいの比率の縮小で失敗するか、ご存知の方どうか教えて下さい。 (失敗したら自分で SetPixel() で間引いて HDC に移しているが遅い。 尚、縮小はサムネイルを作るため。写真の枚数でサイズを決めて縮小して いるが、たまたま写真の枚数が多くて、不具合がばれた。)
>>295 そんなことしなくても、たいていのCPUには
温度センサーついてるだろw
マザーボードによって取得方法が違うからねぇ
>>297 知らんがドライバ次第だったりするんじゃないか?
つか、せめて自分で画像いじるときはDIBSectionぐらい使おうぜ。
301 :
287 :2005/09/15(木) 17:53:53
>>295 いや、熱暴走が気になるから表示できて警告できるソフトみたいなのつくろうかなーとか思っただけなんですが・・
>298
そなの?
普通にMBMとか使えばいいだけじゃないのか?
あのDLLってソース公開されてたはず あれだよあれ、名前が出てこない・・・もう歳か・・・・
>>301 MotherBoardMonitorでぐぐれ。その方が早い。
305 :
デフォルトの名無しさん :2005/09/15(木) 18:51:23
同じウィンドウプロシージャを使っていたりしませんか?
307 :
306 :2005/09/15(木) 19:09:14
あ、ソースアップされていましたね...。
>>305 同じWinProcを参照してるから。
子のWinProcを使いたいなら、フックするのではなく、
子のWinProcを登録したウィンドウクラスを作成し、それでCreateしてみれ。
309 :
305 :2005/09/15(木) 19:12:51
もしかして子のWNDCLASS構造体を作って 色々ぶち込むんですかね? さっそくやってみまっす!!
310 :
306 :2005/09/15(木) 19:12:59
同じウィンドウクラスを使っていますよ。
memcpyと置き換えができるAPIはありますか?
初心者な質問でごめんなさい。 最近APIの勉強を始めて練習がてらにウィンドウをスクリーンの端などに持っていった時に 自動に端に引っ付かせる(例:WINAMPなど)方法を考えているのですがうまくいきません。 WM_WINDOWPOSCHANGEDやWM_MOVEで特定座標に来たらSetWindowPos()で端に 移動させてみたのですが、それではそれらのメッセージ前に一度マウスで指定した座標のところに 一瞬ウィンドウを描写してから端に描写するので困っています。 ウィンドウを移動不可にする関数もしくはスタイル(?)など探しているのですが小生の力では探せず・・・ どなたかヒントだけでも教えていただけないでしょうか? お願いします。
説明が足りなかったかもしれんので、追記
ソースでは親のWinProcを登録したWNDCLASSを作成し、
そのWNDCLASSでもって両方のウィンドウをCreateしてる。
その後子のWinProcをSetWindowLongで設定しているが、
CreateWindowが完了して時点で、対象のウィンドウには
WM_CREATEは既に送信されている。
このため、親のWinProc上でWM_CREATEが2回呼ばれている。
なので、
>>308 のようにしなさいということ。
314 :
デフォルトの名無しさん :2005/09/15(木) 19:20:31
すいません、 キー入力について教えていただきたいんですが、 ハードウェア的に直接キーボードを入力したのとまったく変わらない状態を作り出せる そんなAPIはありませんでしょうか?
315 :
287 :2005/09/15(木) 19:26:17
317 :
デフォルトの名無しさん :2005/09/15(木) 19:29:24
>>312 MFCのCControlBarのソースを参考に
>>312 WM_WINDOWPOSCHANGING
>>311 静的なら CopyMemory
動的なら RtlMoveMemory
320 :
305 :2005/09/15(木) 19:49:47
321 :
312 :2005/09/15(木) 20:13:50
レスありがとうです。
>>318 なるほど、このメッセージで送られるWINDOWPOSポインタの座標を変更すればできました。
すっかり見落としてました。
スレ汚しすみません。
>>317 MPCですか・・・今度時間があれば参考程度に見てみます。
322 :
321 :2005/09/15(木) 20:16:35
ごめんなさい、訂正 >WINDOWPOSポインタの座標 WINDOWPOSポインタ先に格納されてるXY座標
323 :
311 :2005/09/15(木) 20:16:55
>>319 静的だったのでCopyMemoryを使いうまくいきました
ありがとうございます
>>323 CopyMemoryは最終的にはmemcpyが呼び出される。
MoveMemoryも結局はmemmoveの呼び出しになる。(が、一応kernel32.dllにエントリもある)
少なくともVCでは/Oiを指定するとmemcpyはインライン展開されCランタイムライブラリは不要になるはず。
なんでそんな物をAPIに求めるのかねえ。
現在ダイアログを作成して、ダイアログ上にエディットボタンを置いています。 ダイアログ上のエディットが操作された事を WM_COMMANDを取得することで知っているのですが、 エディットボタンに送られてくるWM_メッセージを全て盗みたいと思っています。 何かいい方法はないでしょうか?
>>325 たとえばCPUに応じて最速のコピー命令を使えるとか。
関数呼び出しのオーバーヘッドが誤差の範囲になる程度のまとまった量の
コピーじゃないと意味ないけど
>>328 おぉ、テンプレに入れてもいい気がする。
さっそくブックマーク
ちなみに言うとVC++で最適化するとDWORD単位でのブロック転送に置き換えられる。 てか、APIコールのオーバーヘッドのほうがでかいから。 本当に高速なコピーができることが重要な場面では、とりあえずスタートアップ時に cpuidで判定して、movdqaなりmovqなりを使うルーチンに関数ポインタをセットする。 Intel C++だとわざわざ自作しなくとも専用のmemcpyが自動的にリンクされたような。
マウスを使うゲーム今作ってるんだけど頻繁にウインドウの外にでてちょっとうざったいのです。 マウスカーソルをウインドウの中に閉じ込めることってできますか?
質問しないとわからんことか?
ヒント デスクトップもウインドウ
>>336 出来ないことは無いが、そのプログラムを終わらせないとタスク切り替えもままならなくなる。
そんな糞プログラムにするくらいなら設計し直せ。
VirtualPCが確かそんなことをやってた気がする。 マウスの移動をチェックしてウインドウの外に出たらウインドウの中に強制的に移動じゃちょっと違うのかな。
ClipCursor
342 :
デフォルトの名無しさん :2005/09/16(金) 16:10:51
環境は VC.net sdk で作成しています。 質問なのですが、現在ヘッダーコントロールを勉強しているのですが、 指定した位置にヘッダーコントロール表示はできたのですが、ヘッダーを指定した位置から 動かさないで中身のみスクロールさせたいのですが、有効なAPI御存じないでしょうか? MoveWindowでスクロールさせると指定位置から動いてしまうので困っています。
まずは日本語をやり直せ。逆接が4つもある
344 :
342 :2005/09/16(金) 16:30:24
質問です。現在ヘッダーコントロールを勉強してます。
指定した位置にヘッダーコントロールの表示はできました。
しかし、ヘッダーを指定した位置から動かさないで中身のみ
スクロールさせたいのですが、よくわかりません。
MoveWindowでスクロールさせると指定位置から動いてしまうので
困っています。上記の目的に有効なAPIありますか?
環境は VC.net sdk です。
…で、答えは↓の辺りかな?
ttp://www.kumei.ne.jp/c_lang/sdk3/sdk_294.htm
Windowsが管理している全てのウィンドウの内、 キーボードフォーカスを持つウィンドウのハンドルを取得したいのですが、 WindowFromPoint ChildWindowFromPoint を使うのが普通で簡単なのでしょうか?
346 :
デフォルトの名無しさん :2005/09/16(金) 16:59:38
>>344 返事ありがとうございます。
kumeiさんのHPは、よく勉強させていただいてます。
でも、指定位置からのヘッダースクロールの解決方法はありませんでした。。
347 :
デフォルトの名無しさん :2005/09/16(金) 17:09:05
どうしてここでは名無しなんだOmoti
名前出さないほうが人が呼べると踏んだんだろう。馬鹿なりに考えて。
RGSSなんてわけのわからん略語使うな ブラクラ踏んじまったじゃないか
そして被害者がまた一人…
ダイアログボックスの様なタスクに表示されない 普通のウィンドウ(MDIではない子ウィンドウ)を作りたいのですが、可能でしょうか? もし、そうならばその方法を教えてください。
354 :
287 :2005/09/16(金) 21:05:46
ぉ、名前ミス
名前だけか?
>>353 知りませんでした…この機能
が、意図するものが見えません。スマソ。教えてください。
>>354 誰だか知らないけどありがとう?
359 :
357 :2005/09/16(金) 21:28:35
360 :
353 :2005/09/16(金) 21:44:41
どうやったら
>>349 と399を間違えるんだ俺!!
362 :
357 :2005/09/16(金) 22:25:40
スマソ。猫でもに載ってたorz。
>>353 Alt+TabやAlt+Escで出来ても、見えてるのにマウスカーソルが動かないClipCursorとか
マウスのボタンを押してもないのに続くSetCaptureとかは、使う側はストレス溜まるだろう。
364 :
354 :2005/09/16(金) 22:34:32
いや、399のレスが楽しみだなってw
>>345 座標とフォーカスに何の関係があるんだ?
ゲームなんだからいんじゃね >ClipCursor オプションにしてもいいし。
>>366 ClipCursorとか使う位ならフルスクリーンで動いた方がいい
そのを操作中は一切マウスがウィンドウの外に出ず、 Alt+Tabやらでアプリを切り替えれば普通に全体にマウスを持っていけるゲームなぞ掃いて捨てるほどありますがね
そんなゲームプレイする側からすれば鬱陶しいだけだ。
掃いて捨ててください。
>>367 個人的な好みじゃねぇかw
俺も個人的な好み言うなら、別にゲーム中にクリップされても全然構わんし、ゲーム内容によってはそのほうがいいだろうし。
フルスクリーンもそれはそれで希望してる人がいれば取り込めばいいわけだ。
あるダイアログ1上からダイアログ2を呼び出します。 ダイアログ2上でユーザーに文字列を入力してもらい、 その文字列のエラーチェックをし、エラーでなければ ダイアログ1に入力された文字列を渡したいと思っています。 今はexternを使い、char *ポインタを共用することで 問題を解決していますが、ダイアログ上でバイナリ データのやり取り、または引数としてポインタを渡す ことは可能でしょうか? もし可能でしたらその方法を教えてください。
DialogBoxParam()
>>369 個人の趣味で「側」を語らないでくださいね^^
375 :
デフォルトの名無しさん :2005/09/17(土) 00:01:01
ゲームだなんだの話は他所でやれ。
どなたかAdobansd Windows 下さいよ
VisualStudio2005が出たら、.net academicpack漏れはどうなるの?w
.net academicpackの漏れは
どなたか〜
academicpackな漏れは
意味深
386 :
デフォルトの名無しさん :2005/09/17(土) 22:31:20
一万円もするコンピュータの本買ったって言ったら、彼女びっくりするよ
388 :
デフォルトの名無しさん :2005/09/17(土) 22:32:54
2005からVC++/CLI っていうのが強化されたらしいんだけど。 どうなんかな?
Win32APIとは何の関係もないな
頑張ってterapadでコーディングしてください
これからWin64になるの?
393 :
デフォルトの名無しさん :2005/09/18(日) 06:10:13
WinFXになるってエロイ人がいってたお(^^)
394 :
デフォルトの名無しさん :2005/09/18(日) 16:33:58
Winsock LSPの詳しい資料ってどっかにありませんか?? 散々探したけど、全然見つかりません・・・
C++でWin32APIを使ってるのってもう古い? C#に移行したほうがいいのかな
>>395 VS2005だとdllimportだらけになるなあ。
ま作るものによるんだけど
399 :
394 :2005/09/18(日) 17:46:41
ところで400ゲット
MAX_PATH廻りで char path[MAX_PATH + 1]; Win32Api(path, MAX_PATH) とやっている人と char path[MAX_PATH]; Win32Api(path, MAX_PATH) とやっている人がいますが、 どちらが正しいのですか? Win32ApiはGetModuleFileNameやらGetFullPathNameやらその他もろもろです。
+1 しとけば安心
またそのネタか
TCHAR path[MAX_PATH + 2];
なんで2を足してるの?
TCHARを理解していないから
TCHARくらい理解してますよ^^
>>407 は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?
は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?
は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?
は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?
は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?は?
TCHARというよりC言語の配列を理解してないんじゃ
malloc()とゴッチャになっている、に一票
ひょっとして、Buiild33 の
>>323 の再来ですか?
Buiild33 ⇒ Build33 だ、スマソ
413 :
デフォルトの名無しさん :2005/09/18(日) 23:43:36
質問です。Windows XP の互換モード(exeファイルのプロパティの「互換性」で 設定できるやつ)によって起動されたことを検出する方法があれば教えてください。 もしくは、互換モードの設定情報が保存されている場所を教えてください。
ダイアログボックスを作成し、 その作成されたダイアログボックスのハンドルを取得したいのですが 何かいい方法はありませんでしょうか? 現在はWPARAMに子のハンドルを格納して子から親へメッセージを送り 親側ではWPARAMを基に子にメッセージを送信するということにしています。 WM_DIALOGINIT時に親に自分のハンドルを教えているのですが、 上のような方法はあまり賢くないような気がします。
>>414 CreateDialogの戻り値がそうだろ。
まさか、モーダルでハンドル取ろうなんて考えてる訳じゃないだろ?
>>395 GDI+用のラッパーどっかにいいの落ちてないか?
面倒臭くて面倒臭くて・・・
自分で作れば?
gdiplusクラスはすでにラッパーなわけだが、それをさらにラップしてどうするんだろ。
C#と手間も変わらんよな
どのあたりが面倒?
CreatePopupMenu()をして InsertMenu()で状況に応じたメニューを表示したいのですが、 選択したメニューの処理は、あらかじめID等を決めておいて 前もって作っておくしかないのでしょうか。
>>420 多分DC->Gdiplus::Graphics変換とかRECT→Gdiplus::Rect変換とかが
しょっちゅう必要で一段余計に手間が増えてウザイ、とかじゃまいか
>>421 当然だろ
実行中にプログラムを作って動かすことなどできんのだから
それに、状況に応じたっていっても、無限じゃないだろ?
もし無限ならそんなのできません
普通はメニューと処理は1対1だけど 「IEのお気に入り」や「最近使ったファイル」なんかは 複数のメニューをまとめて1つの処理でやってる
Delphiのメニューと処理はあらかじめIDで結び付けられてるわけじゃないぞ あれをWin32APIだけ使って真似するのは大変だと思うが
>>424 ありゃあどんなリンクだろうとやる処理が同一だからだろ
427 :
421 :2005/09/19(月) 20:11:34
>>423 ありがとうございます。
右クリックしたとき関数呼んででCreatePopupMenu()、
しているのですが関数終了時にDestroyMunu()は、したほうが
いいんでしょうか。
関数無いで無条件にCreatePopupMenuしてるんなら関数終了時にDestroyした方がええじゃろう
関数無い→関数内 ね
430 :
デフォルトの名無しさん :2005/09/19(月) 23:11:25
431 :
デフォルトの名無しさん :2005/09/19(月) 23:15:47
winsockは64ビットですか?
432 :
421 :2005/09/20(火) 08:19:29
>>428 レスどうもです。
DestroyMenu()をしないとわずかづつ
メモリ使用量が増えていました。
>>421 どういう状況かわからんが、
スクリプト処理系でも作ればいいんじゃないか?
処理内容を機械に作らせたい、となればまた別の話だけど。
予めIDを決めなければいけない、ってことはない。
WM_MENUSELECTとGetMenuStringとかでなんとかなるんじゃないか?
同じメニューストリングのメニューが無限にあるとかなら知らんが。
といっても普通はIDで事足りるかと。
さすがに「お気に入り」なんかでも6万もないだろ。
>>416 Managed C++ または C++/CLI
他にも色々まとめてラップしてくれるぜ
イェアイェアチェケラッチョ
436 :
デフォルトの名無しさん :2005/09/20(火) 17:06:38
WS_EX_LAYEREDを立てて、ウインドウを作るとWM_KEYDOWN、WM_KEYUPなどのキーイベントが取得出来なくなってしまいます。 (キーを押すとシステムの警告音が鳴ってしまう「カン、カン・・・」って感じの) 何とか回避する方法ご存じな方いらっしゃいませんでしょうか。 よろしくお願いします。
438 :
421 :2005/09/20(火) 20:06:36
>>433 メニュー項目で選択した文字列を関数の引数にしたかったんです。
TrackPopupMenu()のnFlagにTPM_RETURNCMDオプションを設定して
返り値の番号からどの文字列が選択されたか判断することで解決しました。
メタファイルに関して質問があります。 プリンタへ印字するためのメタファイル作成で詰まっています。 現在CreateEnhMetaFileでメタファイルを作成しているのですが、 第一引数がNULLの状態からDPIを変更することは出来るのでしょうか? SetWindowExやらSetViewportExやらでいじっても何も変わらなかったり、 真っ白になったりします。 第一引数がNULLでは出来ない場合、プリンタのDCを 取得せずにする方法はあるんでしょうか?
440 :
436 :2005/09/21(水) 12:02:41
>>437 レスありがとうございます。
>バグを直す。
これは、WS_EX_LAYEREDを立ててウインドウを作る事とキーイベントが取得出来なくなる事に関係は無いという事でしょうか?
他にどういう意味があると?
442 :
439 :2005/09/21(水) 18:22:18
一部解決しました。MapMode換えると座標系も変わるのか… プロパティのDPIは変わりませんが…
443 :
デフォルトの名無しさん :2005/09/21(水) 21:21:17
こんばんは、よろしくお願いいたします。 ダイアログボックスに、ウィンドウを引っ付けて、 文字を書き込んでいますが、そのフォントサイズを変えたいのです。 そんなことできるのでしょうか。
できます。
やったねっ
446 :
初心者 :2005/09/22(木) 13:56:45
質問があります。 現在、ボーランドでプログラムを作っているのですが、 TransparentBlt()関数が読み込めないらしく、 Error: 外部シンボル 'TransparentBlt' が未解決 と出てしまいます。 何かをインクルードし忘れているからでしょうか? windows.hだけをインクルードしているのですが。
448 :
初心者 :2005/09/22(木) 14:02:25
>>447 ありがとうございます。
すいませんが、リンクはどのようにするのでしょうか?
返れ
>>448 コマンドプロンプトからコンパイルしているのなら、
たぶんbcc32の引数にソースファイルと共にmsimg32.libを並べればいいはず。
/\___/ヽ / -‐' 'ー- \ . | (●),(、_,)、(●) ::| | /,.ー-‐、i :::::| | //⌒ヽヽ .::| | ヽー-‐ノ :::::| \  ̄ ...::/ /`ー‐--‐‐―´\
>>448 BCC5.5.1の事を言っているんなら、コマンドラインに単に msimg32.lib を
付け加えるだけでは?
>448 >450 >452 返れ
454 :
初心者 :2005/09/22(木) 14:25:39
ダメでした。いろいろなところに入れてみたのですが。
返れって何?帰れならわかるけどwwww 日本語わかりまちぇんか??
457 :
初心者 :2005/09/22(木) 14:29:10
多分PlatformSDKをインストールしてないってオチだろうな。
>>458 bccは必要ない。ヘッダとインポートライブラリすべて同梱
460 :
初心者 :2005/09/22(木) 14:39:35
それは何でしょうか。 ぜひインストールしたいものです。
>>460 PlatformSDKは最新のWindows.hなどが入っている。
プログラムの実行が早くなったりするわけじゃないから、
インストールするのは必要に迫られてからでいい。
下手に最新のPSDK入れたりすると、古いコンパイラでコンパイル出来なく なったりするんだな、これが。
PlatformSDKも知らんとWindowsプログラムやっとんのか・・・ 恐ろしい世の中じゃのう
465 :
デフォルトの名無しさん :2005/09/22(木) 15:42:28
ファイルの上書き確認をするメッセージボックスを出したいのですが、 普通のメッセージボックスではなく、 「はい」「いいえ」だけでなく、「すべて」「中止」のボタンを付けなければなりません。 それで、Win32APIのメッセージボックスじゃ出来ないと思い、メッセージボックスを自作したのですが、 メッセージボックスのように、処理を中断させるのをどうすればいいかわかりません。 そういうことできる関数ありませんか?
DialogBox
モーダルダイアログ、モードレスダイアログ で検索してみれ
MessageBoxじゃダメなのか?
MessageBoxに「すべて」ボタン作る引数なんてないだろ
>>465 関数でなきゃ「厭ねっ」なのかっ!
あぁん!
471 :
デフォルトの名無しさん :2005/09/22(木) 16:11:48
デスクトップアイコンを非表示にするAPIを知りませんか?
473 :
デフォルトの名無しさん :2005/09/22(木) 19:26:27
すみません、ペゾルド本について質問させてください。 本書において DrawBezier (hdc, apt) ;というコードがありますが、ビルドするとエラーが発生してしまいます。 PSDKのドキュメントを探してもこんな引数を取る GDIファンクション は見当たりませんでした。 しかしながら、付属CDのプロジェクトをビルドした場合、エラーなくビルドすることが出来ました。これは何かをリンクする必要があるのでしょうか?
>>474 おまいさんが持ってるのが第五版ならP.191に載ってるコードをちゃんと上から下まで見ろ。
>>475 わざわざ調べていただいてありがとうございます。
よくソースを見直したら定義していた関数をまるっきり見落としていました....。
これもGDIファンクションかと勝手な思い込みをしてコーディングしていました。ご迷惑をかけてごめんなさいです..。
478 :
477 :2005/09/22(木) 23:59:25
474は477です....orz
479 :
デフォルトの名無しさん :2005/09/23(金) 07:33:16
>>471 こういうことか?
Win32API質問箱 Build28
http://pc8.2ch.net/test/read.cgi/tech/1108199304/ 271 名前: デフォルトの名無しさん Mail: sage 投稿日: 05/02/20(日) 15:43:18
>>267 こんなもんでどう?検証で書いたからそのまま載せる。
HWND hWnd = NULL;
hWnd = ::FindWindow( "Progman", "Program Manager" );
hWnd = ::GetTopWindow( hWnd );
hWnd = ::GetTopWindow( hWnd );
::ShowWindow( hWnd, SW_HIDE ); // to hide
// ::ShowWindow( hWnd, SW_SHOW ); // to show
あとは、SPYで該当ウィンドウの意味を調べて自分なりにアレンジしてくらさい。
276 名前: デフォルトの名無しさん Mail: sage 投稿日: 05/02/20(日) 16:06:10
とりあえず場所はここのようです
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Explorer
Advanced
HideIcons
480 :
デフォルトの名無しさん :2005/09/23(金) 17:00:14
あれはMSオリジナル
質問なのですが、デスクトップ上に複数のウィンドウ(インターネットエクスプローラーやら、ペイントとか色々) を出した状態で、それらのウィンドウの内、特定のウィンドウだけをスクリーンショットとして取りたいの ですが、どうすればよいのですか?
「Alt + PrintScreen」後にペイントに貼り付けじゃダメなの?
>>483 それだといかんのです。
バックグラウンドにあるウィンドウとかをフォアグラウンドにもってきて
撮影するとかそういう感じでやりたいのですが、どうすりゃいいのかさっぱり・・・・
特定のウィンドウはどうやって指定するんだよ クリックしたら最前面にくるんだから最前面にあるウィンドウを撮影するのが 楽に決まってると思うんだが何をやりたいのかさっぱり
>バックグラウンドにあるウィンドウとかをフォアグラウンドにもってきて撮影 1:バックグラウンドにある特定のウィンドウを見つける 2:フォアグラウンドに持ってくる 3:撮影 撮影はデスクトップの DC 持ってきて BitBlt で平気だったような気がする ちなみにタイマー撮影を使うと1〜2が省略できて良いよ
>>486 タイマー撮影というのを詳しく教えてください。
とりあえずBitblt関数を使ってキャプチャ作ってみます
>>487 ちょうどカメラのセルフタイマーみたいな機能
これがあると、撮影ボタンを押した後に撮影したいウィンドウを最前面にもってこさせる操作ができる
だからさ、自分で最前面に持ってくるんだったらそのときAlt+PrintScreenも 押すのではあかんの? プログラムを作ること自体が目的化してない?
490 :
471 :2005/09/23(金) 19:49:16
>>479 レスありがとうございます。
いろいろテストしてみたら、以下のコードで出来ました。
Public Declare Function ShowWindow Lib "user32" (ByVal hwindow As Long, ByVal cmdshow As Long) As Long
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
hWndProgman = FindWindow("Progman", "Program Manager")
hWndProgman = FindWindowEx(hWndProgman, 0, "SHELLDLL_DefView", vbNullString)
hWndProgman = FindWindowEx(hWndProgman, 0, "SysListView32", vbNullString)
ShowWindow hWndProgman, SW_HIDE
ありがとうございました。
491 :
デフォルトの名無しさん :2005/09/24(土) 01:52:34
ドラッグ アンド ドロップの質問です。 IEから、<a>タグで指定されてるリンクをドラッグして、 自分のプログラムにドロップしたいのですが受け付けてくれません。 どうやったらいいんでしょうか?
494 :
461 :2005/09/24(土) 07:09:50
Win32コンソールアプリへのキー入力をインターセプトし、加工するにはどうしたらいいですか?
| | J
バックバッファにDrawText等で描画した複数の文字列をBitBltで一気に画面に出力する手法を 以下のように記述したのですが何も表示されません。 何がまずいのでしょうか…。 HDC hdc, cdc; PAINTSTRUCT ps; RECT rect; GetClientRect(hwnd, &rect); hdc = BeginPaint(hwnd, &ps); cdc = CreateCompatibleDC(hdc); DrawText(cdc, "Hello,", -1, &rect, DT_LEFT); DrawText(cdc, "2ch.", -1, &rect, DT_CENTER); BitBlt(hdc, 0, 0, rect.right, rect.bottom, cdc, 0, 0, SRCCOPY); DeleteDC(cdc); EndPaint(hwnd, &ps);
あるウィンドウをフォアグラウンドに持ってくるのに、
ttp://techtips.belution.com/ja/vc/0012/ この方法をやってみたのですが、
元のフォアグラウンドがタスクマネージャーで見ると「応答なし」のウインドウだと、上手くいきません。
ALT+TABなら目的のウィンドウに切り替えることはできるので、
この状態でもフォアグラウンドを変更する方法はあると思うのですが、
どのあたりのAPIを使えば良いでしょうか?
498 :
デフォルトの名無しさん :2005/09/24(土) 15:22:16
>>496 RECTは使った事が無いから違うかもしれないけど、
HBITMAPと同じように関連付けを行わないとダメかも。
RECT rectOld;
***
cdc = CreateCompatibleDC(hdc);
rectOld = SelectObject(cdc, rect); //関連付け
BitBlt(hdc, 0, 0, rect.right, rect.bottom, cdc, 0, 0, SRCCOPY);
SelectObject(cdc, rectOld); //元に戻す
DeleteDC(cdc);
***
>>498 SelectObjectの第二引数にRECTは指定できないとエラーが出てしまいます。
&rectにすると一応実行は出来ますがやはり何も表示されないようです。
この場合何を関連付けたらいいのかを調べてみます。
レスありがとうございました。
501 :
デフォルトの名無しさん :2005/09/24(土) 15:31:45
>>500 CreateCompatibleBitmapつかってビットマップ作って
SelectObjectで関連づけないと色データ持ってないから
BitBltできんだろ
BitBlt
ビットブロック転送を行います。
コピー元からコピー先のデバイスコンテキストに、
指定された長方形内の各ピクセルの色データをコピーします
SelectObjectでRECT関連付けてる奴初めて見た。
>>501 あー、なるほど。そういうことなんですか。
勉強不足でした。ありがとうございます。
CreateCompatibleDCしただけで描画できるほど甘くは無いのだよ キミはシャーペンを渡されただけで、紙も無く絵が書けるかな?
かけるさ
505 スゴスw
シッ 相手にしちゃいけません!
シャーペンと紙があっても描けない・・・
大概のシャーペンにゃ最初から芯入っとるじゃろがー
俺の買ったシャーペンは芯がなかったことがあるな
適当なシャーペンには入っているがマジな奴には入ってないね。
一本千円のシャーペン使ってる。
芯の太さって何使ってるよ?俺0.4mm
文具板池 まあ向こうは文具の使い方間違ってる香具師も多いがw
先端で栗を突付いたり、柄の方で穿ったり。
シャーペンは回すためのもの
穿つには細いな もっと太いもので穿たなくては
520 :
デフォルトの名無しさん :2005/09/24(土) 18:01:51
IShellFolder::EnumObjects、IEnumIDList::Nextを使って、フォルダのアイテムIDリストを列挙しています。 ところが再び同じIShellFolderオブジェクトからアイテムIDリストを列挙しようとすると、 そのフォルダの内容に変化はない筈なのに、前回と異なるアイテムIDリストが返ってくる場合があります。 これらのメソッドで取得したアイテムIDリストは一時的なもので保存しておくべきではないのでしょうか?
Win32APIじゃない質問する人はお引き取りください
>>520 前回と異なるアイテムIDリスト、とは?
IEnumIDListインターフェースのポインタ値が違うということ?
>>520 IEnumIDList::Next から返って来たアイテムIDリストのアドレスが違う、と解釈。
IEnumIDList::Next は動的にメモリを確保して、アイテムIDリストをコピーし、そのポインタを第2引数に返す、と言う動作。
取得するたびにポインタの値が変わるのは当然。
保存しておいても構わないが、ちゃんと開放を忘れずに。
524 :
520 :2005/09/24(土) 19:05:23
>>522-523 違うのはIEnumIDList::Nextメソッドから取得したITEMIDLIST構造体の中身です。
具体的には↓のような感じです。
@IShellFolder::EnumObjects、IEnumIDList::NextからITEMIDLIST構造体を列挙。
A取得したITEMIDLISTを新たなIShellFolderオブジェクトにバインドさせてIShellFolder::EnumObjects。
B再び@でITEMIDLISTを列挙するとAの操作を行ったITEMIDLISTは異なる内容になっている場合がある。(必ずではない)
ITEMIDLISTの比較は以下のように行っています。
BOOL IsEqualItemID(LPCITEMIDLIST pID1, LPCITEMIDLIST pID2)
{
if(pID1->mkid.cb != pID2->mkid.cb)
return FALSE;
return !memcmp(pID1, pID2, pID1->mkid.cb) ? TRUE : FALSE;
}
525 :
デフォルトの名無しさん :2005/09/24(土) 20:28:13
Win32APIで戻り型が構造体のAPIってありますよね?(たぶん) それってどうやって受け取ればよいでしょうか? 普通のBOOLとかのレジスタに収まる戻り値はEAXで受け取ると思いますが、 構造体を返す(__stdcallみたいな)規約ってあるんでしょうか? それとも戻り型が構造体のWin32APIはない?
526 :
デフォルトの名無しさん :2005/09/24(土) 20:30:40
あ、 DWORDLONG Int64ShrlMod32(Value, ShiftCount); というのがありますね。 これは64bit値で、構造体とはまた違いますが、 これはどうやって返してるんでしょうか? EDXとEAXでしょうか。 では64bit以上の値はどうなるんでしょう?
あったかどうか知らんが、 あるとしたら、構造体へのポインタじゃね?
>>525 戻り値が構造体の関数はWin32APIにはおそらくない。
ほとんどは操作が成功したかどうかを表すためにBOOLを返す。
構造体は戻り値にする代わりに引数にポインタを受け取るようになっている。
ただ、__cdeclや__stdcallでは戻り値が構造体型の関数を作ってアセンブリを出力させてみると、
同じように戻り値を格納するポインタを指定する引数が密かに追加されるようになっていた。
>>526 そいつはDLLにはなくヘッダに直接マクロとインラインアセンブラを使ったインライン関数が両方書いてある。
インライン関数版を見るとやはりeax/edxを使っているようだ。
530 :
デフォルトの名無しさん :2005/09/24(土) 21:02:45
検証してみました。(VC6)
>>529 さんがおっしゃる通り、
64bitまでの構造体戻り型の受け渡しはEDX, EAXを使っている様です。
ただし、それ以上のサイズの構造体について、不可解なことをしていました。
呼び出し側で、戻り値用の一時的な変数へのアドレスを
最後にpushしているようなのです。
したがって、関数は実際の引数よりも1つ多く受け取っているようです。
呼ばれ側は、そのアドレスに対して値を格納していました。
そしてそのアドレスをEAXにセットしてret。
そして呼び出し側に戻ったとき、EAXのアドレス(一時変数)から
呼び出し側で受け取る変数へコピーするということみたいです。
EDX使ったり、一時変数使ったりなんか統一してほしいですね。
自作言語作ってる側としては困ります。
531 :
デフォルトの名無しさん :2005/09/24(土) 21:06:05
ちなみに呼ばれ側を__stdcall、__cdeclを指定しても動作は変わりませんでした。 構造体を返す関数をDLL公開すると、どういうことになるんだろう・・
532 :
528 :2005/09/24(土) 21:07:50
>>530 俺が書いたとおりじゃないか。
あと、場合にもよるけど一時変数を使わずとも、戻り値の変数のアドレスを直接隠し引数に渡せると思う。
533 :
デフォルトの名無しさん :2005/09/24(土) 21:11:50
DLL化を試しました。 DLL公開しても呼び出しシーケンスは変わりませんでした。 構造体を返す関数は互換性がないか、 この(EDXもしくは一時変数渡し)プロトコル?を使うみたいです。
534 :
デフォルトの名無しさん :2005/09/24(土) 21:13:38
>>532 そのようですね。
最適化をすると、そういうコードになるみたいです。
まあ自作言語を作っているのならDLL関数の戻り値に構造体・クラスなんかは指定できないという仕様にしてしまえば済む。
536 :
デフォルトの名無しさん :2005/09/24(土) 21:18:17
構造体の受け渡しについて自分なりに納得ができました。 お付き合いくださった皆さんありがとうございました。
自作言語ってのがネイティブコンパイラならどっかからVC++のABI仕様書を探してきて調べるしかないと思うが。
ログオン前に確実にプログラムを起動する方法ってありますか? 1分くらいかかる初期化処理も終わらせることが前提です。 サービスで作ってみたんですが、ログオンできてしまって、 ステータスは「開始中」になってしまいました。
>>538 フェイクのログオン画面を表示しt(ry
>>538 NT系にはログオンスクリプトってのが無かったか?
あれなら、認証が終わった時点で処理されるはず
スタートアップにショートカットを作成汁
ログオン前ですよ。ログオン前。 ログオン直後じゃないです。
OSよりも先に処理をしようってんだから APIじゃなくてアセンブラを使うしかないんじゃあるまいか? APIって暗黙の了解でログオン後の処理となってないかい?
サービスプログラムはログオンより前に動きます。
ただ
>>538 で言ったように、長い初期化処理を入れると
ログオン画面が先に出てきてしまうのです。
GINA使えば。
タスクの優先順位
autoexec.batに書いておけばいいじゃない
[autoexec.bat] 538.exe win.com [EOF]
//この前にMessageBox()などを呼び出しておくと、期待通りの結果が返ってくる。 HMODULE hModule = GetModuleHandle(_T("user32.dll")) ; なぜかNULLが返ってきます。 これをする前に、MessageBoxなどを呼び出しておくと、うまくいくのですが。 実際に使うまで、モジュールは読み込まれないのでしょうか?
DLLがDLLたるゆえんの一つじゃないか
その「後」でMessageBoxなどを呼び出してもうまくいくはず (わざわざdelayloadを使っていなければ)
だめだこりゃ・・・
うちの Win2000 にて WinMain 直後に GetModuleHandle してもハンドル取れたけど。
556 :
555 :2005/09/25(日) 18:01:05
リロードしてなかった すまん。
>>538 厳密にログオン前ということならGINAが妥当だろう。
ログオン〜シェル起動の微妙な間なら、USERINITかシェルを
すげかえるとか。
サービスのままじゃダメなのか ショック
559 :
デフォルトの名無しさん :2005/09/25(日) 18:35:04
フォーカスを一度リストボックスやスタティックに移すとWM_CHARがきません リストボックス上やスタティック上のキーの入力を捕まえるのにはどうしたらいいでしょうか?
WM_KEYDOWN
561 :
559 :2005/09/25(日) 18:53:07
自己解決しました
リストボックスのスタイルにLBS_WANKEYBOARDINPUTを指定してWM_KEYTOITEMでキーの入力ができました
>>560 書き忘れましたが WM_KEYDOWNもきませんでした、すみません
キーの入力ができました? キー入力をトラップするんだろ? プログラム上から入力するのか?
563 :
557 :2005/09/25(日) 20:03:46
>>558 ちょっと調べてみたがグループポリシーに
(コンピュータ)スタートアップスクリプトとかいうのがあるな。
同期実行らしいから使えるかもな?
まあ他にも何かしら方法はあるかもよ。ネットワークのサービスは
先に起動してるんじゃないかとか。
DirextXを使わずに半透明で描画する方法はありませんか?
あります。
ヒント:猫でもわかる
思い出せなくて安直な質問になりますが、dos の system() に相当する win32 の API は何でしょうか。system() で可能なのですが、途中で dos 窓が出てちょっと いやらしいもので。
>>567 思い出せないってのは嘘だろ。素直にげろしろよ。
それから、system()はdos固有の関数ではないぞ。
>>567 CreateProcess()
プロンプト表示させたくなかったら引数指定な。
570 :
デフォルトの名無しさん :2005/09/26(月) 13:18:45
すいませんソケットAPI関連なんですが、、
使用言語はC++言語で、コンパイラにはBCC5.5を使用しています。
1.ソケットを作成する(socket関数)
2.サーバに接続を確立する(connect関数)
3.コマンドを送信する(send関数)
4.送ったコマンドに対しての応答を読み込む(recv関数)
この手順で
3に
"GET パス名 HTTP/1.0"
""
を送れば任意のページが応答として返されるとか何とかあるのですが、recvで読み込むときに
そのままプログラムがビジー状態になってしまいます。
文字のコードはASCIIなはずですし、無論send関数で指定する文字列バッファはchar型です。
もしかして送信する文字列もリトルエンディアンからビッグエンディアンに変換する必要があるのでしょうか・・
なんでビジー状態になるのか、その原因そのものも分からないので何卒お願いします。。
ソースコードはこちらとなっております。
ttp://nijibox.ohflip.com/futabafiles/001/src/sa31147.zip
>>567 ShellExecuteだと関連付け起動もできる。
>>572 様
おお、送信するべき文字列に\r\nを加えたらHTMLを読んでくれました!!
いやはや一応RFCやら各種書籍を読んだツモリだったのでしたがお騒がせしました(´・ω・`;)
ごめぽ、 本当の事を言うと英語読めないからRFCは途中で投げ出して、書籍もまだ読み途中です(っд`:)
575 :
デフォルトの名無しさん :2005/09/26(月) 14:09:49
forkって内の?
578 :
567 :2005/09/26(月) 14:39:12
>>569 ,
>>571 ありがとうございます。
571 さんへ、ShellExecute() も使っていますが、関連付けでなく、アプリケーションを
指定したかったもので。(関連付けると元に戻すとか出てくるし)
Windowsプログラムでよく 関数プロトタイプがなかったり、ウィンドウプロシージャの引数部分を WndProc (HWND, UINT, WPARAM, LPARAM) ; といった書き方をするソースを見ることがあるのですが、 WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) ; 上記のように明示的に関数プロトタイプを示してはならないのでしょうか?
>>580 (それに戻り値の型をつければ)全然問題ない。
C/C++では名前を使うより前にその名前の宣言がなければならない。
で、WndProcの定義をファイルの先頭に書けば、それが宣言にもなってプロトタイプを書かなくてすむ。
WndProcの定義をファイルの後ろのほうで書くのなら、
WinMainなんかで使うより前に宣言を書いてWndProcの存在を知らせておく必要がある。
582 :
580 :2005/09/26(月) 15:07:48
>>581 回答ありがとうございます。
安心できました。:-)
めっちゃ初歩的な質問ですみません。 ウィンドウサイズを変える関数ってありませんか?
あります。
>>584 MoveWindow or SetWindowPos
>>583 ファイルやフォルダのプロパティウィンドウがそれっぽいから
Spyとかでウィンドウスタイルを調べてみてはどうだろうか
589 :
584 :2005/09/26(月) 18:36:02
>>583 WS_EX_APPWINDOWはダメだった?
1. GetWindowLongで拡張スタイル取得
2. (SWP_NOACTIVATE | SWP_HIDEWINDOW) でSetWindowPos
3. 拡張スタイルから WS_EX_APPWINDOW を外してSetWindowLong
4. (SWP_NOACTIVATE | SWP_SHOWWINDOW) でSetWindowPos
ってな感じで。
Alt+Tabの方も出なくなるかもしれないけど・・・
後はITaskbarList::DeleteTabなんてのもあるな。
WndProc (EN_UPDATE) malloc() SetWindowText ↓ WndProc (EN_UPDATE) malloc() SetWindowText ↓ (略)
いやでもfreeでしっかりメモリは解放されてますよ?
595 :
デフォルトの名無しさん :2005/09/27(火) 06:16:07
>>590 やってみましたが、やっぱりタスクバーと Alt + Tab 表示が連動してしまっているようです。
>>587 ウィンドウエクスプローラで調べて CreateWindowEx してみましたが駄目でした。
どうもウィンドウスタイルの問題じゃ無いみたいです。
で、
「〜のプロパティ」ダイアログは StubWindow32 という不可視ウィンドウが親らしいので、
まさかと思っていろいろ試してみたら、
どうやら DialogBox() や PropertySheet() を呼び出すときに、
不可視ウィンドウを親に指定すれば Alt + Tab のリストに表示されることがわかりました。
何なんだこの仕様…。
ということで無事解決できました。
助言してくださった方々、ありがとうございました。
>>595 前々から、タスクバーに表示されないウィンドウを出す方法として言われてますけどね
>>594 だがそのあたりしかありえん
もう一度自分の書いたプログラム確認してみれ
598 :
デフォルトの名無しさん :2005/09/27(火) 07:42:39
>>594 増えていくのはあたりまえ
メモ帳で1Gのテキスト開いたのと
空っぽの状態のメモ帳のメモリ使用量を考えるといい
>>592 malloc()だけがメモリ使用量を増やすわけではない。つまり、>598。
>>597 自信満満に乙。
ソース見ても問題なさそうだし、 全部コピペしてビルドして確認してみても メモリがどんどん増えていく現象は起きないな もし問題あるようならウイルス、トロイ、キーロガーとか他のソフトが原因かも
601 :
デフォルトの名無しさん :2005/09/27(火) 09:13:44
editコントロールのデフォルトの上限は約32kバイトでそれが2つだから 増えるっていってもせいぜい64kぐらいじゃないですか? その他にコピーしたりでいろいろ浪費したとしても知れてると思うけど Allocating a Text Buffer When the system creates an edit control, it automatically creates a text buffer, sets its initial size, and increases the size as necessary. The size can be up to a predefined limit of approximately 32 kilobytes for single-line edit controls.
Windowsが消費してんだろ。
はぁ、やはりコントロールが消費してましたか・・ 最初はコントロールが消費するだろうとは踏んでたのですが、文字を全て消してもメモリの使用量が減らないままで・・
でも、増え続ける訳ではないだろ?うちでは16MB程度で頭打ちになったが。 つか、最小化して戻したりすると、減ってない?
起動直後 2352KB 入力終り 2616KB(キーボード押しっぱなしで15分ぐらいで打ち止め) 最小化 132KB 元に戻す 980KB 秀丸へコピペしてテキストファイルへ保存、サイズ確認 29.2 KB (30,000 バイト)
>>604 そもそも、freeしたからと言って、
すぐにメモリ使用量が減るわけではない事くらい、
プログラマなら覚えておけよ。
Get ProcessWorkingSet Size なのか、ちょっと悩んでしまった。
609 :
セェンロン ◆89nOjCFiLI :2005/09/27(火) 15:38:43
つSpy++
質問です。 w2kでSetProcessWorkingSetSizeをPowerUserで実行しようと 以下のように書いてみたんですが ProsHandle = OpenProcess(PROCESS_SET_QUOTA, TRUE, GetCurrentProcessId());//@ if(ProsHandle == NULL) return -1; if(FALSE == OpenProcessToken(ProsHandle,TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &TknHandle)) return -2;//A if(FALSE == LookupPrivilegeValue(NULL, SE_INCREASE_QUOTA_NAME, &Luid)) return -3;//B NewState.PrivilegeCount = ANYSIZE_ARRAY; NewState.Privileges[0].Luid = Luid; NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(TRUE != AdjustTokenPrivileges(TknHandle, FALSE,&NewState, sizeof(OrgState), &OrgState, &Length)) return -4; Result= SetProcessWorkingSetSize( hProcess, processMinSize, processMaxSize ); if( !Result ){ asdf=GetLastError();} @行 PROCESS_SET_QUOTAをPROCESS_ALL_ACCESSにしないと AのOpenProcessTokenでerrorになります。 BのSE_INCREASE_QUOTA_NAMEもあっているのかどうかわかりません。 助けてください。
613 :
セェンロン ◆89nOjCFiLI :2005/09/27(火) 16:05:19
>>611 このツールはVBで作られていたのかw
もっさり感といい、うっすらとそんな予感はしてましたが、本当にそうだったとは。。
ありがとうです。
違う方法で同じようなのを作ってみます。
>>613 コントロールはActiveXコントロールだろ?
>>611 のページがVBでの使い方を書いてるだけじゃん
そのツールとやらは知らんので、
それがVBで作ってあるかどうかは何ともいえんが
見た感じが同じ
VBのコントロールってC+から使えないの?
>>564 じゃないけど、半透明の描画方法が分かりません。
猫でもに見当たらないんですが、誰か教えてください。
BitBltでSRC_PAINTとかで描画すればいいのでは。
>>616 ActiveXコントロール貼り付けでいけそう
その後でクラスウィザード起動したらCMSFlexGridというクラスが追加された
初歩的ですみませんが質問です。 Win32API を利用してフォントの情報を取得するにはどうすればよいでしょうか。 ウインドウや HDC が存在すれば LOGFONT を利用して取得できますが、 それらを使わずに取得したいと思います。 具体的にはフォントファミリーを指定することで、フォントが等幅かどうか知りたいのですが。
素直にメモリDC使え。
623 :
621 :2005/09/27(火) 21:14:47 0
>>622 CreateCompatibleDC がこのように使えるとは知らなかったです。
どうもありがとうございました。
>>614 おおおお。ホントだ。試しにやってみます。
検索したら、少ないけど登録の仕方が出て来ました。
サンクッス。
>>612 まずは落ち着いてMSDNちゃんと読め。
626 :
548 :2005/09/27(火) 22:00:58 ID:0
よろしくおねがいします
>>624 FlexGridはVisualStudio6には標準でサブセット版がつくけど、VC7.1にはつかないので要注意。
その場合、FlexGridProを買うか、MSOfficeをインストールしていればExcel由来のGridControlを使うことになると思う。
>>548 FindFirstChangeNotification
とかじゃないか?
629 :
548 :2005/09/27(火) 23:25:31
おお, こんなAPIがあったとは 628さん ありがとうございます
タイトルバーやメニュー部分まで オリジナルのデザインのウインドウというのはどうやって作っているのでしょうか? ポップアップウインドウにして ポインタの座標を取って地道に処理の追加をやっていくのでしょうか?
だね
633 :
631 :2005/09/28(水) 02:03:58
634 :
デフォルトの名無しさん :2005/09/28(水) 03:58:51
>>631 タイトルバーは WM_NC* をごにょごにょするんだと思うお。
メニューは知らん。
>>631 メニューもある程度ならオーナードローできる。
メニューウィンドウを非矩形にしたいとかなら、自分で
メニューエミュレートだと思う。
APISPY32系のツールでお勧めはありますか?
APISPY32
自分のウィンドウのが表示されているときのクライアントエリアに相当する部分の 非表示時のビットマップデータを取得する簡単な方法はありますか? 目的はリアルタイムにビットマップを取得してその都度加工して表示することです 現在考えている方法はSetWindowPos-SWP_HIDEWINDOWとして デスクトップのDCを取得し、BitBltでメモリDCに保存してウィンドウ復元>加工>描画と言うものですが ウィンドウをSetWindowPosの度に再描画されてあまりスムーズに見えなそうな気がしています
ダイアログの上にリストビューを作ったんですが、クリックしても全く反応しません。 どうやったらいいのでしょうか?教えて下さい。
どうやったらいいんでしょうねえ。
642 :
デフォルトの名無しさん :2005/09/28(水) 18:56:55
よく再起動のメッセージなどで、「30秒後にwindowsを終了します」みたいなメッセージボックスが出て カウントダウンされていくのがありますが、普通のメッセージボックスでもできるのですか?
>>638 クライアントエリアのビットマップを取るのになぜデスクトップのDCと思うのがすっげー不思議
>>639 リストビューを作ったけどなにもデータ入れてないとかじゃねーの?
>>644 > 自分のウィンドウのが表示されているときのクライアントエリアに相当する部分の
> 非表示時のビットマップデータを取得する簡単な方法はありますか?
>>646 それはあれ?
ただ背景をクライアント領域に表示するのが目的?
それとも、DCとか使ってクライアント領域が隠してる背景を取得するのが目的?
>>648 後者ですね、フィルタをかけて表示するつもりです
650 :
639 :2005/09/28(水) 19:53:14
>>644 データは入っています。
それと、操作を受け付けない原因が分かりました。
タブコントロールの上に乗っていたのが問題だったようです。
どうやったら解決するかはまだですが、やっと前に進んだ・・・・・
>649 それはレイヤードウインドウでは解決できない?
かけたいフィルタにも寄るかと
>>651 よくわからんのだが、削除ってのはどのタイミング?
WM_CLOSEの処理?それともDestroyWindow(hChdWnd)呼んだとき?
ウチのWin2kSP4だと再現しないなあ。
バックグラウンドにはなるけど、これは自力で処理しない限りどうしようもないはず。
ChildProcのWM_CLOSEの処理の表示メッセージと処理内容が
一致してないけどいいのかな?
少なくとも最小化はしない。
現象をもう一度確認して、デバッガで追っかけてみては?
リストビューでLVS_EDITLABELSを指定し編集をする時、iSubItemの0番目しか編集出来ないのでしょうか?
656 :
655 :2005/09/29(木) 16:24:44
ロクに調べずごめんなさい。自己解決しました。 ググったら、出来ないって出てきました。 リストビューを編集したい分だけ並べて、見た目は1つに見えるようにします。
>>656 メッセージをうまくトラップして任意のカラムを編集できるように見せかける応用はCodeGuruを探すと出てきますよ。
私も作ったし。
#但しMFC。
659 :
651 :2005/09/29(木) 18:16:37
>654 スマソ。早とちりでした。 最小化ではなく非アクティブになって他のウィンドウに 隠れてしまうという現象でしたが、 SetActiveWindowでなんとかなりました。 原因はよく分かりませんが、ありがとうございました。
スレ違いのような気もしますが妥当なスレがないのでここで質問させてください。 *.def ファイルを書いて *.dll から *.lib ファイルを作りたいのですが、 複数の *.dll ファイルを指定する方法はありますでしょうか? LIBRARY の行を複数書いたり、複数の dll を指定したりするとエラーを吐いてしまいます。
複数DLL>単一LIBを作成するってこと? それなら出来ないんじゃないの。 複数DLL>複数LIBならやりようはいくらでもあるだろうけど。
うーん・・・ 某所で入手した lib ファイルを覗いてみると複数の dll の関数名が書いてあるようなので できるとは思うんですが。
なんでその某所を書かないんだ
timeGetTimeが常に同じ異常な値($B??????? 詳しくは忘れました)を返すのは、 どういった原因が考えられますか?
665 :
660 :2005/09/30(金) 07:46:43
>>664 timeGetTimeの戻り値を確認するのに文字列っておかしくないか?
どんな確認方法よ。
>>664 それって、正しいDWORD値のダンプを見ているだけジャマイカ。
戻り値はmsec単位だから下のほうはすぐ変わっても上のほうはそうそう変わらんわけだし。
ACPIからCPU温度を取ってくる方法って誰か知らない?
誰か教えてください。 今、デュアルディスプレイで、スクリーンショットを取るプログラムを 作ろうと思っているのですが、どうもプライマリディスプレイだけしか スクリーンショットがとれないのです。 セカンダリディスプレイとプライマリディスプレイ両方の画面情報を 一つの画像としてとる方法ないですか?
プライマリとセカンダリは別の解像度に設定できるが その場合どうするつもりだね?
>>665 それはD言語のライブラリアンが作る独自形式。
拡張子は同じでも互換性はまったくない。
>>670 基本的には同じ解像度でやりたいと思ってます。
できれば違った解像度に設定された場合についても教えてもらえたらうれしいのですが
IME の変換中の背景色を変える方法をご存知の方、教えていただけませんか? RichEdit では出来るようなのですが、自前の View でやりたいのです
>>672 GetDC(NULL)で全仮想スクリーンのDCが取れる
675 :
664 :2005/10/01(土) 00:07:12
>>666 えっと、戻り値を16進数の文字列でデバッグしたのです。
>>667 $B??????? msほど長時間使ってませんし、 いつ呼び出しても常に同じ値が返ってきたのです。
再コンパイルしても同じでした。
ゲームでこれでフレームレートの管理をしていて、無限ループに陥りました。
でも、次にPCを起動したら直っていて、再現できません。
あと、色々やってた中で、 GetTickCount の方は正しい値を返してたと記憶してます。
676 :
660 :2005/10/01(土) 01:53:05
>>671 そうですか・・・
どちらも def ファイルに書くので互換性があるかもと思ったのですが。
面倒にはなりますが複数 lib をつくれば済む話なのでそうしようと思います。
どうもありがとうございました。
>>673 IME周りのメッセージをDefWindowProcに渡さずに自前描画。
>>675 ってことは再現してないのか…
timeBeginPeriod/timeEndPeriodは?
メニューみたいなものを作りたいと思っています。 ところがポップアップウインドウを表示すると、フォーカスを奪ってしまうため親ウインドウが非アクティブ状態になってしまいます。 このような挙動をしないウインドウを作成するためにはどうすればよいでしょうか。 WS_POPUP、 WS_EX_TOOLWINDOW、 WS_EX_TOPMOST あたりを試してみましたがうまくいきません。
コントロールにすれば?
WM_WINDOWPOSCHANGINGハンドラでSWP_NOACTIVATEフラグを立てる
ツールバーにする。
ある画像ファイルがあります。この画像ファイルは 64×64ピクセルの正方形の画像です。 この画像ファイルを90度時計回りに回転させて 表示するにはどうしたらよいのでしょうか? 「┳」を90度時計回りに回転させて「┫」のように表示したいのです。 あらかじめ回転させておいた画像を別に用意することも考えましたが、 90度、180度、270度と別に用意する画像があり、画像の容量が4倍に なってしまうため、画像を別に用意するのは止めにしました。
>>683 自前でビットデータを配置しなおしてください
>>683 素直にgdiplusのgraphicsクラスなどを使う。
>>683 D3DXMatrixRotationZとかglRotateとか
BitBltでぐるっと回す
BitBltだけで回転などできませんよm9(^д^)プギャー
ディスプレイを回す
>>690 WinAPIにディスプレイを回す関数はないぞ。
いきなり回ったらマジコワスw
CDトレイ勝手に開くだけでも怖いのにディスプレイまで回ったら俺のちんちんおっきしちゃうよ
開け方教えてくれ
ACPI
mciSendStringか。おもれーww
マウスを自走させる為の規格でも策定してみるかい?
お前らそんなに俺を勃起させたいのか
>>699 を勃たせるAPIをおしえてください!><
とりあえずCD開閉ネタはジョークアプリで使おうっと。
そうなの? 疑似シリーズあたりでは見たこと無い。
>>698 自走型マウスはどっかで見た。
この際だから TCP/IP 上でマウス動かすプロトコル作って、RFC に投稿するとか。
inpo DoBokki(inpo, inpo, ...);
inpoだと多分コンパイルエラー。
void Erect(chinpo); だろ
709 :
678 :2005/10/01(土) 21:55:23
>>681 情報サンクスです。
でもその通りにしてもやっぱりフォーカスを奪ってしまいます。
SWP_HIDEWINDOWやそのほかのフラグはちゃんと動作するのに・・・
SendMessage(hWnd699, WM_VIAGRA, NULL, NULL);
Netscapeみたいに起動直後にタイトル(タスクバーに表示されないウィンドウ(?))を どーんと出す方法を教えてください。
どーん!
714 :
デフォルトの名無しさん :2005/10/01(土) 22:44:47
715 :
711 :2005/10/01(土) 22:58:50
>713-714 サンクスです!
716 :
デフォルトの名無しさん :2005/10/01(土) 23:01:58
一般人てことは会社員だろ、自分の会社名で申し込めばいいじゃん。 自称一般人なら、自分の会社でっちあげたら?どうせ海外だしそこまで調べねぇよ。
parsonalとでもかいとけば?
personal だろ
>>678 WS_VISIBLEを指定しないでウィンドウをCreateし、
その後、SWP_SHOWWINDOW と SWP_NOACTIVATE を指定してSetWindowPosしたらどう?
721 :
664 :2005/10/02(日) 00:02:15
>>677 プログラム起動時に
timeBeginPeriod(1);
とし、終了時に
timeEndPeriod(1);
とやってます。
あと、思い出した事は、
別のプロジェクト(ゲーム)でも無限ループに陥ってました。
念のため、起動時にtimeGetTimeが正常に動作するか確認するかどうかで迷ってます…。
722 :
678 :2005/10/02(日) 05:02:19
>>720 できました!どうもありがとうございました。
723 :
683 :2005/10/02(日) 09:09:23
>684-688 の皆さんありがとうございます。 BitBltと回転行列で実現できそうです。 690さんは・・・
ATi CATARYSTの左90度回転機能実行させるAPIとDell UltraSharp2001FP HASを左90度回転させるAPIを教えてくだしあうぇrtふygbhにmじょk、l。「;
>>723 Direct3Dを使わずDC経由でのみ画像にアクセスするアプリなのであれば、GDI+を使うべきだと思うよ。
アンチエイリアス効果が使えるので、縮小拡大画像も綺麗に見せることができる。
GDI+はハードウエア支援が絶望的だけどね
DC経由で操作する古典的なアプリで、ハードウェア支援とか言い出すのもどうかと思う。
>>726 君は詳しそうだね。
まずは、ハードウェア支援があるDC用のWin32API関数を列挙してくれない?
ハードウエア支援=ハードウエア依存
という現実を無視する
>>726 に幸あれ。
俺は、ビデオドライバの入替や、最新DirectXのインストールをユーザに求める度胸はないな。
俺はプロフェッショナルな
>>726 と違って腰抜けなので、配布物にgdiplus.dllを添付する仕様にするね。
スタティックリンク出来るならGDI+使ってあげてもいいのに
vistaからはGDIは全てソフトウェア処理になるそーだ GDI+もそうなんだろうか
DirectX10でググってたらこんなの出てきたよ If your graphics card is using the new Vista driver model then GDI/GDI+ has *NO* hardware acceleration. In practise this shouldn't be a big deal since the CPUs are so darn fast these days. ハードウェアアクセラレートがあるっていうから勉強してたのに もうGDI+使わねーよヽ(`Д´)ノウワァァン デマ流してた奴でてこーい
735 :
690 :2005/10/02(日) 12:52:05
>>723 褒め称えてくれてかまわんよw遠慮すんなってww
さてはツンデレか?
BitBltの速度検証はエロゲ葱板で数年前に検証してたはず。 結論はビデオカードにによって速度が全然違ってたような‥‥
ドライバ次第
日進月歩のこの世界で数年前の検証の意義は微妙じゃね?
>>734 その訳だと、「現状のvistaドライバは未対応だ。」って言ってるようにもみえるね。
ま、どっちにしろCPUが高速になっているから、2D環境でのハードウェア支援はあまり要らんだろ。
>>739 「新しいvistaのドライバモデルでは」じゃないの?
Vistaドライバモデルではハードウェア支援を受けられないけど 最近のCPUは高速になってるから大したこと無い。 ってことか。
LDDMのことですね ゲームの場合だと古いドライバモデルを使ったほうが速いなんてことも発生するのかな
一番重要なのは、GDI+だけでなくGDI全体がソフトウェア処理されるって部分だろ。 つまり、DirectXを使わないアプリは、すべてソフトウェアレンダリングってこった。
744 :
743 :2005/10/02(日) 15:55:38
あ・・WindowsMedia関連はどうなるのかねぇ。 WindowsMediaはDirectXやDirectShowとは別の独立した存在だし。 どっちにしろGDIじゃないからハードウェアサポートありだろうけど。
低スペックPCにVISTA入れる奴が悪い
そもそもVistaではGDI切り捨てるというか、2Dは切り捨てだと言ってなかったっけ? 全てを3Dに移行するというのを見た記憶があるが
>>746 2D切り捨てたらビジネスアプリはどうなる?
2D描画も3Dハードウェアで描画するってだけだろ。
>>747 ビジネスアプリに限らず、HDC型を用いるレガシーのAPI全般が影響を受けるでしょ。
>>747 だからそう書いてるじゃまいか
誤解したなら俺の書き方が悪かった
>>749 つまりは、排他フルスクリーンでないアプリケーション全てってことになるな。
752 :
673 :2005/10/02(日) 16:37:43
>>677 レスありがとうございます。
自前ですか・・・。頑張ってみます。
>>728 何か勘違いしているようだが、GDIは元々ハードウェア支援がある。
S3全盛期の頃はビデオカードの機能といえば、GDIのアクセラレーションだった。
DDBなんて面倒な方式を使っているのは、そのためでもあるんだし。
スレ違いと知りつつ言ってみるが、UNIXのX Window Systemで ハードウェアアクセラレーションをオフにすると、2D描画も 非常に遅い。2D描画もVGAチップの恩恵を受けてる。
そもそもOSが違う 帰れ
んじゃディスプレイのプロパティ>設定タブ>詳細ボタン>トラブルシュートタブ>アクセラレートOFFにしてみれ
こりゃ遅い
>>756 m9(^д^)PGYAAAAAAAAAA
>>753 S3とか懐かしい・・・初めて買ったマシンが864だったよ。
メモリなくてDOSでしか使ってなかったけど。
>>756 試してみたが、あんまり遅くならんな。
セーフモードで起動したxpはウィンドウがうねるのが見えてたが、
標準VGAドライバはアクセラレーション全部OFFなのかな?
XPのセーフモードで、高解像度になるなら、それはVESA BIOSを使ってるわけで、 解像度の変更と、フラットメモリアクセスくらいしか提供されない。
あるWindowの子Windowをスクロールさせる処理を作っているんだけど、SetWindowEx()に SW_SCROLLCHILDを指定すると表示がちらつく。 メッセージを追いかけてみると、WM_ERASEBKGNDが送られている。 Windowの表示位置が変わるとシステムがWM_ERASEBKGNDを送ってしまうらしいんだが、 これを抑止する方法知ってたら教えて。
>761 > あるWindowの子Windowをスクロールさせる処理を作っているんだけど、SetWindowEx()に > SW_SCROLLCHILDを指定すると表示がちらつく。 すまん。間違えた、 ScrollWindowEx()にSW_SCROLLCHILDRENを指定すると だった。
子WindowのクラスのCS_HREDRAWとCS_VREDRAWはもちろんオフだよね?
>763 CS_HREADRAW,CS_VREDRAWは指定してないです。hbrBackgroundにもNULLを入れてます。
質問です。あるアプリのラッパDLL内で
親アプリのウィンドウハンドルに関連付けてAVISaveOptionsを呼んだら
http://rerere.servebeer.com/src/up20317.jpg こんな感じにデフォルトでウィンドウが画像ベース?になってしまい
特定のコーデックの設定画面が切れてしまいます。
そこで試しにDLL内でDLLのインスタンスを使ってCreateWindowExをして
空のウィンドウAを作り、そのウィンドウハンドルに関連付けて
AVISaveOptionsを呼んでみたのですが、変わらず↑のような画面が出てきてしまいます
(ShowWindowでウィンドウAを出して見たところ、画像ベースでない普通のウィンドウでした)
おそらく親アプリが事前に何か悪さしてるのであろうと考えているのですが、
MSDN内を探したりgoogle先生に聞いてみたりしましたが、解決法を見つけることができませんでした。
↑のように作ったウィンドウを自動で画像ベースにするようなAPIは存在するのでしょうか?
>>765 さっぱりわからないが勘で答えてさしあげよう
それはテーマってやつでテーマをOFFにすれば解決だね。
768 :
デフォルトの名無しさん :2005/10/03(月) 15:41:49
test
769 :
デフォルトの名無しさん :2005/10/03(月) 16:03:58
フォーカスがボタンにいってるから 試しに他のウィンドウクリックして戻ってから左押してみて。
771 :
769 :2005/10/03(月) 17:18:50
>>770 さん、どうもありがとうございます。
一度ほかのウィンドウに行ってから戻ってくるとキー入力復活しました!
でも毎回この操作をやるわけにもいかないし、
キーボードとボタンの併用は相性悪いんでしょうか・・
フォーカスでググったら
::SetForegroundWindow(hWnd);
って関数が見つかったので色んなところで呼んでみたのですが、
どうもうまくいきませんでした。
ボタンの処理が終わった後、フォーカス?をボタンから離す方法はありませんか?
連続質問ですみませんが、どうかお願いします m(__)m
フォーカス移動させるのもいいけど ボタンのサブクラス化したら?
>>617 ですが、マスク画像を半透明に描画したいのです。
どうすればいいでしょうか?
ラスタオペレーションで何とかなりませんか?
なりません
>>773 半透明用のマスク作って、ANDとかXORのROPをかければいいんじゃない?
776 :
769 :2005/10/03(月) 17:56:04
>>772 サブクラス化でググってみましたけど、
私のレベルでは難しそう (T_T
フォーカス移動は
::SetActiveWindow(hWnd);
関数でも無理でした orz
>>773 私は使ったことありませんが、
::AlphaBlend()関数で半透明になるという噂が。。
嘘情報だったらすみません。
あ、あと、DIB作って貼り付け先画像と合成すれば半透明は可能ですよ。
777 :
775 :2005/10/03(月) 17:56:57
ちと修正。 ・半透明用のマスク→画像とは別の半透明用のビットパターン
SetFocusくらい察知できるようになろーぜ
779 :
769 :2005/10/03(月) 18:00:51
>>778 キタ*・゜゚・*:.。..。.:*・゜(゚∀゚)゚・*:.。. .。.:*・゜゚・*!!!!!
うあ、できました! 激しく激しく感謝!!
ボタンの終わりに呼んでしまってもいいんですよね。
780 :
773 :2005/10/03(月) 18:53:43
>>775 BitBlt(hMem , 100 , 10 , 32 , 32 ,
hBkMem , 96 , 0 , SRCAND);
BitBlt(hMem , 100 , 10 , 32 , 32 ,
hBkMem , 64 , 0 , SRCINVERT);
SRCANDの方にはグレーの半透明用のマスクが、
SRCINVERTの方にはその画像が指定してありますが
色が反転してしまってしまいます。
どうすればいいでしょうか?
>>776 AlphaBlend()調べて使ってみましたが、
ラスタオペレーションの設定が分かりません。
半透明になってちょっと感動しましたが、
マスク画像は表示できないのでしょうか?
反転させたいからSRCINVERTにしてんじゃないの?
全力で間違えた。馬鹿な
>>781 に触らないであげてくださいorz
783 :
773 :2005/10/03(月) 19:40:49
DirectX(DirectDraw)ならマスク画像を半透明にする事もできますかね?
>>773 だからBitBltでラスタオペレーションじゃ無理だって言ってるだろ
半透明=アルファブレンドしたいんなら、上で出てるAlphaBlend関数だ
んで、AlphaBlendにはラスタオペレーションは無い
DirectDrawはマスク画像など使わない
>>773 >マスク画像は表示できないのでしょうか?
発想の転換というものをしてみましょう
透過処理をするのだから、マスクしたいところをアルファ0で描画すればいいだけだろ?
786 :
773 :2005/10/03(月) 20:03:29
>>784 分かりました。
率直な回答ありがとうございます。
>>785 つまり1ピクセルずつピクセルビットから
読み込んで表示汁という事ですか?
透過色(抜き色)ではいかんの?
788 :
773 :2005/10/03(月) 20:21:02
>>787 具体的にどういう事ですか?
くやしく教えてください。お願いします。
>>786 アナタ、32bitBITMAPデータというものを知りませんか
ていうか、アルファブレンドって何かわかってますか
790 :
773 :2005/10/03(月) 20:36:41
>>789 すみません。AlphaBlendは軽く調べただけで
どういう事ができるのか、どういう機能が備わってるのか
具体的には分かりません。
正直ぐぐっても、丁寧な説明が少なくてよく分からず、最後の引数に
至ってはほとんど何も分かりませんでした。
あれだろ、あたらしいブレンド米の名前だろ?
違う。ネスカフェ・アルファブレンド。
794 :
773 :2005/10/03(月) 21:08:36
空気読めなくて悪いけど AlphaBlendなら可能って事ですね。 お世話になりました。
795 :
773 :2005/10/03(月) 21:15:10
>>793 うはwwwwwすみませ。ありがとうございます
ああなるほど。背景ブラシがNULLなのにWM_ERASEBKGNDのせいでチラつくって なんかおかしいと思ってた
798 :
762 :2005/10/04(火) 19:32:14
>796 WS_CLIPCHILDRENを指定してます。 >797 いや、背景ブラシがNULLなのは親Windowなんですよ。 子WindowにWM_ERASEBKGNDが飛んでいて、子Windowが背景を消去している。 「スクロールして新たに現れた領域」だけを再描画すればよいのに、なぜか子Window全体の 再描画指示がOSから送られてくるので、どうしたもんかと。
>>798 思い出したが昔、子ウィンドウを一緒にスクロールさせるのに、
クライアントの上にもう一枚スクロールサイズと同じ大きさのウィンドウを被せて
その上に子ウィンドウを配置して、
スクロールさせるときは、クライアントに被せたウィンドウをMoveWindowなんかで動かす
と言うことをした覚えがある。
これだと子ウィンドウがちらつくことは無かった筈…なんだがもううろ覚え
E・∇・ヨノシ <800ゲット♫
>799 なるほど。試してみます。
802 :
デフォルトの名無しさん :2005/10/05(水) 19:29:23
CreateThread関数(_beginthreadex)なんですけど、 _beginthreadex(NULL,0,thread,NULL,0,&thID); で、関数に渡すスレッドの引数のパラメータを第4引数に指定するとあるのですが、 どうやって渡せばいいのでしょうか・・ unsigned __stdcall thread(FILE *in); main(){ FILE *in _beginthreadex(NULL,0,thread,in,0,&thID);と指定してもエラーを吐いてしまいます('A
>>802 unsigned __stdcall thread(void *in);
にしてみれ
InitializeCriticalSectionAndSpinCount の使い方を教えてください。 スピンカウント?
そんなもん不要 ポーリング最強
>>802 キャストしてしまえばいい。
_beginthreadex(NULL, 0, (unsigned (__stdcall *)(void *))thread, in, 0, &thID);
>>802 まぁ、あれだ。
まだマルチスレッド使うのは時期そうしょう(なぜか変換できない)ってことだ。
ちゃんとC勉強してからにしろ、な。
尚早
ATOKなら「じきそうしょう」でも変換できるけどな。
813 :
664 :2005/10/05(水) 23:28:11
>>664-722 timeGetTimeが常に同じ値を返す問題ですが、 再現性がありましたので報告いたします。
timeGetTime が返す値は 0xBFE561FD で、 これは timeGetTime の開始アドレスでした。
timeGetDevCaps の TimeCaps.wPeriodMax は 0xBFE56225 で、 timeGetDevCaps の
開始アドレスでした。
再現方法ですが、 先ず、 DirectX と MMTimer を使うアプリと、
MMTimer のみ使うアプリがあるとします。
OS起動後、MMTimer のみを使うアプリを先に一度でも実行すると、
その後どちらのアプリでも timeGetTime は正常なのですが、
DirectX と MMTimer を使うアプリを先に実行すると、
どちらのアプリでも timeGetTime は自身の開始アドレスを返すようになります。
正常な時のtimeGetTimeのアドレスと異常な時のtimeGetTimeのアドレスは同じ? 何かヘンなdll呼んでないかなぁ… ちなみにdllのロードは静的?動的?
>>813 printf("%X", timeGetTime);
じゃねーだろーな?
817 :
664 :2005/10/06(木) 03:16:16
>>814 アドレスは同じで、DLLは静的ロードです。
読み込んでいるDLLも動いているプロセスも、正常時と異常時で同じでした。
また色々したところ、DirectXを使わなくても異常になりました。
再起動しても異常だったり、正常だったりします。
関数の開始アドレスを返すのは確実なので、これで色々探してみます。
>>803 なるほど渡す型はLPVOIDですから、受け取る側もLPVOIDにしなければならないのですね。
void* inに修正した所、無事受け取れたのですが・・
inはFILE*ですけど、関数に渡す時にはvoid*と表現されてますんで、例えばin=fopen("test.txt","r");
とする場合(FILE*)inとキャストしなければならないのです。
これはもう宿命でしょうね・・
>>818 それは仕方ない。スレッドで受け取る引数は絶対使う型にキャストしないといけない。
>>804 マルチプロセッサじゃないと意味ないばかりかCPUの無駄
>>818 最初にFILE *の変数に代入してしまえばいい。
unsigned __stdcall thread(void *Param)
{
FILE *in = (FILE *)Param;
>>817 そんな話初めて聞いたから、君のプログラムがしょうもない
間違いをしているのではないかと思うが。
823 :
デフォルトの名無しさん :2005/10/06(木) 14:02:04
先生_beginthreadexなんですが、、('A`) MSのヘルプでは・・・ unsigned long _beginthreadex( void *security, unsigned stack_size, unsigned ( __stdcall *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr ); んでarglistに渡す引数のリスト(無い場合はNULL)とあるのですが、 void* arglistというのは抽象過ぎて意味がわかりません。 いろいろ調べて考えて弄ったんですが、やっぱり意味がわかりません('A`).. これはスレッドに渡す引数は配列にしなさいよーっつーことですか?
すみません、問題も抽象過ぎました スレッドが扱う関数に複数の引数を渡したいのです
cのmainのargvと同じだろ
構造体にでもまとめて、そのアドレス渡す。
はぁ、構造体で渡しますか.. イマイチスレッドは扱いにくいですね
構造体で渡した方が融通利くと思うが…。 扱いにくいかねえ。
構造体をスタックに置いたりして
別に配列でもいいけどな まぁ、まとめて渡せってこった
だから引数の「リスト」なんだろ
832 :
デフォルトの名無しさん :2005/10/06(木) 14:58:23
ホイールマウスのホイールの回転の取得法を教えてください。
arg = 引数 list = リスト
835 :
デフォルトの名無しさん :2005/10/06(木) 15:09:57
>>820 シングルプロセッサだと無視されるから無駄にはならん。
まあ、最適な回数は、実際に試してみるしか、確実な方法がないのだけれど。
マルチスレッドでVfWを扱いたいのですが どうもAVIFileInit()が内部的にCOMを使ってるみたいでうまくいきません。 流れ的には 親プログラム開始→AVIFileInit→特定のキーが押されるとスレッドAを作成 →フラグAがOnになるまでループ →フラグAがOnになったらスレッドAのハンドルを閉じてAVIStreamWriteでデータを書き込み→全部書き込んだらAVIFileExitして終了 スレッドA開始→AVIFileOpen&AVIFileCreateStreamで書き込む為のストリームを形成 →AVISaveOptionsで圧縮設定を受け取る→AVIMakeCompressedStreamで圧縮ストリームを作成 →フラグAをOn→終了 こんな感じなんですが(エラー処理とかは端折ってます)このままだとスレッドAのAVIFileOpenで CoInitializeは呼び出されてませんと怒られて失敗し、次のAVIFileCreateStreamでエラー起こします。 そこで親プログラムの最初のAVIFileInitをスレッドAの最初に持っていったのですが、 今度は親プログラムのAVIStreamWriteでCoInitializeは(ryと怒られて割と八方塞がりです。
>>837 あー最初俺もそれでハマッタなぁ。
複数のファイルストリームに同時に書き出すの作ってて。
結局VfW関係は専用のスレッドに全ての処理を集めて作ったよ。
全て外部からのシグナルで制御するようにしてた。
その後DirectShowでリライトしたけど、
最初からDirectShow使って置けばよかったと後悔した。
for (iYPos = bmpInfo.bmiHeader.biHeight - 1 ; iYPos >= 0 ; iYPos--) { for (iXPos = 0 ; ; iXPos++) { if (iXPos > (bmpInfo.bmiHeader.biWidth - 1)) { iCount = iLine * WIDTH_BYTE; iLine++; break; } if(bPixelBits[iCount + 2] == 0 && bPixelBits[iCount + 1] == 0 && bPixelBits[iCount] == 0) iCount += 3; else {AlphaBlend( hMem,iXPos , iYPos,1,1,hBkMem,iXPos , iYPos,1,1,bf); iCount += 3; } } } AlphaBlendを使った半透明処理なんですが、 BITMAPを1ピクセルずつ確認して黒なら無視、それ以外ならAlphaBlendで描画 というコードです。 AlphaBlendを何十回と呼び出しているので、動作も遅いと思います。 これ以上早いマスク画像の半透明描画があるなら教えてください。お願いします。
>>839 おまえそれ、1ピクセルずつ処理するんならAlphaBlendなんか使う必要無いだろ
842 :
デフォルトの名無しさん :2005/10/07(金) 08:04:50
すいません、 BitBltで画面をキャプチャーするソフトを作っているのですが、 どうしてもマウスカーソルがキャプチャーされないのです。 どなたかマウスカーソルもキャプチャーする方法をご存知の方いらっしゃいませんでしょうか?
キャプチャ時に現在のカーソル位置と形状取得して自分で描け。
BitBltでマウスもキャプチャーは無理
845 :
デフォルトの名無しさん :2005/10/07(金) 09:04:08
>>843 それだと使っているアイコンの種類によってはちがうもの書いてしまうこともあるでしょうし、
>>844 BitBltつかっちゃうと無理ってことは、
たとえば操作説明用にマウスカーソル付きで画面キャプチャー撮るソフトって
どうやってやってるのか分かりませんか?
847 :
デフォルトの名無しさん :2005/10/07(金) 09:49:14
>>846 それだとCursor関数を使って独自のマウスカーソルを表示していた場合
GetCursorはあくまでもハンドルを返すのでそれと同じものを描画できなくないですか?
>>836 EnterCriticalSection による STATUS_INVALID_HANDLE 例外の
防止にも使えるんじゃない?
Win32 APIのGetPrivateProfileStringについて 質問があります。 GetPrivateProfileStringを続けて2回コールした場合に GetPrivateProfileStringの最後の引数のファイル名が 勝手に拡張子を除去して引数のファイル名を返却してくるので 2回目のGetPrivateProfileStringのコールでエラーとなってしまいます。 (引数のファイル名は変数にファイル名を格納したものを渡しています。) GetPrivateProfileStringは引数のファイル名を勝手に拡張子をはずして返す仕様になっているのでしょうか? Win32 APIの宣言で引数のファイル名はByValになっているのですが。 ご存知のかた解決方法をご教授願います。
>>847 GetCursor()+DrawIconEx()
しのごの言わずに、まずは試してみろ。
> GetPrivateProfileStringは引数のファイル名を勝手に拡張子をはずして返す仕様になっているのでしょうか? んなわきゃない。LPCTSTRだから、変更しないのが仕様。 変数のサイズが悪いんじゃないか?プログラムを疑え
852 :
デフォルトの名無しさん :2005/10/07(金) 11:35:36
>>850 DrawIconEx frmAAA.Picture1.hdc, 0, 0, GetCursor, 0, 0, vbNull, 0, 3
これでためしましたがやはりデフォルトのマウスカーソルが表示されるだけでしたね
http://ad-soft.hp.infoseek.co.jp/ ここのHPのマウスもキャプチャーというツールはしっかりキャプチャーできているようですが
APIだけではやはりむずかしいもんなんでしょうかねぇ
>>849 >GetPrivateProfileStringの最後の引数のファイル名が
>勝手に拡張子を除去して引数のファイル名を返却してくるので
しません。
>(引数のファイル名は変数にファイル名を格納したものを渡しています。)
ソース晒して味噌。
>>851 VBらしいよ。
856 :
デフォルトの名無しさん :2005/10/07(金) 13:52:29
>>854 VBに書き直して使ってみたらばっちりできました!!!
助言ありがとうございました^^
ちょっと重い処理中は、WM_MOUSEMOVEの発行が途切れ途切れになりますよね。 そのためWM_MOUSEMOVE時の値を使って何かしていると、 その処理がマウス座標的に「コマ落ち」になってしまい困っています。 これを何て言うかシューティングゲームで言うところの「処理落ち」にしたいのですが、 何か良い方法があったら教えて頂けないでしょうか。 今のところ思いついたのは、途切れ途切れのマウス座標をスプラインにして補間、くらいです。 が、バカなので出来れば複雑な処理は避けたいところです。
重い処理はなるべく別のできれば相対的に優先度の低いスレッドに処理させましょう。
なるほど、別スレッドを使えば良いんですね。早速やってみます。 シンプルかつ有効な回答ありがとうございます。
>>838 うーんやっぱりそれしかないですかね。
VfWはマルチスレッドに対応してないとこでも
もう古臭い技術なのかもしれませんね…
case WM_CLOSE: id = MessageBox(hWnd, "終了してもよろしいですか", "確認", MB_YESNO | MB_ICONQUESTION); if (id == IDYES) { if(!KillTimer(hWnd , 1)) MessageBox(hWnd , TEXT("Error") , TEXT("KillTimer Error") , MB_OK); DestroyWindow(hWnd); } break; : : wsprintf(str , TEXT("gametime %d") , gameTime); TextOut(hMem , 200 , i*5 , str , lstrlen(str)); 終了時のメッセージに"終了してもよろしいですか"とあるのですが 結果はメッセージボックスの本文に"ime 0"と表示されてしまいます。 なぜでしょうか? 教えてください。お願いします。
862 :
861 :2005/10/07(金) 16:37:34
スマソ。事故解決しますた。 mallocでメモリの確保してなかったぽいです。
863 :
デフォルトの名無しさん :2005/10/07(金) 16:47:21
>>863 kernel32.libやらの有るディレクトリにパスは通ってるのか?
>>863 比較的新しいAPIだからPlatform SDKを入れないといけないんジャマイカ。
Platform SDK February 2003までだよな、VC6.0対応は。
少なくとも、CreateTimerQueueはWin2kからのサポートだろ。 #define WINVER 0x500 なり #define _WIN32_WINNT 0x500 はやってあるんだろうね?
追加 CreateWaitableTimerはNT4.0からのサポート(MSDNより) こちらは最低限 #define _WIN32_WINNT 0x400 が必要なはず。
キャプチャ野郎は正直な話スパイウェアを作ってんじゃないかとハラハラしている俺がいる。
870 :
デフォルトの名無しさん :2005/10/07(金) 18:38:36
>867, >868 ありがとうございます。 CreateWaitableTimer()はリンクできましたが、CreateTimerQueue()は駄目でした。 winbase.hを見るとCreateWaitableTimer()はあるのですが、CreateTimerQueue()は はないみたいです。 もう一度、SDK入れてやってみます。 ちなみに、CreateWaitableTimer()とCreateTimerQueue()の違いって何でしょう? 違いがないならCreateWaitableTimer()でもいいかと。
871 :
839 :2005/10/07(金) 19:18:04
>>841 1ピクセルずつならアルファ値を指定できる描画処理があるんですか?
>>871 1ピクセルずつ処理するんなら自前で透過処理書いた方が速いだろ、ってこと。
アルファ付きビットマップ使えばAlphaBlend一発だ。
誰か
>>863 のMAX1000スレッドという部分にツッコミをいれるべきじゃないのか?
スレッド1000個作ろうが個人のかってだろ
それ以前に、ハンドル待機関数の同時待機数が、 MAXIMUM_WAIT_OBJECTS 個に制限されている悪寒。 WaitFor〜()、MsgWaitFor〜()が該当する。 MAXIMUM_WAIT_OBJECTS の定義値は64。
876 :
839 :2005/10/07(金) 19:58:44
>>872 すみません。言ってることがわけわかめ。
アルファ付きビットマップなんて聞いたことないし、
自前で透過なんていったら1ピクセルずつ判別して描画するくらいしか思いつきません。
AlphaBlendにそんな機能ありました?
>>876 MSDNを100回でいいから読んでくれ
878 :
デフォルトの名無しさん :2005/10/07(金) 20:21:32
>873 1000スレッドと言うのは適当です。 要はサーバーですからある程度スレッドが上がることになりますが、 MAXどれくらいタイマーを同時に張れるのかが知りたいのです。 システム上制限があるのであれば、APIを使わずに自分でやるとか 他のやり方を検討する必要があるかなと。 自分で出来るのであればそれでも構わないのですが、 他にやり方あれば教えて下さい。
879 :
デフォルトの名無しさん :2005/10/07(金) 20:31:00
>875 すみません。 WSAWaitForMultipleEvents()も同じく64個の制限なのでしょうか。
>>878 >MAXどれくらいタイマーを同時に張れるのかが知りたいのです。
ドキュメントに制約は書かれていない。
したがって、君が人柱になって報告するべき。
>>876 おまえさんそりゃあ、教えてもらおうという態度じゃないべ
わからんならわかるように勉強しなされ
聞いたこと無いって言っても、そりゃ「アナタが聞いたこと無い」だけ
32bitビットマップでグーグル検索してみれ
>>879 今のヘッダは確か、こうなっている
#define WSA_MAXIMUM_WAIT_EVENTS MAXIMUM_WAIT_OBJECTS
884 :
839 :2005/10/07(金) 21:48:35
>>882 ごめんなさい。リアルで知らんかったです。
今まで苦労してBITMAPINFO構造体とか学んできただけあってか
アルファのあるビットマップが存在するとは思いませんでした。
ありがとうございます。吊ってきます。
>>884 そりゃあおまいさん、疑問を抱く姿勢というものが無いな
BITMAPINFO構造体知ってるんなら、多少疑問が出てきそうなもんだがな
RGBQUADのとこで
とりあえず、879は、WinsockFAQを見た方がいいな。
887 :
839 :2005/10/07(金) 23:30:01
>>885 え? 間違ってたらごめんなさい。
アルファ値ってRGBQUADのrgbReservedに指定するんですか?
0固定じゃ…くぁwセdrftgyふじこlp;@:「
>>887 RGBQUADの構成で考えると0固定だがな
実際のビットマップファイルのビットデータ構造見たことないのか?
BITMAPINFOではRGBQUADで書かれてるけど、
実際の構造はRGBTRIPLEで24bit構造
アルファ値加えて32bitにしたら、RGBQUADのReservedに相当する領域しか無いだろう?
890 :
デフォルトの名無しさん :2005/10/08(土) 00:03:33
CreateWindowEx でつくったウインドウの×ボタンを無効にするにはどうすればよいですか? dwExStyle や dwStyle で指定できるものなんでしょうか? それともウインドウをつくった後に、×ボタンへDisableメッセージを送って実現したりするんでしょうか?
891 :
890 :2005/10/08(土) 00:04:30
ちなみに dwStyle に WS_SYSMENU を指定しないと確かに×ボタンはなくなりますが、 一緒に最大化・最小化ボタンもなくなっちゃうので、これ以外の解決策でお願いします。
>>890 EnableMenuItem( GetSystemMenu( hWnd, FALSE ), SC_CLOSE , MF_BYCOMMAND | MF_GRAYED );
みたいな
> それともウインドウをつくった後に、×ボタンへDisableメッセージを送って実現したりするんでしょうか? いや、システムメニューに EnableMenuItem で Disable する
895 :
890 :2005/10/08(土) 00:19:54
>>892-894 うほー皆様ありがとうございます。
>>893 様のおっしゃる通り、ぐぐればすぐに見つかりましたね。。。
おかげさまで実現できました。ありがとうございました!
http://homepage2.nifty.com/spw/software/hideseek/ こういうツールってどういった仕組みで実現してるんでしょうか?
HideSeekでは、次のデータの表示及び削除が可能です
・OutlookExpressのアカウント情報(メール [POP3・HTTP・ IMAP]・ニュース・ディレクトリサービス)
・Outlookのアカウント情報(同上)
・ダイアルアップ接続(アカウント名・ユーザ名・パスワード・電話番号・デバイス・利用者)
・InternetExplorerの認証パスワード(アドレス・タイトル・ユーザ名・パスワード)
・InternetExplorerのフォーム入力データ(フィールド名・入力文字・アクセス日時)
・InternetExplorerのURL履歴(URL・タイトル)
・InternetExplorerの一時ファイル(ファイル名・サイズ・アクセス日時・アドレス)
・InternetExplorerのクッキー(ドメイン・アクセス日時・サイズ・ユーザ)
・最近使用したファイル及びプログラム
基本的にこういうのってあんまり簡単にゲットできてほしくないんだけど。
APIフックやりたいんだが AdvencedWindowsのサンプルプログラムXPじゃちゃんと動かねーよ。
"API Hook" でためしにぐぐってみた。 スゲーいっぱい出てきた。
>>こういうツールってどういった仕組みで実現してるんでしょうか? 実現方法をここに書く。そこで見た人間全てが取得方法を知る。 >>基本的にこういうのってあんまり簡単にゲットできてほしくないんだけど。 簡単にゲットされたくないんだろうから、仕組みは書かないほうがいい。 さぁどっち?
900 :
839 :2005/10/08(土) 07:20:38
>>888-889 ありがとうございます。
しかし、D-Pixedで編集した画像をバイナリエディタで改変したのですが
いくらReservedの値を変えても変化はありませんでした。
なんででしょう? orz。
ダメだこいつ・・・ ファイルの仕様はおろか、使ってるアプリの仕様すら理解してないな
>>902 だからダメだこいつってんだ
ファイルの構造も、アプリの仕様も理解してねぇじゃん
出直してこい
ついでだ、 ビットマップ使うんなら、いくらフリーだからってD-Pixedなんか使うな
鼻血吹いた
まずファイル構造を勉強したほうがいいかと・・・
907 :
902 :2005/10/08(土) 09:04:13
すみません。お世話になりました。 自分で何とか調べてみます。
>>907 そんなこと言うなよ寂しいじゃないか馬鹿。一回り大きくなって戻ってこいよ。
>>896 IEやOEがやってるのと同じことをしてるだけ
インターフェースを公開している時点でMSにも責任はあると思う
ファイルの構造ってか、基礎だよな。 Windowsをブラックボックス扱いしすぎてるんじゃないか?
>>910 しなけりゃしないで「秘密のAPI云々」と叩かれるし
913 :
デフォルトの名無しさん :2005/10/08(土) 11:45:47
フォルダを開きたいんですけど、関数とかないのでしょうか? ググっても出てきません。 WINAPIじゃないのかとも思ったのですが、あれは間違いなくWINAPIですよね。 あの、解凍ツールとかで、解凍したらフォルダのウィンドウが自動で開くじゃないですか。 あんなのをやりたいんです。
>>913 2コンのマイクに向かって「フォルダ開け!!!」と大声で叫ぶとOK
>>913 1.ShellExecute()を使う。
2."explorer.exe <フォルダ名>" でCreateProcess()かsystem()する。
好きな方をどうぞ
916 :
913 :2005/10/08(土) 12:01:54
>>897 欄外の注意事項もちゃんと読もう。
たしかWin2000の注意だったが、XPも一緒。
>>896 WNetEnumCachedPasswordsとかで検索してみ。
あとは芋づるにでてくる。
>>918 どうもありがとうございました。
・OutlookExpressのアカウント情報(メール [POP3・HTTP・ IMAP]・ニュース・ディレクトリサービス)
・Outlookのアカウント情報(同上)
・InternetExplorerの認証パスワード(アドレス・タイトル・ユーザ名・パスワード)
・InternetExplorerのフォーム入力データ(フィールド名・入力文字・アクセス日時)
の4つは分かりました。
最近使ったファイル、履歴、一時ファイル、クッキーなどは
普通にフォルダ内のファイルを列挙しているだけなのでしょうか?
IEの履歴とかはイマイチ取得方法が分からないのですが。
COM
921 :
デフォルトの名無しさん :
2005/10/09(日) 01:51:51 リストコントロールにエクスプローラ等からD&Dで アイテムを追加するのをIDropTargetを使って実装してますが リストコントロールの端の方にドラッグした時リストコントロールを自動でスクロールさせたいです。 そこでDragOverでDROPEFFECT_SCROLL捕まえてやれば出来るかと思いましたが DROPEFFECT_SCROLLが発生しません。 何が問題なのでしょうか。