1 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 03:39:51 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 C++Builder使いが優しくコメントを返しますが、 お礼はC++Builderの布教と初心者の救済をお願いします。 Borland Home Page www.borland.co.jp/ <過去スレ> くだすれC++Builder(超初心者用) pc8.2ch.net/test/read.cgi/tech/1117225464/l50 くだすれC++Builder(超初心者用)その2 pc10.2ch.net/test/read.cgi/tech/1144308804/l50 <兄弟スレ> くだすれDelphi(超初心者用)その39 pc10.2ch.net/test/read.cgi/tech/1169386914/l50
342 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 08:43:04 ] >>341 homepage1.nifty.com/MADIA/delphi/delphi_bbs/200703/200703_07030070.html
343 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 14:33:37 ] >>342 ありがとうございます。
344 名前:デフォルトの名無しさん [2008/01/02(水) 15:07:36 ] C++Builder2007のエディタの支援機能が誤作動してるみたいで、 改行するたびに余分な}が勝手に入力されるんだけど、これって直らないの? 誤作動するのは次のコードの前後からみたいだが。 char c[2]="\"";
345 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 23:31:40 ] QCには出てないね。登録を依頼してみたら?
346 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:33:14 ] Turbo C++ を始めようと思ったのですが、 .Net frame work v1.1のインストールができません。 WindowsXP SP2で、Windows Installerサービスは起動してます。 何か気をつけなければならない要素ってありますか?
347 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:00:03 ] >346 個別にMSのサイトからダウンロードしてインストールしてみたら? ttp://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=ja ttp://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&DisplayLang=ja ttp://www.microsoft.com/downloads/details.aspx?FamilyID=04dbaf2e-61ed-43f4-8d2a-ccb2bab7b8eb&DisplayLang=ja
348 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:26:53 ] >>347 おっ うまくいきました ありがとうございました〜
349 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:45:55 ] Windows Updateとかでセキュリティ関係の更新プログラムを適用するのを忘れないようにね、
350 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 16:13:08 ] C++Builder起動直後のブラウザ画面で、 どのメニューをクリックしても反応しないのですがどうしたらなおりますか? ブラウザは普段はIE6(sp1)+Sleipnirを使っています
351 名前:350 mailto:sage [2008/01/08(火) 20:50:37 ] IEのインターネットオプションで、bds:/を信頼済みサイトに登録してみましたが駄目でした ここで不具合でた人いないのかなぁ・・・ メニューのヘルプ>ボーランドのホームページ を選択すると、ブラウザでwww.borland.com/jp/ が開き、 この画面では、普通にブラウジングできるので、 bds:/だから駄目なのかな、と思ったのですが・。・・
352 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:03:13 ] バージョンくらい書けよ
353 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:35:01 ] >>352 すいません忘れてました Turbo C++ Borland(R) C++Builder(R) for Microsoft(R) WindowsTM Version 10.0.2288.42451 Update 2 Copyright (C) 2005 BorlandR Software Corporation. All Rights Reserved. OS Windows XP Home Edition build 2600.xpsp_sp2_gdr.070227-2254 (Service Pack 2) IE Version 6.0.2900.2180.xpsp_sp2_gdr.070227-2264 暗号強度: 128 ビット プロダクト ID:76492-OEM-0011903-00111 更新バージョン:; SP2; 3283; となっています よろしくおねがいします
354 名前:デフォルトの名無しさん [2008/01/10(木) 03:09:25 ] すいません 16進数が入ったBYTE型変数を10進数のINT型の値に変換するにはどうすればいいですか?
355 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 08:03:39 ] 「16進数が入ったBYTE型変数」 の意味が判らん。 もしかして単なるBYTE = unsigned char の配列か? ASCIIで文字列が入ってるなら '$'を足して StrToInt とかだが 配列ならどっちが上位なのか判らんけど 256倍しながら加算すればいいだけ 「10進数のINT型の値」も意味が判らんが、後で10進数で表示したいって事なら、そんな情報は胸にしまっとけ パック10進でって事なら、そう書け
356 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 21:20:38 ] Turbo C++ Builderで、XPスタイルのボタンって作れますか?
357 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:04:00 ] >>356 TXPManifestをパレットからフォームに適当に配置する
358 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:56:43 ] >>357 ありがとう もうCodeGearについていく
359 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 08:20:08 ] 俺も
360 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 13:36:25 ] C++Builder 2007ではその必要すらないのだが
361 名前:デフォルトの名無しさん [2008/01/16(水) 22:17:55 ] シリアルポートからのオン信号とオフ信号を受信してその間の時間を表示するだけのプログラムを 作りました、最大でも約5秒程度です、パソコンによっては遅くカウントされてしまいます。 いろいろなパソコンで試して見ましたが、パソコンのスピードやWIN2000 win xp とか関係なく 正しく計測されるパソコンもあります、何かパソコンの設定のような気もしますが どなたかわかりますか? c++builder5 pro で作ったプログラムです。
362 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 23:03:39 ] >>361 > シリアルポートからのオン信号とオフ信号を受信して 受信処理はどうなってるの?というかオン信号とオフ信号って? > その間の時間を どうやって取得してる? > 何かパソコンの設定のような気もしますが まず自分のコードを疑おう。 > どなたかわかりますか? エスパー求むってこと?
363 名前:デフォルトの名無しさん [2008/01/16(水) 23:28:12 ] >>362 説明不足でした。 特定コマンドをオン信号 オフ信号として判断してます。
364 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 23:41:13 ] このスレには超能力者は存在していない。 阿呆の見本なら居るようだが。
365 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 07:40:26 ] >>363 キミが困ってるのは時間表示の結果が思うようにならないって事なんだろ? 試しに複数の方法で計測してみたらどうだ? 1、VCL Now() 関数の差 windowsAPI 2 GetTickCount()の差 3 GetMessageTime() 4、timeGetTime() 5、QueryPerformanceCounter()/QueryPerformanceFrequency
366 名前:デフォルトの名無しさん [2008/01/17(木) 08:37:09 ] >>365 親切に対応して頂き有り難う御座います。 試してみます。
367 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:51:17 ] あとはシリアルポートの通信速度の設定とか
368 名前:デフォルトの名無しさん [2008/01/19(土) 18:42:14 ] C++Buider6を使ってます。 何ミリ秒後に処理を行うというプログラムを書きたいのですが、 時刻をミリ秒以下の単位で加算できるような関数はないでしょうか? 一応、単一スレッドで、複数の処理を実行しないといけないので、Sleep による停止は出来ません。 例えば、こんな感じで使いたい: time = getTime(); time1 += 3500; time2 += 4000; : for(;;){ now = getTime(); if( now >= time1 ){ doSometing(); time1 = now + 3500 } if( now >= time2 ){ doSometing(); time2 = now + 3500 } : }
369 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:54:10 ] CodeGear C++Builder2007の評価版を使っています。 BCB5で作ったソースを読み込み実行すると パラメータSenderは一度も使用されないと警告がでます。 気になります。 警告を外すのもなんですし。 警告が55もだされるのもいやなんですが。 みなさんはどんな感じなのでしょうか? void __fastcall TForm1::Button8Click(TObject *Sender) ちなみに呼び方はBCB7でOK?
370 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 20:43:28 ] C++Builder(BCB7ではなくC++Builder2007かBCB11だと思う)を持ってないんであてずっぽなんだけど、 void __fastcall TForm1::Button8Click(TObject *) {... とかパラメータを型だけにして仮引数名を書かないってのはだめですか?
371 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 20:51:06 ] (TObject *) がっつり怒られました^^;
372 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 20:55:05 ] あ、cppだけSenderを消したらコンパイル通りました。 いろいろやってみます。 Senderってなんだっけ? 調べてみます。ども、助かりました。
373 名前:デフォルトの名無しさん [2008/01/19(土) 21:01:26 ] 自己解決 timeGetTimeの戻値を加算で出来ました。
374 名前:370 mailto:sage [2008/01/19(土) 21:06:48 ] Senderはそのイベントを起動したオブジェクト。この場合はButton8へのポインタが入っている。
375 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:06:59 ] SenderのほかにShiftとかX・Y・Buttonとかあったので、 消したら警告はきれいさっぱり。 ほんとにいいのか?ま、いいか
376 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:20:42 ] >>374 了解です。
377 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:45:26 ] >>373 完全にオーバースペックになるけどパフォーマンスカウンタ使うと恐ろしい精度で計測できるよ
378 名前:370 mailto:sage [2008/01/19(土) 22:17:20 ] 使わないパラメータは名無しでおk
379 名前:デフォルトの名無しさん [2008/01/21(月) 16:25:37 ] 小さいアイコンを取得したくて、下記のようにしてみました。 TImage* img=new TImage(this); img->Height=16; img->Width=16; Image1->Picture->Icon->Handle=LoadIcon(NULL,IDI_APPLICATION); すると大きいアイコンの左上1/4が取得されてしまいました。 小さいアイコンをリソースから取得するにはどうすればいいのでしょうか、教えてください。
380 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:43:01 ] LoadImageでサイズ指定してみては?
381 名前:デフォルトの名無しさん [2008/01/21(月) 19:55:02 ] Cプログラマの為に、ポイントをまとめたドキュメントを販売しています。 プロのプログラマでもあまりにレベルが低い人が多すぎます。 そんな人に限って、自分のレベルの低さを自覚していない、、、 本人は構わないかもしれませんが、その下についた新人プログラマは たまったものではありません。(私が経験しました。) 今になって分かりました。 彼らもまた、理解できていなかったのです。 プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。 (何といったって、参考にしようとする市販の本さえ、 きちんと説明してくれていないのですから、 その証拠にC言語の学習で悩む人がどんなに多いことか) 私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。 私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、 今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。 と、嬉しいコメントをたくさんもらいました。 そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。 宣伝と言ってしまえば、そうなってしまうかもしれませんが、ひとりでも多くのプログラマを救いたい。 プログラムの世界そのものの実力を底あげに貢献し、 無意味なバグに、残業したり、悩んだりして欲しくないのです。 興味がある方はどうか、下のサイトをみてみてください。 mori.eco.to/
382 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:42:30 ] 日本語でおk
383 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:49:20 ] そろそろひろゆきの目に止まって多額の広告料金請求されっぞ
384 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:03:25 ] >379 ExtractIconEx
385 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:03:53 ] ごめん。リソースからなら違うや
386 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:14:57 ] >>381 おまえ、2chに宣伝出したら、広告料すごいぞ? 最初にレス書いた時の許諾事項は読んだよな?大丈夫なのか?
387 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 10:07:36 ] 私の年収は10億万円なので大丈夫です。
388 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 00:33:41 ] 俺の年収は一兆億円だもんね!
389 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 03:30:36 ] TForm1->Release; としたあと、その開放完了をWaitForSingleObjectのように低い負荷で待ちたいと考えています。 どのようにすればよいでしょうか。 よろしくお願いします。
390 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 07:50:02 ] 他のスレッドで待ちたいの? どっちにしても、メインスレッドでメッセージポンプ回してやらないとPostMessage しただけじゃいつまでたっても終了しないよ。
391 名前:デフォルトの名無しさん [2008/01/29(火) 10:22:48 ] おしえてください。 下記のように定義して、abcの要素数分(5個)をdefの大きさ(x)にしたいのですが abcを書き換えても、xが自動的に決まるように書くにはどう記述すれいいですか。 AnsiString abc[]={ "111.", "222", "333", "444", "555" }; int def[x];
392 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 12:34:46 ] >>391 こういう風に。 blogs.wankuma.com/melt/archive/2007/09/01/93176.aspx
393 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:02:17 ] >>392 ありがとう。 _countof()はBuilderには無いんですね。エラーですた。 template <typename _CountofType, size_t _SizeOfArray> char (*__countof_helper(_CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray]; #define _countof(_Array) sizeof(*__countof_helper(_Array)) これをこぴってきて _countof(abc) にて要素数が簡単に取得できるようになりました。
394 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:14:23 ] BDS2006で問題なかったプロジェクトが 2007でコンパイルしたらリソースリークが発生した。なんで? sys\sysutils.pasの何行目とか表示してるけど、このファイルどこにあるの? エディタのメッセージからは開けなかった。環境変数がおかしいのかな?
395 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:57:59 ] 質問です。 windows タスクバーのボリュームコントロールをプログラムから開くには? スタート・メニューは、webから探した HWND hTaskBar=FindWindow(PChar("Shell_TrayWnd"), NULL); if (SetForegroundWindow(hTaskBar)){ PostMessage(hTaskBar, WM_USER+0x0104, 0, 0); } で開けたので、似たような方法で出来ると思うのですが???
396 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:13:23 ] ::ShellExecute(0, "open", "sndvol32.exe", 0, 0, SW_SHOWNORMAL);
397 名前:389 mailto:sage [2008/01/29(火) 21:04:42 ] >>390 ありがとうございます。 DLLを作っているのですけれども、ホストの終了時に呼ばれる関数内でフォームを解放し、それが完了したらホストに値を返すようにしたいです。 だから別スレッドでは無いと思います。
398 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:06:13 ] >>396 レス感謝です。 実は先ほどボンヤリとsystem32フォルダを眺めていてsndvol32.exeを見つけ WINEXECで開けました。 メインのボリュームだけで良かったんだけど、取り合えず良しとします。 最終的にはアプリ内の自作スライドでこのマスター・ボリュームをコントロール したくてWin32 API プログラマーズ リファレンスと格闘中です(^^;)
399 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:23:07 ] >394 FastMMで詳細を表示させてみたら?
400 名前:394 mailto:sage [2008/02/01(金) 21:51:01 ] すまん。俺のプログラムミスだったらしい。 原因はよくわからんが、同じ処理を2回やってたのがまずかったらしい。 AnsiStringに数字を入力するときにエラー処理として try{ edit->Text.ToDouble(); }catch{ edit->Text="1.0"; } みたいなコード書いてて、この処理の後に別の関数呼ぶんだけど 同じような処理の後、描画の処理になってたのを このコードの別の関数を呼ぶ場所に描画の関数を書いたらエラーは出なくなったよ。 何でエラーが出たのかさっぱりわからん。 とりあえず自己解決しました。 FastMMはこれから作るプログラム全部に導入しようと思います ありがとう。
401 名前:デフォルトの名無しさん [2008/02/06(水) 14:17:19 ] OpenMPは使えますか?
402 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 06:40:37 ] 使えますん。
403 名前:デフォルトの名無しさん [2008/02/16(土) 13:24:18 ] AnsiString s; AnsiString t=""; s.printf("t=%s",t); とすると、s が "t=(null)" となってしまいます。 この(null)を出力させないようにするには、 s が "t="となるようにするにはどうすればいいでしょうか。
404 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:43:33 ] s.printf("t=%s",t.c_str());
405 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:28:37 ] >>404 早々に、さんくすです。
406 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 10:05:06 ] TubroC++のIDEでhとcppを切り替えるタブが下に付いているんだけど 上に持って来ることは出来ますか? なんか使いづらくて
407 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:07:37 ] そんなことよりCtrl+F6押そうぜ!
408 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:06:00 ] Ctrl+F6は窓使いの憂鬱で別のキーに設定して使ってます 昔のバージョンでは1発で目的のファイルを開けたのに つかいにくく感じるのは自分だけなのか
409 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 15:40:26 ] コンポーネントパレットが見えなくなったのですが 修復できる方法はないでしょうか
410 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:55:19 ] レジストリのみのインストールは?
411 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 17:56:04 ] メガネ買って来い
412 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 09:56:40 ] はてな??? プログラム上からのフォルダーのリネーム ってどうやるんでしょう? 環境XP+BCB++V5。手段は問いません。
413 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 10:30:12 ] >>412 Sysutils::RenameFile(const AnsiString OldName, const AnsiString NewName);
414 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 19:57:19 ] >>413 レス有難う ファイルじゃなくてフォルダ (ディレクトリ)のリネームなんですよ RenameFile(a,b)ではエラーになりますね。 ヒントなのかな・・・読めない・・?
415 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:02:04 ] どんなエラー出る?
416 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:18:06 ] ありがちなところだと、パス名含めてフォルダ名が長すぎ お手軽にMoveFileのUnicode版使えば?
417 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:52:34 ] 6.0使っています。 image->canvas->pixel[x][y] = (TColor)((a[x][y] >> 16) | (b[x][y] >> 8) | (c[x][y])) でCanvasに書き、それを SavePictureDialogでビットマップに保存しているのですが、 保存されるファイルが32bitのビットマップになっているようです。(ファイルサイズ的に) これを24bitのビットマップで保存したいのですが、どのようにすれば宜しいのでしょうか?
418 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:40:53 ] Image->Picture->Bitmap->PixelFormat でいいんじゃね?
419 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 23:28:54 ] C++Builder2007開発してます。 非BCB環境のwin2000で実行したところ、 CG32.DLLがないと怒られます。開発環境では動きます。 オプション->デバッグ->CodeGuardの有効チェックボタンfalseと ツール->CodeGuardの環境設定->CodeGuard無効としてます。 バージョンはC++Builder(R) 2007 R2 Version 11.0.2902.10471で、 sp2とは書いていないのですが、最新と思ってます。 参考に以下のサイトを参考にしましたが、 うまくいきません。情報があれば教えてください。 tp://www.gesource.jp/weblog/archives/2007/08/cbuilder2007cg32dll.html
420 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 00:57:03 ] dn.codegear.com/jp/article/36796 の追加情報にバージョンの確認方法書いてあるからまずはそれをチェックしてみれ
421 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 01:14:29 ] お世話になります 追加情報 1. このパッチを適用した後も、バージョン情報ダイアログに表示されるバージョン番号は変わりませんが、 bin ディレクトリにあるファイルのタイムスタンプは、11:02になります。 bds.exeが4:04でした。 インストール4回目だわさorz あしたやってみます。 インストールキャッシュの有無の確認方法ってありますか? また、インストール時キャッシュの保存ってあったっけ? 情報ありがとうございました。
422 名前:417 mailto:sage [2008/03/05(水) 19:44:28 ] >>418 出来ました!ありがとうございます。 しかし、同じコードを書いた別のプロジェクトがあるんですが、それは24bitのビットマップで保存されているんですよね。 imageコンポート上かどっかで設定が出来るんですかね
423 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 21:43:12 ] TImageって無駄に冗長だからなぁ
424 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:48:52 ] ども。 CG32.DLLの件のものです。 意気揚々とアンインスコに取り掛かり、 せいぜい1h程度と思いきや2h以上orzで、 再インスコで以下のキャッシュの削除の有無の 選択画面を期待しながら「次」を押すと ttp://support.codegear.com/jp/article/images/36815/03000008.png そんな画面が出ずにガンガン突き進んで 無事?完了 で、なぜキャッシュの運用を聞いてこないか 理解できない。 ちなみに、インスコプログラムのバック画像は グリッド状のドーム天井を背景に パルテノン神殿っぽい建物の画像で、 ttp://support.codegear.com/jp/article/images/36815/03000008.png は12345といったプログラムコードの背景なので・・・ つかれた。情報あれば、教えてください。
425 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 23:25:24 ] 某のサポートに問い合わせた方がいいような気もする。 無料インストールサポートあったでしょ。たしか。
426 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:09:31 ] そうですね。レスありがとうございました。
427 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:16:11 ] 環境はBCB2007WINXP 行数の関係で、詰めてかきます。 以下のソースで、実行F9とビルド時S+F9では挙動がことなりよくわからなくなっています。 実行時は普通にアクティブなソフトの全パスが表示されますが、ビルドしたのを実行すると取得できません。 何かの勘違いか、コンパイラの使用知識不足としか思えません。よくないところを教えていただけないでしょうか? #include <vcl.h> #include <psapi.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {} //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { HWND hWnd=GetForegroundWindow(); bool blJEJ=false; DWORD dwPID; GetWindowThreadProcessId(hWnd, &dwPID); hWnd = OpenProcess(PROCESS_ALL_ACCESS, 0, dwPID); DWORD ReturnSize; if(!hWnd){ ShowMessage("if(!hWnd)");//デバッグ用//ここにhWndの値をShowMessageするにはどうすりゃいいんだ? } if(hWnd){ char buf[MAX_PATH]; HMODULE hMod; DWORD size; EnumProcessModules(hWnd, &hMod, sizeof(hMod) ,&size); GetModuleFileNameEx(hWnd, hMod, buf, sizeof(buf)); CloseHandle(hWnd);//これの意味がわからない。 AnsiString str=fname; ShowMessage(str); } //--------------------------------------------------------------------------- へたなコードですが、素人なのでご容赦を
428 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:16:57 ] bool blJEJ=false; DWORD dwPID; GetWindowThreadProcessId(hWnd, &dwPID); hWnd = OpenProcess(PROCESS_ALL_ACCESS, 0, dwPID); DWORD ReturnSize; if(!hWnd){ ShowMessage("if(!hWnd)");/ どうも、if(!hWnd)がtrueになるみたいです。 ほとほと困りました。なにとどご支援お願いいたします。 状況説明に不足がございましたら、レスしていただければ 助かります。
429 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:03:08 ] くだスレなんで思いつきだけど OpenProcess() の戻り値とOSの関係とか、権限とかはOK?
430 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:19:33 ] >>427 ShowMessage("if(!hWnd)");//デバッグ用//ここにhWndの値をShowMessageするにはどうすりゃいいんだ? ↓ IntToStr(hWnd) or IntToStr(hWnd) or AnsiString().sprintf("%08X", hWnd)
431 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:28:41 ] ちょっと待て、なんでOpenProcessの戻り値をHWNDに入れてる。 OpenProcessの戻り値はHANDLE型。
432 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 09:52:09 ] BCB6ってUTF8ファイルのコンパイルってできましたっけ? 能とか表があると、gccのコンパイルが失敗するので、ソースファイルをUTF8にしたいんでつよね。
433 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 10:08:31 ] どもです。 >OpenProcessの戻り値をHWNDに入れてる。 OpenProcessの戻り値はHANDLE型。 ちょっと見えてきました。 まずは型の勉強をしてみます。 APIの型ってよくわからないんです。 でも、実行では動くのにビルドでは動かない。 ビルドはできるのに。ちくしょう! 夜やってみます。キャストの件ありがとうございます。
434 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:53:33 ] OpenProcess()の直後 GetLastError()を調べたところ、 5が帰ってきました。 p://onegland.hp.infoseek.co.jp/wincgi/help/winerror.txt によると5は 5: アクセスは拒否されました。 とあり、悲しい限りです。 なんらかの対策はないでしょうか?
435 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:56:41 ] OS側が拒否しないようにセットアップしておく。
436 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 14:36:34 ] OpenProcessで要求するアクセス権を必要最小限に
437 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 19:34:26 ] dwDesiredAccessの値を全部試してみましたが、 だめでした。 「ウインドウハンドル ファイル名」でググッて 実装しているんですが。 GetForegroundWindowして、希望のexeがトップかどうかを 調べてるだけなんです。。。 ほかにいい方法ありませんか? あきらかにAPIの問題だけど、あのスレ結構きついんだなぁ。 BCBしかわからんし。すれ違いかな?しつこくて申し訳ないです。
438 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 19:58:21 ] というか、何がしたいのか全くわからん
439 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:09:03 ] アクティブなウインドウが特定のアプリかどうかを 調べたいのです。 そのため、GetForegroundWindowでウインドウハンドルを求めて、 アプリ名を検出し、特定のアプリかどうかの文字列判定をしています。 というわけで、アプリ名を知りたいのではないのです。 具体的には、作ってるのはユーティリティで、特定のアプリを 操作しているときに、激しく自前ソフトを実行し、 非特定アプリを操作しているときは、特定のアプリかどうかの 判定のみを実行するのです。ぅ〜ん、うまくいかないなぁ。 実行とビルド実行でこれだけ差がでるとつらいなぁ。
440 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:29:05 ] うちの似たようなことしてるソースだとこれで動いてるけど HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, pid);
441 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:44:04 ] >>440 おみごと! どうにか動きました。よくわかんないけど。 いろいろありがとうございました。
442 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 20:44:14 ] フルパス必要なきゃこっちの方が手軽かも DWORD pid; GetWindowThreadProcessId(hWnd, &pid); HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,pid); PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); bool ret = Process32First(snapshot, &pe32); while(ret) { if( pid == pe32.th32ProcessID ) ShowMessage(pe32.szExeFile); ret = Process32Next(snapshot, &pe32); } CloseHandle(snapshot);